PluginProbe
Elementor Website Builder – more than just a page builder / 3.35.0-dev4
Elementor Website Builder – more than just a page builder v3.35.0-dev4
4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 All 455 releases
← All changes | assets/js/packages/editor-canvas/editor-canvas.js +2 -9899 4.3.2 → 3.35.0-dev4 View file →
@@ -1,9900 +1,3 @@
1 -(function(_elementor_editor_v1_adapters, _elementor_editor_mcp, _elementor_http_client, _elementor_editor, react, _elementor_editor_documents, _elementor_editor_styles_repository, _elementor_utils, _elementor_editor_elements, _elementor_ui, react_dom, _elementor_editor_interactions, _elementor_editor_responsive, _elementor_editor_styles, _elementor_editor_props, _elementor_editor_notifications, _wordpress_i18n, _elementor_wp_media, _elementor_editor_controls, _elementor_twing, _elementor_schema) {
2 -
3 -//#region \0rolldown/runtime.js
4 - var __create = Object.create;
5 - var __defProp$4 = Object.defineProperty;
6 - var __name = (target, value) => __defProp$4(target, "name", {
7 - value,
8 - configurable: true
9 - });
10 - var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
11 - var __getOwnPropNames = Object.getOwnPropertyNames;
12 - var __getProtoOf = Object.getPrototypeOf;
13 - var __hasOwnProp = Object.prototype.hasOwnProperty;
14 - var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
15 - var __exportAll = (all, no_symbols) => {
16 - let target = {};
17 - for (var name in all) {
18 - __defProp$4(target, name, {
19 - get: all[name],
20 - enumerable: true
21 - });
22 - }
23 - if (!no_symbols) {
24 - __defProp$4(target, Symbol.toStringTag, { value: "Module" });
25 - }
26 - return target;
27 - };
28 - var __copyProps = (to, from, except, desc) => {
29 - if (from && typeof from === "object" || typeof from === "function") {
30 - for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
31 - key = keys[i];
32 - if (!__hasOwnProp.call(to, key) && key !== except) {
33 - __defProp$4(to, key, {
34 - get: ((k) => from[k]).bind(null, key),
35 - enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
36 - });
37 - }
38 - }
39 - }
40 - return to;
41 - };
42 - var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp$4(target, "default", {
43 - value: mod,
44 - enumerable: true
45 - }) : target, mod));
46 -
47 -//#endregion
48 -let react$1 = __toESM(react, 1);
49 -react = __toESM(react);
50 -react_dom = __toESM(react_dom, 1);
51 -
52 -//#region packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts
53 - var CANVAS_SERVER_NAME = "editor-canvas";
54 - var WIDGET_SCHEMA_URI = "elementor://widgets/schema/{widgetType}";
55 - var WIDGET_SCHEMA_FULL_URI = `${CANVAS_SERVER_NAME}_${WIDGET_SCHEMA_URI}`;
56 - var BEST_PRACTICES_URI$1 = "elementor://style/best-practices";
57 - var BEST_PRACTICES_FULL_URI = `${CANVAS_SERVER_NAME}_${BEST_PRACTICES_URI$1}`;
58 - var MCP_PROXY_URL$4 = "elementor/v1/mcp-proxy";
59 - var listWidgetTypes = async () => {
60 - const { data } = await (0, _elementor_http_client.httpService)().post(MCP_PROXY_URL$4, {
61 - tool: "list-widget-schemas",
62 - input: { summary: true }
63 - });
64 - return (data.data?.widgets ?? []).map((widget) => widget.type);
65 - };
66 - var fetchWidgetSchema = async (widgetType) => {
67 - const { data } = await (0, _elementor_http_client.httpService)().post(MCP_PROXY_URL$4, {
68 - tool: "get-widget-schema",
69 - input: { widget_type: widgetType }
70 - });
71 - return data.data ?? {};
72 - };
73 - var initWidgetsSchemaResource = (reg) => {
74 - const { resource } = reg;
75 - resource("widget-schema-by-type", new _elementor_editor_mcp.ResourceTemplate(WIDGET_SCHEMA_URI, { list: async () => {
76 - return { resources: (await listWidgetTypes()).map((widgetType) => ({
77 - uri: `elementor://widgets/schema/${widgetType}`,
78 - name: "Widget schema for " + widgetType
79 - })) };
80 - } }), { description: "PropType schema for the specified widget type" }, async (uri, variables) => {
81 - const widgetType = typeof variables.widgetType === "string" ? variables.widgetType : variables.widgetType?.[0];
82 - if (!widgetType) throw new Error("No widget type provided.");
83 - const schema = await fetchWidgetSchema(widgetType);
84 - return { contents: [{
85 - uri: uri.toString(),
86 - mimeType: "application/json",
87 - text: JSON.stringify(schema)
88 - }] };
89 - });
90 - };
91 -
92 -//#endregion
93 -//#region packages/packages/core/editor-canvas/src/mcp/resources/breakpoints-resource.ts
94 - var BREAKPOINTS_SCHEMA_URI = "elementor://breakpoints/list";
95 - var BREAKPOINTS_SCHEMA_FULL_URI = `${CANVAS_SERVER_NAME}_${BREAKPOINTS_SCHEMA_URI}`;
96 - var initBreakpointsResource = (reg) => {
97 - const { resource, sendResourceUpdated } = reg;
98 - const getBreakpointsList = () => {
99 - const { breakpoints } = window.elementor?.config?.responsive || {};
100 - if (!breakpoints) return [];
101 - return Object.values(breakpoints).filter((bp) => bp.is_enabled).map((bp) => {
102 - const { direction: constraint, label, value } = bp;
103 - return {
104 - label,
105 - constraint,
106 - value
107 - };
108 - });
109 - };
110 - const buildResourceResponse = () => ({ contents: [{
111 - uri: BREAKPOINTS_SCHEMA_URI,
112 - mimeType: "application/json",
113 - text: JSON.stringify(getBreakpointsList())
114 - }] });
115 - resource("breakpoints ", BREAKPOINTS_SCHEMA_URI, { description: "Breakpoints list." }, () => {
116 - return buildResourceResponse();
117 - });
118 - window.addEventListener((0, _elementor_editor_v1_adapters.v1ReadyEvent)().name, () => {
119 - sendResourceUpdated({
120 - uri: BREAKPOINTS_SCHEMA_URI,
121 - ...buildResourceResponse()
122 - });
123 - });
124 - };
125 -
126 -//#endregion
127 -//#region packages/packages/core/editor-canvas/src/mcp/utils/convert-css-to-atomic.ts
128 - var CSS_TO_ATOMIC_URL = "elementor/v1/css-to-atomic";
129 - var SINGLE_BLOCK_KEY = "default";
130 - var convertBlocks = async (blocks) => {
131 - const { data } = await (0, _elementor_http_client.httpService)().post(CSS_TO_ATOMIC_URL, { blocks });
132 - return data.data;
133 - };
134 - var convertStyleBlocksToAtomic = async (styleByName) => convertBlocks(styleByName);
135 - var convertCssToAtomic = async (style) => {
136 - return (await convertStyleBlocksToAtomic({ [SINGLE_BLOCK_KEY]: style }))[SINGLE_BLOCK_KEY];
137 - };
138 -
139 -//#endregion
140 -//#region packages/packages/core/editor-canvas/src/components/classes-rename.tsx
141 - var ClassesRename = () => {
142 - (0, react.useEffect)(() => {
143 - const unsubscribe = subscribeToStylesRepository();
144 - return () => {
145 - unsubscribe();
146 - };
147 - }, []);
148 - return null;
149 - };
150 - var subscribeToStylesRepository = () => {
151 - return _elementor_editor_styles_repository.stylesRepository.subscribe((previous, current) => {
152 - if (!previous || !current) return;
153 - Object.keys(current).forEach((id) => {
154 - if (!(previous[id] && (0, _elementor_utils.hash)(previous[id]) !== (0, _elementor_utils.hash)(current[id]))) return;
155 - const previousStyle = previous[id];
156 - const currentStyle = current[id];
157 - if (previousStyle.label !== currentStyle.label) renameClass(previousStyle.label, currentStyle.label);
158 - });
159 - });
160 - };
161 - var renameClass = (oldClassName, newClassName) => {
162 - Object.values((0, _elementor_editor_documents.getV1DocumentsManager)().documents).forEach((document) => {
163 - document.container.view?.el?.querySelectorAll(`.elementor .${oldClassName}`).forEach((element) => {
164 - element.classList.replace(oldClassName, newClassName);
165 - });
166 - });
167 - };
168 -
169 -//#endregion
170 -//#region packages/packages/core/editor-canvas/src/hooks/use-element-rect.ts
171 - function useElementRect(element) {
172 - const [rect, setRect] = (0, react.useState)(new DOMRect(0, 0, 0, 0));
173 - const onChange = (0, _elementor_utils.throttle)(() => {
174 - setRect(element?.getBoundingClientRect() ?? new DOMRect(0, 0, 0, 0));
175 - }, 20, true);
176 - useScrollListener({
177 - element,
178 - onChange
179 - });
180 - useResizeListener({
181 - element,
182 - onChange
183 - });
184 - useMutationsListener({
185 - element,
186 - onChange
187 - });
188 - (0, react.useEffect)(() => () => {
189 - onChange.cancel();
190 - }, [onChange]);
191 - return rect;
192 - }
193 - function useScrollListener({ element, onChange }) {
194 - (0, react.useEffect)(() => {
195 - if (!element) return;
196 - const win = element.ownerDocument?.defaultView;
197 - win?.addEventListener("scroll", onChange, { passive: true });
198 - return () => {
199 - win?.removeEventListener("scroll", onChange);
200 - };
201 - }, [element, onChange]);
202 - }
203 - function useResizeListener({ element, onChange }) {
204 - (0, react.useEffect)(() => {
205 - if (!element) return;
206 - const resizeObserver = new ResizeObserver(onChange);
207 - resizeObserver.observe(element);
208 - const win = element.ownerDocument?.defaultView;
209 - win?.addEventListener("resize", onChange, { passive: true });
210 - return () => {
211 - resizeObserver.disconnect();
212 - win?.removeEventListener("resize", onChange);
213 - };
214 - }, [element, onChange]);
215 - }
216 - function useMutationsListener({ element, onChange }) {
217 - (0, react.useEffect)(() => {
218 - if (!element) return;
219 - const mutationObserver = new MutationObserver(onChange);
220 - mutationObserver.observe(element, {
221 - childList: true,
222 - subtree: true
223 - });
224 - return () => {
225 - mutationObserver.disconnect();
226 - };
227 - }, [element, onChange]);
228 - }
229 -
230 -//#endregion
231 -//#region packages/packages/core/editor-canvas/src/utils/grid-outline-utils.ts
232 - function toGridTracks(computedStyle) {
233 - return {
234 - columns: parseTrackList(computedStyle.gridTemplateColumns),
235 - rows: parseTrackList(computedStyle.gridTemplateRows),
236 - columnGap: resolveGapPx(computedStyle.columnGap, computedStyle.width),
237 - rowGap: resolveGapPx(computedStyle.rowGap, computedStyle.height),
238 - padding: {
239 - top: toPx(computedStyle.paddingTop),
240 - right: toPx(computedStyle.paddingRight),
241 - bottom: toPx(computedStyle.paddingBottom),
242 - left: toPx(computedStyle.paddingLeft)
243 - },
244 - borderColor: computedStyle.getPropertyValue("--e-a-border-color-bold").trim()
245 - };
246 - }
247 - function computeCellRects(tracks, width, height) {
248 - const { columns, rows, columnGap, rowGap, padding } = tracks;
249 - const hasColumns = columns.length > 0;
250 - const hasRows = rows.length > 0;
251 - if (!hasColumns && !hasRows) return [];
252 - const columnSegments = hasColumns ? computeTrackSegments(columns, columnGap, padding.left) : [{
253 - start: padding.left,
254 - size: width - padding.left - padding.right
255 - }];
256 - const rowSegments = hasRows ? computeTrackSegments(rows, rowGap, padding.top) : [{
257 - start: padding.top,
258 - size: height - padding.top - padding.bottom
259 - }];
260 - const cells = [];
261 - for (const row of rowSegments) for (const column of columnSegments) cells.push({
262 - x: column.start,
263 - y: row.start,
264 - width: column.size,
265 - height: row.size
266 - });
267 - return cells;
268 - }
269 - function computeGridLines(tracks, width, height) {
270 - const { columns, rows, columnGap, rowGap, padding } = tracks;
271 - const hasColumns = columns.length > 0;
272 - const hasRows = rows.length > 0;
273 - if (!hasColumns && !hasRows) return {
274 - vertical: [],
275 - horizontal: []
276 - };
277 - const columnSegments = hasColumns ? computeTrackSegments(columns, columnGap, padding.left) : [{
278 - start: padding.left,
279 - size: width - padding.left - padding.right
280 - }];
281 - const rowSegments = hasRows ? computeTrackSegments(rows, rowGap, padding.top) : [{
282 - start: padding.top,
283 - size: height - padding.top - padding.bottom
284 - }];
285 - const xs = uniqueSorted(columnSegments.flatMap((s) => [s.start, s.start + s.size]));
286 - const ys = uniqueSorted(rowSegments.flatMap((s) => [s.start, s.start + s.size]));
287 - const yTop = ys[0];
288 - const yBottom = ys[ys.length - 1];
289 - const xLeft = xs[0];
290 - const xRight = xs[xs.length - 1];
291 - return {
292 - vertical: xs.map((x) => ({
293 - x1: x,
294 - y1: yTop,
295 - x2: x,
296 - y2: yBottom
297 - })),
298 - horizontal: ys.map((y) => ({
299 - x1: xLeft,
300 - y1: y,
301 - x2: xRight,
302 - y2: y
303 - }))
304 - };
305 - }
306 - function uniqueSorted(values) {
307 - return Array.from(new Set(values)).sort((a, b) => a - b);
308 - }
309 - function computeTrackSegments(sizes, gap, offset) {
310 - const segments = [];
311 - let cursor = offset;
312 - for (let i = 0; i < sizes.length; i++) {
313 - segments.push({
314 - start: cursor,
315 - size: sizes[i]
316 - });
317 - cursor += sizes[i];
318 - if (i < sizes.length - 1) cursor += gap;
319 - }
320 - return segments;
321 - }
322 - function snapToHalfPixel(value) {
323 - return Math.round(value) + .5;
324 - }
325 - function parseTrackList(value) {
326 - if (!value || value === "none") return [];
327 - return value.trim().split(/\s+/).map(toPx).filter((n) => n > 0);
328 - }
329 - function toPx(value) {
330 - const parsed = parseFloat(value);
331 - return Number.isFinite(parsed) ? parsed : 0;
332 - }
333 - function resolveGapPx(value, referenceSize) {
334 - if (value.trim().endsWith("%")) {
335 - const percent = parseFloat(value);
336 - const reference = parseFloat(referenceSize);
337 - return Number.isFinite(percent) && Number.isFinite(reference) ? percent / 100 * reference : 0;
338 - }
339 - return toPx(value);
340 - }
341 -
342 -//#endregion
343 -//#region packages/packages/core/editor-canvas/src/hooks/use-grid-children.ts
344 - function useGridChildren(element) {
345 - const [signal, setSignal] = (0, react.useState)(0);
346 - (0, react.useEffect)(() => {
347 - if (!element) return;
348 - const bump = () => setSignal((previous) => previous + 1);
349 - const resizeObserver = new ResizeObserver(bump);
350 - const observed = /* @__PURE__ */ new Set();
351 - const syncChildren = () => {
352 - for (const child of Array.from(element.children)) if (!observed.has(child)) {
353 - resizeObserver.observe(child);
354 - observed.add(child);
355 - }
356 - for (const child of observed) if (child.parentElement !== element) {
357 - resizeObserver.unobserve(child);
358 - observed.delete(child);
359 - }
360 - };
361 - syncChildren();
362 - const mutationObserver = new MutationObserver(() => {
363 - syncChildren();
364 - bump();
365 - });
366 - mutationObserver.observe(element, { childList: true });
367 - return () => {
368 - mutationObserver.disconnect();
369 - resizeObserver.disconnect();
370 - observed.clear();
371 - };
372 - }, [element]);
373 - return signal;
374 - }
375 -
376 -//#endregion
377 -//#region packages/packages/core/editor-canvas/src/hooks/use-grid-tracks.ts
378 - var EMPTY = {
379 - columns: [],
380 - rows: [],
381 - columnGap: 0,
382 - rowGap: 0,
383 - padding: {
384 - top: 0,
385 - right: 0,
386 - bottom: 0,
387 - left: 0
388 - },
389 - borderColor: ""
390 - };
391 - var DEVICE_MODE_CHANGE_EVENT = "elementor/device-mode/change";
392 - function useGridTracks(element, rect) {
393 - const [tracks, setTracks] = (0, react.useState)(EMPTY);
394 - const trigger = (0, _elementor_editor_v1_adapters.__privateUseListenTo)([(0, _elementor_editor_v1_adapters.windowEvent)(_elementor_editor_elements.ELEMENT_STYLE_CHANGE_EVENT), (0, _elementor_editor_v1_adapters.windowEvent)(DEVICE_MODE_CHANGE_EVENT)], () => ({}));
395 - const childrenTrigger = useGridChildren(element);
396 - (0, react.useEffect)(() => {
397 - const previewWindow = element?.ownerDocument?.defaultView;
398 - if (!element || !previewWindow) {
399 - setTracks(EMPTY);
400 - return;
401 - }
402 - const frame = previewWindow.requestAnimationFrame(() => {
403 - setTracks(toGridTracks(previewWindow.getComputedStyle(element)));
404 - });
405 - return () => {
406 - previewWindow.cancelAnimationFrame(frame);
407 - };
408 - }, [
409 - element,
410 - rect.width,
411 - rect.height,
412 - trigger,
413 - childrenTrigger
414 - ]);
415 - return tracks;
416 - }
417 -
418 -//#endregion
419 -//#region packages/packages/core/editor-canvas/src/utils/find-first-empty-cell.ts
420 - function findFirstEmptyCell(element, columnCount, rowCount) {
421 - if (!element || columnCount === 0 || rowCount === 0) return null;
422 - const previewWindow = element.ownerDocument?.defaultView;
423 - if (!previewWindow) return null;
424 - const flowsByColumn = previewWindow.getComputedStyle(element).gridAutoFlow.trim().startsWith("column");
425 - const matrix = Array.from({ length: rowCount }, () => new Array(columnCount).fill(false));
426 - const explicit = [];
427 - const autoPlaced = [];
428 - for (const child of Array.from(element.children)) {
429 - if (!child.classList.contains("elementor-element")) continue;
430 - const style = previewWindow.getComputedStyle(child);
431 - if (style.display === "none") continue;
432 - const col = resolvePlacement(style.gridColumnStart, style.gridColumnEnd);
433 - const row = resolvePlacement(style.gridRowStart, style.gridRowEnd);
434 - if (col.start !== null || row.start !== null) explicit.push({
435 - col: col.start,
436 - colSpan: col.span,
437 - row: row.start,
438 - rowSpan: row.span
439 - });
440 - else autoPlaced.push({
441 - colSpan: col.span,
442 - rowSpan: row.span
443 - });
444 - }
445 - for (const child of explicit) fillMatrix(matrix, child.col ?? 0, child.row ?? 0, child.colSpan, child.rowSpan);
446 - for (const child of autoPlaced) {
447 - const slot = findNextFreeSlot(matrix, child.colSpan, child.rowSpan, flowsByColumn);
448 - if (slot) fillMatrix(matrix, slot.col, slot.row, child.colSpan, child.rowSpan);
449 - }
450 - return scanFirstEmpty(matrix, flowsByColumn);
451 - }
452 - function resolvePlacement(startRaw, endRaw) {
453 - const start = parseLineValue(startRaw);
454 - const end = parseLineValue(endRaw);
455 - if (typeof start === "number") {
456 - const zeroIndexedStart = start - 1;
457 - if (typeof end === "number") return {
458 - start: zeroIndexedStart,
459 - span: Math.max(1, end - start)
460 - };
461 - if (isSpan(end)) return {
462 - start: zeroIndexedStart,
463 - span: end.n
464 - };
465 - return {
466 - start: zeroIndexedStart,
467 - span: 1
468 - };
469 - }
470 - if (isSpan(start)) {
471 - if (typeof end === "number") {
472 - const zeroIndexedStart = end - 1 - start.n;
473 - return {
474 - start: zeroIndexedStart >= 0 ? zeroIndexedStart : null,
475 - span: start.n
476 - };
477 - }
478 - return {
479 - start: null,
480 - span: start.n
481 - };
482 - }
483 - if (typeof end === "number") {
484 - const zeroIndexedStart = end - 2;
485 - return {
486 - start: zeroIndexedStart >= 0 ? zeroIndexedStart : null,
487 - span: 1
488 - };
489 - }
490 - if (isSpan(end)) return {
491 - start: null,
492 - span: end.n
493 - };
494 - return {
495 - start: null,
496 - span: 1
497 - };
498 - }
499 - function parseLineValue(raw) {
500 - const trimmed = raw.trim();
501 - if (trimmed === "" || trimmed === "auto") return "auto";
502 - const spanMatch = trimmed.match(/^span\s+(\d+)$/);
503 - if (spanMatch) {
504 - const n = parseInt(spanMatch[1], 10);
505 - return {
506 - kind: "span",
507 - n: Math.max(1, n)
508 - };
509 - }
510 - const parsed = parseInt(trimmed, 10);
511 - if (Number.isFinite(parsed) && parsed > 0) return parsed;
512 - return "auto";
513 - }
514 - function isSpan(value) {
515 - return typeof value === "object" && value !== null && "kind" in value && value.kind === "span";
516 - }
517 - function fillMatrix(matrix, col, row, colSpan, rowSpan) {
518 - const rows = matrix.length;
519 - const cols = rows > 0 ? matrix[0].length : 0;
520 - const startRow = Math.max(0, row);
521 - const startCol = Math.max(0, col);
522 - const endRow = Math.min(rows, row + rowSpan);
523 - const endCol = Math.min(cols, col + colSpan);
524 - for (let r = startRow; r < endRow; r++) for (let c = startCol; c < endCol; c++) matrix[r][c] = true;
525 - }
526 - function findNextFreeSlot(matrix, colSpan, rowSpan, flowsByColumn) {
527 - const rows = matrix.length;
528 - const maxCol = (rows > 0 ? matrix[0].length : 0) - colSpan;
529 - const maxRow = rows - rowSpan;
530 - if (maxCol < 0 || maxRow < 0) return null;
531 - if (flowsByColumn) {
532 - for (let col = 0; col <= maxCol; col++) for (let row = 0; row <= maxRow; row++) if (canFit(matrix, col, row, colSpan, rowSpan)) return {
533 - row,
534 - col
535 - };
536 - } else for (let row = 0; row <= maxRow; row++) for (let col = 0; col <= maxCol; col++) if (canFit(matrix, col, row, colSpan, rowSpan)) return {
537 - row,
538 - col
539 - };
540 - return null;
541 - }
542 - function canFit(matrix, col, row, colSpan, rowSpan) {
543 - for (let r = row; r < row + rowSpan; r++) for (let c = col; c < col + colSpan; c++) if (matrix[r][c]) return false;
544 - return true;
545 - }
546 - function scanFirstEmpty(matrix, flowsByColumn) {
547 - const rows = matrix.length;
548 - const cols = rows > 0 ? matrix[0].length : 0;
549 - if (flowsByColumn) {
550 - for (let col = 0; col < cols; col++) for (let row = 0; row < rows; row++) if (!matrix[row][col]) return {
551 - row,
552 - col
553 - };
554 - } else for (let row = 0; row < rows; row++) for (let col = 0; col < cols; col++) if (!matrix[row][col]) return {
555 - row,
556 - col
557 - };
558 - return null;
559 - }
560 -
561 -//#endregion
562 -//#region packages/packages/core/editor-canvas/src/components/grid-outline/grid-empty-cell-positioner.tsx
563 - var CSS_VAR_ROW = "--e-grid-empty-cell-row";
564 - var CSS_VAR_COL = "--e-grid-empty-cell-col";
565 - var CSS_VAR_VISIBILITY = "--e-grid-empty-cell-visibility";
566 - var clearGridEmptyCellStyles = (target) => {
567 - target.style.removeProperty(CSS_VAR_ROW);
568 - target.style.removeProperty(CSS_VAR_COL);
569 - target.style.removeProperty(CSS_VAR_VISIBILITY);
570 - };
571 - var GridEmptyCellPositioner = ({ element }) => {
572 - const tracks = useGridTracks(element, useElementRect(element));
573 - (0, react.useEffect)(() => {
574 - if (!element) return;
575 - const firstEmpty = findFirstEmptyCell(element, tracks.columns.length, tracks.rows.length);
576 - if (!firstEmpty) {
577 - element.style.removeProperty(CSS_VAR_ROW);
578 - element.style.removeProperty(CSS_VAR_COL);
579 - element.style.setProperty(CSS_VAR_VISIBILITY, "hidden");
580 - return () => clearGridEmptyCellStyles(element);
581 - }
582 - element.style.setProperty(CSS_VAR_ROW, String(firstEmpty.row + 1));
583 - element.style.setProperty(CSS_VAR_COL, String(firstEmpty.col + 1));
584 - element.style.setProperty(CSS_VAR_VISIBILITY, "visible");
585 - return () => {
586 - clearGridEmptyCellStyles(element);
587 - };
588 - }, [element, tracks]);
589 - return null;
590 - };
591 -
592 -//#endregion
593 -//#region node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
594 - function hasWindow() {
595 - return typeof window !== "undefined";
596 - }
597 - function getNodeName(node) {
598 - if (isNode(node)) return (node.nodeName || "").toLowerCase();
599 - return "#document";
600 - }
601 - function getWindow(node) {
602 - var _node$ownerDocument;
603 - return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
604 - }
605 - function getDocumentElement(node) {
606 - var _ref;
607 - return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
608 - }
609 - function isNode(value) {
610 - if (!hasWindow()) return false;
611 - return value instanceof Node || value instanceof getWindow(value).Node;
612 - }
613 - function isElement(value) {
614 - if (!hasWindow()) return false;
615 - return value instanceof Element || value instanceof getWindow(value).Element;
616 - }
617 - function isHTMLElement(value) {
618 - if (!hasWindow()) return false;
619 - return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
620 - }
621 - function isShadowRoot(value) {
622 - if (!hasWindow() || typeof ShadowRoot === "undefined") return false;
623 - return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
624 - }
625 - function isOverflowElement(element) {
626 - const { overflow, overflowX, overflowY, display } = getComputedStyle$1(element);
627 - return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents";
628 - }
629 - function isTableElement(element) {
630 - return /^(table|td|th)$/.test(getNodeName(element));
631 - }
632 - function isTopLayer(element) {
633 - try {
634 - if (element.matches(":popover-open")) return true;
635 - } catch (_e) {}
636 - try {
637 - return element.matches(":modal");
638 - } catch (_e) {
639 - return false;
640 - }
641 - }
642 - var willChangeRe = /transform|translate|scale|rotate|perspective|filter/;
643 - var containRe = /paint|layout|strict|content/;
644 - var isNotNone = (value) => !!value && value !== "none";
645 - var isWebKitValue;
646 - function isContainingBlock(elementOrCss) {
647 - const css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
648 - 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 || "");
649 - }
650 - function getContainingBlock(element) {
651 - let currentNode = getParentNode(element);
652 - while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
653 - if (isContainingBlock(currentNode)) return currentNode;
654 - else if (isTopLayer(currentNode)) return null;
655 - currentNode = getParentNode(currentNode);
656 - }
657 - return null;
658 - }
659 - function isWebKit() {
660 - if (isWebKitValue == null) isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none");
661 - return isWebKitValue;
662 - }
663 - function isLastTraversableNode(node) {
664 - return /^(html|body|#document)$/.test(getNodeName(node));
665 - }
666 - function getComputedStyle$1(element) {
667 - return getWindow(element).getComputedStyle(element);
668 - }
669 - __name(getComputedStyle$1, "getComputedStyle");
670 - function getNodeScroll(element) {
671 - if (isElement(element)) return {
672 - scrollLeft: element.scrollLeft,
673 - scrollTop: element.scrollTop
674 - };
675 - return {
676 - scrollLeft: element.scrollX,
677 - scrollTop: element.scrollY
678 - };
679 - }
680 - function getParentNode(node) {
681 - if (getNodeName(node) === "html") return node;
682 - const result = node.assignedSlot || node.parentNode || isShadowRoot(node) && node.host || getDocumentElement(node);
683 - return isShadowRoot(result) ? result.host : result;
684 - }
685 - function getNearestOverflowAncestor(node) {
686 - const parentNode = getParentNode(node);
687 - if (isLastTraversableNode(parentNode)) return node.ownerDocument ? node.ownerDocument.body : node.body;
688 - if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) return parentNode;
689 - return getNearestOverflowAncestor(parentNode);
690 - }
691 - function getOverflowAncestors(node, list, traverseIframes) {
692 - var _node$ownerDocument2;
693 - if (list === void 0) list = [];
694 - if (traverseIframes === void 0) traverseIframes = true;
695 - const scrollableAncestor = getNearestOverflowAncestor(node);
696 - const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
697 - const win = getWindow(scrollableAncestor);
698 - if (isBody) {
699 - const frameElement = getFrameElement(win);
700 - return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
701 - } else return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
702 - }
703 - function getFrameElement(win) {
704 - return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
705 - }
706 -
707 -//#endregion
708 -//#region node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
709 - var min = Math.min;
710 - var max = Math.max;
711 - var round = Math.round;
712 - var floor = Math.floor;
713 - var createCoords = (v) => ({
714 - x: v,
715 - y: v
716 - });
717 - var oppositeSideMap = {
718 - left: "right",
719 - right: "left",
720 - bottom: "top",
721 - top: "bottom"
722 - };
723 - function evaluate(value, param) {
724 - return typeof value === "function" ? value(param) : value;
725 - }
726 - function getSide(placement) {
727 - return placement.split("-")[0];
728 - }
729 - function getAlignment(placement) {
730 - return placement.split("-")[1];
731 - }
732 - function getOppositeAxis(axis) {
733 - return axis === "x" ? "y" : "x";
734 - }
735 - function getAxisLength(axis) {
736 - return axis === "y" ? "height" : "width";
737 - }
738 - function getSideAxis(placement) {
739 - const firstChar = placement[0];
740 - return firstChar === "t" || firstChar === "b" ? "y" : "x";
741 - }
742 - function getAlignmentAxis(placement) {
743 - return getOppositeAxis(getSideAxis(placement));
744 - }
745 - function getAlignmentSides(placement, rects, rtl) {
746 - if (rtl === void 0) rtl = false;
747 - const alignment = getAlignment(placement);
748 - const alignmentAxis = getAlignmentAxis(placement);
749 - const length = getAxisLength(alignmentAxis);
750 - let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
751 - if (rects.reference[length] > rects.floating[length]) mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
752 - return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
753 - }
754 - function getExpandedPlacements(placement) {
755 - const oppositePlacement = getOppositePlacement(placement);
756 - return [
757 - getOppositeAlignmentPlacement(placement),
758 - oppositePlacement,
759 - getOppositeAlignmentPlacement(oppositePlacement)
760 - ];
761 - }
762 - function getOppositeAlignmentPlacement(placement) {
763 - return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start");
764 - }
765 - var lrPlacement = ["left", "right"];
766 - var rlPlacement = ["right", "left"];
767 - var tbPlacement = ["top", "bottom"];
768 - var btPlacement = ["bottom", "top"];
769 - function getSideList(side, isStart, rtl) {
770 - switch (side) {
771 - case "top":
772 - case "bottom":
773 - if (rtl) return isStart ? rlPlacement : lrPlacement;
774 - return isStart ? lrPlacement : rlPlacement;
775 - case "left":
776 - case "right": return isStart ? tbPlacement : btPlacement;
777 - default: return [];
778 - }
779 - }
780 - function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
781 - const alignment = getAlignment(placement);
782 - let list = getSideList(getSide(placement), direction === "start", rtl);
783 - if (alignment) {
784 - list = list.map((side) => side + "-" + alignment);
785 - if (flipAlignment) list = list.concat(list.map(getOppositeAlignmentPlacement));
786 - }
787 - return list;
788 - }
789 - function getOppositePlacement(placement) {
790 - const side = getSide(placement);
791 - return oppositeSideMap[side] + placement.slice(side.length);
792 - }
793 - function expandPaddingObject(padding) {
794 - return {
795 - top: 0,
796 - right: 0,
797 - bottom: 0,
798 - left: 0,
799 - ...padding
800 - };
801 - }
802 - function getPaddingObject(padding) {
803 - return typeof padding !== "number" ? expandPaddingObject(padding) : {
804 - top: padding,
805 - right: padding,
806 - bottom: padding,
807 - left: padding
808 - };
809 - }
810 - function rectToClientRect(rect) {
811 - const { x, y, width, height } = rect;
812 - return {
813 - width,
814 - height,
815 - top: y,
816 - left: x,
817 - right: x + width,
818 - bottom: y + height,
819 - x,
820 - y
821 - };
822 - }
823 -
824 -//#endregion
825 -//#region node_modules/tabbable/dist/index.esm.js
826 -/*!
827 - * tabbable 6.4.0
828 - * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE
829 - */
830 - var candidateSelectors = [
831 - "input:not([inert]):not([inert] *)",
832 - "select:not([inert]):not([inert] *)",
833 - "textarea:not([inert]):not([inert] *)",
834 - "a[href]:not([inert]):not([inert] *)",
835 - "button:not([inert]):not([inert] *)",
836 - "[tabindex]:not(slot):not([inert]):not([inert] *)",
837 - "audio[controls]:not([inert]):not([inert] *)",
838 - "video[controls]:not([inert]):not([inert] *)",
839 - "[contenteditable]:not([contenteditable=\"false\"]):not([inert]):not([inert] *)",
840 - "details>summary:first-of-type:not([inert]):not([inert] *)",
841 - "details:not([inert]):not([inert] *)"
842 - ];
843 - var candidateSelector = /* #__PURE__ */ candidateSelectors.join(",");
844 - var NoElement = typeof Element === "undefined";
845 - var matches = NoElement ? function() {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
846 - var getRootNode = !NoElement && Element.prototype.getRootNode ? function(element) {
847 - var _element$getRootNode;
848 - return element === null || element === void 0 ? void 0 : (_element$getRootNode = element.getRootNode) === null || _element$getRootNode === void 0 ? void 0 : _element$getRootNode.call(element);
849 - } : function(element) {
850 - return element === null || element === void 0 ? void 0 : element.ownerDocument;
851 - };
852 - /**
853 - * Determines if a node is inert or in an inert ancestor.
854 - * @param {Node} [node]
855 - * @param {boolean} [lookUp] If true and `node` is not inert, looks up at ancestors to
856 - * see if any of them are inert. If false, only `node` itself is considered.
857 - * @returns {boolean} True if inert itself or by way of being in an inert ancestor.
858 - * False if `node` is falsy.
859 - */
860 - var _isInert = function isInert(node, lookUp) {
861 - var _node$getAttribute;
862 - if (lookUp === void 0) lookUp = true;
863 - var inertAtt = node === null || node === void 0 ? void 0 : (_node$getAttribute = node.getAttribute) === null || _node$getAttribute === void 0 ? void 0 : _node$getAttribute.call(node, "inert");
864 - return inertAtt === "" || inertAtt === "true" || lookUp && node && (typeof node.closest === "function" ? node.closest("[inert]") : _isInert(node.parentNode));
865 - };
866 - /**
867 - * Determines if a node's content is editable.
868 - * @param {Element} [node]
869 - * @returns True if it's content-editable; false if it's not or `node` is falsy.
870 - */
871 - var isContentEditable = function isContentEditable(node) {
872 - var _node$getAttribute2;
873 - var attValue = node === null || node === void 0 ? void 0 : (_node$getAttribute2 = node.getAttribute) === null || _node$getAttribute2 === void 0 ? void 0 : _node$getAttribute2.call(node, "contenteditable");
874 - return attValue === "" || attValue === "true";
875 - };
876 - /**
877 - * @param {Element} el container to check in
878 - * @param {boolean} includeContainer add container to check
879 - * @param {(node: Element) => boolean} filter filter candidates
880 - * @returns {Element[]}
881 - */
882 - var getCandidates = function getCandidates(el, includeContainer, filter) {
883 - if (_isInert(el)) return [];
884 - var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));
885 - if (includeContainer && matches.call(el, candidateSelector)) candidates.unshift(el);
886 - candidates = candidates.filter(filter);
887 - return candidates;
888 - };
889 - /**
890 - * @callback GetShadowRoot
891 - * @param {Element} element to check for shadow root
892 - * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.
893 - */
894 - /**
895 - * @callback ShadowRootFilter
896 - * @param {Element} shadowHostNode the element which contains shadow content
897 - * @returns {boolean} true if a shadow root could potentially contain valid candidates.
898 - */
899 - /**
900 - * @typedef {Object} CandidateScope
901 - * @property {Element} scopeParent contains inner candidates
902 - * @property {Element[]} candidates list of candidates found in the scope parent
903 - */
904 - /**
905 - * @typedef {Object} IterativeOptions
906 - * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;
907 - * if a function, implies shadow support is enabled and either returns the shadow root of an element
908 - * or a boolean stating if it has an undisclosed shadow root
909 - * @property {(node: Element) => boolean} filter filter candidates
910 - * @property {boolean} flatten if true then result will flatten any CandidateScope into the returned list
911 - * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;
912 - */
913 - /**
914 - * @param {Element[]} elements list of element containers to match candidates from
915 - * @param {boolean} includeContainer add container list to check
916 - * @param {IterativeOptions} options
917 - * @returns {Array.<Element|CandidateScope>}
918 - */
919 - var _getCandidatesIteratively = function getCandidatesIteratively(elements, includeContainer, options) {
920 - var candidates = [];
921 - var elementsToCheck = Array.from(elements);
922 - while (elementsToCheck.length) {
923 - var element = elementsToCheck.shift();
924 - if (_isInert(element, false)) continue;
925 - if (element.tagName === "SLOT") {
926 - var assigned = element.assignedElements();
927 - var nestedCandidates = _getCandidatesIteratively(assigned.length ? assigned : element.children, true, options);
928 - if (options.flatten) candidates.push.apply(candidates, nestedCandidates);
929 - else candidates.push({
930 - scopeParent: element,
931 - candidates: nestedCandidates
932 - });
933 - } else {
934 - if (matches.call(element, candidateSelector) && options.filter(element) && (includeContainer || !elements.includes(element))) candidates.push(element);
935 - var shadowRoot = element.shadowRoot || typeof options.getShadowRoot === "function" && options.getShadowRoot(element);
936 - var validShadowRoot = !_isInert(shadowRoot, false) && (!options.shadowRootFilter || options.shadowRootFilter(element));
937 - if (shadowRoot && validShadowRoot) {
938 - var _nestedCandidates = _getCandidatesIteratively(shadowRoot === true ? element.children : shadowRoot.children, true, options);
939 - if (options.flatten) candidates.push.apply(candidates, _nestedCandidates);
940 - else candidates.push({
941 - scopeParent: element,
942 - candidates: _nestedCandidates
943 - });
944 - } else elementsToCheck.unshift.apply(elementsToCheck, element.children);
945 - }
946 - }
947 - return candidates;
948 - };
949 - /**
950 - * @private
951 - * Determines if the node has an explicitly specified `tabindex` attribute.
952 - * @param {HTMLElement} node
953 - * @returns {boolean} True if so; false if not.
954 - */
955 - var hasTabIndex = function hasTabIndex(node) {
956 - return !isNaN(parseInt(node.getAttribute("tabindex"), 10));
957 - };
958 - /**
959 - * Determine the tab index of a given node.
960 - * @param {HTMLElement} node
961 - * @returns {number} Tab order (negative, 0, or positive number).
962 - * @throws {Error} If `node` is falsy.
963 - */
964 - var getTabIndex = function getTabIndex(node) {
965 - if (!node) throw new Error("No node provided");
966 - if (node.tabIndex < 0) {
967 - if ((/^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || isContentEditable(node)) && !hasTabIndex(node)) return 0;
968 - }
969 - return node.tabIndex;
970 - };
971 - /**
972 - * Determine the tab index of a given node __for sort order purposes__.
973 - * @param {HTMLElement} node
974 - * @param {boolean} [isScope] True for a custom element with shadow root or slot that, by default,
975 - * has tabIndex -1, but needs to be sorted by document order in order for its content to be
976 - * inserted into the correct sort position.
977 - * @returns {number} Tab order (negative, 0, or positive number).
978 - */
979 - var getSortOrderTabIndex = function getSortOrderTabIndex(node, isScope) {
980 - var tabIndex = getTabIndex(node);
981 - if (tabIndex < 0 && isScope && !hasTabIndex(node)) return 0;
982 - return tabIndex;
983 - };
984 - var sortOrderedTabbables = function sortOrderedTabbables(a, b) {
985 - return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;
986 - };
987 - var isInput = function isInput(node) {
988 - return node.tagName === "INPUT";
989 - };
990 - var isHiddenInput = function isHiddenInput(node) {
991 - return isInput(node) && node.type === "hidden";
992 - };
993 - var isDetailsWithSummary = function isDetailsWithSummary(node) {
994 - return node.tagName === "DETAILS" && Array.prototype.slice.apply(node.children).some(function(child) {
995 - return child.tagName === "SUMMARY";
996 - });
997 - };
998 - var getCheckedRadio = function getCheckedRadio(nodes, form) {
999 - for (var i = 0; i < nodes.length; i++) if (nodes[i].checked && nodes[i].form === form) return nodes[i];
1000 - };
1001 - var isTabbableRadio = function isTabbableRadio(node) {
1002 - if (!node.name) return true;
1003 - var radioScope = node.form || getRootNode(node);
1004 - var queryRadios = function queryRadios(name) {
1005 - return radioScope.querySelectorAll("input[type=\"radio\"][name=\"" + name + "\"]");
1006 - };
1007 - var radioSet;
1008 - if (typeof window !== "undefined" && typeof window.CSS !== "undefined" && typeof window.CSS.escape === "function") radioSet = queryRadios(window.CSS.escape(node.name));
1009 - else try {
1010 - radioSet = queryRadios(node.name);
1011 - } catch (err) {
1012 - console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s", err.message);
1013 - return false;
1014 - }
1015 - var checked = getCheckedRadio(radioSet, node.form);
1016 - return !checked || checked === node;
1017 - };
1018 - var isRadio = function isRadio(node) {
1019 - return isInput(node) && node.type === "radio";
1020 - };
1021 - var isNonTabbableRadio = function isNonTabbableRadio(node) {
1022 - return isRadio(node) && !isTabbableRadio(node);
1023 - };
1024 - var isNodeAttached = function isNodeAttached(node) {
1025 - var _nodeRoot;
1026 - var nodeRoot = node && getRootNode(node);
1027 - var nodeRootHost = (_nodeRoot = nodeRoot) === null || _nodeRoot === void 0 ? void 0 : _nodeRoot.host;
1028 - var attached = false;
1029 - if (nodeRoot && nodeRoot !== node) {
1030 - var _nodeRootHost;
1031 - var _nodeRootHost$ownerDo;
1032 - var _node$ownerDocument;
1033 - attached = !!((_nodeRootHost = nodeRootHost) !== null && _nodeRootHost !== void 0 && (_nodeRootHost$ownerDo = _nodeRootHost.ownerDocument) !== null && _nodeRootHost$ownerDo !== void 0 && _nodeRootHost$ownerDo.contains(nodeRootHost) || node !== null && node !== void 0 && (_node$ownerDocument = node.ownerDocument) !== null && _node$ownerDocument !== void 0 && _node$ownerDocument.contains(node));
1034 - while (!attached && nodeRootHost) {
1035 - var _nodeRoot2;
1036 - var _nodeRootHost2;
1037 - var _nodeRootHost2$ownerD;
1038 - nodeRoot = getRootNode(nodeRootHost);
1039 - nodeRootHost = (_nodeRoot2 = nodeRoot) === null || _nodeRoot2 === void 0 ? void 0 : _nodeRoot2.host;
1040 - attached = !!((_nodeRootHost2 = nodeRootHost) !== null && _nodeRootHost2 !== void 0 && (_nodeRootHost2$ownerD = _nodeRootHost2.ownerDocument) !== null && _nodeRootHost2$ownerD !== void 0 && _nodeRootHost2$ownerD.contains(nodeRootHost));
1041 - }
1042 - }
1043 - return attached;
1044 - };
1045 - var isZeroArea = function isZeroArea(node) {
1046 - var _node$getBoundingClie = node.getBoundingClientRect();
1047 - var width = _node$getBoundingClie.width;
1048 - var height = _node$getBoundingClie.height;
1049 - return width === 0 && height === 0;
1050 - };
1051 - var isHidden = function isHidden(node, _ref) {
1052 - var displayCheck = _ref.displayCheck;
1053 - var getShadowRoot = _ref.getShadowRoot;
1054 - if (displayCheck === "full-native") {
1055 - if ("checkVisibility" in node) return !node.checkVisibility({
1056 - checkOpacity: false,
1057 - opacityProperty: false,
1058 - contentVisibilityAuto: true,
1059 - visibilityProperty: true,
1060 - checkVisibilityCSS: true
1061 - });
1062 - }
1063 - if (getComputedStyle(node).visibility === "hidden") return true;
1064 - var nodeUnderDetails = matches.call(node, "details>summary:first-of-type") ? node.parentElement : node;
1065 - if (matches.call(nodeUnderDetails, "details:not([open]) *")) return true;
1066 - if (!displayCheck || displayCheck === "full" || displayCheck === "full-native" || displayCheck === "legacy-full") {
1067 - if (typeof getShadowRoot === "function") {
1068 - var originalNode = node;
1069 - while (node) {
1070 - var parentElement = node.parentElement;
1071 - var rootNode = getRootNode(node);
1072 - if (parentElement && !parentElement.shadowRoot && getShadowRoot(parentElement) === true) return isZeroArea(node);
1073 - else if (node.assignedSlot) node = node.assignedSlot;
1074 - else if (!parentElement && rootNode !== node.ownerDocument) node = rootNode.host;
1075 - else node = parentElement;
1076 - }
1077 - node = originalNode;
1078 - }
1079 - if (isNodeAttached(node)) return !node.getClientRects().length;
1080 - if (displayCheck !== "legacy-full") return true;
1081 - } else if (displayCheck === "non-zero-area") return isZeroArea(node);
1082 - return false;
1083 - };
1084 - var isDisabledFromFieldset = function isDisabledFromFieldset(node) {
1085 - if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {
1086 - var parentNode = node.parentElement;
1087 - while (parentNode) {
1088 - if (parentNode.tagName === "FIELDSET" && parentNode.disabled) {
1089 - for (var i = 0; i < parentNode.children.length; i++) {
1090 - var child = parentNode.children.item(i);
1091 - if (child.tagName === "LEGEND") return matches.call(parentNode, "fieldset[disabled] *") ? true : !child.contains(node);
1092 - }
1093 - return true;
1094 - }
1095 - parentNode = parentNode.parentElement;
1096 - }
1097 - }
1098 - return false;
1099 - };
1100 - var isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable(options, node) {
1101 - if (node.disabled || isHiddenInput(node) || isHidden(node, options) || isDetailsWithSummary(node) || isDisabledFromFieldset(node)) return false;
1102 - return true;
1103 - };
1104 - var isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable(options, node) {
1105 - if (isNonTabbableRadio(node) || getTabIndex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) return false;
1106 - return true;
1107 - };
1108 - var isShadowRootTabbable = function isShadowRootTabbable(shadowHostNode) {
1109 - var tabIndex = parseInt(shadowHostNode.getAttribute("tabindex"), 10);
1110 - if (isNaN(tabIndex) || tabIndex >= 0) return true;
1111 - return false;
1112 - };
1113 - /**
1114 - * @param {Array.<Element|CandidateScope>} candidates
1115 - * @returns Element[]
1116 - */
1117 - var _sortByOrder = function sortByOrder(candidates) {
1118 - var regularTabbables = [];
1119 - var orderedTabbables = [];
1120 - candidates.forEach(function(item, i) {
1121 - var isScope = !!item.scopeParent;
1122 - var element = isScope ? item.scopeParent : item;
1123 - var candidateTabindex = getSortOrderTabIndex(element, isScope);
1124 - var elements = isScope ? _sortByOrder(item.candidates) : element;
1125 - if (candidateTabindex === 0) isScope ? regularTabbables.push.apply(regularTabbables, elements) : regularTabbables.push(element);
1126 - else orderedTabbables.push({
1127 - documentOrder: i,
1128 - tabIndex: candidateTabindex,
1129 - item,
1130 - isScope,
1131 - content: elements
1132 - });
1133 - });
1134 - return orderedTabbables.sort(sortOrderedTabbables).reduce(function(acc, sortable) {
1135 - sortable.isScope ? acc.push.apply(acc, sortable.content) : acc.push(sortable.content);
1136 - return acc;
1137 - }, []).concat(regularTabbables);
1138 - };
1139 - var tabbable = function tabbable(container, options) {
1140 - options = options || {};
1141 - var candidates;
1142 - if (options.getShadowRoot) candidates = _getCandidatesIteratively([container], options.includeContainer, {
1143 - filter: isNodeMatchingSelectorTabbable.bind(null, options),
1144 - flatten: false,
1145 - getShadowRoot: options.getShadowRoot,
1146 - shadowRootFilter: isShadowRootTabbable
1147 - });
1148 - else candidates = getCandidates(container, options.includeContainer, isNodeMatchingSelectorTabbable.bind(null, options));
1149 - return _sortByOrder(candidates);
1150 - };
1151 -
1152 -//#endregion
1153 -//#region node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs
1154 - function isSafari() {
1155 - return /apple/i.test(navigator.vendor);
1156 - }
1157 - function activeElement(doc) {
1158 - let activeElement = doc.activeElement;
1159 - while (((_activeElement = activeElement) == null || (_activeElement = _activeElement.shadowRoot) == null ? void 0 : _activeElement.activeElement) != null) {
1160 - var _activeElement;
1161 - activeElement = activeElement.shadowRoot.activeElement;
1162 - }
1163 - return activeElement;
1164 - }
1165 - function contains(parent, child) {
1166 - if (!parent || !child) return false;
1167 - const rootNode = child.getRootNode == null ? void 0 : child.getRootNode();
1168 - if (parent.contains(child)) return true;
1169 - if (rootNode && isShadowRoot(rootNode)) {
1170 - let next = child;
1171 - while (next) {
1172 - if (parent === next) return true;
1173 - next = next.parentNode || next.host;
1174 - }
1175 - }
1176 - return false;
1177 - }
1178 - function getDocument(node) {
1179 - return (node == null ? void 0 : node.ownerDocument) || document;
1180 - }
1181 - function isMouseLikePointerType(pointerType, strict) {
1182 - const values = ["mouse", "pen"];
1183 - if (!strict) values.push("", void 0);
1184 - return values.includes(pointerType);
1185 - }
1186 - var index$1 = typeof document !== "undefined" ? react$1.useLayoutEffect : function noop() {};
1187 - var SafeReact$1 = { ...react$1 };
1188 - function useLatestRef$1(value) {
1189 - const ref = react$1.useRef(value);
1190 - index$1(() => {
1191 - ref.current = value;
1192 - });
1193 - return ref;
1194 - }
1195 - __name(useLatestRef$1, "useLatestRef");
1196 - var useSafeInsertionEffect = SafeReact$1.useInsertionEffect || ((fn) => fn());
1197 - function useEffectEvent(callback) {
1198 - const ref = react$1.useRef(() => {
1199 - throw new Error("Cannot call an event handler while rendering.");
1200 - });
1201 - useSafeInsertionEffect(() => {
1202 - ref.current = callback;
1203 - });
1204 - return react$1.useCallback(function() {
1205 - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key];
1206 - return ref.current == null ? void 0 : ref.current(...args);
1207 - }, []);
1208 - }
1209 - var getTabbableOptions = () => ({
1210 - getShadowRoot: true,
1211 - displayCheck: typeof ResizeObserver === "function" && ResizeObserver.toString().includes("[native code]") ? "full" : "none"
1212 - });
1213 - function getTabbableIn(container, dir) {
1214 - const list = tabbable(container, getTabbableOptions());
1215 - const len = list.length;
1216 - if (len === 0) return;
1217 - const active = activeElement(getDocument(container));
1218 - const index = list.indexOf(active);
1219 - return list[index === -1 ? dir === 1 ? 0 : len - 1 : index + dir];
1220 - }
1221 - function getNextTabbable(referenceElement) {
1222 - return getTabbableIn(getDocument(referenceElement).body, 1) || referenceElement;
1223 - }
1224 - function getPreviousTabbable(referenceElement) {
1225 - return getTabbableIn(getDocument(referenceElement).body, -1) || referenceElement;
1226 - }
1227 - function isOutsideEvent(event, container) {
1228 - const containerElement = container || event.currentTarget;
1229 - const relatedTarget = event.relatedTarget;
1230 - return !relatedTarget || !contains(containerElement, relatedTarget);
1231 - }
1232 - function disableFocusInside(container) {
1233 - tabbable(container, getTabbableOptions()).forEach((element) => {
1234 - element.dataset.tabindex = element.getAttribute("tabindex") || "";
1235 - element.setAttribute("tabindex", "-1");
1236 - });
1237 - }
1238 - function enableFocusInside(container) {
1239 - container.querySelectorAll("[data-tabindex]").forEach((element) => {
1240 - const tabindex = element.dataset.tabindex;
1241 - delete element.dataset.tabindex;
1242 - if (tabindex) element.setAttribute("tabindex", tabindex);
1243 - else element.removeAttribute("tabindex");
1244 - });
1245 - }
1246 -
1247 -//#endregion
1248 -//#region node_modules/react/cjs/react-jsx-runtime.development.js
1249 -/**
1250 - * @license React
1251 - * react-jsx-runtime.development.js
1252 - *
1253 - * Copyright (c) Facebook, Inc. and its affiliates.
1254 - *
1255 - * This source code is licensed under the MIT license found in the
1256 - * LICENSE file in the root directory of this source tree.
1257 - */
1258 - var require_react_jsx_runtime_development = /* @__PURE__ */ __commonJSMin(((exports) => {
1259 - (function() {
1260 - "use strict";
1261 - var React = (globalThis.React);
1262 - var REACT_ELEMENT_TYPE = Symbol.for("react.element");
1263 - var REACT_PORTAL_TYPE = Symbol.for("react.portal");
1264 - var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
1265 - var REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode");
1266 - var REACT_PROFILER_TYPE = Symbol.for("react.profiler");
1267 - var REACT_PROVIDER_TYPE = Symbol.for("react.provider");
1268 - var REACT_CONTEXT_TYPE = Symbol.for("react.context");
1269 - var REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref");
1270 - var REACT_SUSPENSE_TYPE = Symbol.for("react.suspense");
1271 - var REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list");
1272 - var REACT_MEMO_TYPE = Symbol.for("react.memo");
1273 - var REACT_LAZY_TYPE = Symbol.for("react.lazy");
1274 - var REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen");
1275 - var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
1276 - var FAUX_ITERATOR_SYMBOL = "@@iterator";
1277 - function getIteratorFn(maybeIterable) {
1278 - if (maybeIterable === null || typeof maybeIterable !== "object") return null;
1279 - var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
1280 - if (typeof maybeIterator === "function") return maybeIterator;
1281 - return null;
1282 - }
1283 - var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
1284 - function error(format) {
1285 - for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) args[_key2 - 1] = arguments[_key2];
1286 - printWarning("error", format, args);
1287 - }
1288 - function printWarning(level, format, args) {
1289 - var stack = ReactSharedInternals.ReactDebugCurrentFrame.getStackAddendum();
1290 - if (stack !== "") {
1291 - format += "%s";
1292 - args = args.concat([stack]);
1293 - }
1294 - var argsWithFormat = args.map(function(item) {
1295 - return String(item);
1296 - });
1297 - argsWithFormat.unshift("Warning: " + format);
1298 - Function.prototype.apply.call(console[level], console, argsWithFormat);
1299 - }
1300 - var enableScopeAPI = false;
1301 - var enableCacheElement = false;
1302 - var enableTransitionTracing = false;
1303 - var enableLegacyHidden = false;
1304 - var enableDebugTracing = false;
1305 - var REACT_MODULE_REFERENCE = Symbol.for("react.module.reference");
1306 - function isValidElementType(type) {
1307 - if (typeof type === "string" || typeof type === "function") return true;
1308 - if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing) return true;
1309 - if (typeof type === "object" && type !== null) {
1310 - if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== void 0) return true;
1311 - }
1312 - return false;
1313 - }
1314 - function getWrappedName(outerType, innerType, wrapperName) {
1315 - var displayName = outerType.displayName;
1316 - if (displayName) return displayName;
1317 - var functionName = innerType.displayName || innerType.name || "";
1318 - return functionName !== "" ? wrapperName + "(" + functionName + ")" : wrapperName;
1319 - }
1320 - function getContextName(type) {
1321 - return type.displayName || "Context";
1322 - }
1323 - function getComponentNameFromType(type) {
1324 - if (type == null) return null;
1325 - if (typeof type.tag === "number") error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.");
1326 - if (typeof type === "function") return type.displayName || type.name || null;
1327 - if (typeof type === "string") return type;
1328 - switch (type) {
1329 - case REACT_FRAGMENT_TYPE: return "Fragment";
1330 - case REACT_PORTAL_TYPE: return "Portal";
1331 - case REACT_PROFILER_TYPE: return "Profiler";
1332 - case REACT_STRICT_MODE_TYPE: return "StrictMode";
1333 - case REACT_SUSPENSE_TYPE: return "Suspense";
1334 - case REACT_SUSPENSE_LIST_TYPE: return "SuspenseList";
1335 - }
1336 - if (typeof type === "object") switch (type.$$typeof) {
1337 - case REACT_CONTEXT_TYPE: return getContextName(type) + ".Consumer";
1338 - case REACT_PROVIDER_TYPE: return getContextName(type._context) + ".Provider";
1339 - case REACT_FORWARD_REF_TYPE: return getWrappedName(type, type.render, "ForwardRef");
1340 - case REACT_MEMO_TYPE:
1341 - var outerName = type.displayName || null;
1342 - if (outerName !== null) return outerName;
1343 - return getComponentNameFromType(type.type) || "Memo";
1344 - case REACT_LAZY_TYPE:
1345 - var lazyComponent = type;
1346 - var payload = lazyComponent._payload;
1347 - var init = lazyComponent._init;
1348 - try {
1349 - return getComponentNameFromType(init(payload));
1350 - } catch (x) {
1351 - return null;
1352 - }
1353 - }
1354 - return null;
1355 - }
1356 - var assign = Object.assign;
1357 - var disabledDepth = 0;
1358 - var prevLog;
1359 - var prevInfo;
1360 - var prevWarn;
1361 - var prevError;
1362 - var prevGroup;
1363 - var prevGroupCollapsed;
1364 - var prevGroupEnd;
1365 - function disabledLog() {}
1366 - disabledLog.__reactDisabledLog = true;
1367 - function disableLogs() {
1368 - if (disabledDepth === 0) {
1369 - prevLog = console.log;
1370 - prevInfo = console.info;
1371 - prevWarn = console.warn;
1372 - prevError = console.error;
1373 - prevGroup = console.group;
1374 - prevGroupCollapsed = console.groupCollapsed;
1375 - prevGroupEnd = console.groupEnd;
1376 - var props = {
1377 - configurable: true,
1378 - enumerable: true,
1379 - value: disabledLog,
1380 - writable: true
1381 - };
1382 - Object.defineProperties(console, {
1383 - info: props,
1384 - log: props,
1385 - warn: props,
1386 - error: props,
1387 - group: props,
1388 - groupCollapsed: props,
1389 - groupEnd: props
1390 - });
1391 - }
1392 - disabledDepth++;
1393 - }
1394 - function reenableLogs() {
1395 - disabledDepth--;
1396 - if (disabledDepth === 0) {
1397 - var props = {
1398 - configurable: true,
1399 - enumerable: true,
1400 - writable: true
1401 - };
1402 - Object.defineProperties(console, {
1403 - log: assign({}, props, { value: prevLog }),
1404 - info: assign({}, props, { value: prevInfo }),
1405 - warn: assign({}, props, { value: prevWarn }),
1406 - error: assign({}, props, { value: prevError }),
1407 - group: assign({}, props, { value: prevGroup }),
1408 - groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
1409 - groupEnd: assign({}, props, { value: prevGroupEnd })
1410 - });
1411 - }
1412 - if (disabledDepth < 0) error("disabledDepth fell below zero. This is a bug in React. Please file an issue.");
1413 - }
1414 - var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
1415 - var prefix;
1416 - function describeBuiltInComponentFrame(name, source, ownerFn) {
1417 - if (prefix === void 0) try {
1418 - throw Error();
1419 - } catch (x) {
1420 - var match = x.stack.trim().match(/\n( *(at )?)/);
1421 - prefix = match && match[1] || "";
1422 - }
1423 - return "\n" + prefix + name;
1424 - }
1425 - var reentry = false;
1426 - var componentFrameCache = new (typeof WeakMap === "function" ? WeakMap : Map)();
1427 - function describeNativeComponentFrame(fn, construct) {
1428 - if (!fn || reentry) return "";
1429 - var frame = componentFrameCache.get(fn);
1430 - if (frame !== void 0) return frame;
1431 - var control;
1432 - reentry = true;
1433 - var previousPrepareStackTrace = Error.prepareStackTrace;
1434 - Error.prepareStackTrace = void 0;
1435 - var previousDispatcher = ReactCurrentDispatcher.current;
1436 - ReactCurrentDispatcher.current = null;
1437 - disableLogs();
1438 - try {
1439 - if (construct) {
1440 - var Fake = function() {
1441 - throw Error();
1442 - };
1443 - Object.defineProperty(Fake.prototype, "props", { set: function() {
1444 - throw Error();
1445 - } });
1446 - if (typeof Reflect === "object" && Reflect.construct) {
1447 - try {
1448 - Reflect.construct(Fake, []);
1449 - } catch (x) {
1450 - control = x;
1451 - }
1452 - Reflect.construct(fn, [], Fake);
1453 - } else {
1454 - try {
1455 - Fake.call();
1456 - } catch (x) {
1457 - control = x;
1458 - }
1459 - fn.call(Fake.prototype);
1460 - }
1461 - } else {
1462 - try {
1463 - throw Error();
1464 - } catch (x) {
1465 - control = x;
1466 - }
1467 - fn();
1468 - }
1469 - } catch (sample) {
1470 - if (sample && control && typeof sample.stack === "string") {
1471 - var sampleLines = sample.stack.split("\n");
1472 - var controlLines = control.stack.split("\n");
1473 - var s = sampleLines.length - 1;
1474 - var c = controlLines.length - 1;
1475 - while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) c--;
1476 - for (; s >= 1 && c >= 0; s--, c--) if (sampleLines[s] !== controlLines[c]) {
1477 - if (s !== 1 || c !== 1) do {
1478 - s--;
1479 - c--;
1480 - if (c < 0 || sampleLines[s] !== controlLines[c]) {
1481 - var _frame = "\n" + sampleLines[s].replace(" at new ", " at ");
1482 - if (fn.displayName && _frame.includes("<anonymous>")) _frame = _frame.replace("<anonymous>", fn.displayName);
1483 - if (typeof fn === "function") componentFrameCache.set(fn, _frame);
1484 - return _frame;
1485 - }
1486 - } while (s >= 1 && c >= 0);
1487 - break;
1488 - }
1489 - }
1490 - } finally {
1491 - reentry = false;
1492 - ReactCurrentDispatcher.current = previousDispatcher;
1493 - reenableLogs();
1494 - Error.prepareStackTrace = previousPrepareStackTrace;
1495 - }
1496 - var name = fn ? fn.displayName || fn.name : "";
1497 - var syntheticFrame = name ? describeBuiltInComponentFrame(name) : "";
1498 - if (typeof fn === "function") componentFrameCache.set(fn, syntheticFrame);
1499 - return syntheticFrame;
1500 - }
1501 - function describeFunctionComponentFrame(fn, source, ownerFn) {
1502 - return describeNativeComponentFrame(fn, false);
1503 - }
1504 - function shouldConstruct(Component) {
1505 - var prototype = Component.prototype;
1506 - return !!(prototype && prototype.isReactComponent);
1507 - }
1508 - function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {
1509 - if (type == null) return "";
1510 - if (typeof type === "function") return describeNativeComponentFrame(type, shouldConstruct(type));
1511 - if (typeof type === "string") return describeBuiltInComponentFrame(type);
1512 - switch (type) {
1513 - case REACT_SUSPENSE_TYPE: return describeBuiltInComponentFrame("Suspense");
1514 - case REACT_SUSPENSE_LIST_TYPE: return describeBuiltInComponentFrame("SuspenseList");
1515 - }
1516 - if (typeof type === "object") switch (type.$$typeof) {
1517 - case REACT_FORWARD_REF_TYPE: return describeFunctionComponentFrame(type.render);
1518 - case REACT_MEMO_TYPE: return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);
1519 - case REACT_LAZY_TYPE:
1520 - var lazyComponent = type;
1521 - var payload = lazyComponent._payload;
1522 - var init = lazyComponent._init;
1523 - try {
1524 - return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
1525 - } catch (x) {}
1526 - }
1527 - return "";
1528 - }
1529 - var hasOwnProperty = Object.prototype.hasOwnProperty;
1530 - var loggedTypeFailures = {};
1531 - var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
1532 - function setCurrentlyValidatingElement(element) {
1533 - if (element) {
1534 - var owner = element._owner;
1535 - var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
1536 - ReactDebugCurrentFrame.setExtraStackFrame(stack);
1537 - } else ReactDebugCurrentFrame.setExtraStackFrame(null);
1538 - }
1539 - function checkPropTypes(typeSpecs, values, location, componentName, element) {
1540 - var has = Function.call.bind(hasOwnProperty);
1541 - for (var typeSpecName in typeSpecs) if (has(typeSpecs, typeSpecName)) {
1542 - var error$1 = void 0;
1543 - try {
1544 - if (typeof typeSpecs[typeSpecName] !== "function") {
1545 - var err = Error((componentName || "React class") + ": " + location + " type `" + typeSpecName + "` is invalid; it must be a function, usually from the `prop-types` package, but received `" + typeof typeSpecs[typeSpecName] + "`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");
1546 - err.name = "Invariant Violation";
1547 - throw err;
1548 - }
1549 - error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, "SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");
1550 - } catch (ex) {
1551 - error$1 = ex;
1552 - }
1553 - if (error$1 && !(error$1 instanceof Error)) {
1554 - setCurrentlyValidatingElement(element);
1555 - error("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).", componentName || "React class", location, typeSpecName, typeof error$1);
1556 - setCurrentlyValidatingElement(null);
1557 - }
1558 - if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
1559 - loggedTypeFailures[error$1.message] = true;
1560 - setCurrentlyValidatingElement(element);
1561 - error("Failed %s type: %s", location, error$1.message);
1562 - setCurrentlyValidatingElement(null);
1563 - }
1564 - }
1565 - }
1566 - var isArrayImpl = Array.isArray;
1567 - function isArray(a) {
1568 - return isArrayImpl(a);
1569 - }
1570 - function typeName(value) {
1571 - return typeof Symbol === "function" && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
1572 - }
1573 - function willCoercionThrow(value) {
1574 - try {
1575 - testStringCoercion(value);
1576 - return false;
1577 - } catch (e) {
1578 - return true;
1579 - }
1580 - }
1581 - function testStringCoercion(value) {
1582 - return "" + value;
1583 - }
1584 - function checkKeyStringCoercion(value) {
1585 - if (willCoercionThrow(value)) {
1586 - error("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.", typeName(value));
1587 - return testStringCoercion(value);
1588 - }
1589 - }
1590 - var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
1591 - var RESERVED_PROPS = {
1592 - key: true,
1593 - ref: true,
1594 - __self: true,
1595 - __source: true
1596 - };
1597 - var specialPropKeyWarningShown;
1598 - var specialPropRefWarningShown;
1599 - var didWarnAboutStringRefs = {};
1600 - function hasValidRef(config) {
1601 - if (hasOwnProperty.call(config, "ref")) {
1602 - var getter = Object.getOwnPropertyDescriptor(config, "ref").get;
1603 - if (getter && getter.isReactWarning) return false;
1604 - }
1605 - return config.ref !== void 0;
1606 - }
1607 - function hasValidKey(config) {
1608 - if (hasOwnProperty.call(config, "key")) {
1609 - var getter = Object.getOwnPropertyDescriptor(config, "key").get;
1610 - if (getter && getter.isReactWarning) return false;
1611 - }
1612 - return config.key !== void 0;
1613 - }
1614 - function warnIfStringRefCannotBeAutoConverted(config, self) {
1615 - if (typeof config.ref === "string" && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {
1616 - var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);
1617 - if (!didWarnAboutStringRefs[componentName]) {
1618 - error("Component \"%s\" contains the string ref \"%s\". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref", getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);
1619 - didWarnAboutStringRefs[componentName] = true;
1620 - }
1621 - }
1622 - }
1623 - function defineKeyPropWarningGetter(props, displayName) {
1624 - var warnAboutAccessingKey = function() {
1625 - if (!specialPropKeyWarningShown) {
1626 - specialPropKeyWarningShown = true;
1627 - error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", displayName);
1628 - }
1629 - };
1630 - warnAboutAccessingKey.isReactWarning = true;
1631 - Object.defineProperty(props, "key", {
1632 - get: warnAboutAccessingKey,
1633 - configurable: true
1634 - });
1635 - }
1636 - function defineRefPropWarningGetter(props, displayName) {
1637 - var warnAboutAccessingRef = function() {
1638 - if (!specialPropRefWarningShown) {
1639 - specialPropRefWarningShown = true;
1640 - error("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)", displayName);
1641 - }
1642 - };
1643 - warnAboutAccessingRef.isReactWarning = true;
1644 - Object.defineProperty(props, "ref", {
1645 - get: warnAboutAccessingRef,
1646 - configurable: true
1647 - });
1648 - }
1649 - /**
1650 - * Factory method to create a new React element. This no longer adheres to
1651 - * the class pattern, so do not use new to call it. Also, instanceof check
1652 - * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
1653 - * if something is a React Element.
1654 - *
1655 - * @param {*} type
1656 - * @param {*} props
1657 - * @param {*} key
1658 - * @param {string|object} ref
1659 - * @param {*} owner
1660 - * @param {*} self A *temporary* helper to detect places where `this` is
1661 - * different from the `owner` when React.createElement is called, so that we
1662 - * can warn. We want to get rid of owner and replace string `ref`s with arrow
1663 - * functions, and as long as `this` and owner are the same, there will be no
1664 - * change in behavior.
1665 - * @param {*} source An annotation object (added by a transpiler or otherwise)
1666 - * indicating filename, line number, and/or other information.
1667 - * @internal
1668 - */
1669 - var ReactElement = function(type, key, ref, self, source, owner, props) {
1670 - var element = {
1671 - $$typeof: REACT_ELEMENT_TYPE,
1672 - type,
1673 - key,
1674 - ref,
1675 - props,
1676 - _owner: owner
1677 - };
1678 - element._store = {};
1679 - Object.defineProperty(element._store, "validated", {
1680 - configurable: false,
1681 - enumerable: false,
1682 - writable: true,
1683 - value: false
1684 - });
1685 - Object.defineProperty(element, "_self", {
1686 - configurable: false,
1687 - enumerable: false,
1688 - writable: false,
1689 - value: self
1690 - });
1691 - Object.defineProperty(element, "_source", {
1692 - configurable: false,
1693 - enumerable: false,
1694 - writable: false,
1695 - value: source
1696 - });
1697 - if (Object.freeze) {
1698 - Object.freeze(element.props);
1699 - Object.freeze(element);
1700 - }
1701 - return element;
1702 - };
1703 - /**
1704 - * https://github.com/reactjs/rfcs/pull/107
1705 - * @param {*} type
1706 - * @param {object} props
1707 - * @param {string} key
1708 - */
1709 - function jsxDEV(type, config, maybeKey, source, self) {
1710 - var propName;
1711 - var props = {};
1712 - var key = null;
1713 - var ref = null;
1714 - if (maybeKey !== void 0) {
1715 - checkKeyStringCoercion(maybeKey);
1716 - key = "" + maybeKey;
1717 - }
1718 - if (hasValidKey(config)) {
1719 - checkKeyStringCoercion(config.key);
1720 - key = "" + config.key;
1721 - }
1722 - if (hasValidRef(config)) {
1723 - ref = config.ref;
1724 - warnIfStringRefCannotBeAutoConverted(config, self);
1725 - }
1726 - for (propName in config) if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) props[propName] = config[propName];
1727 - if (type && type.defaultProps) {
1728 - var defaultProps = type.defaultProps;
1729 - for (propName in defaultProps) if (props[propName] === void 0) props[propName] = defaultProps[propName];
1730 - }
1731 - if (key || ref) {
1732 - var displayName = typeof type === "function" ? type.displayName || type.name || "Unknown" : type;
1733 - if (key) defineKeyPropWarningGetter(props, displayName);
1734 - if (ref) defineRefPropWarningGetter(props, displayName);
1735 - }
1736 - return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
1737 - }
1738 - var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;
1739 - var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;
1740 - function setCurrentlyValidatingElement$1(element) {
1741 - if (element) {
1742 - var owner = element._owner;
1743 - var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
1744 - ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
1745 - } else ReactDebugCurrentFrame$1.setExtraStackFrame(null);
1746 - }
1747 - var propTypesMisspellWarningShown = false;
1748 - /**
1749 - * Verifies the object is a ReactElement.
1750 - * See https://reactjs.org/docs/react-api.html#isvalidelement
1751 - * @param {?object} object
1752 - * @return {boolean} True if `object` is a ReactElement.
1753 - * @final
1754 - */
1755 - function isValidElement(object) {
1756 - return typeof object === "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
1757 - }
1758 - function getDeclarationErrorAddendum() {
1759 - if (ReactCurrentOwner$1.current) {
1760 - var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);
1761 - if (name) return "\n\nCheck the render method of `" + name + "`.";
1762 - }
1763 - return "";
1764 - }
1765 - function getSourceInfoErrorAddendum(source) {
1766 - if (source !== void 0) {
1767 - var fileName = source.fileName.replace(/^.*[\\\/]/, "");
1768 - var lineNumber = source.lineNumber;
1769 - return "\n\nCheck your code at " + fileName + ":" + lineNumber + ".";
1770 - }
1771 - return "";
1772 - }
1773 - /**
1774 - * Warn if there's no key explicitly set on dynamic arrays of children or
1775 - * object keys are not valid. This allows us to keep track of children between
1776 - * updates.
1777 - */
1778 - var ownerHasKeyUseWarning = {};
1779 - function getCurrentComponentErrorInfo(parentType) {
1780 - var info = getDeclarationErrorAddendum();
1781 - if (!info) {
1782 - var parentName = typeof parentType === "string" ? parentType : parentType.displayName || parentType.name;
1783 - if (parentName) info = "\n\nCheck the top-level render call using <" + parentName + ">.";
1784 - }
1785 - return info;
1786 - }
1787 - /**
1788 - * Warn if the element doesn't have an explicit key assigned to it.
1789 - * This element is in an array. The array could grow and shrink or be
1790 - * reordered. All children that haven't already been validated are required to
1791 - * have a "key" property assigned to it. Error statuses are cached so a warning
1792 - * will only be shown once.
1793 - *
1794 - * @internal
1795 - * @param {ReactElement} element Element that requires a key.
1796 - * @param {*} parentType element's parent's type.
1797 - */
1798 - function validateExplicitKey(element, parentType) {
1799 - if (!element._store || element._store.validated || element.key != null) return;
1800 - element._store.validated = true;
1801 - var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
1802 - if (ownerHasKeyUseWarning[currentComponentErrorInfo]) return;
1803 - ownerHasKeyUseWarning[currentComponentErrorInfo] = true;
1804 - var childOwner = "";
1805 - if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + ".";
1806 - setCurrentlyValidatingElement$1(element);
1807 - error("Each child in a list should have a unique \"key\" prop.%s%s See https://reactjs.org/link/warning-keys for more information.", currentComponentErrorInfo, childOwner);
1808 - setCurrentlyValidatingElement$1(null);
1809 - }
1810 - /**
1811 - * Ensure that every element either is passed in a static location, in an
1812 - * array with an explicit keys property defined, or in an object literal
1813 - * with valid key property.
1814 - *
1815 - * @internal
1816 - * @param {ReactNode} node Statically passed child of any type.
1817 - * @param {*} parentType node's parent's type.
1818 - */
1819 - function validateChildKeys(node, parentType) {
1820 - if (typeof node !== "object") return;
1821 - if (isArray(node)) for (var i = 0; i < node.length; i++) {
1822 - var child = node[i];
1823 - if (isValidElement(child)) validateExplicitKey(child, parentType);
1824 - }
1825 - else if (isValidElement(node)) {
1826 - if (node._store) node._store.validated = true;
1827 - } else if (node) {
1828 - var iteratorFn = getIteratorFn(node);
1829 - if (typeof iteratorFn === "function") {
1830 - if (iteratorFn !== node.entries) {
1831 - var iterator = iteratorFn.call(node);
1832 - var step;
1833 - while (!(step = iterator.next()).done) if (isValidElement(step.value)) validateExplicitKey(step.value, parentType);
1834 - }
1835 - }
1836 - }
1837 - }
1838 - /**
1839 - * Given an element, validate that its props follow the propTypes definition,
1840 - * provided by the type.
1841 - *
1842 - * @param {ReactElement} element
1843 - */
1844 - function validatePropTypes(element) {
1845 - var type = element.type;
1846 - if (type === null || type === void 0 || typeof type === "string") return;
1847 - var propTypes;
1848 - if (typeof type === "function") propTypes = type.propTypes;
1849 - else if (typeof type === "object" && (type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_MEMO_TYPE)) propTypes = type.propTypes;
1850 - else return;
1851 - if (propTypes) {
1852 - var name = getComponentNameFromType(type);
1853 - checkPropTypes(propTypes, element.props, "prop", name, element);
1854 - } else if (type.PropTypes !== void 0 && !propTypesMisspellWarningShown) {
1855 - propTypesMisspellWarningShown = true;
1856 - error("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?", getComponentNameFromType(type) || "Unknown");
1857 - }
1858 - if (typeof type.getDefaultProps === "function" && !type.getDefaultProps.isReactClassApproved) error("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.");
1859 - }
1860 - /**
1861 - * Given a fragment, validate that it can only be provided with fragment props
1862 - * @param {ReactElement} fragment
1863 - */
1864 - function validateFragmentProps(fragment) {
1865 - var keys = Object.keys(fragment.props);
1866 - for (var i = 0; i < keys.length; i++) {
1867 - var key = keys[i];
1868 - if (key !== "children" && key !== "key") {
1869 - setCurrentlyValidatingElement$1(fragment);
1870 - error("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.", key);
1871 - setCurrentlyValidatingElement$1(null);
1872 - break;
1873 - }
1874 - }
1875 - if (fragment.ref !== null) {
1876 - setCurrentlyValidatingElement$1(fragment);
1877 - error("Invalid attribute `ref` supplied to `React.Fragment`.");
1878 - setCurrentlyValidatingElement$1(null);
1879 - }
1880 - }
1881 - var didWarnAboutKeySpread = {};
1882 - function jsxWithValidation(type, props, key, isStaticChildren, source, self) {
1883 - var validType = isValidElementType(type);
1884 - if (!validType) {
1885 - var info = "";
1886 - if (type === void 0 || typeof type === "object" && type !== null && Object.keys(type).length === 0) info += " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
1887 - var sourceInfo = getSourceInfoErrorAddendum(source);
1888 - if (sourceInfo) info += sourceInfo;
1889 - else info += getDeclarationErrorAddendum();
1890 - var typeString;
1891 - if (type === null) typeString = "null";
1892 - else if (isArray(type)) typeString = "array";
1893 - else if (type !== void 0 && type.$$typeof === REACT_ELEMENT_TYPE) {
1894 - typeString = "<" + (getComponentNameFromType(type.type) || "Unknown") + " />";
1895 - info = " Did you accidentally export a JSX literal instead of a component?";
1896 - } else typeString = typeof type;
1897 - error("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s", typeString, info);
1898 - }
1899 - var element = jsxDEV(type, props, key, source, self);
1900 - if (element == null) return element;
1901 - if (validType) {
1902 - var children = props.children;
1903 - if (children !== void 0) if (isStaticChildren) if (isArray(children)) {
1904 - for (var i = 0; i < children.length; i++) validateChildKeys(children[i], type);
1905 - if (Object.freeze) Object.freeze(children);
1906 - } else error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");
1907 - else validateChildKeys(children, type);
1908 - }
1909 - if (hasOwnProperty.call(props, "key")) {
1910 - var componentName = getComponentNameFromType(type);
1911 - var keys = Object.keys(props).filter(function(k) {
1912 - return k !== "key";
1913 - });
1914 - var beforeExample = keys.length > 0 ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" : "{key: someKey}";
1915 - if (!didWarnAboutKeySpread[componentName + beforeExample]) {
1916 - error("A props object containing a \"key\" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />", beforeExample, componentName, keys.length > 0 ? "{" + keys.join(": ..., ") + ": ...}" : "{}", componentName);
1917 - didWarnAboutKeySpread[componentName + beforeExample] = true;
1918 - }
1919 - }
1920 - if (type === REACT_FRAGMENT_TYPE) validateFragmentProps(element);
1921 - else validatePropTypes(element);
1922 - return element;
1923 - }
1924 - function jsxWithValidationStatic(type, props, key) {
1925 - return jsxWithValidation(type, props, key, true);
1926 - }
1927 - function jsxWithValidationDynamic(type, props, key) {
1928 - return jsxWithValidation(type, props, key, false);
1929 - }
1930 - var jsx = jsxWithValidationDynamic;
1931 - var jsxs = jsxWithValidationStatic;
1932 - exports.Fragment = REACT_FRAGMENT_TYPE;
1933 - exports.jsx = jsx;
1934 - exports.jsxs = jsxs;
1935 - })();
1936 - }));
1937 -
1938 -//#endregion
1939 -//#region node_modules/react/jsx-runtime.js
1940 - var require_jsx_runtime = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1941 - module.exports = require_react_jsx_runtime_development();
1942 - }));
1943 -
1944 -//#endregion
1945 -//#region node_modules/@floating-ui/core/dist/floating-ui.core.mjs
1946 -var import_jsx_runtime = require_jsx_runtime();
1947 - function computeCoordsFromPlacement(_ref, placement, rtl) {
1948 - let { reference, floating } = _ref;
1949 - const sideAxis = getSideAxis(placement);
1950 - const alignmentAxis = getAlignmentAxis(placement);
1951 - const alignLength = getAxisLength(alignmentAxis);
1952 - const side = getSide(placement);
1953 - const isVertical = sideAxis === "y";
1954 - const commonX = reference.x + reference.width / 2 - floating.width / 2;
1955 - const commonY = reference.y + reference.height / 2 - floating.height / 2;
1956 - const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
1957 - let coords;
1958 - switch (side) {
1959 - case "top":
1960 - coords = {
1961 - x: commonX,
1962 - y: reference.y - floating.height
1963 - };
1964 - break;
1965 - case "bottom":
1966 - coords = {
1967 - x: commonX,
1968 - y: reference.y + reference.height
1969 - };
1970 - break;
1971 - case "right":
1972 - coords = {
1973 - x: reference.x + reference.width,
1974 - y: commonY
1975 - };
1976 - break;
1977 - case "left":
1978 - coords = {
1979 - x: reference.x - floating.width,
1980 - y: commonY
1981 - };
1982 - break;
1983 - default: coords = {
1984 - x: reference.x,
1985 - y: reference.y
1986 - };
1987 - }
1988 - switch (getAlignment(placement)) {
1989 - case "start":
1990 - coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);
1991 - break;
1992 - case "end":
1993 - coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);
1994 - break;
1995 - }
1996 - return coords;
1997 - }
1998 - /**
1999 - * Resolves with an object of overflow side offsets that determine how much the
2000 - * element is overflowing a given clipping boundary on each side.
2001 - * - positive = overflowing the boundary by that number of pixels
2002 - * - negative = how many pixels left before it will overflow
2003 - * - 0 = lies flush with the boundary
2004 - * @see https://floating-ui.com/docs/detectOverflow
2005 - */
2006 - async function detectOverflow(state, options) {
2007 - var _await$platform$isEle;
2008 - if (options === void 0) options = {};
2009 - const { x, y, platform, rects, elements, strategy } = state;
2010 - const { boundary = "clippingAncestors", rootBoundary = "viewport", elementContext = "floating", altBoundary = false, padding = 0 } = evaluate(options, state);
2011 - const paddingObject = getPaddingObject(padding);
2012 - const element = elements[altBoundary ? elementContext === "floating" ? "reference" : "floating" : elementContext];
2013 - const clippingClientRect = rectToClientRect(await platform.getClippingRect({
2014 - element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating)),
2015 - boundary,
2016 - rootBoundary,
2017 - strategy
2018 - }));
2019 - const rect = elementContext === "floating" ? {
2020 - x,
2021 - y,
2022 - width: rects.floating.width,
2023 - height: rects.floating.height
2024 - } : rects.reference;
2025 - const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));
2026 - const offsetScale = await (platform.isElement == null ? void 0 : platform.isElement(offsetParent)) ? await (platform.getScale == null ? void 0 : platform.getScale(offsetParent)) || {
2027 - x: 1,
2028 - y: 1
2029 - } : {
2030 - x: 1,
2031 - y: 1
2032 - };
2033 - const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({
2034 - elements,
2035 - rect,
2036 - offsetParent,
2037 - strategy
2038 - }) : rect);
2039 - return {
2040 - top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
2041 - bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
2042 - left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
2043 - right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
2044 - };
2045 - }
2046 - var MAX_RESET_COUNT = 50;
2047 - /**
2048 - * Computes the `x` and `y` coordinates that will place the floating element
2049 - * next to a given reference element.
2050 - *
2051 - * This export does not have any `platform` interface logic. You will need to
2052 - * write one for the platform you are using Floating UI with.
2053 - */
2054 - var computePosition$1 = /* @__PURE__ */ __name(async (reference, floating, config) => {
2055 - const { placement = "bottom", strategy = "absolute", middleware = [], platform } = config;
2056 - const platformWithDetectOverflow = platform.detectOverflow ? platform : {
2057 - ...platform,
2058 - detectOverflow
2059 - };
2060 - const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));
2061 - let rects = await platform.getElementRects({
2062 - reference,
2063 - floating,
2064 - strategy
2065 - });
2066 - let { x, y } = computeCoordsFromPlacement(rects, placement, rtl);
2067 - let statefulPlacement = placement;
2068 - let resetCount = 0;
2069 - const middlewareData = {};
2070 - for (let i = 0; i < middleware.length; i++) {
2071 - const currentMiddleware = middleware[i];
2072 - if (!currentMiddleware) continue;
2073 - const { name, fn } = currentMiddleware;
2074 - const { x: nextX, y: nextY, data, reset } = await fn({
2075 - x,
2076 - y,
2077 - initialPlacement: placement,
2078 - placement: statefulPlacement,
2079 - strategy,
2080 - middlewareData,
2081 - rects,
2082 - platform: platformWithDetectOverflow,
2083 - elements: {
2084 - reference,
2085 - floating
2086 - }
2087 - });
2088 - x = nextX != null ? nextX : x;
2089 - y = nextY != null ? nextY : y;
2090 - middlewareData[name] = {
2091 - ...middlewareData[name],
2092 - ...data
2093 - };
2094 - if (reset && resetCount < MAX_RESET_COUNT) {
2095 - resetCount++;
2096 - if (typeof reset === "object") {
2097 - if (reset.placement) statefulPlacement = reset.placement;
2098 - if (reset.rects) rects = reset.rects === true ? await platform.getElementRects({
2099 - reference,
2100 - floating,
2101 - strategy
2102 - }) : reset.rects;
2103 - ({x, y} = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
2104 - }
2105 - i = -1;
2106 - }
2107 - }
2108 - return {
2109 - x,
2110 - y,
2111 - placement: statefulPlacement,
2112 - strategy,
2113 - middlewareData
2114 - };
2115 - }, "computePosition");
2116 - /**
2117 - * Optimizes the visibility of the floating element by flipping the `placement`
2118 - * in order to keep it in view when the preferred placement(s) will overflow the
2119 - * clipping boundary. Alternative to `autoPlacement`.
2120 - * @see https://floating-ui.com/docs/flip
2121 - */
2122 - var flip$2 = /* @__PURE__ */ __name(function(options) {
2123 - if (options === void 0) options = {};
2124 - return {
2125 - name: "flip",
2126 - options,
2127 - async fn(state) {
2128 - var _middlewareData$arrow;
2129 - var _middlewareData$flip;
2130 - const { placement, middlewareData, rects, initialPlacement, platform, elements } = state;
2131 - const { mainAxis: checkMainAxis = true, crossAxis: checkCrossAxis = true, fallbackPlacements: specifiedFallbackPlacements, fallbackStrategy = "bestFit", fallbackAxisSideDirection = "none", flipAlignment = true, ...detectOverflowOptions } = evaluate(options, state);
2132 - if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) return {};
2133 - const side = getSide(placement);
2134 - const initialSideAxis = getSideAxis(initialPlacement);
2135 - const isBasePlacement = getSide(initialPlacement) === initialPlacement;
2136 - const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
2137 - const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
2138 - const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none";
2139 - if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
2140 - const placements = [initialPlacement, ...fallbackPlacements];
2141 - const overflow = await platform.detectOverflow(state, detectOverflowOptions);
2142 - const overflows = [];
2143 - let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
2144 - if (checkMainAxis) overflows.push(overflow[side]);
2145 - if (checkCrossAxis) {
2146 - const sides = getAlignmentSides(placement, rects, rtl);
2147 - overflows.push(overflow[sides[0]], overflow[sides[1]]);
2148 - }
2149 - overflowsData = [...overflowsData, {
2150 - placement,
2151 - overflows
2152 - }];
2153 - if (!overflows.every((side) => side <= 0)) {
2154 - var _middlewareData$flip2;
2155 - var _overflowsData$filter;
2156 - const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
2157 - const nextPlacement = placements[nextIndex];
2158 - if (nextPlacement) {
2159 - if (!(checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false) || overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) return {
2160 - data: {
2161 - index: nextIndex,
2162 - overflows: overflowsData
2163 - },
2164 - reset: { placement: nextPlacement }
2165 - };
2166 - }
2167 - 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;
2168 - if (!resetPlacement) switch (fallbackStrategy) {
2169 - case "bestFit": {
2170 - var _overflowsData$filter2;
2171 - const placement = (_overflowsData$filter2 = overflowsData.filter((d) => {
2172 - if (hasFallbackAxisSideDirection) {
2173 - const currentSideAxis = getSideAxis(d.placement);
2174 - return currentSideAxis === initialSideAxis || currentSideAxis === "y";
2175 - }
2176 - return true;
2177 - }).map((d) => [d.placement, d.overflows.filter((overflow) => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];
2178 - if (placement) resetPlacement = placement;
2179 - break;
2180 - }
2181 - case "initialPlacement":
2182 - resetPlacement = initialPlacement;
2183 - break;
2184 - }
2185 - if (placement !== resetPlacement) return { reset: { placement: resetPlacement } };
2186 - }
2187 - return {};
2188 - }
2189 - };
2190 - }, "flip");
2191 - var originSides = /*#__PURE__*/ new Set(["left", "top"]);
2192 - async function convertValueToCoords(state, options) {
2193 - const { placement, platform, elements } = state;
2194 - const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));
2195 - const side = getSide(placement);
2196 - const alignment = getAlignment(placement);
2197 - const isVertical = getSideAxis(placement) === "y";
2198 - const mainAxisMulti = originSides.has(side) ? -1 : 1;
2199 - const crossAxisMulti = rtl && isVertical ? -1 : 1;
2200 - const rawValue = evaluate(options, state);
2201 - let { mainAxis, crossAxis, alignmentAxis } = typeof rawValue === "number" ? {
2202 - mainAxis: rawValue,
2203 - crossAxis: 0,
2204 - alignmentAxis: null
2205 - } : {
2206 - mainAxis: rawValue.mainAxis || 0,
2207 - crossAxis: rawValue.crossAxis || 0,
2208 - alignmentAxis: rawValue.alignmentAxis
2209 - };
2210 - if (alignment && typeof alignmentAxis === "number") crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis;
2211 - return isVertical ? {
2212 - x: crossAxis * crossAxisMulti,
2213 - y: mainAxis * mainAxisMulti
2214 - } : {
2215 - x: mainAxis * mainAxisMulti,
2216 - y: crossAxis * crossAxisMulti
2217 - };
2218 - }
2219 - /**
2220 - * Modifies the placement by translating the floating element along the
2221 - * specified axes.
2222 - * A number (shorthand for `mainAxis` or distance), or an axes configuration
2223 - * object may be passed.
2224 - * @see https://floating-ui.com/docs/offset
2225 - */
2226 - var offset$2 = /* @__PURE__ */ __name(function(options) {
2227 - if (options === void 0) options = 0;
2228 - return {
2229 - name: "offset",
2230 - options,
2231 - async fn(state) {
2232 - var _middlewareData$offse;
2233 - var _middlewareData$arrow;
2234 - const { x, y, placement, middlewareData } = state;
2235 - const diffCoords = await convertValueToCoords(state, options);
2236 - if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) return {};
2237 - return {
2238 - x: x + diffCoords.x,
2239 - y: y + diffCoords.y,
2240 - data: {
2241 - ...diffCoords,
2242 - placement
2243 - }
2244 - };
2245 - }
2246 - };
2247 - }, "offset");
2248 - /**
2249 - * Provides data that allows you to change the size of the floating element —
2250 - * for instance, prevent it from overflowing the clipping boundary or match the
2251 - * width of the reference element.
2252 - * @see https://floating-ui.com/docs/size
2253 - */
2254 - var size$2 = /* @__PURE__ */ __name(function(options) {
2255 - if (options === void 0) options = {};
2256 - return {
2257 - name: "size",
2258 - options,
2259 - async fn(state) {
2260 - var _state$middlewareData;
2261 - var _state$middlewareData2;
2262 - const { placement, rects, platform, elements } = state;
2263 - const { apply = () => {}, ...detectOverflowOptions } = evaluate(options, state);
2264 - const overflow = await platform.detectOverflow(state, detectOverflowOptions);
2265 - const side = getSide(placement);
2266 - const alignment = getAlignment(placement);
2267 - const isYAxis = getSideAxis(placement) === "y";
2268 - const { width, height } = rects.floating;
2269 - let heightSide;
2270 - let widthSide;
2271 - if (side === "top" || side === "bottom") {
2272 - heightSide = side;
2273 - widthSide = alignment === (await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right";
2274 - } else {
2275 - widthSide = side;
2276 - heightSide = alignment === "end" ? "top" : "bottom";
2277 - }
2278 - const maximumClippingHeight = height - overflow.top - overflow.bottom;
2279 - const maximumClippingWidth = width - overflow.left - overflow.right;
2280 - const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);
2281 - const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);
2282 - const noShift = !state.middlewareData.shift;
2283 - let availableHeight = overflowAvailableHeight;
2284 - let availableWidth = overflowAvailableWidth;
2285 - if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) availableWidth = maximumClippingWidth;
2286 - if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) availableHeight = maximumClippingHeight;
2287 - if (noShift && !alignment) {
2288 - const xMin = max(overflow.left, 0);
2289 - const xMax = max(overflow.right, 0);
2290 - const yMin = max(overflow.top, 0);
2291 - const yMax = max(overflow.bottom, 0);
2292 - if (isYAxis) availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));
2293 - else availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));
2294 - }
2295 - await apply({
2296 - ...state,
2297 - availableWidth,
2298 - availableHeight
2299 - });
2300 - const nextDimensions = await platform.getDimensions(elements.floating);
2301 - if (width !== nextDimensions.width || height !== nextDimensions.height) return { reset: { rects: true } };
2302 - return {};
2303 - }
2304 - };
2305 - }, "size");
2306 -
2307 -//#endregion
2308 -//#region node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
2309 - function getCssDimensions(element) {
2310 - const css = getComputedStyle$1(element);
2311 - let width = parseFloat(css.width) || 0;
2312 - let height = parseFloat(css.height) || 0;
2313 - const hasOffset = isHTMLElement(element);
2314 - const offsetWidth = hasOffset ? element.offsetWidth : width;
2315 - const offsetHeight = hasOffset ? element.offsetHeight : height;
2316 - const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
2317 - if (shouldFallback) {
2318 - width = offsetWidth;
2319 - height = offsetHeight;
2320 - }
2321 - return {
2322 - width,
2323 - height,
2324 - $: shouldFallback
2325 - };
2326 - }
2327 - function unwrapElement(element) {
2328 - return !isElement(element) ? element.contextElement : element;
2329 - }
2330 - function getScale(element) {
2331 - const domElement = unwrapElement(element);
2332 - if (!isHTMLElement(domElement)) return createCoords(1);
2333 - const rect = domElement.getBoundingClientRect();
2334 - const { width, height, $ } = getCssDimensions(domElement);
2335 - let x = ($ ? round(rect.width) : rect.width) / width;
2336 - let y = ($ ? round(rect.height) : rect.height) / height;
2337 - if (!x || !Number.isFinite(x)) x = 1;
2338 - if (!y || !Number.isFinite(y)) y = 1;
2339 - return {
2340 - x,
2341 - y
2342 - };
2343 - }
2344 - var noOffsets = /*#__PURE__*/ createCoords(0);
2345 - function getVisualOffsets(element) {
2346 - const win = getWindow(element);
2347 - if (!isWebKit() || !win.visualViewport) return noOffsets;
2348 - return {
2349 - x: win.visualViewport.offsetLeft,
2350 - y: win.visualViewport.offsetTop
2351 - };
2352 - }
2353 - function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
2354 - if (isFixed === void 0) isFixed = false;
2355 - if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) return false;
2356 - return isFixed;
2357 - }
2358 - function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
2359 - if (includeScale === void 0) includeScale = false;
2360 - if (isFixedStrategy === void 0) isFixedStrategy = false;
2361 - const clientRect = element.getBoundingClientRect();
2362 - const domElement = unwrapElement(element);
2363 - let scale = createCoords(1);
2364 - if (includeScale) if (offsetParent) {
2365 - if (isElement(offsetParent)) scale = getScale(offsetParent);
2366 - } else scale = getScale(element);
2367 - const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
2368 - let x = (clientRect.left + visualOffsets.x) / scale.x;
2369 - let y = (clientRect.top + visualOffsets.y) / scale.y;
2370 - let width = clientRect.width / scale.x;
2371 - let height = clientRect.height / scale.y;
2372 - if (domElement) {
2373 - const win = getWindow(domElement);
2374 - const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
2375 - let currentWin = win;
2376 - let currentIFrame = getFrameElement(currentWin);
2377 - while (currentIFrame && offsetParent && offsetWin !== currentWin) {
2378 - const iframeScale = getScale(currentIFrame);
2379 - const iframeRect = currentIFrame.getBoundingClientRect();
2380 - const css = getComputedStyle$1(currentIFrame);
2381 - const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
2382 - const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
2383 - x *= iframeScale.x;
2384 - y *= iframeScale.y;
2385 - width *= iframeScale.x;
2386 - height *= iframeScale.y;
2387 - x += left;
2388 - y += top;
2389 - currentWin = getWindow(currentIFrame);
2390 - currentIFrame = getFrameElement(currentWin);
2391 - }
2392 - }
2393 - return rectToClientRect({
2394 - width,
2395 - height,
2396 - x,
2397 - y
2398 - });
2399 - }
2400 - function getWindowScrollBarX(element, rect) {
2401 - const leftScroll = getNodeScroll(element).scrollLeft;
2402 - if (!rect) return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
2403 - return rect.left + leftScroll;
2404 - }
2405 - function getHTMLOffset(documentElement, scroll) {
2406 - const htmlRect = documentElement.getBoundingClientRect();
2407 - return {
2408 - x: htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect),
2409 - y: htmlRect.top + scroll.scrollTop
2410 - };
2411 - }
2412 - function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
2413 - let { elements, rect, offsetParent, strategy } = _ref;
2414 - const isFixed = strategy === "fixed";
2415 - const documentElement = getDocumentElement(offsetParent);
2416 - const topLayer = elements ? isTopLayer(elements.floating) : false;
2417 - if (offsetParent === documentElement || topLayer && isFixed) return rect;
2418 - let scroll = {
2419 - scrollLeft: 0,
2420 - scrollTop: 0
2421 - };
2422 - let scale = createCoords(1);
2423 - const offsets = createCoords(0);
2424 - const isOffsetParentAnElement = isHTMLElement(offsetParent);
2425 - if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
2426 - if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) scroll = getNodeScroll(offsetParent);
2427 - if (isOffsetParentAnElement) {
2428 - const offsetRect = getBoundingClientRect(offsetParent);
2429 - scale = getScale(offsetParent);
2430 - offsets.x = offsetRect.x + offsetParent.clientLeft;
2431 - offsets.y = offsetRect.y + offsetParent.clientTop;
2432 - }
2433 - }
2434 - const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
2435 - return {
2436 - width: rect.width * scale.x,
2437 - height: rect.height * scale.y,
2438 - x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
2439 - y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
2440 - };
2441 - }
2442 - function getClientRects(element) {
2443 - return Array.from(element.getClientRects());
2444 - }
2445 - function getDocumentRect(element) {
2446 - const html = getDocumentElement(element);
2447 - const scroll = getNodeScroll(element);
2448 - const body = element.ownerDocument.body;
2449 - const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
2450 - const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
2451 - let x = -scroll.scrollLeft + getWindowScrollBarX(element);
2452 - const y = -scroll.scrollTop;
2453 - if (getComputedStyle$1(body).direction === "rtl") x += max(html.clientWidth, body.clientWidth) - width;
2454 - return {
2455 - width,
2456 - height,
2457 - x,
2458 - y
2459 - };
2460 - }
2461 - var SCROLLBAR_MAX = 25;
2462 - function getViewportRect(element, strategy) {
2463 - const win = getWindow(element);
2464 - const html = getDocumentElement(element);
2465 - const visualViewport = win.visualViewport;
2466 - let width = html.clientWidth;
2467 - let height = html.clientHeight;
2468 - let x = 0;
2469 - let y = 0;
2470 - if (visualViewport) {
2471 - width = visualViewport.width;
2472 - height = visualViewport.height;
2473 - const visualViewportBased = isWebKit();
2474 - if (!visualViewportBased || visualViewportBased && strategy === "fixed") {
2475 - x = visualViewport.offsetLeft;
2476 - y = visualViewport.offsetTop;
2477 - }
2478 - }
2479 - const windowScrollbarX = getWindowScrollBarX(html);
2480 - if (windowScrollbarX <= 0) {
2481 - const doc = html.ownerDocument;
2482 - const body = doc.body;
2483 - const bodyStyles = getComputedStyle(body);
2484 - const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
2485 - const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
2486 - if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) width -= clippingStableScrollbarWidth;
2487 - } else if (windowScrollbarX <= SCROLLBAR_MAX) width += windowScrollbarX;
2488 - return {
2489 - width,
2490 - height,
2491 - x,
2492 - y
2493 - };
2494 - }
2495 - function getInnerBoundingClientRect(element, strategy) {
2496 - const clientRect = getBoundingClientRect(element, true, strategy === "fixed");
2497 - const top = clientRect.top + element.clientTop;
2498 - const left = clientRect.left + element.clientLeft;
2499 - const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);
2500 - return {
2501 - width: element.clientWidth * scale.x,
2502 - height: element.clientHeight * scale.y,
2503 - x: left * scale.x,
2504 - y: top * scale.y
2505 - };
2506 - }
2507 - function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
2508 - let rect;
2509 - if (clippingAncestor === "viewport") rect = getViewportRect(element, strategy);
2510 - else if (clippingAncestor === "document") rect = getDocumentRect(getDocumentElement(element));
2511 - else if (isElement(clippingAncestor)) rect = getInnerBoundingClientRect(clippingAncestor, strategy);
2512 - else {
2513 - const visualOffsets = getVisualOffsets(element);
2514 - rect = {
2515 - x: clippingAncestor.x - visualOffsets.x,
2516 - y: clippingAncestor.y - visualOffsets.y,
2517 - width: clippingAncestor.width,
2518 - height: clippingAncestor.height
2519 - };
2520 - }
2521 - return rectToClientRect(rect);
2522 - }
2523 - function hasFixedPositionAncestor(element, stopNode) {
2524 - const parentNode = getParentNode(element);
2525 - if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) return false;
2526 - return getComputedStyle$1(parentNode).position === "fixed" || hasFixedPositionAncestor(parentNode, stopNode);
2527 - }
2528 - function getClippingElementAncestors(element, cache) {
2529 - const cachedResult = cache.get(element);
2530 - if (cachedResult) return cachedResult;
2531 - let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body");
2532 - let currentContainingBlockComputedStyle = null;
2533 - const elementIsFixed = getComputedStyle$1(element).position === "fixed";
2534 - let currentNode = elementIsFixed ? getParentNode(element) : element;
2535 - while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
2536 - const computedStyle = getComputedStyle$1(currentNode);
2537 - const currentNodeIsContaining = isContainingBlock(currentNode);
2538 - if (!currentNodeIsContaining && computedStyle.position === "fixed") currentContainingBlockComputedStyle = null;
2539 - if (elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === "absolute" || currentContainingBlockComputedStyle.position === "fixed") || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode)) result = result.filter((ancestor) => ancestor !== currentNode);
2540 - else currentContainingBlockComputedStyle = computedStyle;
2541 - currentNode = getParentNode(currentNode);
2542 - }
2543 - cache.set(element, result);
2544 - return result;
2545 - }
2546 - function getClippingRect(_ref) {
2547 - let { element, boundary, rootBoundary, strategy } = _ref;
2548 - const clippingAncestors = [...boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary), rootBoundary];
2549 - const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);
2550 - let top = firstRect.top;
2551 - let right = firstRect.right;
2552 - let bottom = firstRect.bottom;
2553 - let left = firstRect.left;
2554 - for (let i = 1; i < clippingAncestors.length; i++) {
2555 - const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);
2556 - top = max(rect.top, top);
2557 - right = min(rect.right, right);
2558 - bottom = min(rect.bottom, bottom);
2559 - left = max(rect.left, left);
2560 - }
2561 - return {
2562 - width: right - left,
2563 - height: bottom - top,
2564 - x: left,
2565 - y: top
2566 - };
2567 - }
2568 - function getDimensions(element) {
2569 - const { width, height } = getCssDimensions(element);
2570 - return {
2571 - width,
2572 - height
2573 - };
2574 - }
2575 - function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
2576 - const isOffsetParentAnElement = isHTMLElement(offsetParent);
2577 - const documentElement = getDocumentElement(offsetParent);
2578 - const isFixed = strategy === "fixed";
2579 - const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
2580 - let scroll = {
2581 - scrollLeft: 0,
2582 - scrollTop: 0
2583 - };
2584 - const offsets = createCoords(0);
2585 - function setLeftRTLScrollbarOffset() {
2586 - offsets.x = getWindowScrollBarX(documentElement);
2587 - }
2588 - if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
2589 - if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) scroll = getNodeScroll(offsetParent);
2590 - if (isOffsetParentAnElement) {
2591 - const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
2592 - offsets.x = offsetRect.x + offsetParent.clientLeft;
2593 - offsets.y = offsetRect.y + offsetParent.clientTop;
2594 - } else if (documentElement) setLeftRTLScrollbarOffset();
2595 - }
2596 - if (isFixed && !isOffsetParentAnElement && documentElement) setLeftRTLScrollbarOffset();
2597 - const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
2598 - return {
2599 - x: rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x,
2600 - y: rect.top + scroll.scrollTop - offsets.y - htmlOffset.y,
2601 - width: rect.width,
2602 - height: rect.height
2603 - };
2604 - }
2605 - function isStaticPositioned(element) {
2606 - return getComputedStyle$1(element).position === "static";
2607 - }
2608 - function getTrueOffsetParent(element, polyfill) {
2609 - if (!isHTMLElement(element) || getComputedStyle$1(element).position === "fixed") return null;
2610 - if (polyfill) return polyfill(element);
2611 - let rawOffsetParent = element.offsetParent;
2612 - if (getDocumentElement(element) === rawOffsetParent) rawOffsetParent = rawOffsetParent.ownerDocument.body;
2613 - return rawOffsetParent;
2614 - }
2615 - function getOffsetParent(element, polyfill) {
2616 - const win = getWindow(element);
2617 - if (isTopLayer(element)) return win;
2618 - if (!isHTMLElement(element)) {
2619 - let svgOffsetParent = getParentNode(element);
2620 - while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
2621 - if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) return svgOffsetParent;
2622 - svgOffsetParent = getParentNode(svgOffsetParent);
2623 - }
2624 - return win;
2625 - }
2626 - let offsetParent = getTrueOffsetParent(element, polyfill);
2627 - while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) offsetParent = getTrueOffsetParent(offsetParent, polyfill);
2628 - if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) return win;
2629 - return offsetParent || getContainingBlock(element) || win;
2630 - }
2631 - var getElementRects = async function(data) {
2632 - const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
2633 - const getDimensionsFn = this.getDimensions;
2634 - const floatingDimensions = await getDimensionsFn(data.floating);
2635 - return {
2636 - reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
2637 - floating: {
2638 - x: 0,
2639 - y: 0,
2640 - width: floatingDimensions.width,
2641 - height: floatingDimensions.height
2642 - }
2643 - };
2644 - };
2645 - function isRTL(element) {
2646 - return getComputedStyle$1(element).direction === "rtl";
2647 - }
2648 - var platform = {
2649 - convertOffsetParentRelativeRectToViewportRelativeRect,
2650 - getDocumentElement,
2651 - getClippingRect,
2652 - getOffsetParent,
2653 - getElementRects,
2654 - getClientRects,
2655 - getDimensions,
2656 - getScale,
2657 - isElement,
2658 - isRTL
2659 - };
2660 - function rectsAreEqual(a, b) {
2661 - return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
2662 - }
2663 - function observeMove(element, onMove) {
2664 - let io = null;
2665 - let timeoutId;
2666 - const root = getDocumentElement(element);
2667 - function cleanup() {
2668 - var _io;
2669 - clearTimeout(timeoutId);
2670 - (_io = io) == null || _io.disconnect();
2671 - io = null;
2672 - }
2673 - function refresh(skip, threshold) {
2674 - if (skip === void 0) skip = false;
2675 - if (threshold === void 0) threshold = 1;
2676 - cleanup();
2677 - const elementRectForRootMargin = element.getBoundingClientRect();
2678 - const { left, top, width, height } = elementRectForRootMargin;
2679 - if (!skip) onMove();
2680 - if (!width || !height) return;
2681 - const insetTop = floor(top);
2682 - const insetRight = floor(root.clientWidth - (left + width));
2683 - const insetBottom = floor(root.clientHeight - (top + height));
2684 - const insetLeft = floor(left);
2685 - const options = {
2686 - rootMargin: -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px",
2687 - threshold: max(0, min(1, threshold)) || 1
2688 - };
2689 - let isFirstUpdate = true;
2690 - function handleObserve(entries) {
2691 - const ratio = entries[0].intersectionRatio;
2692 - if (ratio !== threshold) {
2693 - if (!isFirstUpdate) return refresh();
2694 - if (!ratio) timeoutId = setTimeout(() => {
2695 - refresh(false, 1e-7);
2696 - }, 1e3);
2697 - else refresh(false, ratio);
2698 - }
2699 - if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) refresh();
2700 - isFirstUpdate = false;
2701 - }
2702 - try {
2703 - io = new IntersectionObserver(handleObserve, {
2704 - ...options,
2705 - root: root.ownerDocument
2706 - });
2707 - } catch (_e) {
2708 - io = new IntersectionObserver(handleObserve, options);
2709 - }
2710 - io.observe(element);
2711 - }
2712 - refresh(true);
2713 - return cleanup;
2714 - }
2715 - /**
2716 - * Automatically updates the position of the floating element when necessary.
2717 - * Should only be called when the floating element is mounted on the DOM or
2718 - * visible on the screen.
2719 - * @returns cleanup function that should be invoked when the floating element is
2720 - * removed from the DOM or hidden from the screen.
2721 - * @see https://floating-ui.com/docs/autoUpdate
2722 - */
2723 - function autoUpdate(reference, floating, update, options) {
2724 - if (options === void 0) options = {};
2725 - const { ancestorScroll = true, ancestorResize = true, elementResize = typeof ResizeObserver === "function", layoutShift = typeof IntersectionObserver === "function", animationFrame = false } = options;
2726 - const referenceEl = unwrapElement(reference);
2727 - const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : [];
2728 - ancestors.forEach((ancestor) => {
2729 - ancestorScroll && ancestor.addEventListener("scroll", update, { passive: true });
2730 - ancestorResize && ancestor.addEventListener("resize", update);
2731 - });
2732 - const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;
2733 - let reobserveFrame = -1;
2734 - let resizeObserver = null;
2735 - if (elementResize) {
2736 - resizeObserver = new ResizeObserver((_ref) => {
2737 - let [firstEntry] = _ref;
2738 - if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {
2739 - resizeObserver.unobserve(floating);
2740 - cancelAnimationFrame(reobserveFrame);
2741 - reobserveFrame = requestAnimationFrame(() => {
2742 - var _resizeObserver;
2743 - (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
2744 - });
2745 - }
2746 - update();
2747 - });
2748 - if (referenceEl && !animationFrame) resizeObserver.observe(referenceEl);
2749 - if (floating) resizeObserver.observe(floating);
2750 - }
2751 - let frameId;
2752 - let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
2753 - if (animationFrame) frameLoop();
2754 - function frameLoop() {
2755 - const nextRefRect = getBoundingClientRect(reference);
2756 - if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) update();
2757 - prevRefRect = nextRefRect;
2758 - frameId = requestAnimationFrame(frameLoop);
2759 - }
2760 - update();
2761 - return () => {
2762 - var _resizeObserver2;
2763 - ancestors.forEach((ancestor) => {
2764 - ancestorScroll && ancestor.removeEventListener("scroll", update);
2765 - ancestorResize && ancestor.removeEventListener("resize", update);
2766 - });
2767 - cleanupIo?.();
2768 - (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
2769 - resizeObserver = null;
2770 - if (animationFrame) cancelAnimationFrame(frameId);
2771 - };
2772 - }
2773 - /**
2774 - * Modifies the placement by translating the floating element along the
2775 - * specified axes.
2776 - * A number (shorthand for `mainAxis` or distance), or an axes configuration
2777 - * object may be passed.
2778 - * @see https://floating-ui.com/docs/offset
2779 - */
2780 - var offset$1 = offset$2;
2781 - /**
2782 - * Optimizes the visibility of the floating element by flipping the `placement`
2783 - * in order to keep it in view when the preferred placement(s) will overflow the
2784 - * clipping boundary. Alternative to `autoPlacement`.
2785 - * @see https://floating-ui.com/docs/flip
2786 - */
2787 - var flip$1 = flip$2;
2788 - /**
2789 - * Provides data that allows you to change the size of the floating element —
2790 - * for instance, prevent it from overflowing the clipping boundary or match the
2791 - * width of the reference element.
2792 - * @see https://floating-ui.com/docs/size
2793 - */
2794 - var size$1 = size$2;
2795 - /**
2796 - * Computes the `x` and `y` coordinates that will place the floating element
2797 - * next to a given reference element.
2798 - */
2799 - var computePosition = (reference, floating, options) => {
2800 - const cache = /* @__PURE__ */ new Map();
2801 - const mergedOptions = {
2802 - platform,
2803 - ...options
2804 - };
2805 - const platformWithCache = {
2806 - ...mergedOptions.platform,
2807 - _c: cache
2808 - };
2809 - return computePosition$1(reference, floating, {
2810 - ...mergedOptions,
2811 - platform: platformWithCache
2812 - });
2813 - };
2814 -
2815 -//#endregion
2816 -//#region node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs
2817 - var index = typeof document !== "undefined" ? react$1.useLayoutEffect : function noop() {};
2818 - function deepEqual(a, b) {
2819 - if (a === b) return true;
2820 - if (typeof a !== typeof b) return false;
2821 - if (typeof a === "function" && a.toString() === b.toString()) return true;
2822 - let length;
2823 - let i;
2824 - let keys;
2825 - if (a && b && typeof a === "object") {
2826 - if (Array.isArray(a)) {
2827 - length = a.length;
2828 - if (length !== b.length) return false;
2829 - for (i = length; i-- !== 0;) if (!deepEqual(a[i], b[i])) return false;
2830 - return true;
2831 - }
2832 - keys = Object.keys(a);
2833 - length = keys.length;
2834 - if (length !== Object.keys(b).length) return false;
2835 - for (i = length; i-- !== 0;) if (!{}.hasOwnProperty.call(b, keys[i])) return false;
2836 - for (i = length; i-- !== 0;) {
2837 - const key = keys[i];
2838 - if (key === "_owner" && a.$$typeof) continue;
2839 - if (!deepEqual(a[key], b[key])) return false;
2840 - }
2841 - return true;
2842 - }
2843 - return a !== a && b !== b;
2844 - }
2845 - function getDPR(element) {
2846 - if (typeof window === "undefined") return 1;
2847 - return (element.ownerDocument.defaultView || window).devicePixelRatio || 1;
2848 - }
2849 - function roundByDPR(element, value) {
2850 - const dpr = getDPR(element);
2851 - return Math.round(value * dpr) / dpr;
2852 - }
2853 - function useLatestRef(value) {
2854 - const ref = react$1.useRef(value);
2855 - index(() => {
2856 - ref.current = value;
2857 - });
2858 - return ref;
2859 - }
2860 - /**
2861 - * Provides data to position a floating element.
2862 - * @see https://floating-ui.com/docs/useFloating
2863 - */
2864 - function useFloating$1(options) {
2865 - if (options === void 0) options = {};
2866 - const { placement = "bottom", strategy = "absolute", middleware = [], platform, elements: { reference: externalReference, floating: externalFloating } = {}, transform = true, whileElementsMounted, open } = options;
2867 - const [data, setData] = react$1.useState({
2868 - x: 0,
2869 - y: 0,
2870 - strategy,
2871 - placement,
2872 - middlewareData: {},
2873 - isPositioned: false
2874 - });
2875 - const [latestMiddleware, setLatestMiddleware] = react$1.useState(middleware);
2876 - if (!deepEqual(latestMiddleware, middleware)) setLatestMiddleware(middleware);
2877 - const [_reference, _setReference] = react$1.useState(null);
2878 - const [_floating, _setFloating] = react$1.useState(null);
2879 - const setReference = react$1.useCallback((node) => {
2880 - if (node !== referenceRef.current) {
2881 - referenceRef.current = node;
2882 - _setReference(node);
2883 - }
2884 - }, []);
2885 - const setFloating = react$1.useCallback((node) => {
2886 - if (node !== floatingRef.current) {
2887 - floatingRef.current = node;
2888 - _setFloating(node);
2889 - }
2890 - }, []);
2891 - const referenceEl = externalReference || _reference;
2892 - const floatingEl = externalFloating || _floating;
2893 - const referenceRef = react$1.useRef(null);
2894 - const floatingRef = react$1.useRef(null);
2895 - const dataRef = react$1.useRef(data);
2896 - const hasWhileElementsMounted = whileElementsMounted != null;
2897 - const whileElementsMountedRef = useLatestRef(whileElementsMounted);
2898 - const platformRef = useLatestRef(platform);
2899 - const openRef = useLatestRef(open);
2900 - const update = react$1.useCallback(() => {
2901 - if (!referenceRef.current || !floatingRef.current) return;
2902 - const config = {
2903 - placement,
2904 - strategy,
2905 - middleware: latestMiddleware
2906 - };
2907 - if (platformRef.current) config.platform = platformRef.current;
2908 - computePosition(referenceRef.current, floatingRef.current, config).then((data) => {
2909 - const fullData = {
2910 - ...data,
2911 - isPositioned: openRef.current !== false
2912 - };
2913 - if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {
2914 - dataRef.current = fullData;
2915 - react_dom.flushSync(() => {
2916 - setData(fullData);
2917 - });
2918 - }
2919 - });
2920 - }, [
2921 - latestMiddleware,
2922 - placement,
2923 - strategy,
2924 - platformRef,
2925 - openRef
2926 - ]);
2927 - index(() => {
2928 - if (open === false && dataRef.current.isPositioned) {
2929 - dataRef.current.isPositioned = false;
2930 - setData((data) => ({
2931 - ...data,
2932 - isPositioned: false
2933 - }));
2934 - }
2935 - }, [open]);
2936 - const isMountedRef = react$1.useRef(false);
2937 - index(() => {
2938 - isMountedRef.current = true;
2939 - return () => {
2940 - isMountedRef.current = false;
2941 - };
2942 - }, []);
2943 - index(() => {
2944 - if (referenceEl) referenceRef.current = referenceEl;
2945 - if (floatingEl) floatingRef.current = floatingEl;
2946 - if (referenceEl && floatingEl) {
2947 - if (whileElementsMountedRef.current) return whileElementsMountedRef.current(referenceEl, floatingEl, update);
2948 - update();
2949 - }
2950 - }, [
2951 - referenceEl,
2952 - floatingEl,
2953 - update,
2954 - whileElementsMountedRef,
2955 - hasWhileElementsMounted
2956 - ]);
2957 - const refs = react$1.useMemo(() => ({
2958 - reference: referenceRef,
2959 - floating: floatingRef,
2960 - setReference,
2961 - setFloating
2962 - }), [setReference, setFloating]);
2963 - const elements = react$1.useMemo(() => ({
2964 - reference: referenceEl,
2965 - floating: floatingEl
2966 - }), [referenceEl, floatingEl]);
2967 - const floatingStyles = react$1.useMemo(() => {
2968 - const initialStyles = {
2969 - position: strategy,
2970 - left: 0,
2971 - top: 0
2972 - };
2973 - if (!elements.floating) return initialStyles;
2974 - const x = roundByDPR(elements.floating, data.x);
2975 - const y = roundByDPR(elements.floating, data.y);
2976 - if (transform) return {
2977 - ...initialStyles,
2978 - transform: "translate(" + x + "px, " + y + "px)",
2979 - ...getDPR(elements.floating) >= 1.5 && { willChange: "transform" }
2980 - };
2981 - return {
2982 - position: strategy,
2983 - left: x,
2984 - top: y
2985 - };
2986 - }, [
2987 - strategy,
2988 - transform,
2989 - elements.floating,
2990 - data.x,
2991 - data.y
2992 - ]);
2993 - return react$1.useMemo(() => ({
2994 - ...data,
2995 - update,
2996 - refs,
2997 - elements,
2998 - floatingStyles
2999 - }), [
3000 - data,
3001 - update,
3002 - refs,
3003 - elements,
3004 - floatingStyles
3005 - ]);
3006 - }
3007 - __name(useFloating$1, "useFloating");
3008 - /**
3009 - * Modifies the placement by translating the floating element along the
3010 - * specified axes.
3011 - * A number (shorthand for `mainAxis` or distance), or an axes configuration
3012 - * object may be passed.
3013 - * @see https://floating-ui.com/docs/offset
3014 - */
3015 - var offset = (options, deps) => {
3016 - const result = offset$1(options);
3017 - return {
3018 - name: result.name,
3019 - fn: result.fn,
3020 - options: [options, deps]
3021 - };
3022 - };
3023 - /**
3024 - * Optimizes the visibility of the floating element by flipping the `placement`
3025 - * in order to keep it in view when the preferred placement(s) will overflow the
3026 - * clipping boundary. Alternative to `autoPlacement`.
3027 - * @see https://floating-ui.com/docs/flip
3028 - */
3029 - var flip = (options, deps) => {
3030 - const result = flip$1(options);
3031 - return {
3032 - name: result.name,
3033 - fn: result.fn,
3034 - options: [options, deps]
3035 - };
3036 - };
3037 - /**
3038 - * Provides data that allows you to change the size of the floating element —
3039 - * for instance, prevent it from overflowing the clipping boundary or match the
3040 - * width of the reference element.
3041 - * @see https://floating-ui.com/docs/size
3042 - */
3043 - var size = (options, deps) => {
3044 - const result = size$1(options);
3045 - return {
3046 - name: result.name,
3047 - fn: result.fn,
3048 - options: [options, deps]
3049 - };
3050 - };
3051 -
3052 -//#endregion
3053 -//#region node_modules/@floating-ui/react/dist/floating-ui.react.mjs
3054 - var FOCUSABLE_ATTRIBUTE = "data-floating-ui-focusable";
3055 - var ACTIVE_KEY = "active";
3056 - var SELECTED_KEY = "selected";
3057 - var ARROW_LEFT = "ArrowLeft";
3058 - var ARROW_RIGHT = "ArrowRight";
3059 - var ARROW_UP = "ArrowUp";
3060 - var ARROW_DOWN = "ArrowDown";
3061 - var horizontalKeys = [ARROW_LEFT, ARROW_RIGHT];
3062 - var verticalKeys = [ARROW_UP, ARROW_DOWN];
3063 - var allKeys = [...horizontalKeys, ...verticalKeys];
3064 - var SafeReact = { ...react$1 };
3065 - var serverHandoffComplete = false;
3066 - var count = 0;
3067 - var genId = () => "floating-ui-" + Math.random().toString(36).slice(2, 6) + count++;
3068 - function useFloatingId() {
3069 - const [id, setId] = react$1.useState(() => serverHandoffComplete ? genId() : void 0);
3070 - index$1(() => {
3071 - if (id == null) setId(genId());
3072 - }, []);
3073 - react$1.useEffect(() => {
3074 - serverHandoffComplete = true;
3075 - }, []);
3076 - return id;
3077 - }
3078 - /**
3079 - * Uses React 18's built-in `useId()` when available, or falls back to a
3080 - * slightly less performant (requiring a double render) implementation for
3081 - * earlier React versions.
3082 - * @see https://floating-ui.com/docs/react-utils#useid
3083 - */
3084 - var useId = SafeReact.useId || useFloatingId;
3085 - var devMessageSet;
3086 - devMessageSet = /*#__PURE__*/ new Set();
3087 - function error() {
3088 - var _devMessageSet3;
3089 - for (var _len2 = arguments.length, messages = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) messages[_key2] = arguments[_key2];
3090 - const message = "Floating UI: " + messages.join(" ");
3091 - if (!((_devMessageSet3 = devMessageSet) != null && _devMessageSet3.has(message))) {
3092 - var _devMessageSet4;
3093 - (_devMessageSet4 = devMessageSet) == null || _devMessageSet4.add(message);
3094 - console.error(message);
3095 - }
3096 - }
3097 - function createEventEmitter() {
3098 - const map = /* @__PURE__ */ new Map();
3099 - return {
3100 - emit(event, data) {
3101 - var _map$get;
3102 - (_map$get = map.get(event)) == null || _map$get.forEach((listener) => listener(data));
3103 - },
3104 - on(event, listener) {
3105 - if (!map.has(event)) map.set(event, /* @__PURE__ */ new Set());
3106 - map.get(event).add(listener);
3107 - },
3108 - off(event, listener) {
3109 - var _map$get2;
3110 - (_map$get2 = map.get(event)) == null || _map$get2.delete(listener);
3111 - }
3112 - };
3113 - }
3114 - var FloatingNodeContext = /*#__PURE__*/ react$1.createContext(null);
3115 - var FloatingTreeContext = /*#__PURE__*/ react$1.createContext(null);
3116 - /**
3117 - * Returns the parent node id for nested floating elements, if available.
3118 - * Returns `null` for top-level floating elements.
3119 - */
3120 - var useFloatingParentNodeId = () => {
3121 - var _React$useContext;
3122 - return ((_React$useContext = react$1.useContext(FloatingNodeContext)) == null ? void 0 : _React$useContext.id) || null;
3123 - };
3124 - /**
3125 - * Returns the nearest floating tree context, if available.
3126 - */
3127 - var useFloatingTree = () => react$1.useContext(FloatingTreeContext);
3128 - function createAttribute(name) {
3129 - return "data-floating-ui-" + name;
3130 - }
3131 - function clearTimeoutIfSet(timeoutRef) {
3132 - if (timeoutRef.current !== -1) {
3133 - clearTimeout(timeoutRef.current);
3134 - timeoutRef.current = -1;
3135 - }
3136 - }
3137 - var safePolygonIdentifier = /*#__PURE__*/ createAttribute("safe-polygon");
3138 - function getDelay(value, prop, pointerType) {
3139 - if (pointerType && !isMouseLikePointerType(pointerType)) return 0;
3140 - if (typeof value === "number") return value;
3141 - if (typeof value === "function") {
3142 - const result = value();
3143 - if (typeof result === "number") return result;
3144 - return result == null ? void 0 : result[prop];
3145 - }
3146 - return value == null ? void 0 : value[prop];
3147 - }
3148 - function getRestMs(value) {
3149 - if (typeof value === "function") return value();
3150 - return value;
3151 - }
3152 - /**
3153 - * Opens the floating element while hovering over the reference element, like
3154 - * CSS `:hover`.
3155 - * @see https://floating-ui.com/docs/useHover
3156 - */
3157 - function useHover(context, props) {
3158 - if (props === void 0) props = {};
3159 - const { open, onOpenChange, dataRef, events, elements } = context;
3160 - const { enabled = true, delay = 0, handleClose = null, mouseOnly = false, restMs = 0, move = true } = props;
3161 - const tree = useFloatingTree();
3162 - const parentId = useFloatingParentNodeId();
3163 - const handleCloseRef = useLatestRef$1(handleClose);
3164 - const delayRef = useLatestRef$1(delay);
3165 - const openRef = useLatestRef$1(open);
3166 - const restMsRef = useLatestRef$1(restMs);
3167 - const pointerTypeRef = react$1.useRef();
3168 - const timeoutRef = react$1.useRef(-1);
3169 - const handlerRef = react$1.useRef();
3170 - const restTimeoutRef = react$1.useRef(-1);
3171 - const blockMouseMoveRef = react$1.useRef(true);
3172 - const performedPointerEventsMutationRef = react$1.useRef(false);
3173 - const unbindMouseMoveRef = react$1.useRef(() => {});
3174 - const restTimeoutPendingRef = react$1.useRef(false);
3175 - const isHoverOpen = useEffectEvent(() => {
3176 - var _dataRef$current$open;
3177 - const type = (_dataRef$current$open = dataRef.current.openEvent) == null ? void 0 : _dataRef$current$open.type;
3178 - return (type == null ? void 0 : type.includes("mouse")) && type !== "mousedown";
3179 - });
3180 - react$1.useEffect(() => {
3181 - if (!enabled) return;
3182 - function onOpenChange(_ref) {
3183 - let { open } = _ref;
3184 - if (!open) {
3185 - clearTimeoutIfSet(timeoutRef);
3186 - clearTimeoutIfSet(restTimeoutRef);
3187 - blockMouseMoveRef.current = true;
3188 - restTimeoutPendingRef.current = false;
3189 - }
3190 - }
3191 - events.on("openchange", onOpenChange);
3192 - return () => {
3193 - events.off("openchange", onOpenChange);
3194 - };
3195 - }, [enabled, events]);
3196 - react$1.useEffect(() => {
3197 - if (!enabled) return;
3198 - if (!handleCloseRef.current) return;
3199 - if (!open) return;
3200 - function onLeave(event) {
3201 - if (isHoverOpen()) onOpenChange(false, event, "hover");
3202 - }
3203 - const html = getDocument(elements.floating).documentElement;
3204 - html.addEventListener("mouseleave", onLeave);
3205 - return () => {
3206 - html.removeEventListener("mouseleave", onLeave);
3207 - };
3208 - }, [
3209 - elements.floating,
3210 - open,
3211 - onOpenChange,
3212 - enabled,
3213 - handleCloseRef,
3214 - isHoverOpen
3215 - ]);
3216 - const closeWithDelay = react$1.useCallback(function(event, runElseBranch, reason) {
3217 - if (runElseBranch === void 0) runElseBranch = true;
3218 - if (reason === void 0) reason = "hover";
3219 - const closeDelay = getDelay(delayRef.current, "close", pointerTypeRef.current);
3220 - if (closeDelay && !handlerRef.current) {
3221 - clearTimeoutIfSet(timeoutRef);
3222 - timeoutRef.current = window.setTimeout(() => onOpenChange(false, event, reason), closeDelay);
3223 - } else if (runElseBranch) {
3224 - clearTimeoutIfSet(timeoutRef);
3225 - onOpenChange(false, event, reason);
3226 - }
3227 - }, [delayRef, onOpenChange]);
3228 - const cleanupMouseMoveHandler = useEffectEvent(() => {
3229 - unbindMouseMoveRef.current();
3230 - handlerRef.current = void 0;
3231 - });
3232 - const clearPointerEvents = useEffectEvent(() => {
3233 - if (performedPointerEventsMutationRef.current) {
3234 - const body = getDocument(elements.floating).body;
3235 - body.style.pointerEvents = "";
3236 - body.removeAttribute(safePolygonIdentifier);
3237 - performedPointerEventsMutationRef.current = false;
3238 - }
3239 - });
3240 - const isClickLikeOpenEvent = useEffectEvent(() => {
3241 - return dataRef.current.openEvent ? ["click", "mousedown"].includes(dataRef.current.openEvent.type) : false;
3242 - });
3243 - react$1.useEffect(() => {
3244 - if (!enabled) return;
3245 - function onReferenceMouseEnter(event) {
3246 - clearTimeoutIfSet(timeoutRef);
3247 - blockMouseMoveRef.current = false;
3248 - if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current) || getRestMs(restMsRef.current) > 0 && !getDelay(delayRef.current, "open")) return;
3249 - const openDelay = getDelay(delayRef.current, "open", pointerTypeRef.current);
3250 - if (openDelay) timeoutRef.current = window.setTimeout(() => {
3251 - if (!openRef.current) onOpenChange(true, event, "hover");
3252 - }, openDelay);
3253 - else if (!open) onOpenChange(true, event, "hover");
3254 - }
3255 - function onReferenceMouseLeave(event) {
3256 - if (isClickLikeOpenEvent()) {
3257 - clearPointerEvents();
3258 - return;
3259 - }
3260 - unbindMouseMoveRef.current();
3261 - const doc = getDocument(elements.floating);
3262 - clearTimeoutIfSet(restTimeoutRef);
3263 - restTimeoutPendingRef.current = false;
3264 - if (handleCloseRef.current && dataRef.current.floatingContext) {
3265 - if (!open) clearTimeoutIfSet(timeoutRef);
3266 - handlerRef.current = handleCloseRef.current({
3267 - ...dataRef.current.floatingContext,
3268 - tree,
3269 - x: event.clientX,
3270 - y: event.clientY,
3271 - onClose() {
3272 - clearPointerEvents();
3273 - cleanupMouseMoveHandler();
3274 - if (!isClickLikeOpenEvent()) closeWithDelay(event, true, "safe-polygon");
3275 - }
3276 - });
3277 - const handler = handlerRef.current;
3278 - doc.addEventListener("mousemove", handler);
3279 - unbindMouseMoveRef.current = () => {
3280 - doc.removeEventListener("mousemove", handler);
3281 - };
3282 - return;
3283 - }
3284 - if (pointerTypeRef.current === "touch" ? !contains(elements.floating, event.relatedTarget) : true) closeWithDelay(event);
3285 - }
3286 - function onScrollMouseLeave(event) {
3287 - if (isClickLikeOpenEvent()) return;
3288 - if (!dataRef.current.floatingContext) return;
3289 - handleCloseRef.current == null || handleCloseRef.current({
3290 - ...dataRef.current.floatingContext,
3291 - tree,
3292 - x: event.clientX,
3293 - y: event.clientY,
3294 - onClose() {
3295 - clearPointerEvents();
3296 - cleanupMouseMoveHandler();
3297 - if (!isClickLikeOpenEvent()) closeWithDelay(event);
3298 - }
3299 - })(event);
3300 - }
3301 - function onFloatingMouseEnter() {
3302 - clearTimeoutIfSet(timeoutRef);
3303 - }
3304 - function onFloatingMouseLeave(event) {
3305 - if (!isClickLikeOpenEvent()) closeWithDelay(event, false);
3306 - }
3307 - if (isElement(elements.domReference)) {
3308 - const reference = elements.domReference;
3309 - const floating = elements.floating;
3310 - if (open) reference.addEventListener("mouseleave", onScrollMouseLeave);
3311 - if (move) reference.addEventListener("mousemove", onReferenceMouseEnter, { once: true });
3312 - reference.addEventListener("mouseenter", onReferenceMouseEnter);
3313 - reference.addEventListener("mouseleave", onReferenceMouseLeave);
3314 - if (floating) {
3315 - floating.addEventListener("mouseleave", onScrollMouseLeave);
3316 - floating.addEventListener("mouseenter", onFloatingMouseEnter);
3317 - floating.addEventListener("mouseleave", onFloatingMouseLeave);
3318 - }
3319 - return () => {
3320 - if (open) reference.removeEventListener("mouseleave", onScrollMouseLeave);
3321 - if (move) reference.removeEventListener("mousemove", onReferenceMouseEnter);
3322 - reference.removeEventListener("mouseenter", onReferenceMouseEnter);
3323 - reference.removeEventListener("mouseleave", onReferenceMouseLeave);
3324 - if (floating) {
3325 - floating.removeEventListener("mouseleave", onScrollMouseLeave);
3326 - floating.removeEventListener("mouseenter", onFloatingMouseEnter);
3327 - floating.removeEventListener("mouseleave", onFloatingMouseLeave);
3328 - }
3329 - };
3330 - }
3331 - }, [
3332 - elements,
3333 - enabled,
3334 - context,
3335 - mouseOnly,
3336 - move,
3337 - closeWithDelay,
3338 - cleanupMouseMoveHandler,
3339 - clearPointerEvents,
3340 - onOpenChange,
3341 - open,
3342 - openRef,
3343 - tree,
3344 - delayRef,
3345 - handleCloseRef,
3346 - dataRef,
3347 - isClickLikeOpenEvent,
3348 - restMsRef
3349 - ]);
3350 - index$1(() => {
3351 - var _handleCloseRef$curre;
3352 - if (!enabled) return;
3353 - if (open && (_handleCloseRef$curre = handleCloseRef.current) != null && (_handleCloseRef$curre = _handleCloseRef$curre.__options) != null && _handleCloseRef$curre.blockPointerEvents && isHoverOpen()) {
3354 - performedPointerEventsMutationRef.current = true;
3355 - const floatingEl = elements.floating;
3356 - if (isElement(elements.domReference) && floatingEl) {
3357 - var _tree$nodesRef$curren;
3358 - const body = getDocument(elements.floating).body;
3359 - body.setAttribute(safePolygonIdentifier, "");
3360 - const ref = elements.domReference;
3361 - const parentFloating = tree == null || (_tree$nodesRef$curren = tree.nodesRef.current.find((node) => node.id === parentId)) == null || (_tree$nodesRef$curren = _tree$nodesRef$curren.context) == null ? void 0 : _tree$nodesRef$curren.elements.floating;
3362 - if (parentFloating) parentFloating.style.pointerEvents = "";
3363 - body.style.pointerEvents = "none";
3364 - ref.style.pointerEvents = "auto";
3365 - floatingEl.style.pointerEvents = "auto";
3366 - return () => {
3367 - body.style.pointerEvents = "";
3368 - ref.style.pointerEvents = "";
3369 - floatingEl.style.pointerEvents = "";
3370 - };
3371 - }
3372 - }
3373 - }, [
3374 - enabled,
3375 - open,
3376 - parentId,
3377 - elements,
3378 - tree,
3379 - handleCloseRef,
3380 - isHoverOpen
3381 - ]);
3382 - index$1(() => {
3383 - if (!open) {
3384 - pointerTypeRef.current = void 0;
3385 - restTimeoutPendingRef.current = false;
3386 - cleanupMouseMoveHandler();
3387 - clearPointerEvents();
3388 - }
3389 - }, [
3390 - open,
3391 - cleanupMouseMoveHandler,
3392 - clearPointerEvents
3393 - ]);
3394 - react$1.useEffect(() => {
3395 - return () => {
3396 - cleanupMouseMoveHandler();
3397 - clearTimeoutIfSet(timeoutRef);
3398 - clearTimeoutIfSet(restTimeoutRef);
3399 - clearPointerEvents();
3400 - };
3401 - }, [
3402 - enabled,
3403 - elements.domReference,
3404 - cleanupMouseMoveHandler,
3405 - clearPointerEvents
3406 - ]);
3407 - const reference = react$1.useMemo(() => {
3408 - function setPointerRef(event) {
3409 - pointerTypeRef.current = event.pointerType;
3410 - }
3411 - return {
3412 - onPointerDown: setPointerRef,
3413 - onPointerEnter: setPointerRef,
3414 - onMouseMove(event) {
3415 - const { nativeEvent } = event;
3416 - function handleMouseMove() {
3417 - if (!blockMouseMoveRef.current && !openRef.current) onOpenChange(true, nativeEvent, "hover");
3418 - }
3419 - if (mouseOnly && !isMouseLikePointerType(pointerTypeRef.current)) return;
3420 - if (open || getRestMs(restMsRef.current) === 0) return;
3421 - if (restTimeoutPendingRef.current && event.movementX ** 2 + event.movementY ** 2 < 2) return;
3422 - clearTimeoutIfSet(restTimeoutRef);
3423 - if (pointerTypeRef.current === "touch") handleMouseMove();
3424 - else {
3425 - restTimeoutPendingRef.current = true;
3426 - restTimeoutRef.current = window.setTimeout(handleMouseMove, getRestMs(restMsRef.current));
3427 - }
3428 - }
3429 - };
3430 - }, [
3431 - mouseOnly,
3432 - onOpenChange,
3433 - open,
3434 - openRef,
3435 - restMsRef
3436 - ]);
3437 - return react$1.useMemo(() => enabled ? { reference } : {}, [enabled, reference]);
3438 - }
3439 - var HIDDEN_STYLES = {
3440 - border: 0,
3441 - clip: "rect(0 0 0 0)",
3442 - height: "1px",
3443 - margin: "-1px",
3444 - overflow: "hidden",
3445 - padding: 0,
3446 - position: "fixed",
3447 - whiteSpace: "nowrap",
3448 - width: "1px",
3449 - top: 0,
3450 - left: 0
3451 - };
3452 - var FocusGuard = /*#__PURE__*/ react$1.forwardRef(function FocusGuard(props, ref) {
3453 - const [role, setRole] = react$1.useState();
3454 - index$1(() => {
3455 - if (isSafari()) setRole("button");
3456 - }, []);
3457 - const restProps = {
3458 - ref,
3459 - tabIndex: 0,
3460 - role,
3461 - "aria-hidden": role ? void 0 : true,
3462 - [createAttribute("focus-guard")]: "",
3463 - style: HIDDEN_STYLES
3464 - };
3465 - return /*#__PURE__*/ (0, import_jsx_runtime.jsx)("span", {
3466 - ...props,
3467 - ...restProps
3468 - });
3469 - });
3470 - var HIDDEN_OWNER_STYLES = {
3471 - clipPath: "inset(50%)",
3472 - position: "fixed",
3473 - top: 0,
3474 - left: 0
3475 - };
3476 - var PortalContext = /*#__PURE__*/ react$1.createContext(null);
3477 - var attr = /*#__PURE__*/ createAttribute("portal");
3478 - /**
3479 - * @see https://floating-ui.com/docs/FloatingPortal#usefloatingportalnode
3480 - */
3481 - function useFloatingPortalNode(props) {
3482 - if (props === void 0) props = {};
3483 - const { id, root } = props;
3484 - const uniqueId = useId();
3485 - const portalContext = usePortalContext();
3486 - const [portalNode, setPortalNode] = react$1.useState(null);
3487 - const portalNodeRef = react$1.useRef(null);
3488 - index$1(() => {
3489 - return () => {
3490 - portalNode?.remove();
3491 - queueMicrotask(() => {
3492 - portalNodeRef.current = null;
3493 - });
3494 - };
3495 - }, [portalNode]);
3496 - index$1(() => {
3497 - if (!uniqueId) return;
3498 - if (portalNodeRef.current) return;
3499 - const existingIdRoot = id ? document.getElementById(id) : null;
3500 - if (!existingIdRoot) return;
3501 - const subRoot = document.createElement("div");
3502 - subRoot.id = uniqueId;
3503 - subRoot.setAttribute(attr, "");
3504 - existingIdRoot.appendChild(subRoot);
3505 - portalNodeRef.current = subRoot;
3506 - setPortalNode(subRoot);
3507 - }, [id, uniqueId]);
3508 - index$1(() => {
3509 - if (root === null) return;
3510 - if (!uniqueId) return;
3511 - if (portalNodeRef.current) return;
3512 - let container = root || (portalContext == null ? void 0 : portalContext.portalNode);
3513 - if (container && !isNode(container)) container = container.current;
3514 - container = container || document.body;
3515 - let idWrapper = null;
3516 - if (id) {
3517 - idWrapper = document.createElement("div");
3518 - idWrapper.id = id;
3519 - container.appendChild(idWrapper);
3520 - }
3521 - const subRoot = document.createElement("div");
3522 - subRoot.id = uniqueId;
3523 - subRoot.setAttribute(attr, "");
3524 - container = idWrapper || container;
3525 - container.appendChild(subRoot);
3526 - portalNodeRef.current = subRoot;
3527 - setPortalNode(subRoot);
3528 - }, [
3529 - id,
3530 - root,
3531 - uniqueId,
3532 - portalContext
3533 - ]);
3534 - return portalNode;
3535 - }
3536 - /**
3537 - * Portals the floating element into a given container element — by default,
3538 - * outside of the app root and into the body.
3539 - * This is necessary to ensure the floating element can appear outside any
3540 - * potential parent containers that cause clipping (such as `overflow: hidden`),
3541 - * while retaining its location in the React tree.
3542 - * @see https://floating-ui.com/docs/FloatingPortal
3543 - */
3544 - function FloatingPortal(props) {
3545 - const { children, id, root, preserveTabOrder = true } = props;
3546 - const portalNode = useFloatingPortalNode({
3547 - id,
3548 - root
3549 - });
3550 - const [focusManagerState, setFocusManagerState] = react$1.useState(null);
3551 - const beforeOutsideRef = react$1.useRef(null);
3552 - const afterOutsideRef = react$1.useRef(null);
3553 - const beforeInsideRef = react$1.useRef(null);
3554 - const afterInsideRef = react$1.useRef(null);
3555 - const modal = focusManagerState == null ? void 0 : focusManagerState.modal;
3556 - const open = focusManagerState == null ? void 0 : focusManagerState.open;
3557 - const shouldRenderGuards = !!focusManagerState && !focusManagerState.modal && focusManagerState.open && preserveTabOrder && !!(root || portalNode);
3558 - react$1.useEffect(() => {
3559 - if (!portalNode || !preserveTabOrder || modal) return;
3560 - function onFocus(event) {
3561 - if (portalNode && isOutsideEvent(event)) (event.type === "focusin" ? enableFocusInside : disableFocusInside)(portalNode);
3562 - }
3563 - portalNode.addEventListener("focusin", onFocus, true);
3564 - portalNode.addEventListener("focusout", onFocus, true);
3565 - return () => {
3566 - portalNode.removeEventListener("focusin", onFocus, true);
3567 - portalNode.removeEventListener("focusout", onFocus, true);
3568 - };
3569 - }, [
3570 - portalNode,
3571 - preserveTabOrder,
3572 - modal
3573 - ]);
3574 - react$1.useEffect(() => {
3575 - if (!portalNode) return;
3576 - if (open) return;
3577 - enableFocusInside(portalNode);
3578 - }, [open, portalNode]);
3579 - return /*#__PURE__*/ (0, import_jsx_runtime.jsxs)(PortalContext.Provider, {
3580 - value: react$1.useMemo(() => ({
3581 - preserveTabOrder,
3582 - beforeOutsideRef,
3583 - afterOutsideRef,
3584 - beforeInsideRef,
3585 - afterInsideRef,
3586 - portalNode,
3587 - setFocusManagerState
3588 - }), [preserveTabOrder, portalNode]),
3589 - children: [
3590 - shouldRenderGuards && portalNode && /*#__PURE__*/ (0, import_jsx_runtime.jsx)(FocusGuard, {
3591 - "data-type": "outside",
3592 - ref: beforeOutsideRef,
3593 - onFocus: (event) => {
3594 - if (isOutsideEvent(event, portalNode)) {
3595 - var _beforeInsideRef$curr;
3596 - (_beforeInsideRef$curr = beforeInsideRef.current) == null || _beforeInsideRef$curr.focus();
3597 - } else getPreviousTabbable(focusManagerState ? focusManagerState.domReference : null)?.focus();
3598 - }
3599 - }),
3600 - shouldRenderGuards && portalNode && /*#__PURE__*/ (0, import_jsx_runtime.jsx)("span", {
3601 - "aria-owns": portalNode.id,
3602 - style: HIDDEN_OWNER_STYLES
3603 - }),
3604 - portalNode && /*#__PURE__*/ react_dom.createPortal(children, portalNode),
3605 - shouldRenderGuards && portalNode && /*#__PURE__*/ (0, import_jsx_runtime.jsx)(FocusGuard, {
3606 - "data-type": "outside",
3607 - ref: afterOutsideRef,
3608 - onFocus: (event) => {
3609 - if (isOutsideEvent(event, portalNode)) {
3610 - var _afterInsideRef$curre;
3611 - (_afterInsideRef$curre = afterInsideRef.current) == null || _afterInsideRef$curre.focus();
3612 - } else {
3613 - getNextTabbable(focusManagerState ? focusManagerState.domReference : null)?.focus();
3614 - focusManagerState != null && focusManagerState.closeOnFocusOut && focusManagerState?.onOpenChange(false, event.nativeEvent, "focus-out");
3615 - }
3616 - }
3617 - })
3618 - ]
3619 - });
3620 - }
3621 - var usePortalContext = () => react$1.useContext(PortalContext);
3622 - function useFloatingRootContext(options) {
3623 - const { open = false, onOpenChange: onOpenChangeProp, elements: elementsProp } = options;
3624 - const floatingId = useId();
3625 - const dataRef = react$1.useRef({});
3626 - const [events] = react$1.useState(() => createEventEmitter());
3627 - const nested = useFloatingParentNodeId() != null;
3628 - {
3629 - const optionDomReference = elementsProp.reference;
3630 - if (optionDomReference && !isElement(optionDomReference)) error("Cannot pass a virtual element to the `elements.reference` option,", "as it must be a real DOM element. Use `refs.setPositionReference()`", "instead.");
3631 - }
3632 - const [positionReference, setPositionReference] = react$1.useState(elementsProp.reference);
3633 - const onOpenChange = useEffectEvent((open, event, reason) => {
3634 - dataRef.current.openEvent = open ? event : void 0;
3635 - events.emit("openchange", {
3636 - open,
3637 - event,
3638 - reason,
3639 - nested
3640 - });
3641 - onOpenChangeProp?.(open, event, reason);
3642 - });
3643 - const refs = react$1.useMemo(() => ({ setPositionReference }), []);
3644 - const elements = react$1.useMemo(() => ({
3645 - reference: positionReference || elementsProp.reference || null,
3646 - floating: elementsProp.floating || null,
3647 - domReference: elementsProp.reference
3648 - }), [
3649 - positionReference,
3650 - elementsProp.reference,
3651 - elementsProp.floating
3652 - ]);
3653 - return react$1.useMemo(() => ({
3654 - dataRef,
3655 - open,
3656 - onOpenChange,
3657 - elements,
3658 - events,
3659 - floatingId,
3660 - refs
3661 - }), [
3662 - open,
3663 - onOpenChange,
3664 - elements,
3665 - events,
3666 - floatingId,
3667 - refs
3668 - ]);
3669 - }
3670 - /**
3671 - * Provides data to position a floating element and context to add interactions.
3672 - * @see https://floating-ui.com/docs/useFloating
3673 - */
3674 - function useFloating(options) {
3675 - if (options === void 0) options = {};
3676 - const { nodeId } = options;
3677 - const internalRootContext = useFloatingRootContext({
3678 - ...options,
3679 - elements: {
3680 - reference: null,
3681 - floating: null,
3682 - ...options.elements
3683 - }
3684 - });
3685 - const rootContext = options.rootContext || internalRootContext;
3686 - const computedElements = rootContext.elements;
3687 - const [_domReference, setDomReference] = react$1.useState(null);
3688 - const [positionReference, _setPositionReference] = react$1.useState(null);
3689 - const domReference = (computedElements == null ? void 0 : computedElements.domReference) || _domReference;
3690 - const domReferenceRef = react$1.useRef(null);
3691 - const tree = useFloatingTree();
3692 - index$1(() => {
3693 - if (domReference) domReferenceRef.current = domReference;
3694 - }, [domReference]);
3695 - const position = useFloating$1({
3696 - ...options,
3697 - elements: {
3698 - ...computedElements,
3699 - ...positionReference && { reference: positionReference }
3700 - }
3701 - });
3702 - const setPositionReference = react$1.useCallback((node) => {
3703 - const computedPositionReference = isElement(node) ? {
3704 - getBoundingClientRect: () => node.getBoundingClientRect(),
3705 - getClientRects: () => node.getClientRects(),
3706 - contextElement: node
3707 - } : node;
3708 - _setPositionReference(computedPositionReference);
3709 - position.refs.setReference(computedPositionReference);
3710 - }, [position.refs]);
3711 - const setReference = react$1.useCallback((node) => {
3712 - if (isElement(node) || node === null) {
3713 - domReferenceRef.current = node;
3714 - setDomReference(node);
3715 - }
3716 - if (isElement(position.refs.reference.current) || position.refs.reference.current === null || node !== null && !isElement(node)) position.refs.setReference(node);
3717 - }, [position.refs]);
3718 - const refs = react$1.useMemo(() => ({
3719 - ...position.refs,
3720 - setReference,
3721 - setPositionReference,
3722 - domReference: domReferenceRef
3723 - }), [
3724 - position.refs,
3725 - setReference,
3726 - setPositionReference
3727 - ]);
3728 - const elements = react$1.useMemo(() => ({
3729 - ...position.elements,
3730 - domReference
3731 - }), [position.elements, domReference]);
3732 - const context = react$1.useMemo(() => ({
3733 - ...position,
3734 - ...rootContext,
3735 - refs,
3736 - elements,
3737 - nodeId
3738 - }), [
3739 - position,
3740 - refs,
3741 - elements,
3742 - nodeId,
3743 - rootContext
3744 - ]);
3745 - index$1(() => {
3746 - rootContext.dataRef.current.floatingContext = context;
3747 - const node = tree == null ? void 0 : tree.nodesRef.current.find((node) => node.id === nodeId);
3748 - if (node) node.context = context;
3749 - });
3750 - return react$1.useMemo(() => ({
3751 - ...position,
3752 - context,
3753 - refs,
3754 - elements
3755 - }), [
3756 - position,
3757 - refs,
3758 - elements,
3759 - context
3760 - ]);
3761 - }
3762 - function mergeProps(userProps, propsList, elementKey) {
3763 - const map = /* @__PURE__ */ new Map();
3764 - const isItem = elementKey === "item";
3765 - let domUserProps = userProps;
3766 - if (isItem && userProps) {
3767 - const { [ACTIVE_KEY]: _, [SELECTED_KEY]: __, ...validProps } = userProps;
3768 - domUserProps = validProps;
3769 - }
3770 - return {
3771 - ...elementKey === "floating" && {
3772 - tabIndex: -1,
3773 - [FOCUSABLE_ATTRIBUTE]: ""
3774 - },
3775 - ...domUserProps,
3776 - ...propsList.map((value) => {
3777 - const propsOrGetProps = value ? value[elementKey] : null;
3778 - if (typeof propsOrGetProps === "function") return userProps ? propsOrGetProps(userProps) : null;
3779 - return propsOrGetProps;
3780 - }).concat(userProps).reduce((acc, props) => {
3781 - if (!props) return acc;
3782 - Object.entries(props).forEach((_ref) => {
3783 - let [key, value] = _ref;
3784 - if (isItem && [ACTIVE_KEY, SELECTED_KEY].includes(key)) return;
3785 - if (key.indexOf("on") === 0) {
3786 - if (!map.has(key)) map.set(key, []);
3787 - if (typeof value === "function") {
3788 - var _map$get;
3789 - (_map$get = map.get(key)) == null || _map$get.push(value);
3790 - acc[key] = function() {
3791 - var _map$get2;
3792 - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) args[_key] = arguments[_key];
3793 - return (_map$get2 = map.get(key)) == null ? void 0 : _map$get2.map((fn) => fn(...args)).find((val) => val !== void 0);
3794 - };
3795 - }
3796 - } else acc[key] = value;
3797 - });
3798 - return acc;
3799 - }, {})
3800 - };
3801 - }
3802 - /**
3803 - * Merges an array of interaction hooks' props into prop getters, allowing
3804 - * event handler functions to be composed together without overwriting one
3805 - * another.
3806 - * @see https://floating-ui.com/docs/useInteractions
3807 - */
3808 - function useInteractions(propsList) {
3809 - if (propsList === void 0) propsList = [];
3810 - const referenceDeps = propsList.map((key) => key == null ? void 0 : key.reference);
3811 - const floatingDeps = propsList.map((key) => key == null ? void 0 : key.floating);
3812 - const itemDeps = propsList.map((key) => key == null ? void 0 : key.item);
3813 - const getReferenceProps = react$1.useCallback((userProps) => mergeProps(userProps, propsList, "reference"), referenceDeps);
3814 - const getFloatingProps = react$1.useCallback((userProps) => mergeProps(userProps, propsList, "floating"), floatingDeps);
3815 - const getItemProps = react$1.useCallback((userProps) => mergeProps(userProps, propsList, "item"), itemDeps);
3816 - return react$1.useMemo(() => ({
3817 - getReferenceProps,
3818 - getFloatingProps,
3819 - getItemProps
3820 - }), [
3821 - getReferenceProps,
3822 - getFloatingProps,
3823 - getItemProps
3824 - ]);
3825 - }
3826 -
3827 -//#endregion
3828 -//#region packages/packages/core/editor-canvas/src/hooks/use-floating-on-element.ts
3829 - function useFloatingOnElement({ element, isSelected }) {
3830 - const [isOpen, setIsOpen] = (0, react.useState)(false);
3831 - const sizeModifier = 2;
3832 - const { refs, floatingStyles, context } = useFloating({
3833 - open: isOpen || isSelected,
3834 - onOpenChange: setIsOpen,
3835 - whileElementsMounted: autoUpdate,
3836 - middleware: [size(() => {
3837 - return { apply({ elements, rects }) {
3838 - Object.assign(elements.floating.style, {
3839 - width: `${rects.reference.width + sizeModifier}px`,
3840 - height: `${rects.reference.height + sizeModifier}px`
3841 - });
3842 - } };
3843 - }), offset(({ rects }) => -rects.reference.height / 2 - rects.floating.height / 2)]
3844 - });
3845 - (0, react.useEffect)(() => {
3846 - refs.setReference(element);
3847 - }, [element, refs]);
3848 - return {
3849 - isVisible: isOpen || isSelected,
3850 - context,
3851 - floating: {
3852 - setRef: refs.setFloating,
3853 - ref: refs.floating,
3854 - styles: floatingStyles
3855 - }
3856 - };
3857 - }
3858 -
3859 -//#endregion
3860 -//#region packages/packages/core/editor-canvas/src/hooks/use-bind-react-props-to-element.ts
3861 - function useBindReactPropsToElement(element, getProps) {
3862 - (0, react.useEffect)(() => {
3863 - const el = element;
3864 - const { events, attrs } = groupProps(getProps());
3865 - events.forEach(([eventName, listener]) => el.addEventListener(eventName, listener));
3866 - attrs.forEach(([attrName, attrValue]) => el.setAttribute(attrName, attrValue));
3867 - return () => {
3868 - events.forEach(([eventName, listener]) => el.removeEventListener(eventName, listener));
3869 - attrs.forEach(([attrName]) => el.removeAttribute(attrName));
3870 - };
3871 - }, [getProps, element]);
3872 - }
3873 - function groupProps(props) {
3874 - const eventRegex = /^on(?=[A-Z])/;
3875 - return Object.entries(props).reduce((acc, [propName, propValue]) => {
3876 - if (!eventRegex.test(propName)) {
3877 - acc.attrs.push([propName, propValue]);
3878 - return acc;
3879 - }
3880 - const eventName = propName.replace(eventRegex, "").toLowerCase();
3881 - const listener = propValue;
3882 - acc.events.push([eventName, listener]);
3883 - return acc;
3884 - }, {
3885 - events: [],
3886 - attrs: []
3887 - });
3888 - }
3889 -
3890 -//#endregion
3891 -//#region packages/packages/core/editor-canvas/src/hooks/use-has-overlapping.ts
3892 - var possibleOverlappingSelectors = [".e-off-canvas"];
3893 - var useHasOverlapping = () => {
3894 - const preview = window.elementor?.$preview?.[0];
3895 - if (!preview) return false;
3896 - return possibleOverlappingSelectors.map((selector) => Array.from(preview?.contentWindow?.document.body.querySelectorAll(selector) ?? [])).flat().some((elem) => elem.checkVisibility({
3897 - opacityProperty: true,
3898 - visibilityProperty: true,
3899 - contentVisibilityAuto: true
3900 - }));
3901 - };
3902 -
3903 -//#endregion
3904 -//#region packages/packages/core/editor-canvas/src/utils/outline-offset-utils.ts
3905 - var THIN_ELEMENT_MAX_HEIGHT_PX = 1;
3906 - var SMALLER_OUTLINE_OFFSET_WIDGET_TYPES = /* @__PURE__ */ new Set(["e-form-input"]);
3907 - function shouldUseSmallerOutlineOffset(element, widgetType) {
3908 - if (element.offsetHeight <= 1) return true;
3909 - return widgetType !== void 0 && SMALLER_OUTLINE_OFFSET_WIDGET_TYPES.has(widgetType);
3910 - }
3911 -
3912 -//#endregion
3913 -//#region packages/packages/core/editor-canvas/src/components/outline-overlay.tsx
3914 - var CANVAS_WRAPPER_ID = "elementor-preview-responsive-wrapper";
3915 - var OverlayBox = (0, _elementor_ui.styled)(_elementor_ui.Box, { shouldForwardProp: (prop) => prop !== "isSelected" && prop !== "isSmallerOffset" && prop !== "isGlobal" })(({ theme, isSelected, isSmallerOffset, isGlobal }) => ({
3916 - outline: `${isSelected ? "2px" : "1px"} solid ${isGlobal ? theme.palette.global.main : theme.palette.primary.light}`,
3917 - outlineOffset: isSelected && !isSmallerOffset ? "-2px" : "-1px",
3918 - pointerEvents: "none"
3919 - }));
3920 - var OutlineOverlay = ({ element, isSelected, id, isGlobal = false, widgetType }) => {
3921 - const { context, floating, isVisible } = useFloatingOnElement({
3922 - element,
3923 - isSelected
3924 - });
3925 - const { getFloatingProps, getReferenceProps } = useInteractions([useHover(context)]);
3926 - const hasOverlapping = useHasOverlapping();
3927 - useBindReactPropsToElement(element, getReferenceProps);
3928 - const isSmallerOffset = shouldUseSmallerOutlineOffset(element, widgetType);
3929 - return isVisible && !hasOverlapping && /* @__PURE__ */ react.createElement(FloatingPortal, { id: "elementor-preview-responsive-wrapper" }, /* @__PURE__ */ react.createElement(OverlayBox, {
3930 - ref: floating.setRef,
3931 - isSelected,
3932 - isGlobal,
3933 - style: floating.styles,
3934 - "data-element-overlay": id,
3935 - role: "presentation",
3936 - isSmallerOffset,
3937 - ...getFloatingProps()
3938 - }));
3939 - };
3940 -
3941 -//#endregion
3942 -//#region packages/packages/core/editor-canvas/src/components/grid-outline/cell.tsx
3943 - var FALLBACK_COLOR$1 = "rgba(0, 0, 0, 0.12)";
3944 - function Cell({ x, y, width, height, color }) {
3945 - return /* @__PURE__ */ react.createElement("rect", {
3946 - x,
3947 - y,
3948 - width,
3949 - height,
3950 - fill: "none",
3951 - stroke: color || FALLBACK_COLOR$1,
3952 - strokeWidth: 1,
3953 - strokeDasharray: "2 2",
3954 - vectorEffect: "non-scaling-stroke"
3955 - });
3956 - }
3957 -
3958 -//#endregion
3959 -//#region packages/packages/core/editor-canvas/src/components/grid-outline/first-empty-cell.tsx
3960 - var GLYPH_SIZE = 19;
3961 - function FirstEmptyCell({ rect, color }) {
3962 - const size = Math.min(GLYPH_SIZE, rect.width, rect.height);
3963 - if (size <= 0) return null;
3964 - const centerX = rect.x + rect.width / 2;
3965 - const centerY = rect.y + rect.height / 2;
3966 - return /* @__PURE__ */ react.createElement("i", {
3967 - className: "eicon-plus",
3968 - "aria-hidden": "true",
3969 - style: {
3970 - position: "absolute",
3971 - left: centerX,
3972 - top: centerY,
3973 - transform: "translate(-50%, -50%)",
3974 - fontSize: size,
3975 - color,
3976 - lineHeight: 1,
3977 - pointerEvents: "none"
3978 - }
3979 - });
3980 - }
3981 -
3982 -//#endregion
3983 -//#region packages/packages/core/editor-canvas/src/components/grid-outline/line.tsx
3984 - var FALLBACK_COLOR = "rgba(0, 0, 0, 0.12)";
3985 - function Line({ x1, y1, x2, y2, color }) {
3986 - return /* @__PURE__ */ react.createElement("line", {
3987 - x1,
3988 - y1,
3989 - x2,
3990 - y2,
3991 - stroke: color || FALLBACK_COLOR,
3992 - strokeWidth: 1,
3993 - strokeDasharray: "2 2",
3994 - vectorEffect: "non-scaling-stroke"
3995 - });
3996 - }
3997 -
3998 -//#endregion
3999 -//#region packages/packages/core/editor-canvas/src/components/grid-outline/grid-outline.tsx
4000 - var renderCells = (cells, color) => cells.map((cell, i) => /* @__PURE__ */ react.createElement(Cell, {
4001 - key: i,
4002 - x: snapToHalfPixel(cell.x),
4003 - y: snapToHalfPixel(cell.y),
4004 - width: Math.round(cell.width),
4005 - height: Math.round(cell.height),
4006 - color
4007 - }));
4008 - var renderLines = (tracks, width, height) => {
4009 - const { vertical, horizontal } = computeGridLines(tracks, width, height);
4010 - return [...vertical.map((line, i) => /* @__PURE__ */ react.createElement(Line, {
4011 - key: `v${i}`,
4012 - x1: snapToHalfPixel(line.x1),
4013 - y1: Math.round(line.y1),
4014 - x2: snapToHalfPixel(line.x2),
4015 - y2: Math.round(line.y2),
4016 - color: tracks.borderColor
4017 - })), ...horizontal.map((line, i) => /* @__PURE__ */ react.createElement(Line, {
4018 - key: `h${i}`,
4019 - x1: Math.round(line.x1),
4020 - y1: snapToHalfPixel(line.y1),
4021 - x2: Math.round(line.x2),
4022 - y2: snapToHalfPixel(line.y2),
4023 - color: tracks.borderColor
4024 - }))];
4025 - };
4026 - var isDragActiveFromDom = (element) => {
4027 - return Boolean(element?.querySelector(".e-dragging-over, .elementor-dragging-on-child, .elementor-draggable-over, .elementor-widget-placeholder, .elementor-sortable-placeholder"));
4028 - };
4029 - function GridOutline({ element, tracks, width, height }) {
4030 - const cells = (0, react.useMemo)(() => computeCellRects(tracks, width, height), [
4031 - tracks,
4032 - width,
4033 - height
4034 - ]);
4035 - const hasGap = tracks.columnGap > 0 || tracks.rowGap > 0;
4036 - const firstEmpty = (0, react.useMemo)(() => findFirstEmptyCell(element, tracks.columns.length, tracks.rows.length), [element, tracks]);
4037 - const emptyCellRect = firstEmpty && tracks.columns.length > 0 ? cells[firstEmpty.row * tracks.columns.length + firstEmpty.col] : null;
4038 - return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement("svg", {
4039 - width,
4040 - height,
4041 - style: {
4042 - position: "absolute",
4043 - inset: 0,
4044 - overflow: "visible"
4045 - },
4046 - xmlns: "http://www.w3.org/2000/svg"
4047 - }, hasGap ? renderCells(cells, tracks.borderColor) : renderLines(tracks, width, height)), emptyCellRect && !isDragActiveFromDom(element) && /* @__PURE__ */ react.createElement(FirstEmptyCell, {
4048 - rect: emptyCellRect,
4049 - color: tracks.borderColor
4050 - }));
4051 - }
4052 -
4053 -//#endregion
4054 -//#region packages/packages/core/editor-canvas/src/components/grid-outline/grid-outline-overlay.tsx
4055 - var GridOutlineOverlay = ({ element, id, isSelected }) => {
4056 - const enabled = (0, _elementor_editor_elements.useElementEditorSettings)(id)?.grid_outline;
4057 - const rect = useElementRect(element);
4058 - const tracks = useGridTracks(element, rect);
4059 - const { floating } = useFloatingOnElement({
4060 - element,
4061 - isSelected
4062 - });
4063 - if (enabled === false) return null;
4064 - if (tracks.columns.length === 0 && tracks.rows.length === 0) return null;
4065 - return /* @__PURE__ */ react.createElement(FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
4066 - ref: floating.setRef,
4067 - style: {
4068 - ...floating.styles,
4069 - pointerEvents: "none"
4070 - },
4071 - "data-grid-outline": id,
4072 - role: "presentation"
4073 - }, /* @__PURE__ */ react.createElement(GridOutline, {
4074 - element,
4075 - tracks,
4076 - width: rect.width,
4077 - height: rect.height
4078 - })));
4079 - };
4080 -
4081 -//#endregion
4082 -//#region packages/packages/core/editor-canvas/src/components/elements-overlays.tsx
4083 - var hasGridStyleDisplay = (element) => {
4084 - return element.computedStyleMap().get("display")?.toString() === "grid";
4085 - };
4086 - var ELEMENTS_DATA_ATTR = "atomic";
4087 - var overlayRegistry = [
4088 - {
4089 - component: OutlineOverlay,
4090 - shouldRender: () => true
4091 - },
4092 - {
4093 - component: GridEmptyCellPositioner,
4094 - shouldRender: ({ element }) => hasGridStyleDisplay(element)
4095 - },
4096 - {
4097 - component: GridOutlineOverlay,
4098 - shouldRender: ({ isSelected, element }) => isSelected && hasGridStyleDisplay(element)
4099 - }
4100 - ];
4101 - function ElementsOverlays() {
4102 - const selected = (0, _elementor_editor_elements.useSelectedElement)();
4103 - const elements = useElementsDom();
4104 - const isEditMode = (0, _elementor_editor_v1_adapters.useEditMode)() === "edit";
4105 - const isKitRouteActive = (0, _elementor_editor_v1_adapters.__privateUseIsRouteActive)("panel/global");
4106 - if (!(isEditMode && !isKitRouteActive)) return null;
4107 - return elements.map(({ id, domElement, isGlobal, widgetType }) => {
4108 - const isSelected = selected.element?.id === id;
4109 - return overlayRegistry.map(({ shouldRender, component: Overlay }, index) => shouldRender({
4110 - id,
4111 - element: domElement,
4112 - isSelected,
4113 - widgetType
4114 - }) && /* @__PURE__ */ react.createElement(Overlay, {
4115 - key: `${id}-${index}`,
4116 - id,
4117 - element: domElement,
4118 - isSelected,
4119 - isGlobal,
4120 - widgetType
4121 - }));
4122 - });
4123 - }
4124 - function useElementsDom() {
4125 - return (0, _elementor_editor_v1_adapters.__privateUseListenTo)([(0, _elementor_editor_v1_adapters.windowEvent)("elementor/editor/element-rendered"), (0, _elementor_editor_v1_adapters.windowEvent)("elementor/editor/element-destroyed")], () => {
4126 - return (0, _elementor_editor_elements.getElements)().filter((el) => isV4Element(el.view?.el?.dataset)).map((element) => ({
4127 - id: element.id,
4128 - domElement: element.view?.getDomElement?.()?.get?.(0),
4129 - isGlobal: element.model.get("isGlobal") ?? false,
4130 - widgetType: element.model.get("widgetType")
4131 - })).filter((item) => !!item.domElement);
4132 - });
4133 - }
4134 - function isV4Element(dataset) {
4135 - if (!dataset) return false;
4136 - return ELEMENTS_DATA_ATTR in dataset || "eType" in dataset;
4137 - }
4138 -
4139 -//#endregion
4140 -//#region packages/packages/core/editor-canvas/src/hooks/use-on-mount.ts
4141 - function useOnMount(cb) {
4142 - const mounted = (0, react.useRef)(false);
4143 - (0, react.useEffect)(() => {
4144 - if (!mounted.current) {
4145 - mounted.current = true;
4146 - cb();
4147 - }
4148 - }, []);
4149 - }
4150 -
4151 -//#endregion
4152 -//#region packages/packages/core/editor-canvas/src/hooks/use-interactions-items.ts
4153 - function useInteractionsItems() {
4154 - const [interactionItems, setInteractionItems] = (0, react.useState)({});
4155 - const providerAndSubscribers = (0, react.useMemo)(() => {
4156 - try {
4157 - return _elementor_editor_interactions.interactionsRepository.getProviders().map((provider) => {
4158 - return {
4159 - provider,
4160 - subscriber: createProviderSubscriber$1({
4161 - provider,
4162 - setInteractionItems
4163 - })
4164 - };
4165 - });
4166 - } catch {
4167 - return [];
4168 - }
4169 - }, []);
4170 - (0, react.useEffect)(() => {
4171 - if (providerAndSubscribers.length === 0) return;
4172 - const unsubscribes = providerAndSubscribers.map(({ provider, subscriber }) => {
4173 - const safeSubscriber = () => {
4174 - try {
4175 - subscriber();
4176 - } catch {}
4177 - };
4178 - return provider.subscribe(safeSubscriber);
4179 - });
4180 - return () => {
4181 - unsubscribes.forEach((unsubscribe) => unsubscribe());
4182 - };
4183 - }, [providerAndSubscribers]);
4184 - useOnMount(() => {
4185 - if (providerAndSubscribers.length === 0) return;
4186 - (0, _elementor_editor_v1_adapters.registerDataHook)("after", "editor/documents/attach-preview", async () => {
4187 - providerAndSubscribers.forEach(({ subscriber }) => {
4188 - try {
4189 - subscriber();
4190 - } catch {}
4191 - });
4192 - });
4193 - });
4194 - return (0, react.useMemo)(() => {
4195 - return Object.values(interactionItems).sort(sortByProviderPriority).flatMap(({ items }) => items);
4196 - }, [interactionItems]);
4197 - }
4198 - function sortByProviderPriority({ provider: providerA }, { provider: providerB }) {
4199 - return providerA.priority - providerB.priority;
4200 - }
4201 - function createProviderSubscriber$1({ provider, setInteractionItems }) {
4202 - return () => {
4203 - try {
4204 - const items = provider.actions.all();
4205 - const providerKey = provider.getKey();
4206 - setInteractionItems((prev) => ({
4207 - ...prev,
4208 - [providerKey]: {
4209 - provider,
4210 - items
4211 - }
4212 - }));
4213 - } catch {}
4214 - };
4215 - }
4216 - __name(createProviderSubscriber$1, "createProviderSubscriber");
4217 -
4218 -//#endregion
4219 -//#region packages/packages/core/editor-canvas/src/components/interactions-renderer.tsx
4220 - function InteractionsRenderer() {
4221 - const container = usePortalContainer$1();
4222 - const interactionItems = useInteractionsItems();
4223 - if (!container) return null;
4224 - const interactionsData = JSON.stringify(Array.isArray(interactionItems) ? interactionItems : []);
4225 - return /* @__PURE__ */ react.createElement(_elementor_ui.Portal, { container }, /* @__PURE__ */ react.createElement("script", {
4226 - type: "application/json",
4227 - "data-e-interactions": "true",
4228 - dangerouslySetInnerHTML: { __html: interactionsData }
4229 - }));
4230 - }
4231 - function usePortalContainer$1() {
4232 - return (0, _elementor_editor_v1_adapters.__privateUseListenTo)((0, _elementor_editor_v1_adapters.commandEndEvent)("editor/documents/attach-preview"), () => (0, _elementor_editor_v1_adapters.getCanvasIframeDocument)()?.head);
4233 - }
4234 - __name(usePortalContainer$1, "usePortalContainer");
4235 -
4236 -//#endregion
4237 -//#region packages/packages/core/editor-canvas/src/hooks/use-documents-css-links.ts
4238 - var REMOVED_ATTR = "data-e-removed";
4239 - var DOCUMENT_WRAPPER_ATTR = "data-elementor-id";
4240 - var CSS_LINK_ID_PREFIX = "elementor-post-";
4241 - var CSS_LINK_ID_SUFFIX = "-css";
4242 - function useDocumentsCssLinks() {
4243 - return (0, _elementor_editor_v1_adapters.__privateUseListenTo)((0, _elementor_editor_v1_adapters.commandEndEvent)("editor/documents/attach-preview"), () => {
4244 - const iframeDocument = (0, _elementor_editor_v1_adapters.getCanvasIframeDocument)();
4245 - if (!iframeDocument) return [];
4246 - const relevantLinkIds = getDocumentsIdsInCanvas(iframeDocument).map((id) => `${CSS_LINK_ID_PREFIX}${id}${CSS_LINK_ID_SUFFIX}`);
4247 - const links = getDocumentsCssLinks(iframeDocument).filter((link) => relevantLinkIds.includes(link.getAttribute("id") ?? ""));
4248 - links.forEach((link) => {
4249 - if (!link.hasAttribute(REMOVED_ATTR)) link.remove();
4250 - });
4251 - return links.map((link) => ({
4252 - ...getLinkAttrs(link),
4253 - id: link.getAttribute("id") ?? "",
4254 - [REMOVED_ATTR]: true
4255 - }));
4256 - });
4257 - }
4258 - function getDocumentsIdsInCanvas(document) {
4259 - return [...document.body.querySelectorAll(`[${DOCUMENT_WRAPPER_ATTR}]`) ?? []].map((el) => el.getAttribute(DOCUMENT_WRAPPER_ATTR) || "");
4260 - }
4261 - function getDocumentsCssLinks(document) {
4262 - return [...document.head.querySelectorAll(`link[rel="stylesheet"][id^=${CSS_LINK_ID_PREFIX}][id$=${CSS_LINK_ID_SUFFIX}]`) ?? []];
4263 - }
4264 - function getLinkAttrs(el) {
4265 - const entries = [...el.attributes].map((attr) => [attr.name, attr.value]);
4266 - return Object.fromEntries(entries);
4267 - }
4268 -
4269 -//#endregion
4270 -//#region packages/packages/core/editor-canvas/src/utils/abort-previous-runs.ts
4271 - function abortPreviousRuns(cb) {
4272 - let abortController = null;
4273 - return (...args) => {
4274 - if (abortController) abortController.abort();
4275 - abortController = new AbortController();
4276 - return cb(abortController, ...args);
4277 - };
4278 - }
4279 -
4280 -//#endregion
4281 -//#region packages/packages/core/editor-canvas/src/utils/pregenerated-links-removal.ts
4282 - var removedProviderKeys = /* @__PURE__ */ new Set();
4283 - function removeProviderPregeneratedLinks(providerKey, removePregeneratedLink) {
4284 - if (removedProviderKeys.has(providerKey)) return;
4285 - const iframeDocument = (0, _elementor_editor_v1_adapters.getCanvasIframeDocument)();
4286 - if (!iframeDocument) return;
4287 - iframeDocument.head.querySelectorAll("link[rel=\"stylesheet\"]").forEach((link) => {
4288 - const { id, href, media } = link;
4289 - if (removePregeneratedLink({
4290 - id,
4291 - href,
4292 - media
4293 - })) link.remove();
4294 - });
4295 - removedProviderKeys.add(providerKey);
4296 - }
4297 - function resetRemovedProviders() {
4298 - removedProviderKeys.clear();
4299 - }
4300 -
4301 -//#endregion
4302 -//#region packages/packages/core/editor-canvas/src/utils/signalized-process.ts
4303 - function signalizedProcess(signal, steps = []) {
4304 - return {
4305 - then: (cb) => {
4306 - steps.push(cb);
4307 - return signalizedProcess(signal, steps);
4308 - },
4309 - execute: async () => {
4310 - let lastResult;
4311 - for (const step of steps) {
4312 - if (signal.aborted) break;
4313 - lastResult = await step(lastResult, signal);
4314 - }
4315 - }
4316 - };
4317 - }
4318 -
4319 -//#endregion
4320 -//#region packages/packages/core/editor-canvas/src/renderers/multi-props.ts
4321 - var isMultiProps = (propValue) => {
4322 - return !!propValue && typeof propValue === "object" && "$$multi-props" in propValue && propValue["$$multi-props"] === true;
4323 - };
4324 - var createMultiPropsValue = (props) => {
4325 - return {
4326 - "$$multi-props": true,
4327 - value: props
4328 - };
4329 - };
4330 - var getMultiPropsValue = (multiProps) => {
4331 - return multiProps.value;
4332 - };
4333 -
4334 -//#endregion
4335 -//#region packages/packages/core/editor-canvas/src/renderers/create-props-resolver.ts
4336 - var TRANSFORM_DEPTH_LIMIT = 3;
4337 - function createPropsResolver({ transformers, schema: initialSchema, onPropResolve }) {
4338 - async function resolve({ props, schema, signal, renderContext }) {
4339 - schema = schema ?? initialSchema;
4340 - const promises = Promise.all(Object.entries(schema).map(async ([key, type]) => {
4341 - const value = props[key] ?? type.default;
4342 - const transformed = await transform({
4343 - value,
4344 - key,
4345 - type,
4346 - signal,
4347 - renderContext
4348 - });
4349 - onPropResolve?.({
4350 - key,
4351 - value: transformed,
4352 - propValue: value,
4353 - propType: type
4354 - });
4355 - if (isMultiProps(transformed)) return getMultiPropsValue(transformed);
4356 - return { [key]: transformed };
4357 - }));
4358 - return Object.assign({}, ...(await promises).filter(Boolean));
4359 - }
4360 - async function transform({ value, key, type, signal, depth = 0, renderContext }) {
4361 - if (value === null || value === void 0) return null;
4362 - if (!(0, _elementor_editor_props.isTransformable)(value)) return value;
4363 - if (depth > TRANSFORM_DEPTH_LIMIT) return null;
4364 - if (value.disabled === true) return null;
4365 - let transformablePropType = type;
4366 - if (type.kind === "union") {
4367 - transformablePropType = type.prop_types[value.$$type];
4368 - if (!transformablePropType) return null;
4369 - }
4370 - transformablePropType = transformablePropType;
4371 - if (value.$$type !== transformablePropType.key) return null;
4372 - let resolvedValue = value.value;
4373 - if (transformablePropType.kind === "object") resolvedValue = await resolve({
4374 - props: resolvedValue,
4375 - schema: transformablePropType.shape,
4376 - signal,
4377 - renderContext
4378 - });
4379 - if (transformablePropType.kind === "array") resolvedValue = await Promise.all(resolvedValue.map((item) => transform({
4380 - value: item,
4381 - key,
4382 - type: transformablePropType.item_prop_type,
4383 - depth,
4384 - signal,
4385 - renderContext
4386 - })));
4387 - const transformer = transformers.get(value.$$type);
4388 - if (!transformer) return null;
4389 - try {
4390 - return transform({
4391 - value: await transformer(resolvedValue, {
4392 - key,
4393 - signal,
4394 - renderContext,
4395 - propType: type
4396 - }),
4397 - key,
4398 - type,
4399 - signal,
4400 - depth: depth + 1,
4401 - renderContext
4402 - });
4403 - } catch {
4404 - return null;
4405 - }
4406 - }
4407 - return resolve;
4408 - }
4409 -
4410 -//#endregion
4411 -//#region packages/packages/core/editor-canvas/src/renderers/enqueue-font-from-style-prop.ts
4412 - var maybeEnqueueFontFromStyleProp = (propType, propValue, enqueue) => {
4413 - if (!(0, _elementor_editor_props.isTransformable)(propValue) || propValue.disabled) return;
4414 - const propTypeUtil = (0, _elementor_editor_props.getPropSchemaFromCache)(propType.kind === "union" ? propValue.$$type : propType.key);
4415 - if (!propTypeUtil || !("getEnqueueFontFamily" in propTypeUtil) || typeof propTypeUtil.getEnqueueFontFamily !== "function") return;
4416 - const stored = propValue.value;
4417 - if (typeof stored !== "string") return;
4418 - const font = propTypeUtil.getEnqueueFontFamily(stored);
4419 - if (font) enqueue(font);
4420 - };
4421 -
4422 -//#endregion
4423 -//#region packages/packages/core/editor-canvas/src/transformers/create-transformers-registry.ts
4424 - function createTransformersRegistry() {
4425 - const transformers = {};
4426 - let fallbackTransformer = null;
4427 - return {
4428 - register(type, transformer) {
4429 - transformers[type] = transformer;
4430 - return this;
4431 - },
4432 - registerFallback(transformer) {
4433 - fallbackTransformer = transformer;
4434 - return this;
4435 - },
4436 - get(type) {
4437 - return transformers[type] ?? fallbackTransformer;
4438 - },
4439 - all() {
4440 - return { ...transformers };
4441 - }
4442 - };
4443 - }
4444 - var stylesInheritanceTransformersRegistry = createTransformersRegistry();
4445 -
4446 -//#endregion
4447 -//#region packages/packages/core/editor-canvas/src/style-transformers-registry.ts
4448 - var styleTransformersRegistry = createTransformersRegistry();
4449 -
4450 -//#endregion
4451 -//#region packages/packages/core/editor-canvas/src/hooks/use-style-prop-resolver.ts
4452 - function useStylePropResolver() {
4453 - return (0, react.useMemo)(() => {
4454 - return createPropsResolver({
4455 - transformers: styleTransformersRegistry,
4456 - schema: (0, _elementor_editor_styles.getStylesSchema)(),
4457 - onPropResolve: ({ propValue, propType }) => {
4458 - maybeEnqueueFontFromStyleProp(propType, propValue, _elementor_editor_v1_adapters.enqueueFont);
4459 - }
4460 - });
4461 - }, []);
4462 - }
4463 -
4464 -//#endregion
4465 -//#region packages/packages/core/editor-canvas/src/renderers/errors.ts
4466 - var UnknownStyleTypeError = (0, _elementor_utils.createError)({
4467 - code: "unknown_style_type",
4468 - message: "Unknown style type"
4469 - });
4470 - var UnknownStyleStateError = (0, _elementor_utils.createError)({
4471 - code: "unknown_style_state",
4472 - message: "Unknown style state"
4473 - });
4474 -
4475 -//#endregion
4476 -//#region packages/packages/core/editor-canvas/src/renderers/create-styles-renderer.ts
4477 - var SELECTORS_MAP = { class: "." };
4478 - var DEFAULT_BREAKPOINT = "desktop";
4479 - var DEFAULT_STATE = "normal";
4480 - function getStyleUniqueKey(style) {
4481 - const breakpoint = style.variants[0]?.meta?.breakpoint ?? DEFAULT_BREAKPOINT;
4482 - const state = style.variants[0]?.meta?.state ?? DEFAULT_STATE;
4483 - return `${style.id}-${breakpoint}-${state}`;
4484 - }
4485 - function createStylesRenderer({ resolve, breakpoints, selectorPrefix = "" }) {
4486 - return async ({ styles, signal }) => {
4487 - const seenKeys = /* @__PURE__ */ new Set();
4488 - const stylesCssPromises = styles.filter((style) => {
4489 - const key = getStyleUniqueKey(style);
4490 - if (seenKeys.has(key)) return false;
4491 - seenKeys.add(key);
4492 - return true;
4493 - }).map(async (style) => {
4494 - const variantCssPromises = Object.values(style.variants).map(async (variant) => {
4495 - const css = await propsToCss({
4496 - props: variant.props,
4497 - resolve,
4498 - signal
4499 - });
4500 - const customCss = customCssToString(variant.custom_css);
4501 - return createStyleWrapper().for(style.cssName, style.type).withPrefix(selectorPrefix).withState(variant.meta.state).withMediaQuery(variant.meta.breakpoint ? breakpoints[variant.meta.breakpoint] : null).wrap(css + customCss);
4502 - });
4503 - const variantsCss = await Promise.all(variantCssPromises);
4504 - return {
4505 - id: style.id,
4506 - breakpoint: style?.variants[0]?.meta?.breakpoint || "desktop",
4507 - value: variantsCss.join(""),
4508 - state: style?.variants[0]?.meta?.state || null
4509 - };
4510 - });
4511 - return await Promise.all(stylesCssPromises);
4512 - };
4513 - }
4514 - function createStyleWrapper(value = "", wrapper) {
4515 - return {
4516 - for: (cssName, type) => {
4517 - const symbol = SELECTORS_MAP[type];
4518 - if (!symbol) throw new UnknownStyleTypeError({ context: { type } });
4519 - return createStyleWrapper(`${value}${symbol}${cssName}`, wrapper);
4520 - },
4521 - withPrefix: (prefix) => createStyleWrapper([prefix, value].filter(Boolean).join(" "), wrapper),
4522 - withState: (state) => {
4523 - return createStyleWrapper((0, _elementor_editor_styles.getSelectorWithState)(value, state), wrapper);
4524 - },
4525 - withMediaQuery: (breakpoint) => {
4526 - if (!breakpoint?.type) return createStyleWrapper(value, wrapper);
4527 - const size = `${breakpoint.type}:${breakpoint.width}px`;
4528 - return createStyleWrapper(value, (css) => `@media(${size}){${css}}`);
4529 - },
4530 - wrap: (css) => {
4531 - const res = `${value}{${css}}`;
4532 - if (!wrapper) return res;
4533 - return wrapper(res);
4534 - }
4535 - };
4536 - }
4537 - async function propsToCss({ props, resolve, signal }) {
4538 - const transformed = await resolve({
4539 - props,
4540 - signal
4541 - });
4542 - return Object.entries(transformed).reduce((acc, [propName, propValue]) => {
4543 - if (propValue === null) return acc;
4544 - acc.push(propName + ":" + propValue + ";");
4545 - return acc;
4546 - }, []).join("");
4547 - }
4548 - function customCssToString(customCss) {
4549 - const decoded = (0, _elementor_utils.decodeString)(customCss?.raw || "");
4550 - if (!decoded.trim()) return "";
4551 - return decoded + "\n";
4552 - }
4553 -
4554 -//#endregion
4555 -//#region packages/packages/core/editor-canvas/src/hooks/use-style-renderer.ts
4556 - var SELECTOR_PREFIX = ".elementor";
4557 - function useStyleRenderer(resolve) {
4558 - const breakpoints = (0, _elementor_editor_responsive.useBreakpointsMap)();
4559 - return (0, react.useMemo)(() => {
4560 - return createStylesRenderer({
4561 - selectorPrefix: SELECTOR_PREFIX,
4562 - breakpoints,
4563 - resolve
4564 - });
4565 - }, [resolve, breakpoints]);
4566 - }
4567 -
4568 -//#endregion
4569 -//#region packages/packages/core/editor-canvas/src/hooks/use-style-items.ts
4570 - function useStyleItems() {
4571 - const renderStyles = useStyleRenderer(useStylePropResolver());
4572 - const breakpoints = (0, _elementor_editor_responsive.useBreakpoints)();
4573 - const [styleItems, setStyleItems] = (0, react.useState)({});
4574 - const styleItemsCacheRef = (0, react.useRef)(/* @__PURE__ */ new Map());
4575 - const providerAndSubscribers = (0, react.useMemo)(() => {
4576 - const createEmptyCache = () => {
4577 - return {
4578 - orderedIds: [],
4579 - itemsById: /* @__PURE__ */ new Map()
4580 - };
4581 - };
4582 - const getCache = (provider) => {
4583 - const providerKey = safeGetKey(provider);
4584 - if (!providerKey) return createEmptyCache();
4585 - if (!styleItemsCacheRef.current.has(providerKey)) styleItemsCacheRef.current.set(providerKey, createEmptyCache());
4586 - return styleItemsCacheRef.current.get(providerKey);
4587 - };
4588 - return _elementor_editor_styles_repository.stylesRepository.getProviders().map((provider) => ({
4589 - provider,
4590 - subscriber: createProviderSubscriber({
4591 - provider,
4592 - renderStyles,
4593 - setStyleItems,
4594 - getCache: () => getCache(provider)
4595 - })
4596 - }));
4597 - }, [renderStyles]);
4598 - (0, react.useEffect)(() => {
4599 - const unsubscribes = providerAndSubscribers.map(({ provider, subscriber }) => provider.subscribe(subscriber));
4600 - return () => {
4601 - unsubscribes.forEach((unsubscribe) => unsubscribe());
4602 - };
4603 - }, [providerAndSubscribers]);
4604 - useOnMount(() => {
4605 - (0, _elementor_editor_v1_adapters.registerDataHook)("after", "editor/documents/attach-preview", async () => {
4606 - resetRemovedProviders();
4607 - const promises = providerAndSubscribers.map(async ({ subscriber }) => subscriber());
4608 - await Promise.all(promises);
4609 - });
4610 - });
4611 - const breakpointSorter = (0, react.useMemo)(() => createBreakpointSorter(breakpoints.map((breakpoint) => breakpoint.id)), [breakpoints]);
4612 - return (0, react.useMemo)(() => Object.values(styleItems).sort(prioritySorter).flatMap(({ items }) => items).sort(stateSorter).sort(breakpointSorter), [styleItems, breakpointSorter]);
4613 - }
4614 - function prioritySorter({ provider: providerA }, { provider: providerB }) {
4615 - return providerA.priority - providerB.priority;
4616 - }
4617 - function stateSorter({ state: stateA }, { state: stateB }) {
4618 - if ((0, _elementor_editor_styles.isClassState)(stateA) && !(0, _elementor_editor_styles.isClassState)(stateB)) return -1;
4619 - if (!(0, _elementor_editor_styles.isClassState)(stateA) && (0, _elementor_editor_styles.isClassState)(stateB)) return 1;
4620 - return 0;
4621 - }
4622 - function createBreakpointSorter(breakpointsOrder) {
4623 - return ({ breakpoint: breakpointA }, { breakpoint: breakpointB }) => breakpointsOrder.indexOf(breakpointA) - breakpointsOrder.indexOf(breakpointB);
4624 - }
4625 - function safeGetKey(provider) {
4626 - try {
4627 - return provider.getKey();
4628 - } catch {
4629 - return null;
4630 - }
4631 - }
4632 - function createProviderSubscriber({ provider, renderStyles, setStyleItems, getCache }) {
4633 - return abortPreviousRuns((abortController, previous, current) => signalizedProcess(abortController.signal).then((_, signal) => {
4634 - const cache = getCache();
4635 - const hasDiffInfo = current !== void 0 && previous !== void 0;
4636 - const hasCache = cache.orderedIds.length > 0;
4637 - if (hasCache && provider.isPregeneratedLink) removeProviderPregeneratedLinks(provider.getKey(), provider.isPregeneratedLink);
4638 - if (hasDiffInfo && hasCache) return updateItems(cache, previous, current, signal);
4639 - return createItems(cache, signal);
4640 - }).then((items) => {
4641 - setStyleItems((prev) => ({
4642 - ...prev,
4643 - [provider.getKey()]: {
4644 - provider,
4645 - items
4646 - }
4647 - }));
4648 - }).execute());
4649 - async function updateItems(cache, previous, current, signal) {
4650 - const changedIds = getChangedStyleIds(previous, current);
4651 - cache.orderedIds = provider.actions.all().map((style) => style.id).reverse();
4652 - if (changedIds.length > 0) return renderStyles({
4653 - styles: breakToBreakpoints(changedIds.map((id) => provider.actions.get(id)).filter((style) => !!style).map((style) => ({
4654 - ...style,
4655 - cssName: provider.actions.resolveCssName(style.id)
4656 - }))),
4657 - signal
4658 - }).then((rendered) => {
4659 - updateCacheItems(cache, changedIds, rendered);
4660 - return getOrderedItems(cache);
4661 - });
4662 - return getOrderedItems(cache);
4663 - }
4664 - async function createItems(cache, signal) {
4665 - const allStyles = provider.actions.all();
4666 - return renderStyles({
4667 - styles: breakToBreakpoints([...allStyles].reverse().map((style) => {
4668 - return {
4669 - ...style,
4670 - cssName: provider.actions.resolveCssName(style.id)
4671 - };
4672 - })),
4673 - signal
4674 - }).then((rendered) => {
4675 - rebuildCache(cache, allStyles, rendered);
4676 - return getOrderedItems(cache);
4677 - });
4678 - }
4679 - function breakToBreakpoints(styles) {
4680 - return Object.values(styles.reduce((acc, style) => {
4681 - style.variants.forEach((variant) => {
4682 - const breakpoint = variant.meta.breakpoint || "desktop";
4683 - if (!acc[style.id]) acc[style.id] = {};
4684 - if (!acc[style.id][breakpoint]) acc[style.id][breakpoint] = {
4685 - ...style,
4686 - variants: []
4687 - };
4688 - acc[style.id][breakpoint].variants.push(variant);
4689 - });
4690 - return acc;
4691 - }, {})).flatMap((breakpointMap) => Object.values(breakpointMap));
4692 - }
4693 - }
4694 - function getChangedStyleIds(previous, current) {
4695 - const changedIds = [];
4696 - for (const id of Object.keys(current)) {
4697 - const currentStyle = current[id];
4698 - const previousStyle = previous[id];
4699 - if (!previousStyle || currentStyle !== previousStyle) changedIds.push(id);
4700 - }
4701 - return changedIds;
4702 - }
4703 - function getOrderedItems(cache) {
4704 - return cache.orderedIds.map((id) => cache.itemsById.get(id)).filter((items) => items !== void 0).flat();
4705 - }
4706 - function updateCacheItems(cache, changedIds, changedItems) {
4707 - for (const id of changedIds) cache.itemsById.delete(id);
4708 - for (const item of changedItems) {
4709 - const existing = cache.itemsById.get(item.id) || [];
4710 - existing.push(item);
4711 - cache.itemsById.set(item.id, existing);
4712 - }
4713 - }
4714 - function rebuildCache(cache, allStyles, items) {
4715 - cache.orderedIds = allStyles.map((style) => style.id).reverse();
4716 - cache.itemsById.clear();
4717 - for (const item of items) {
4718 - const existing = cache.itemsById.get(item.id) || [];
4719 - existing.push(item);
4720 - cache.itemsById.set(item.id, existing);
4721 - }
4722 - }
4723 -
4724 -//#endregion
4725 -//#region packages/packages/core/editor-canvas/src/components/style-renderer.tsx
4726 - function StyleRenderer() {
4727 - const container = usePortalContainer();
4728 - const styleItems = useStyleItems();
4729 - const linksAttrs = useDocumentsCssLinks();
4730 - if (!container) return null;
4731 - return /* @__PURE__ */ react.createElement(_elementor_ui.Portal, { container }, filterUniqueStyleDefinitions(styleItems).map((item) => /* @__PURE__ */ react.createElement("style", { key: `${item.id}-${item.breakpoint}-${item.state ?? "normal"}` }, item.value)), linksAttrs.map((attrs) => /* @__PURE__ */ react.createElement("link", {
4732 - ...attrs,
4733 - key: attrs.id
4734 - })));
4735 - }
4736 - function usePortalContainer() {
4737 - return (0, _elementor_editor_v1_adapters.__privateUseListenTo)((0, _elementor_editor_v1_adapters.commandEndEvent)("editor/documents/attach-preview"), () => (0, _elementor_editor_v1_adapters.getCanvasIframeDocument)()?.head);
4738 - }
4739 - function filterUniqueStyleDefinitions(styleItems) {
4740 - const seen = /* @__PURE__ */ new Map();
4741 - return styleItems.filter((style) => {
4742 - const existingStyle = seen.get(style.id);
4743 - if (existingStyle) {
4744 - if (existingStyle.find((s) => s.breakpoint === style.breakpoint && s.state === style.state)) return false;
4745 - existingStyle.push(style);
4746 - return true;
4747 - }
4748 - seen.set(style.id, [style]);
4749 - return true;
4750 - });
4751 - }
4752 -
4753 -//#endregion
4754 -//#region packages/packages/core/editor-canvas/src/form-structure/utils.ts
4755 - var FORM_ELEMENT_TYPE = "e-form";
4756 - var FORM_FIELD_ELEMENT_TYPES = /* @__PURE__ */ new Set([
4757 - "e-form-input",
4758 - "e-form-textarea",
4759 - "e-form-label",
4760 - "e-form-checkbox",
4761 - "e-form-submit-button",
4762 - "e-form-select",
4763 - "e-form-radio-button",
4764 - "e-form-file-upload",
4765 - "e-form-date-picker",
4766 - "e-form-time-picker"
4767 - ]);
4768 - function getArgsElementType(args) {
4769 - return args.model?.widgetType || args.model?.elType;
4770 - }
4771 - function getElementType$1(element) {
4772 - return element?.model.get("widgetType") || element?.model.get("elType");
4773 - }
4774 - __name(getElementType$1, "getElementType");
4775 - function getClipboardElementType(element) {
4776 - return element?.widgetType || element?.elType;
4777 - }
4778 - function isElementWithinFormSelector(element) {
4779 - return !!element?.view?.el?.closest("form,[data-element_type=\"e-form\"]");
4780 - }
4781 - function isWithinForm(element) {
4782 - return isElementWithinFormSelector(element);
4783 - }
4784 - function hasElementType(element, type) {
4785 - return (0, _elementor_editor_elements.getAllDescendants)(element).some((item) => getElementType$1(item) === type);
4786 - }
4787 - function hasElementTypes(element, types) {
4788 - return (0, _elementor_editor_elements.getAllDescendants)(element).some((item) => {
4789 - const itemType = getElementType$1(item);
4790 - return itemType ? types.has(itemType) : false;
4791 - });
4792 - }
4793 - function hasClipboardElementType(elements, type) {
4794 - return elements.some((element) => {
4795 - if (getClipboardElementType(element) === type) return true;
4796 - return element.elements ? hasClipboardElementType(element.elements, type) : false;
4797 - });
4798 - }
4799 - function hasClipboardElementTypes(elements, types) {
4800 - return elements.some((element) => {
4801 - const elementType = getClipboardElementType(element);
4802 - if (elementType && types.has(elementType)) return true;
4803 - return element.elements ? hasClipboardElementTypes(element.elements, types) : false;
4804 - });
4805 - }
4806 - function movedContainersIncludeAtomicFormRoot(containers) {
4807 - return containers.some((container) => getElementType$1(container) === FORM_ELEMENT_TYPE);
4808 - }
4809 - function clipboardRootsAreAtomicForms(elements) {
4810 - if (!elements.length) return false;
4811 - return elements.every((el) => getClipboardElementType(el) === FORM_ELEMENT_TYPE);
4812 - }
4813 -
4814 -//#endregion
4815 -//#region packages/packages/core/editor-canvas/src/form-structure/enforce-form-ancestor-commands.ts
4816 - var FORM_FIELDS_OUTSIDE_ALERT = {
4817 - type: "default",
4818 - message: (0, _wordpress_i18n.__)("Form elements must be placed inside a form.", "elementor"),
4819 - id: "form-fields-outside-form-blocked"
4820 - };
4821 - function initFormAncestorEnforcement() {
4822 - (0, _elementor_editor_v1_adapters.blockCommand)({
4823 - command: "document/elements/create",
4824 - condition: blockFormFieldCreate
4825 - });
4826 - (0, _elementor_editor_v1_adapters.blockCommand)({
4827 - command: "document/elements/move",
4828 - condition: blockFormFieldMove
4829 - });
4830 - (0, _elementor_editor_v1_adapters.blockCommand)({
4831 - command: "document/elements/paste",
4832 - condition: blockFormFieldPaste
4833 - });
4834 - }
4835 - function blockFormFieldCreate(args) {
4836 - const elementType = getArgsElementType(args);
4837 - if (!elementType || !FORM_FIELD_ELEMENT_TYPES.has(elementType)) return false;
4838 - if ((args.containers ?? [args.container]).some((container) => !isWithinForm(container))) {
4839 - handleBlockedFormField$1();
4840 - return true;
4841 - }
4842 - return false;
4843 - }
4844 - function blockFormFieldMove(args) {
4845 - const { containers = [args.container], target } = args;
4846 - if (containers.some((container) => container ? !hasElementType(container, "e-form") && hasElementTypes(container, FORM_FIELD_ELEMENT_TYPES) : false) && !isWithinForm(target) && !movedContainersIncludeAtomicFormRoot(containers)) {
4847 - handleBlockedFormField$1();
4848 - return true;
4849 - }
4850 - return false;
4851 - }
4852 - function blockFormFieldPaste(args) {
4853 - const { storageType } = args;
4854 - if (storageType !== "localstorage") return false;
4855 - const data = window?.elementorCommon?.storage?.get();
4856 - if (!data?.clipboard?.elements) return false;
4857 - if (hasClipboardElementTypes(data.clipboard.elements, FORM_FIELD_ELEMENT_TYPES) && !isWithinForm(args.container) && !clipboardRootsAreAtomicForms(data.clipboard.elements)) {
4858 - handleBlockedFormField$1();
4859 - return true;
4860 - }
4861 - return false;
4862 - }
4863 - function handleBlockedFormField$1() {
4864 - (0, _elementor_editor_notifications.notify)(FORM_FIELDS_OUTSIDE_ALERT);
4865 - }
4866 - __name(handleBlockedFormField$1, "handleBlockedFormField");
4867 -
4868 -//#endregion
4869 -//#region packages/packages/core/editor-canvas/src/form-structure/prevent-form-nesting-commands.ts
4870 - var FORM_NESTING_ALERT = {
4871 - type: "default",
4872 - message: (0, _wordpress_i18n.__)("Forms can't be nested. Create separate forms instead.", "elementor"),
4873 - id: "form-nesting-blocked"
4874 - };
4875 - function initFormNestingPrevention() {
4876 - (0, _elementor_editor_v1_adapters.blockCommand)({
4877 - command: "document/elements/create",
4878 - condition: blockFormCreate
4879 - });
4880 - (0, _elementor_editor_v1_adapters.blockCommand)({
4881 - command: "document/elements/move",
4882 - condition: blockFormMove
4883 - });
4884 - (0, _elementor_editor_v1_adapters.blockCommand)({
4885 - command: "document/elements/paste",
4886 - condition: blockFormPaste
4887 - });
4888 - }
4889 - function blockFormCreate(args) {
4890 - const elementType = getArgsElementType(args);
4891 - if (!elementType) return false;
4892 - if (elementType === "e-form" && isWithinForm(args.container)) {
4893 - handleBlockedFormField();
4894 - return true;
4895 - }
4896 - return false;
4897 - }
4898 - function blockFormMove(args) {
4899 - const { containers = [args.container], target } = args;
4900 - if (containers.some((container) => container ? hasElementType(container, "e-form") : false) && isWithinForm(target)) {
4901 - handleBlockedFormField();
4902 - return true;
4903 - }
4904 - return false;
4905 - }
4906 - function blockFormPaste(args) {
4907 - const { storageType } = args;
4908 - if (storageType !== "localstorage") return false;
4909 - const data = window?.elementorCommon?.storage?.get();
4910 - if (!data?.clipboard?.elements) return false;
4911 - if (hasClipboardElementType(data.clipboard.elements, "e-form") && isWithinForm(args.container)) {
4912 - handleBlockedFormField();
4913 - return true;
4914 - }
4915 - return false;
4916 - }
4917 - function handleBlockedFormField() {
4918 - (0, _elementor_editor_notifications.notify)(FORM_NESTING_ALERT);
4919 - }
4920 -
4921 -//#endregion
4922 -//#region packages/packages/core/editor-canvas/src/settings-transformers-registry.ts
4923 - var settingsTransformersRegistry = createTransformersRegistry();
4924 -
4925 -//#endregion
4926 -//#region packages/packages/core/editor-canvas/src/transformers/create-transformer.ts
4927 - function createTransformer(cb) {
4928 - return cb;
4929 - }
4930 -
4931 -//#endregion
4932 -//#region packages/packages/core/editor-canvas/src/transformers/settings/attributes-transformer.ts
4933 - var attributesTransformer = createTransformer(() => "");
4934 -
4935 -//#endregion
4936 -//#region packages/packages/core/editor-canvas/src/transformers/settings/classes-transformer.ts
4937 - function transformClassId(id, cache) {
4938 - if (!cache.has(id)) {
4939 - const provider2 = _elementor_editor_styles_repository.stylesRepository.getProviders().find((p) => {
4940 - return p.actions.all().find((style) => style.id === id);
4941 - });
4942 - if (!provider2) return id;
4943 - cache.set(id, provider2.getKey());
4944 - }
4945 - const providerKey = cache.get(id);
4946 - return _elementor_editor_styles_repository.stylesRepository.getProviderByKey(providerKey)?.actions.resolveCssName(id) ?? id;
4947 - }
4948 - function createClassesTransformer() {
4949 - const cache = /* @__PURE__ */ new Map();
4950 - return createTransformer((value) => {
4951 - return value.map((id) => transformClassId(id, cache)).filter(Boolean);
4952 - });
4953 - }
4954 -
4955 -//#endregion
4956 -//#region packages/packages/core/editor-canvas/src/transformers/settings/date-range-transformer.ts
4957 - var dateRangeTransformer = createTransformer((value) => {
4958 - if (!value || Object.keys(value).length === 0) return null;
4959 - return {
4960 - min: value.min || null,
4961 - max: value.max || null
4962 - };
4963 - });
4964 -
4965 -//#endregion
4966 -//#region packages/packages/core/editor-canvas/src/transformers/settings/date-time-transformer.ts
4967 - var dateTimeTransformer = createTransformer((values) => {
4968 - return values.map((value) => {
4969 - const date = (value.date || "").trim();
4970 - const time = (value.time || "").trim();
4971 - return !date && !time ? "" : `${date} ${time}`.trim();
4972 - }).join(" ");
4973 - });
4974 -
4975 -//#endregion
4976 -//#region node_modules/dompurify/dist/purify.es.mjs
4977 -/*! @license DOMPurify 3.3.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.0/LICENSE */
4978 - var { entries, setPrototypeOf, isFrozen, getPrototypeOf, getOwnPropertyDescriptor } = Object;
4979 - var { freeze, seal, create } = Object;
4980 - var { apply, construct } = typeof Reflect !== "undefined" && Reflect;
4981 - if (!freeze) freeze = function freeze(x) {
4982 - return x;
4983 - };
4984 - if (!seal) seal = function seal(x) {
4985 - return x;
4986 - };
4987 - if (!apply) apply = function apply(func, thisArg) {
4988 - for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) args[_key - 2] = arguments[_key];
4989 - return func.apply(thisArg, args);
4990 - };
4991 - if (!construct) construct = function construct(Func) {
4992 - for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) args[_key2 - 1] = arguments[_key2];
4993 - return new Func(...args);
4994 - };
4995 - var arrayForEach = unapply(Array.prototype.forEach);
4996 - var arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);
4997 - var arrayPop = unapply(Array.prototype.pop);
4998 - var arrayPush = unapply(Array.prototype.push);
4999 - var arraySplice = unapply(Array.prototype.splice);
5000 - var stringToLowerCase = unapply(String.prototype.toLowerCase);
5001 - var stringToString = unapply(String.prototype.toString);
5002 - var stringMatch = unapply(String.prototype.match);
5003 - var stringReplace = unapply(String.prototype.replace);
5004 - var stringIndexOf = unapply(String.prototype.indexOf);
5005 - var stringTrim = unapply(String.prototype.trim);
5006 - var objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);
5007 - var regExpTest = unapply(RegExp.prototype.test);
5008 - var typeErrorCreate = unconstruct(TypeError);
5009 - /**
5010 - * Creates a new function that calls the given function with a specified thisArg and arguments.
5011 - *
5012 - * @param func - The function to be wrapped and called.
5013 - * @returns A new function that calls the given function with a specified thisArg and arguments.
5014 - */
5015 - function unapply(func) {
5016 - return function(thisArg) {
5017 - if (thisArg instanceof RegExp) thisArg.lastIndex = 0;
5018 - for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) args[_key3 - 1] = arguments[_key3];
5019 - return apply(func, thisArg, args);
5020 - };
5021 - }
5022 - /**
5023 - * Creates a new function that constructs an instance of the given constructor function with the provided arguments.
5024 - *
5025 - * @param func - The constructor function to be wrapped and called.
5026 - * @returns A new function that constructs an instance of the given constructor function with the provided arguments.
5027 - */
5028 - function unconstruct(Func) {
5029 - return function() {
5030 - for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) args[_key4] = arguments[_key4];
5031 - return construct(Func, args);
5032 - };
5033 - }
5034 - /**
5035 - * Add properties to a lookup table
5036 - *
5037 - * @param set - The set to which elements will be added.
5038 - * @param array - The array containing elements to be added to the set.
5039 - * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.
5040 - * @returns The modified set with added elements.
5041 - */
5042 - function addToSet(set, array) {
5043 - let transformCaseFunc = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : stringToLowerCase;
5044 - if (setPrototypeOf) setPrototypeOf(set, null);
5045 - let l = array.length;
5046 - while (l--) {
5047 - let element = array[l];
5048 - if (typeof element === "string") {
5049 - const lcElement = transformCaseFunc(element);
5050 - if (lcElement !== element) {
5051 - if (!isFrozen(array)) array[l] = lcElement;
5052 - element = lcElement;
5053 - }
5054 - }
5055 - set[element] = true;
5056 - }
5057 - return set;
5058 - }
5059 - /**
5060 - * Clean up an array to harden against CSPP
5061 - *
5062 - * @param array - The array to be cleaned.
5063 - * @returns The cleaned version of the array
5064 - */
5065 - function cleanArray(array) {
5066 - for (let index = 0; index < array.length; index++) if (!objectHasOwnProperty(array, index)) array[index] = null;
5067 - return array;
5068 - }
5069 - /**
5070 - * Shallow clone an object
5071 - *
5072 - * @param object - The object to be cloned.
5073 - * @returns A new object that copies the original.
5074 - */
5075 - function clone(object) {
5076 - const newObject = create(null);
5077 - for (const [property, value] of entries(object)) if (objectHasOwnProperty(object, property)) if (Array.isArray(value)) newObject[property] = cleanArray(value);
5078 - else if (value && typeof value === "object" && value.constructor === Object) newObject[property] = clone(value);
5079 - else newObject[property] = value;
5080 - return newObject;
5081 - }
5082 - /**
5083 - * This method automatically checks if the prop is function or getter and behaves accordingly.
5084 - *
5085 - * @param object - The object to look up the getter function in its prototype chain.
5086 - * @param prop - The property name for which to find the getter function.
5087 - * @returns The getter function found in the prototype chain or a fallback function.
5088 - */
5089 - function lookupGetter(object, prop) {
5090 - while (object !== null) {
5091 - const desc = getOwnPropertyDescriptor(object, prop);
5092 - if (desc) {
5093 - if (desc.get) return unapply(desc.get);
5094 - if (typeof desc.value === "function") return unapply(desc.value);
5095 - }
5096 - object = getPrototypeOf(object);
5097 - }
5098 - function fallbackValue() {
5099 - return null;
5100 - }
5101 - return fallbackValue;
5102 - }
5103 - var html$1 = freeze([
5104 - "a",
5105 - "abbr",
5106 - "acronym",
5107 - "address",
5108 - "area",
5109 - "article",
5110 - "aside",
5111 - "audio",
5112 - "b",
5113 - "bdi",
5114 - "bdo",
5115 - "big",
5116 - "blink",
5117 - "blockquote",
5118 - "body",
5119 - "br",
5120 - "button",
5121 - "canvas",
5122 - "caption",
5123 - "center",
5124 - "cite",
5125 - "code",
5126 - "col",
5127 - "colgroup",
5128 - "content",
5129 - "data",
5130 - "datalist",
5131 - "dd",
5132 - "decorator",
5133 - "del",
5134 - "details",
5135 - "dfn",
5136 - "dialog",
5137 - "dir",
5138 - "div",
5139 - "dl",
5140 - "dt",
5141 - "element",
5142 - "em",
5143 - "fieldset",
5144 - "figcaption",
5145 - "figure",
5146 - "font",
5147 - "footer",
5148 - "form",
5149 - "h1",
5150 - "h2",
5151 - "h3",
5152 - "h4",
5153 - "h5",
5154 - "h6",
5155 - "head",
5156 - "header",
5157 - "hgroup",
5158 - "hr",
5159 - "html",
5160 - "i",
5161 - "img",
5162 - "input",
5163 - "ins",
5164 - "kbd",
5165 - "label",
5166 - "legend",
5167 - "li",
5168 - "main",
5169 - "map",
5170 - "mark",
5171 - "marquee",
5172 - "menu",
5173 - "menuitem",
5174 - "meter",
5175 - "nav",
5176 - "nobr",
5177 - "ol",
5178 - "optgroup",
5179 - "option",
5180 - "output",
5181 - "p",
5182 - "picture",
5183 - "pre",
5184 - "progress",
5185 - "q",
5186 - "rp",
5187 - "rt",
5188 - "ruby",
5189 - "s",
5190 - "samp",
5191 - "search",
5192 - "section",
5193 - "select",
5194 - "shadow",
5195 - "slot",
5196 - "small",
5197 - "source",
5198 - "spacer",
5199 - "span",
5200 - "strike",
5201 - "strong",
5202 - "style",
5203 - "sub",
5204 - "summary",
5205 - "sup",
5206 - "table",
5207 - "tbody",
5208 - "td",
5209 - "template",
5210 - "textarea",
5211 - "tfoot",
5212 - "th",
5213 - "thead",
5214 - "time",
5215 - "tr",
5216 - "track",
5217 - "tt",
5218 - "u",
5219 - "ul",
5220 - "var",
5221 - "video",
5222 - "wbr"
5223 - ]);
5224 - var svg$1 = freeze([
5225 - "svg",
5226 - "a",
5227 - "altglyph",
5228 - "altglyphdef",
5229 - "altglyphitem",
5230 - "animatecolor",
5231 - "animatemotion",
5232 - "animatetransform",
5233 - "circle",
5234 - "clippath",
5235 - "defs",
5236 - "desc",
5237 - "ellipse",
5238 - "enterkeyhint",
5239 - "exportparts",
5240 - "filter",
5241 - "font",
5242 - "g",
5243 - "glyph",
5244 - "glyphref",
5245 - "hkern",
5246 - "image",
5247 - "inputmode",
5248 - "line",
5249 - "lineargradient",
5250 - "marker",
5251 - "mask",
5252 - "metadata",
5253 - "mpath",
5254 - "part",
5255 - "path",
5256 - "pattern",
5257 - "polygon",
5258 - "polyline",
5259 - "radialgradient",
5260 - "rect",
5261 - "stop",
5262 - "style",
5263 - "switch",
5264 - "symbol",
5265 - "text",
5266 - "textpath",
5267 - "title",
5268 - "tref",
5269 - "tspan",
5270 - "view",
5271 - "vkern"
5272 - ]);
5273 - var svgFilters = freeze([
5274 - "feBlend",
5275 - "feColorMatrix",
5276 - "feComponentTransfer",
5277 - "feComposite",
5278 - "feConvolveMatrix",
5279 - "feDiffuseLighting",
5280 - "feDisplacementMap",
5281 - "feDistantLight",
5282 - "feDropShadow",
5283 - "feFlood",
5284 - "feFuncA",
5285 - "feFuncB",
5286 - "feFuncG",
5287 - "feFuncR",
5288 - "feGaussianBlur",
5289 - "feImage",
5290 - "feMerge",
5291 - "feMergeNode",
5292 - "feMorphology",
5293 - "feOffset",
5294 - "fePointLight",
5295 - "feSpecularLighting",
5296 - "feSpotLight",
5297 - "feTile",
5298 - "feTurbulence"
5299 - ]);
5300 - var svgDisallowed = freeze([
5301 - "animate",
5302 - "color-profile",
5303 - "cursor",
5304 - "discard",
5305 - "font-face",
5306 - "font-face-format",
5307 - "font-face-name",
5308 - "font-face-src",
5309 - "font-face-uri",
5310 - "foreignobject",
5311 - "hatch",
5312 - "hatchpath",
5313 - "mesh",
5314 - "meshgradient",
5315 - "meshpatch",
5316 - "meshrow",
5317 - "missing-glyph",
5318 - "script",
5319 - "set",
5320 - "solidcolor",
5321 - "unknown",
5322 - "use"
5323 - ]);
5324 - var mathMl$1 = freeze([
5325 - "math",
5326 - "menclose",
5327 - "merror",
5328 - "mfenced",
5329 - "mfrac",
5330 - "mglyph",
5331 - "mi",
5332 - "mlabeledtr",
5333 - "mmultiscripts",
5334 - "mn",
5335 - "mo",
5336 - "mover",
5337 - "mpadded",
5338 - "mphantom",
5339 - "mroot",
5340 - "mrow",
5341 - "ms",
5342 - "mspace",
5343 - "msqrt",
5344 - "mstyle",
5345 - "msub",
5346 - "msup",
5347 - "msubsup",
5348 - "mtable",
5349 - "mtd",
5350 - "mtext",
5351 - "mtr",
5352 - "munder",
5353 - "munderover",
5354 - "mprescripts"
5355 - ]);
5356 - var mathMlDisallowed = freeze([
5357 - "maction",
5358 - "maligngroup",
5359 - "malignmark",
5360 - "mlongdiv",
5361 - "mscarries",
5362 - "mscarry",
5363 - "msgroup",
5364 - "mstack",
5365 - "msline",
5366 - "msrow",
5367 - "semantics",
5368 - "annotation",
5369 - "annotation-xml",
5370 - "mprescripts",
5371 - "none"
5372 - ]);
5373 - var text = freeze(["#text"]);
5374 - var html = freeze([
5375 - "accept",
5376 - "action",
5377 - "align",
5378 - "alt",
5379 - "autocapitalize",
5380 - "autocomplete",
5381 - "autopictureinpicture",
5382 - "autoplay",
5383 - "background",
5384 - "bgcolor",
5385 - "border",
5386 - "capture",
5387 - "cellpadding",
5388 - "cellspacing",
5389 - "checked",
5390 - "cite",
5391 - "class",
5392 - "clear",
5393 - "color",
5394 - "cols",
5395 - "colspan",
5396 - "controls",
5397 - "controlslist",
5398 - "coords",
5399 - "crossorigin",
5400 - "datetime",
5401 - "decoding",
5402 - "default",
5403 - "dir",
5404 - "disabled",
5405 - "disablepictureinpicture",
5406 - "disableremoteplayback",
5407 - "download",
5408 - "draggable",
5409 - "enctype",
5410 - "enterkeyhint",
5411 - "exportparts",
5412 - "face",
5413 - "for",
5414 - "headers",
5415 - "height",
5416 - "hidden",
5417 - "high",
5418 - "href",
5419 - "hreflang",
5420 - "id",
5421 - "inert",
5422 - "inputmode",
5423 - "integrity",
5424 - "ismap",
5425 - "kind",
5426 - "label",
5427 - "lang",
5428 - "list",
5429 - "loading",
5430 - "loop",
5431 - "low",
5432 - "max",
5433 - "maxlength",
5434 - "media",
5435 - "method",
5436 - "min",
5437 - "minlength",
5438 - "multiple",
5439 - "muted",
5440 - "name",
5441 - "nonce",
5442 - "noshade",
5443 - "novalidate",
5444 - "nowrap",
5445 - "open",
5446 - "optimum",
5447 - "part",
5448 - "pattern",
5449 - "placeholder",
5450 - "playsinline",
5451 - "popover",
5452 - "popovertarget",
5453 - "popovertargetaction",
5454 - "poster",
5455 - "preload",
5456 - "pubdate",
5457 - "radiogroup",
5458 - "readonly",
5459 - "rel",
5460 - "required",
5461 - "rev",
5462 - "reversed",
5463 - "role",
5464 - "rows",
5465 - "rowspan",
5466 - "spellcheck",
5467 - "scope",
5468 - "selected",
5469 - "shape",
5470 - "size",
5471 - "sizes",
5472 - "slot",
5473 - "span",
5474 - "srclang",
5475 - "start",
5476 - "src",
5477 - "srcset",
5478 - "step",
5479 - "style",
5480 - "summary",
5481 - "tabindex",
5482 - "title",
5483 - "translate",
5484 - "type",
5485 - "usemap",
5486 - "valign",
5487 - "value",
5488 - "width",
5489 - "wrap",
5490 - "xmlns",
5491 - "slot"
5492 - ]);
5493 - var svg = freeze([
5494 - "accent-height",
5495 - "accumulate",
5496 - "additive",
5497 - "alignment-baseline",
5498 - "amplitude",
5499 - "ascent",
5500 - "attributename",
5501 - "attributetype",
5502 - "azimuth",
5503 - "basefrequency",
5504 - "baseline-shift",
5505 - "begin",
5506 - "bias",
5507 - "by",
5508 - "class",
5509 - "clip",
5510 - "clippathunits",
5511 - "clip-path",
5512 - "clip-rule",
5513 - "color",
5514 - "color-interpolation",
5515 - "color-interpolation-filters",
5516 - "color-profile",
5517 - "color-rendering",
5518 - "cx",
5519 - "cy",
5520 - "d",
5521 - "dx",
5522 - "dy",
5523 - "diffuseconstant",
5524 - "direction",
5525 - "display",
5526 - "divisor",
5527 - "dur",
5528 - "edgemode",
5529 - "elevation",
5530 - "end",
5531 - "exponent",
5532 - "fill",
5533 - "fill-opacity",
5534 - "fill-rule",
5535 - "filter",
5536 - "filterunits",
5537 - "flood-color",
5538 - "flood-opacity",
5539 - "font-family",
5540 - "font-size",
5541 - "font-size-adjust",
5542 - "font-stretch",
5543 - "font-style",
5544 - "font-variant",
5545 - "font-weight",
5546 - "fx",
5547 - "fy",
5548 - "g1",
5549 - "g2",
5550 - "glyph-name",
5551 - "glyphref",
5552 - "gradientunits",
5553 - "gradienttransform",
5554 - "height",
5555 - "href",
5556 - "id",
5557 - "image-rendering",
5558 - "in",
5559 - "in2",
5560 - "intercept",
5561 - "k",
5562 - "k1",
5563 - "k2",
5564 - "k3",
5565 - "k4",
5566 - "kerning",
5567 - "keypoints",
5568 - "keysplines",
5569 - "keytimes",
5570 - "lang",
5571 - "lengthadjust",
5572 - "letter-spacing",
5573 - "kernelmatrix",
5574 - "kernelunitlength",
5575 - "lighting-color",
5576 - "local",
5577 - "marker-end",
5578 - "marker-mid",
5579 - "marker-start",
5580 - "markerheight",
5581 - "markerunits",
5582 - "markerwidth",
5583 - "maskcontentunits",
5584 - "maskunits",
5585 - "max",
5586 - "mask",
5587 - "mask-type",
5588 - "media",
5589 - "method",
5590 - "mode",
5591 - "min",
5592 - "name",
5593 - "numoctaves",
5594 - "offset",
5595 - "operator",
5596 - "opacity",
5597 - "order",
5598 - "orient",
5599 - "orientation",
5600 - "origin",
5601 - "overflow",
5602 - "paint-order",
5603 - "path",
5604 - "pathlength",
5605 - "patterncontentunits",
5606 - "patterntransform",
5607 - "patternunits",
5608 - "points",
5609 - "preservealpha",
5610 - "preserveaspectratio",
5611 - "primitiveunits",
5612 - "r",
5613 - "rx",
5614 - "ry",
5615 - "radius",
5616 - "refx",
5617 - "refy",
5618 - "repeatcount",
5619 - "repeatdur",
5620 - "restart",
5621 - "result",
5622 - "rotate",
5623 - "scale",
5624 - "seed",
5625 - "shape-rendering",
5626 - "slope",
5627 - "specularconstant",
5628 - "specularexponent",
5629 - "spreadmethod",
5630 - "startoffset",
5631 - "stddeviation",
5632 - "stitchtiles",
5633 - "stop-color",
5634 - "stop-opacity",
5635 - "stroke-dasharray",
5636 - "stroke-dashoffset",
5637 - "stroke-linecap",
5638 - "stroke-linejoin",
5639 - "stroke-miterlimit",
5640 - "stroke-opacity",
5641 - "stroke",
5642 - "stroke-width",
5643 - "style",
5644 - "surfacescale",
5645 - "systemlanguage",
5646 - "tabindex",
5647 - "tablevalues",
5648 - "targetx",
5649 - "targety",
5650 - "transform",
5651 - "transform-origin",
5652 - "text-anchor",
5653 - "text-decoration",
5654 - "text-rendering",
5655 - "textlength",
5656 - "type",
5657 - "u1",
5658 - "u2",
5659 - "unicode",
5660 - "values",
5661 - "viewbox",
5662 - "visibility",
5663 - "version",
5664 - "vert-adv-y",
5665 - "vert-origin-x",
5666 - "vert-origin-y",
5667 - "width",
5668 - "word-spacing",
5669 - "wrap",
5670 - "writing-mode",
5671 - "xchannelselector",
5672 - "ychannelselector",
5673 - "x",
5674 - "x1",
5675 - "x2",
5676 - "xmlns",
5677 - "y",
5678 - "y1",
5679 - "y2",
5680 - "z",
5681 - "zoomandpan"
5682 - ]);
5683 - var mathMl = freeze([
5684 - "accent",
5685 - "accentunder",
5686 - "align",
5687 - "bevelled",
5688 - "close",
5689 - "columnsalign",
5690 - "columnlines",
5691 - "columnspan",
5692 - "denomalign",
5693 - "depth",
5694 - "dir",
5695 - "display",
5696 - "displaystyle",
5697 - "encoding",
5698 - "fence",
5699 - "frame",
5700 - "height",
5701 - "href",
5702 - "id",
5703 - "largeop",
5704 - "length",
5705 - "linethickness",
5706 - "lspace",
5707 - "lquote",
5708 - "mathbackground",
5709 - "mathcolor",
5710 - "mathsize",
5711 - "mathvariant",
5712 - "maxsize",
5713 - "minsize",
5714 - "movablelimits",
5715 - "notation",
5716 - "numalign",
5717 - "open",
5718 - "rowalign",
5719 - "rowlines",
5720 - "rowspacing",
5721 - "rowspan",
5722 - "rspace",
5723 - "rquote",
5724 - "scriptlevel",
5725 - "scriptminsize",
5726 - "scriptsizemultiplier",
5727 - "selection",
5728 - "separator",
5729 - "separators",
5730 - "stretchy",
5731 - "subscriptshift",
5732 - "supscriptshift",
5733 - "symmetric",
5734 - "voffset",
5735 - "width",
5736 - "xmlns"
5737 - ]);
5738 - var xml = freeze([
5739 - "xlink:href",
5740 - "xml:id",
5741 - "xlink:title",
5742 - "xml:space",
5743 - "xmlns:xlink"
5744 - ]);
5745 - var MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm);
5746 - var ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm);
5747 - var TMPLIT_EXPR = seal(/\$\{[\w\W]*/gm);
5748 - var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]+$/);
5749 - var ARIA_ATTR = seal(/^aria-[\-\w]+$/);
5750 - var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);
5751 - var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
5752 - var ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);
5753 - var DOCTYPE_NAME = seal(/^html$/i);
5754 - var CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i);
5755 - var EXPRESSIONS = /*#__PURE__*/ Object.freeze({
5756 - __proto__: null,
5757 - ARIA_ATTR,
5758 - ATTR_WHITESPACE,
5759 - CUSTOM_ELEMENT,
5760 - DATA_ATTR,
5761 - DOCTYPE_NAME,
5762 - ERB_EXPR,
5763 - IS_ALLOWED_URI,
5764 - IS_SCRIPT_OR_DATA,
5765 - MUSTACHE_EXPR,
5766 - TMPLIT_EXPR
5767 - });
5768 - var NODE_TYPE = {
5769 - element: 1,
5770 - attribute: 2,
5771 - text: 3,
5772 - cdataSection: 4,
5773 - entityReference: 5,
5774 - entityNode: 6,
5775 - progressingInstruction: 7,
5776 - comment: 8,
5777 - document: 9,
5778 - documentType: 10,
5779 - documentFragment: 11,
5780 - notation: 12
5781 - };
5782 - var getGlobal = function getGlobal() {
5783 - return typeof window === "undefined" ? null : window;
5784 - };
5785 - /**
5786 - * Creates a no-op policy for internal use only.
5787 - * Don't export this function outside this module!
5788 - * @param trustedTypes The policy factory.
5789 - * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).
5790 - * @return The policy created (or null, if Trusted Types
5791 - * are not supported or creating the policy failed).
5792 - */
5793 - var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {
5794 - if (typeof trustedTypes !== "object" || typeof trustedTypes.createPolicy !== "function") return null;
5795 - let suffix = null;
5796 - const ATTR_NAME = "data-tt-policy-suffix";
5797 - if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) suffix = purifyHostElement.getAttribute(ATTR_NAME);
5798 - const policyName = "dompurify" + (suffix ? "#" + suffix : "");
5799 - try {
5800 - return trustedTypes.createPolicy(policyName, {
5801 - createHTML(html) {
5802 - return html;
5803 - },
5804 - createScriptURL(scriptUrl) {
5805 - return scriptUrl;
5806 - }
5807 - });
5808 - } catch (_) {
5809 - console.warn("TrustedTypes policy " + policyName + " could not be created.");
5810 - return null;
5811 - }
5812 - };
5813 - var _createHooksMap = function _createHooksMap() {
5814 - return {
5815 - afterSanitizeAttributes: [],
5816 - afterSanitizeElements: [],
5817 - afterSanitizeShadowDOM: [],
5818 - beforeSanitizeAttributes: [],
5819 - beforeSanitizeElements: [],
5820 - beforeSanitizeShadowDOM: [],
5821 - uponSanitizeAttribute: [],
5822 - uponSanitizeElement: [],
5823 - uponSanitizeShadowNode: []
5824 - };
5825 - };
5826 - function createDOMPurify() {
5827 - let window = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();
5828 - const DOMPurify = (root) => createDOMPurify(root);
5829 - DOMPurify.version = "3.3.0";
5830 - DOMPurify.removed = [];
5831 - if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
5832 - DOMPurify.isSupported = false;
5833 - return DOMPurify;
5834 - }
5835 - let { document } = window;
5836 - const originalDocument = document;
5837 - const currentScript = originalDocument.currentScript;
5838 - const { DocumentFragment, HTMLTemplateElement, Node, Element, NodeFilter, NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap, HTMLFormElement, DOMParser, trustedTypes } = window;
5839 - const ElementPrototype = Element.prototype;
5840 - const cloneNode = lookupGetter(ElementPrototype, "cloneNode");
5841 - const remove = lookupGetter(ElementPrototype, "remove");
5842 - const getNextSibling = lookupGetter(ElementPrototype, "nextSibling");
5843 - const getChildNodes = lookupGetter(ElementPrototype, "childNodes");
5844 - const getParentNode = lookupGetter(ElementPrototype, "parentNode");
5845 - if (typeof HTMLTemplateElement === "function") {
5846 - const template = document.createElement("template");
5847 - if (template.content && template.content.ownerDocument) document = template.content.ownerDocument;
5848 - }
5849 - let trustedTypesPolicy;
5850 - let emptyHTML = "";
5851 - const { implementation, createNodeIterator, createDocumentFragment, getElementsByTagName } = document;
5852 - const { importNode } = originalDocument;
5853 - let hooks = _createHooksMap();
5854 - /**
5855 - * Expose whether this browser supports running the full DOMPurify.
5856 - */
5857 - DOMPurify.isSupported = typeof entries === "function" && typeof getParentNode === "function" && implementation && implementation.createHTMLDocument !== void 0;
5858 - const { MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR, DATA_ATTR, ARIA_ATTR, IS_SCRIPT_OR_DATA, ATTR_WHITESPACE, CUSTOM_ELEMENT } = EXPRESSIONS;
5859 - let { IS_ALLOWED_URI: IS_ALLOWED_URI$1 } = EXPRESSIONS;
5860 - /**
5861 - * We consider the elements and attributes below to be safe. Ideally
5862 - * don't add any new ones but feel free to remove unwanted ones.
5863 - */
5864 - let ALLOWED_TAGS = null;
5865 - const DEFAULT_ALLOWED_TAGS = addToSet({}, [
5866 - ...html$1,
5867 - ...svg$1,
5868 - ...svgFilters,
5869 - ...mathMl$1,
5870 - ...text
5871 - ]);
5872 - let ALLOWED_ATTR = null;
5873 - const DEFAULT_ALLOWED_ATTR = addToSet({}, [
5874 - ...html,
5875 - ...svg,
5876 - ...mathMl,
5877 - ...xml
5878 - ]);
5879 - let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {
5880 - tagNameCheck: {
5881 - writable: true,
5882 - configurable: false,
5883 - enumerable: true,
5884 - value: null
5885 - },
5886 - attributeNameCheck: {
5887 - writable: true,
5888 - configurable: false,
5889 - enumerable: true,
5890 - value: null
5891 - },
5892 - allowCustomizedBuiltInElements: {
5893 - writable: true,
5894 - configurable: false,
5895 - enumerable: true,
5896 - value: false
5897 - }
5898 - }));
5899 - let FORBID_TAGS = null;
5900 - let FORBID_ATTR = null;
5901 - const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {
5902 - tagCheck: {
5903 - writable: true,
5904 - configurable: false,
5905 - enumerable: true,
5906 - value: null
5907 - },
5908 - attributeCheck: {
5909 - writable: true,
5910 - configurable: false,
5911 - enumerable: true,
5912 - value: null
5913 - }
5914 - }));
5915 - let ALLOW_ARIA_ATTR = true;
5916 - let ALLOW_DATA_ATTR = true;
5917 - let ALLOW_UNKNOWN_PROTOCOLS = false;
5918 - let ALLOW_SELF_CLOSE_IN_ATTR = true;
5919 - let SAFE_FOR_TEMPLATES = false;
5920 - let SAFE_FOR_XML = true;
5921 - let WHOLE_DOCUMENT = false;
5922 - let SET_CONFIG = false;
5923 - let FORCE_BODY = false;
5924 - let RETURN_DOM = false;
5925 - let RETURN_DOM_FRAGMENT = false;
5926 - let RETURN_TRUSTED_TYPE = false;
5927 - let SANITIZE_DOM = true;
5928 - let SANITIZE_NAMED_PROPS = false;
5929 - const SANITIZE_NAMED_PROPS_PREFIX = "user-content-";
5930 - let KEEP_CONTENT = true;
5931 - let IN_PLACE = false;
5932 - let USE_PROFILES = {};
5933 - let FORBID_CONTENTS = null;
5934 - const DEFAULT_FORBID_CONTENTS = addToSet({}, [
5935 - "annotation-xml",
5936 - "audio",
5937 - "colgroup",
5938 - "desc",
5939 - "foreignobject",
5940 - "head",
5941 - "iframe",
5942 - "math",
5943 - "mi",
5944 - "mn",
5945 - "mo",
5946 - "ms",
5947 - "mtext",
5948 - "noembed",
5949 - "noframes",
5950 - "noscript",
5951 - "plaintext",
5952 - "script",
5953 - "style",
5954 - "svg",
5955 - "template",
5956 - "thead",
5957 - "title",
5958 - "video",
5959 - "xmp"
5960 - ]);
5961 - let DATA_URI_TAGS = null;
5962 - const DEFAULT_DATA_URI_TAGS = addToSet({}, [
5963 - "audio",
5964 - "video",
5965 - "img",
5966 - "source",
5967 - "image",
5968 - "track"
5969 - ]);
5970 - let URI_SAFE_ATTRIBUTES = null;
5971 - const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [
5972 - "alt",
5973 - "class",
5974 - "for",
5975 - "id",
5976 - "label",
5977 - "name",
5978 - "pattern",
5979 - "placeholder",
5980 - "role",
5981 - "summary",
5982 - "title",
5983 - "value",
5984 - "style",
5985 - "xmlns"
5986 - ]);
5987 - const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
5988 - const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
5989 - const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
5990 - let NAMESPACE = HTML_NAMESPACE;
5991 - let IS_EMPTY_INPUT = false;
5992 - let ALLOWED_NAMESPACES = null;
5993 - const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [
5994 - MATHML_NAMESPACE,
5995 - SVG_NAMESPACE,
5996 - HTML_NAMESPACE
5997 - ], stringToString);
5998 - let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [
5999 - "mi",
6000 - "mo",
6001 - "mn",
6002 - "ms",
6003 - "mtext"
6004 - ]);
6005 - let HTML_INTEGRATION_POINTS = addToSet({}, ["annotation-xml"]);
6006 - const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [
6007 - "title",
6008 - "style",
6009 - "font",
6010 - "a",
6011 - "script"
6012 - ]);
6013 - let PARSER_MEDIA_TYPE = null;
6014 - const SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"];
6015 - const DEFAULT_PARSER_MEDIA_TYPE = "text/html";
6016 - let transformCaseFunc = null;
6017 - let CONFIG = null;
6018 - const formElement = document.createElement("form");
6019 - const isRegexOrFunction = function isRegexOrFunction(testValue) {
6020 - return testValue instanceof RegExp || testValue instanceof Function;
6021 - };
6022 - /**
6023 - * _parseConfig
6024 - *
6025 - * @param cfg optional config literal
6026 - */
6027 - const _parseConfig = function _parseConfig() {
6028 - let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
6029 - if (CONFIG && CONFIG === cfg) return;
6030 - if (!cfg || typeof cfg !== "object") cfg = {};
6031 - cfg = clone(cfg);
6032 - PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;
6033 - transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? stringToString : stringToLowerCase;
6034 - ALLOWED_TAGS = objectHasOwnProperty(cfg, "ALLOWED_TAGS") ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;
6035 - ALLOWED_ATTR = objectHasOwnProperty(cfg, "ALLOWED_ATTR") ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;
6036 - ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, "ALLOWED_NAMESPACES") ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;
6037 - URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, "ADD_URI_SAFE_ATTR") ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;
6038 - DATA_URI_TAGS = objectHasOwnProperty(cfg, "ADD_DATA_URI_TAGS") ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;
6039 - FORBID_CONTENTS = objectHasOwnProperty(cfg, "FORBID_CONTENTS") ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;
6040 - FORBID_TAGS = objectHasOwnProperty(cfg, "FORBID_TAGS") ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});
6041 - FORBID_ATTR = objectHasOwnProperty(cfg, "FORBID_ATTR") ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});
6042 - USE_PROFILES = objectHasOwnProperty(cfg, "USE_PROFILES") ? cfg.USE_PROFILES : false;
6043 - ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;
6044 - ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;
6045 - ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;
6046 - ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false;
6047 - SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;
6048 - SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false;
6049 - WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;
6050 - RETURN_DOM = cfg.RETURN_DOM || false;
6051 - RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;
6052 - RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;
6053 - FORCE_BODY = cfg.FORCE_BODY || false;
6054 - SANITIZE_DOM = cfg.SANITIZE_DOM !== false;
6055 - SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false;
6056 - KEEP_CONTENT = cfg.KEEP_CONTENT !== false;
6057 - IN_PLACE = cfg.IN_PLACE || false;
6058 - IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;
6059 - NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;
6060 - MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;
6061 - HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;
6062 - CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
6063 - if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;
6064 - if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;
6065 - if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === "boolean") CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;
6066 - if (SAFE_FOR_TEMPLATES) ALLOW_DATA_ATTR = false;
6067 - if (RETURN_DOM_FRAGMENT) RETURN_DOM = true;
6068 - if (USE_PROFILES) {
6069 - ALLOWED_TAGS = addToSet({}, text);
6070 - ALLOWED_ATTR = [];
6071 - if (USE_PROFILES.html === true) {
6072 - addToSet(ALLOWED_TAGS, html$1);
6073 - addToSet(ALLOWED_ATTR, html);
6074 - }
6075 - if (USE_PROFILES.svg === true) {
6076 - addToSet(ALLOWED_TAGS, svg$1);
6077 - addToSet(ALLOWED_ATTR, svg);
6078 - addToSet(ALLOWED_ATTR, xml);
6079 - }
6080 - if (USE_PROFILES.svgFilters === true) {
6081 - addToSet(ALLOWED_TAGS, svgFilters);
6082 - addToSet(ALLOWED_ATTR, svg);
6083 - addToSet(ALLOWED_ATTR, xml);
6084 - }
6085 - if (USE_PROFILES.mathMl === true) {
6086 - addToSet(ALLOWED_TAGS, mathMl$1);
6087 - addToSet(ALLOWED_ATTR, mathMl);
6088 - addToSet(ALLOWED_ATTR, xml);
6089 - }
6090 - }
6091 - if (cfg.ADD_TAGS) if (typeof cfg.ADD_TAGS === "function") EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;
6092 - else {
6093 - if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) ALLOWED_TAGS = clone(ALLOWED_TAGS);
6094 - addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
6095 - }
6096 - if (cfg.ADD_ATTR) if (typeof cfg.ADD_ATTR === "function") EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;
6097 - else {
6098 - if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) ALLOWED_ATTR = clone(ALLOWED_ATTR);
6099 - addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);
6100 - }
6101 - if (cfg.ADD_URI_SAFE_ATTR) addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);
6102 - if (cfg.FORBID_CONTENTS) {
6103 - if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) FORBID_CONTENTS = clone(FORBID_CONTENTS);
6104 - addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);
6105 - }
6106 - if (KEEP_CONTENT) ALLOWED_TAGS["#text"] = true;
6107 - if (WHOLE_DOCUMENT) addToSet(ALLOWED_TAGS, [
6108 - "html",
6109 - "head",
6110 - "body"
6111 - ]);
6112 - if (ALLOWED_TAGS.table) {
6113 - addToSet(ALLOWED_TAGS, ["tbody"]);
6114 - delete FORBID_TAGS.tbody;
6115 - }
6116 - if (cfg.TRUSTED_TYPES_POLICY) {
6117 - if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== "function") throw typeErrorCreate("TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.");
6118 - if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== "function") throw typeErrorCreate("TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.");
6119 - trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;
6120 - emptyHTML = trustedTypesPolicy.createHTML("");
6121 - } else {
6122 - if (trustedTypesPolicy === void 0) trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);
6123 - if (trustedTypesPolicy !== null && typeof emptyHTML === "string") emptyHTML = trustedTypesPolicy.createHTML("");
6124 - }
6125 - if (freeze) freeze(cfg);
6126 - CONFIG = cfg;
6127 - };
6128 - const ALL_SVG_TAGS = addToSet({}, [
6129 - ...svg$1,
6130 - ...svgFilters,
6131 - ...svgDisallowed
6132 - ]);
6133 - const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);
6134 - /**
6135 - * @param element a DOM element whose namespace is being checked
6136 - * @returns Return false if the element has a
6137 - * namespace that a spec-compliant parser would never
6138 - * return. Return true otherwise.
6139 - */
6140 - const _checkValidNamespace = function _checkValidNamespace(element) {
6141 - let parent = getParentNode(element);
6142 - if (!parent || !parent.tagName) parent = {
6143 - namespaceURI: NAMESPACE,
6144 - tagName: "template"
6145 - };
6146 - const tagName = stringToLowerCase(element.tagName);
6147 - const parentTagName = stringToLowerCase(parent.tagName);
6148 - if (!ALLOWED_NAMESPACES[element.namespaceURI]) return false;
6149 - if (element.namespaceURI === SVG_NAMESPACE) {
6150 - if (parent.namespaceURI === HTML_NAMESPACE) return tagName === "svg";
6151 - if (parent.namespaceURI === MATHML_NAMESPACE) return tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
6152 - return Boolean(ALL_SVG_TAGS[tagName]);
6153 - }
6154 - if (element.namespaceURI === MATHML_NAMESPACE) {
6155 - if (parent.namespaceURI === HTML_NAMESPACE) return tagName === "math";
6156 - if (parent.namespaceURI === SVG_NAMESPACE) return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName];
6157 - return Boolean(ALL_MATHML_TAGS[tagName]);
6158 - }
6159 - if (element.namespaceURI === HTML_NAMESPACE) {
6160 - if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) return false;
6161 - if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) return false;
6162 - return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
6163 - }
6164 - if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[element.namespaceURI]) return true;
6165 - return false;
6166 - };
6167 - /**
6168 - * _forceRemove
6169 - *
6170 - * @param node a DOM node
6171 - */
6172 - const _forceRemove = function _forceRemove(node) {
6173 - arrayPush(DOMPurify.removed, { element: node });
6174 - try {
6175 - getParentNode(node).removeChild(node);
6176 - } catch (_) {
6177 - remove(node);
6178 - }
6179 - };
6180 - /**
6181 - * _removeAttribute
6182 - *
6183 - * @param name an Attribute name
6184 - * @param element a DOM node
6185 - */
6186 - const _removeAttribute = function _removeAttribute(name, element) {
6187 - try {
6188 - arrayPush(DOMPurify.removed, {
6189 - attribute: element.getAttributeNode(name),
6190 - from: element
6191 - });
6192 - } catch (_) {
6193 - arrayPush(DOMPurify.removed, {
6194 - attribute: null,
6195 - from: element
6196 - });
6197 - }
6198 - element.removeAttribute(name);
6199 - if (name === "is") if (RETURN_DOM || RETURN_DOM_FRAGMENT) try {
6200 - _forceRemove(element);
6201 - } catch (_) {}
6202 - else try {
6203 - element.setAttribute(name, "");
6204 - } catch (_) {}
6205 - };
6206 - /**
6207 - * _initDocument
6208 - *
6209 - * @param dirty - a string of dirty markup
6210 - * @return a DOM, filled with the dirty markup
6211 - */
6212 - const _initDocument = function _initDocument(dirty) {
6213 - let doc = null;
6214 - let leadingWhitespace = null;
6215 - if (FORCE_BODY) dirty = "<remove></remove>" + dirty;
6216 - else {
6217 - const matches = stringMatch(dirty, /^[\r\n\t ]+/);
6218 - leadingWhitespace = matches && matches[0];
6219 - }
6220 - if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE) dirty = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>" + dirty + "</body></html>";
6221 - const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
6222 - if (NAMESPACE === HTML_NAMESPACE) try {
6223 - doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
6224 - } catch (_) {}
6225 - if (!doc || !doc.documentElement) {
6226 - doc = implementation.createDocument(NAMESPACE, "template", null);
6227 - try {
6228 - doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;
6229 - } catch (_) {}
6230 - }
6231 - const body = doc.body || doc.documentElement;
6232 - if (dirty && leadingWhitespace) body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);
6233 - if (NAMESPACE === HTML_NAMESPACE) return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0];
6234 - return WHOLE_DOCUMENT ? doc.documentElement : body;
6235 - };
6236 - /**
6237 - * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.
6238 - *
6239 - * @param root The root element or node to start traversing on.
6240 - * @return The created NodeIterator
6241 - */
6242 - const _createNodeIterator = function _createNodeIterator(root) {
6243 - return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);
6244 - };
6245 - /**
6246 - * _isClobbered
6247 - *
6248 - * @param element element to check for clobbering attacks
6249 - * @return true if clobbered, false if safe
6250 - */
6251 - const _isClobbered = function _isClobbered(element) {
6252 - return element instanceof HTMLFormElement && (typeof element.nodeName !== "string" || typeof element.textContent !== "string" || typeof element.removeChild !== "function" || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== "function" || typeof element.setAttribute !== "function" || typeof element.namespaceURI !== "string" || typeof element.insertBefore !== "function" || typeof element.hasChildNodes !== "function");
6253 - };
6254 - /**
6255 - * Checks whether the given object is a DOM node.
6256 - *
6257 - * @param value object to check whether it's a DOM node
6258 - * @return true is object is a DOM node
6259 - */
6260 - const _isNode = function _isNode(value) {
6261 - return typeof Node === "function" && value instanceof Node;
6262 - };
6263 - function _executeHooks(hooks, currentNode, data) {
6264 - arrayForEach(hooks, (hook) => {
6265 - hook.call(DOMPurify, currentNode, data, CONFIG);
6266 - });
6267 - }
6268 - /**
6269 - * _sanitizeElements
6270 - *
6271 - * @protect nodeName
6272 - * @protect textContent
6273 - * @protect removeChild
6274 - * @param currentNode to check for permission to exist
6275 - * @return true if node was killed, false if left alive
6276 - */
6277 - const _sanitizeElements = function _sanitizeElements(currentNode) {
6278 - let content = null;
6279 - _executeHooks(hooks.beforeSanitizeElements, currentNode, null);
6280 - if (_isClobbered(currentNode)) {
6281 - _forceRemove(currentNode);
6282 - return true;
6283 - }
6284 - const tagName = transformCaseFunc(currentNode.nodeName);
6285 - _executeHooks(hooks.uponSanitizeElement, currentNode, {
6286 - tagName,
6287 - allowedTags: ALLOWED_TAGS
6288 - });
6289 - if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\w!]/g, currentNode.textContent)) {
6290 - _forceRemove(currentNode);
6291 - return true;
6292 - }
6293 - if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {
6294 - _forceRemove(currentNode);
6295 - return true;
6296 - }
6297 - if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\w]/g, currentNode.data)) {
6298 - _forceRemove(currentNode);
6299 - return true;
6300 - }
6301 - if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {
6302 - if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {
6303 - if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;
6304 - if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) return false;
6305 - }
6306 - if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
6307 - const parentNode = getParentNode(currentNode) || currentNode.parentNode;
6308 - const childNodes = getChildNodes(currentNode) || currentNode.childNodes;
6309 - if (childNodes && parentNode) {
6310 - const childCount = childNodes.length;
6311 - for (let i = childCount - 1; i >= 0; --i) {
6312 - const childClone = cloneNode(childNodes[i], true);
6313 - childClone.__removalCount = (currentNode.__removalCount || 0) + 1;
6314 - parentNode.insertBefore(childClone, getNextSibling(currentNode));
6315 - }
6316 - }
6317 - }
6318 - _forceRemove(currentNode);
6319 - return true;
6320 - }
6321 - if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {
6322 - _forceRemove(currentNode);
6323 - return true;
6324 - }
6325 - if ((tagName === "noscript" || tagName === "noembed" || tagName === "noframes") && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) {
6326 - _forceRemove(currentNode);
6327 - return true;
6328 - }
6329 - if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {
6330 - content = currentNode.textContent;
6331 - arrayForEach([
6332 - MUSTACHE_EXPR,
6333 - ERB_EXPR,
6334 - TMPLIT_EXPR
6335 - ], (expr) => {
6336 - content = stringReplace(content, expr, " ");
6337 - });
6338 - if (currentNode.textContent !== content) {
6339 - arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });
6340 - currentNode.textContent = content;
6341 - }
6342 - }
6343 - _executeHooks(hooks.afterSanitizeElements, currentNode, null);
6344 - return false;
6345 - };
6346 - /**
6347 - * _isValidAttribute
6348 - *
6349 - * @param lcTag Lowercase tag name of containing element.
6350 - * @param lcName Lowercase attribute name.
6351 - * @param value Attribute value.
6352 - * @return Returns true if `value` is valid, otherwise false.
6353 - */
6354 - const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
6355 - if (SANITIZE_DOM && (lcName === "id" || lcName === "name") && (value in document || value in formElement)) return false;
6356 - if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName));
6357 - else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName));
6358 - else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag));
6359 - else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) if (_isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) || lcName === "is" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value)));
6360 - else return false;
6361 - else if (URI_SAFE_ATTRIBUTES[lcName]);
6362 - else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, "")));
6363 - else if ((lcName === "src" || lcName === "xlink:href" || lcName === "href") && lcTag !== "script" && stringIndexOf(value, "data:") === 0 && DATA_URI_TAGS[lcTag]);
6364 - else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, "")));
6365 - else if (value) return false;
6366 - return true;
6367 - };
6368 - /**
6369 - * _isBasicCustomElement
6370 - * checks if at least one dash is included in tagName, and it's not the first char
6371 - * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name
6372 - *
6373 - * @param tagName name of the tag of the node to sanitize
6374 - * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.
6375 - */
6376 - const _isBasicCustomElement = function _isBasicCustomElement(tagName) {
6377 - return tagName !== "annotation-xml" && stringMatch(tagName, CUSTOM_ELEMENT);
6378 - };
6379 - /**
6380 - * _sanitizeAttributes
6381 - *
6382 - * @protect attributes
6383 - * @protect nodeName
6384 - * @protect removeAttribute
6385 - * @protect setAttribute
6386 - *
6387 - * @param currentNode to sanitize
6388 - */
6389 - const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {
6390 - _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);
6391 - const { attributes } = currentNode;
6392 - if (!attributes || _isClobbered(currentNode)) return;
6393 - const hookEvent = {
6394 - attrName: "",
6395 - attrValue: "",
6396 - keepAttr: true,
6397 - allowedAttributes: ALLOWED_ATTR,
6398 - forceKeepAttr: void 0
6399 - };
6400 - let l = attributes.length;
6401 - while (l--) {
6402 - const { name, namespaceURI, value: attrValue } = attributes[l];
6403 - const lcName = transformCaseFunc(name);
6404 - const initValue = attrValue;
6405 - let value = name === "value" ? initValue : stringTrim(initValue);
6406 - hookEvent.attrName = lcName;
6407 - hookEvent.attrValue = value;
6408 - hookEvent.keepAttr = true;
6409 - hookEvent.forceKeepAttr = void 0;
6410 - _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);
6411 - value = hookEvent.attrValue;
6412 - if (SANITIZE_NAMED_PROPS && (lcName === "id" || lcName === "name")) {
6413 - _removeAttribute(name, currentNode);
6414 - value = SANITIZE_NAMED_PROPS_PREFIX + value;
6415 - }
6416 - if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title|textarea)/i, value)) {
6417 - _removeAttribute(name, currentNode);
6418 - continue;
6419 - }
6420 - if (lcName === "attributename" && stringMatch(value, "href")) {
6421 - _removeAttribute(name, currentNode);
6422 - continue;
6423 - }
6424 - if (hookEvent.forceKeepAttr) continue;
6425 - if (!hookEvent.keepAttr) {
6426 - _removeAttribute(name, currentNode);
6427 - continue;
6428 - }
6429 - if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) {
6430 - _removeAttribute(name, currentNode);
6431 - continue;
6432 - }
6433 - if (SAFE_FOR_TEMPLATES) arrayForEach([
6434 - MUSTACHE_EXPR,
6435 - ERB_EXPR,
6436 - TMPLIT_EXPR
6437 - ], (expr) => {
6438 - value = stringReplace(value, expr, " ");
6439 - });
6440 - const lcTag = transformCaseFunc(currentNode.nodeName);
6441 - if (!_isValidAttribute(lcTag, lcName, value)) {
6442 - _removeAttribute(name, currentNode);
6443 - continue;
6444 - }
6445 - if (trustedTypesPolicy && typeof trustedTypes === "object" && typeof trustedTypes.getAttributeType === "function") if (namespaceURI);
6446 - else switch (trustedTypes.getAttributeType(lcTag, lcName)) {
6447 - case "TrustedHTML":
6448 - value = trustedTypesPolicy.createHTML(value);
6449 - break;
6450 - case "TrustedScriptURL":
6451 - value = trustedTypesPolicy.createScriptURL(value);
6452 - break;
6453 - }
6454 - if (value !== initValue) try {
6455 - if (namespaceURI) currentNode.setAttributeNS(namespaceURI, name, value);
6456 - else currentNode.setAttribute(name, value);
6457 - if (_isClobbered(currentNode)) _forceRemove(currentNode);
6458 - else arrayPop(DOMPurify.removed);
6459 - } catch (_) {
6460 - _removeAttribute(name, currentNode);
6461 - }
6462 - }
6463 - _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);
6464 - };
6465 - /**
6466 - * _sanitizeShadowDOM
6467 - *
6468 - * @param fragment to iterate over recursively
6469 - */
6470 - const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {
6471 - let shadowNode = null;
6472 - const shadowIterator = _createNodeIterator(fragment);
6473 - _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);
6474 - while (shadowNode = shadowIterator.nextNode()) {
6475 - _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);
6476 - _sanitizeElements(shadowNode);
6477 - _sanitizeAttributes(shadowNode);
6478 - if (shadowNode.content instanceof DocumentFragment) _sanitizeShadowDOM(shadowNode.content);
6479 - }
6480 - _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);
6481 - };
6482 - DOMPurify.sanitize = function(dirty) {
6483 - let cfg = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
6484 - let body = null;
6485 - let importedNode = null;
6486 - let currentNode = null;
6487 - let returnNode = null;
6488 - IS_EMPTY_INPUT = !dirty;
6489 - if (IS_EMPTY_INPUT) dirty = "<!-->";
6490 - if (typeof dirty !== "string" && !_isNode(dirty)) if (typeof dirty.toString === "function") {
6491 - dirty = dirty.toString();
6492 - if (typeof dirty !== "string") throw typeErrorCreate("dirty is not a string, aborting");
6493 - } else throw typeErrorCreate("toString is not a function");
6494 - if (!DOMPurify.isSupported) return dirty;
6495 - if (!SET_CONFIG) _parseConfig(cfg);
6496 - DOMPurify.removed = [];
6497 - if (typeof dirty === "string") IN_PLACE = false;
6498 - if (IN_PLACE) {
6499 - if (dirty.nodeName) {
6500 - const tagName = transformCaseFunc(dirty.nodeName);
6501 - if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) throw typeErrorCreate("root node is forbidden and cannot be sanitized in-place");
6502 - }
6503 - } else if (dirty instanceof Node) {
6504 - body = _initDocument("<!---->");
6505 - importedNode = body.ownerDocument.importNode(dirty, true);
6506 - if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY") body = importedNode;
6507 - else if (importedNode.nodeName === "HTML") body = importedNode;
6508 - else body.appendChild(importedNode);
6509 - } else {
6510 - if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf("<") === -1) return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;
6511 - body = _initDocument(dirty);
6512 - if (!body) return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : "";
6513 - }
6514 - if (body && FORCE_BODY) _forceRemove(body.firstChild);
6515 - const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);
6516 - while (currentNode = nodeIterator.nextNode()) {
6517 - _sanitizeElements(currentNode);
6518 - _sanitizeAttributes(currentNode);
6519 - if (currentNode.content instanceof DocumentFragment) _sanitizeShadowDOM(currentNode.content);
6520 - }
6521 - if (IN_PLACE) return dirty;
6522 - if (RETURN_DOM) {
6523 - if (RETURN_DOM_FRAGMENT) {
6524 - returnNode = createDocumentFragment.call(body.ownerDocument);
6525 - while (body.firstChild) returnNode.appendChild(body.firstChild);
6526 - } else returnNode = body;
6527 - if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) returnNode = importNode.call(originalDocument, returnNode, true);
6528 - return returnNode;
6529 - }
6530 - let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
6531 - if (WHOLE_DOCUMENT && ALLOWED_TAGS["!doctype"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) serializedHTML = "<!DOCTYPE " + body.ownerDocument.doctype.name + ">\n" + serializedHTML;
6532 - if (SAFE_FOR_TEMPLATES) arrayForEach([
6533 - MUSTACHE_EXPR,
6534 - ERB_EXPR,
6535 - TMPLIT_EXPR
6536 - ], (expr) => {
6537 - serializedHTML = stringReplace(serializedHTML, expr, " ");
6538 - });
6539 - return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
6540 - };
6541 - DOMPurify.setConfig = function() {
6542 - let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
6543 - _parseConfig(cfg);
6544 - SET_CONFIG = true;
6545 - };
6546 - DOMPurify.clearConfig = function() {
6547 - CONFIG = null;
6548 - SET_CONFIG = false;
6549 - };
6550 - DOMPurify.isValidAttribute = function(tag, attr, value) {
6551 - if (!CONFIG) _parseConfig({});
6552 - const lcTag = transformCaseFunc(tag);
6553 - const lcName = transformCaseFunc(attr);
6554 - return _isValidAttribute(lcTag, lcName, value);
6555 - };
6556 - DOMPurify.addHook = function(entryPoint, hookFunction) {
6557 - if (typeof hookFunction !== "function") return;
6558 - arrayPush(hooks[entryPoint], hookFunction);
6559 - };
6560 - DOMPurify.removeHook = function(entryPoint, hookFunction) {
6561 - if (hookFunction !== void 0) {
6562 - const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);
6563 - return index === -1 ? void 0 : arraySplice(hooks[entryPoint], index, 1)[0];
6564 - }
6565 - return arrayPop(hooks[entryPoint]);
6566 - };
6567 - DOMPurify.removeHooks = function(entryPoint) {
6568 - hooks[entryPoint] = [];
6569 - };
6570 - DOMPurify.removeAllHooks = function() {
6571 - hooks = _createHooksMap();
6572 - };
6573 - return DOMPurify;
6574 - }
6575 - var purify = createDOMPurify();
6576 -
6577 -//#endregion
6578 -//#region packages/packages/core/editor-canvas/src/utils/sanitize-escaped-html.ts
6579 - var ALLOWED_NON_OPERATIONAL_ATTRS = [
6580 - "href",
6581 - "target",
6582 - "class",
6583 - "id",
6584 - "style",
6585 - "title",
6586 - "lang",
6587 - "dir",
6588 - "role"
6589 - ];
6590 - function getAllowedHtmlWrapperTags$1() {
6591 - return window.elementorCommon?.config?.allowedHTMLWrapperTags ?? [];
6592 - }
6593 - __name(getAllowedHtmlWrapperTags$1, "getAllowedHtmlWrapperTags");
6594 - function sanitizeEscapedHtml(value) {
6595 - if (!value) return "";
6596 - const allowedTags = [...getAllowedHtmlWrapperTags$1()];
6597 - return purify.sanitize(value, {
6598 - ALLOWED_TAGS: allowedTags,
6599 - ALLOWED_ATTR: [...ALLOWED_NON_OPERATIONAL_ATTRS],
6600 - ALLOW_DATA_ATTR: true,
6601 - ALLOW_ARIA_ATTR: true
6602 - });
6603 - }
6604 -
6605 -//#endregion
6606 -//#region packages/packages/core/editor-canvas/src/transformers/settings/escaped-html-transformer.ts
6607 - var escapedHtmlTransformer = createTransformer((value) => {
6608 - return sanitizeEscapedHtml(value);
6609 - });
6610 -
6611 -//#endregion
6612 -//#region packages/packages/core/editor-canvas/src/transformers/settings/html-v2-transformer.ts
6613 - var htmlV2Transformer = createTransformer((value) => {
6614 - return value?.content ?? "";
6615 - });
6616 -
6617 -//#endregion
6618 -//#region packages/packages/core/editor-canvas/src/transformers/settings/html-v3-transformer.ts
6619 - var htmlV3Transformer = createTransformer((value) => {
6620 - return value?.content ?? "";
6621 - });
6622 -
6623 -//#endregion
6624 -//#region packages/packages/core/editor-canvas/src/transformers/settings/link-transformer.ts
6625 - var linkTransformer = createTransformer(({ destination, isTargetBlank, tag }) => {
6626 - return {
6627 - href: typeof destination === "number" ? "#post-id-" + destination : destination,
6628 - target: isTargetBlank ? "_blank" : "_self",
6629 - tag: tag ?? "a"
6630 - };
6631 - });
6632 -
6633 -//#endregion
6634 -//#region packages/packages/core/editor-canvas/src/transformers/settings/query-transformer.ts
6635 - var queryTransformer = createTransformer(({ id }) => {
6636 - return id ?? null;
6637 - });
6638 -
6639 -//#endregion
6640 -//#region packages/packages/core/editor-canvas/src/transformers/settings/time-range-transformer.ts
6641 - var timeRangeTransformer = createTransformer((value) => {
6642 - if (!value || Object.keys(value).length === 0) return null;
6643 - return {
6644 - min: value.min || null,
6645 - max: value.max || null
6646 - };
6647 - });
6648 -
6649 -//#endregion
6650 -//#region packages/packages/core/editor-canvas/src/transformers/shared/process-svg-content.ts
6651 - var SVG_INLINE_STYLES = "width: 100%; height: 100%; overflow: unset;";
6652 - function processSvgContent(svgText) {
6653 - const sanitized = purify.sanitize(svgText, { USE_PROFILES: {
6654 - svg: true,
6655 - svgFilters: true
6656 - } });
6657 - const svgElement = new DOMParser().parseFromString(sanitized, "image/svg+xml").querySelector("svg");
6658 - if (!svgElement) return null;
6659 - svgElement.setAttribute("fill", "currentColor");
6660 - const trimmed = (svgElement.getAttribute("style") ?? "").trim();
6661 - const merged = trimmed ? `${trimmed.replace(/;$/, "")}; ${SVG_INLINE_STYLES}` : SVG_INLINE_STYLES;
6662 - svgElement.setAttribute("style", merged);
6663 - return svgElement.outerHTML;
6664 - }
6665 -
6666 -//#endregion
6667 -//#region packages/packages/core/editor-canvas/src/transformers/shared/icon-transformer.ts
6668 - var FONT_AWESOME_JSON = {
6669 - width: 0,
6670 - height: 1,
6671 - path: 4
6672 - };
6673 - var fontAwesomeJsonCache = /* @__PURE__ */ new Map();
6674 - var iconTransformer = createTransformer(async (value, { signal }) => {
6675 - const iconValue = typeof value.value === "string" ? value.value : null;
6676 - const library = typeof value.library === "string" ? value.library : null;
6677 - if (!iconValue || !library) return {
6678 - html: null,
6679 - url: null
6680 - };
6681 - const iconName = getFontAwesomeIconName(iconValue);
6682 - const jsonFileName = getFontAwesomeJsonFileName(library);
6683 - if (!iconName || !jsonFileName) return {
6684 - html: null,
6685 - url: null
6686 - };
6687 - const iconData = (await fetchFontAwesomeIcons(jsonFileName, signal))?.[iconName];
6688 - if (!iconData) return {
6689 - html: null,
6690 - url: null
6691 - };
6692 - return {
6693 - html: processSvgContent(buildFontAwesomeSvg(iconData)),
6694 - url: null
6695 - };
6696 - });
6697 - function getFontAwesomeIconName(iconValue) {
6698 - return iconValue.match(/^fa\S*\s+fa-(.+)$/)?.[1] ?? null;
6699 - }
6700 - function getFontAwesomeJsonFileName(library) {
6701 - if (!library.startsWith("fa-")) return null;
6702 - return library.replace(/^fa-/, "");
6703 - }
6704 - function getAssetsBaseUrl() {
6705 - const assetsUrl = window.elementorCommon?.config?.urls?.assets;
6706 - return typeof assetsUrl === "string" && assetsUrl !== "" ? assetsUrl : null;
6707 - }
6708 - async function fetchFontAwesomeIcons(jsonFileName, signal) {
6709 - const cached = fontAwesomeJsonCache.get(jsonFileName);
6710 - if (cached) return cached;
6711 - const icons = await loadFontAwesomeIcons(jsonFileName, signal);
6712 - if (icons) fontAwesomeJsonCache.set(jsonFileName, icons);
6713 - return icons;
6714 - }
6715 - async function loadFontAwesomeIcons(jsonFileName, signal) {
6716 - const assetsUrl = getAssetsBaseUrl();
6717 - if (!assetsUrl) return null;
6718 - try {
6719 - const response = await fetch(`${assetsUrl}lib/font-awesome/json/${jsonFileName}.json`, { signal });
6720 - if (!response.ok) return null;
6721 - return (await response.json()).icons ?? null;
6722 - } catch {
6723 - return null;
6724 - }
6725 - }
6726 - function buildFontAwesomeSvg(iconData) {
6727 - return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${iconData[FONT_AWESOME_JSON.width]} ${iconData[FONT_AWESOME_JSON.height]}"><path d="${iconData[FONT_AWESOME_JSON.path]}"></path></svg>`;
6728 - }
6729 -
6730 -//#endregion
6731 -//#region packages/packages/core/editor-canvas/src/transformers/shared/image-src-transformer.ts
6732 - var imageSrcTransformer = createTransformer((value) => ({
6733 - id: value.id ?? null,
6734 - url: value.url ?? null,
6735 - alt: value.alt ?? null
6736 - }));
6737 -
6738 -//#endregion
6739 -//#region packages/packages/core/editor-canvas/src/transformers/shared/image-transformer.ts
6740 - var imageTransformer = createTransformer(async (value) => {
6741 - const { src, size } = value;
6742 - if (!src?.id) return src?.url ? {
6743 - src: src.url,
6744 - alt: src.alt ?? ""
6745 - } : null;
6746 - const attachment = await (0, _elementor_wp_media.getMediaAttachment)({ id: src.id });
6747 - const sizedAttachment = attachment?.sizes?.[size ?? ""];
6748 - if (sizedAttachment) return {
6749 - src: sizedAttachment.url,
6750 - height: sizedAttachment.height,
6751 - width: sizedAttachment.width,
6752 - alt: attachment.alt
6753 - };
6754 - if (attachment) return {
6755 - src: attachment.url,
6756 - height: attachment.height,
6757 - width: attachment.width,
6758 - alt: attachment.alt
6759 - };
6760 - return null;
6761 - });
6762 -
6763 -//#endregion
6764 -//#region packages/packages/core/editor-canvas/src/transformers/shared/plain-transformer.ts
6765 - var plainTransformer = createTransformer((value) => {
6766 - return value;
6767 - });
6768 -
6769 -//#endregion
6770 -//#region packages/packages/core/editor-canvas/src/transformers/shared/svg-src-transformer.ts
6771 - async function fetchSvgContent(url, signal) {
6772 - try {
6773 - const response = await fetch(url, { signal });
6774 - if (!response.ok) return null;
6775 - const contentType = response.headers.get("content-type") ?? "";
6776 - if (!(contentType.includes("svg") || contentType.includes("xml") || url.endsWith(".svg"))) return null;
6777 - return await response.text();
6778 - } catch {
6779 - return null;
6780 - }
6781 - }
6782 - function resolveSvgSrcId(id) {
6783 - if (typeof id !== "number" || id <= 0) return null;
6784 - return id;
6785 - }
6786 - var svgSrcTransformer = createTransformer(async (value, { signal }) => {
6787 - const id = resolveSvgSrcId(value.id);
6788 - const urlFromValue = typeof value.url === "string" ? value.url : null;
6789 - let url = urlFromValue;
6790 - if (id && !urlFromValue) url = (await (0, _elementor_wp_media.getMediaAttachment)({ id }))?.url ?? null;
6791 - const resolvedUrl = typeof url === "string" ? url : null;
6792 - if (!resolvedUrl) return {
6793 - html: null,
6794 - url: null
6795 - };
6796 - const svgText = await fetchSvgContent(resolvedUrl, signal);
6797 - return {
6798 - html: svgText ? processSvgContent(svgText) : null,
6799 - url: resolvedUrl
6800 - };
6801 - });
6802 -
6803 -//#endregion
6804 -//#region packages/packages/core/editor-canvas/src/transformers/shared/video-src-transformer.ts
6805 - var videoSrcTransformer = createTransformer(async (value) => {
6806 - const { id, url } = value;
6807 - if (!id) return {
6808 - id: null,
6809 - url
6810 - };
6811 - return {
6812 - id,
6813 - url: (await (0, _elementor_wp_media.getMediaAttachment)({ id }))?.url ?? url
6814 - };
6815 - });
6816 -
6817 -//#endregion
6818 -//#region packages/packages/core/editor-canvas/src/init-settings-transformers.ts
6819 - function initSettingsTransformers() {
6820 - settingsTransformersRegistry.register("classes", createClassesTransformer()).register("link", linkTransformer).register("query", queryTransformer).register("image", imageTransformer).register("image-src", imageSrcTransformer).register("svg-src", svgSrcTransformer).register("icon", iconTransformer).register("video-src", videoSrcTransformer).register("attributes", attributesTransformer).register("date-time", dateTimeTransformer).register("html-v2", htmlV2Transformer).register("html-v3", htmlV3Transformer).register("escaped-html", escapedHtmlTransformer).register("date-range", dateRangeTransformer).register("time-range", timeRangeTransformer).registerFallback(plainTransformer);
6821 - }
6822 -
6823 -//#endregion
6824 -//#region packages/packages/core/editor-canvas/src/transformers/styles/background-color-overlay-transformer.ts
6825 - var backgroundColorOverlayTransformer = createTransformer((value) => {
6826 - const { color = null } = value;
6827 - if (!color) return null;
6828 - return `linear-gradient(${color}, ${color})`;
6829 - });
6830 -
6831 -//#endregion
6832 -//#region packages/packages/core/editor-canvas/src/transformers/styles/background-gradient-overlay-transformer.ts
6833 - var backgroundGradientOverlayTransformer = createTransformer((value) => {
6834 - if (value.type === "radial") return `radial-gradient(circle at ${value.positions}, ${value.stops})`;
6835 - return `linear-gradient(${value.angle}deg, ${value.stops})`;
6836 - });
6837 -
6838 -//#endregion
6839 -//#region packages/packages/core/editor-canvas/src/transformers/styles/background-image-overlay-transformer.ts
6840 - var backgroundImageOverlayTransformer = createTransformer((value) => {
6841 - const { image, size = null, position = null, repeat = null, attachment = null } = value;
6842 - if (!image) return null;
6843 - return {
6844 - src: image.src ? `url(${image.src})` : null,
6845 - repeat,
6846 - attachment,
6847 - size,
6848 - position
6849 - };
6850 - });
6851 -
6852 -//#endregion
6853 -//#region packages/packages/core/editor-canvas/src/transformers/styles/background-image-size-scale-transformer.ts
6854 - var backgroundImageSizeScaleTransformer = createTransformer(({ width, height }) => `${width ?? "auto"} ${height ?? "auto"}`);
6855 -
6856 -//#endregion
6857 -//#region packages/packages/core/editor-canvas/src/transformers/styles/background-overlay-transformer.ts
6858 - var backgroundOverlayTransformer = createTransformer((value) => {
6859 - if (!value || value.length === 0) return null;
6860 - const normalizedValues = normalizeOverlayValues(value);
6861 - if (normalizedValues.length === 0) return null;
6862 - return {
6863 - "background-image": getValuesString(normalizedValues, "src", "none", true),
6864 - "background-repeat": getValuesString(normalizedValues, "repeat", "repeat"),
6865 - "background-attachment": getValuesString(normalizedValues, "attachment", "scroll"),
6866 - "background-size": getValuesString(normalizedValues, "size", "auto auto"),
6867 - "background-position": getValuesString(normalizedValues, "position", "0% 0%")
6868 - };
6869 - });
6870 - function normalizeOverlayValues(overlays) {
6871 - return overlays.map((item) => {
6872 - if (typeof item === "string") return {
6873 - src: item,
6874 - repeat: null,
6875 - attachment: null,
6876 - size: null,
6877 - position: null
6878 - };
6879 - return item;
6880 - }).filter((item) => item && !!item.src);
6881 - }
6882 - function getValuesString(items, prop, defaultValue, preventUnification = false) {
6883 - if (items.filter((item) => item?.[prop]).length === 0) return defaultValue;
6884 - const formattedValues = items.map((item) => item[prop] ?? defaultValue);
6885 - if (!preventUnification) {
6886 - if (formattedValues.every((value) => value === formattedValues[0])) return formattedValues[0];
6887 - }
6888 - return formattedValues.join(",");
6889 - }
6890 -
6891 -//#endregion
6892 -//#region packages/packages/core/editor-canvas/src/transformers/styles/background-transformer.ts
6893 - var backgroundTransformer = createTransformer((value) => {
6894 - const { color = null, "background-overlay": overlays = null, clip = null } = value;
6895 - return createMultiPropsValue({
6896 - ...overlays,
6897 - "background-color": color,
6898 - "background-clip": clip
6899 - });
6900 - });
6901 -
6902 -//#endregion
6903 -//#region packages/packages/core/editor-canvas/src/transformers/styles/color-stop-transformer.ts
6904 - var colorStopTransformer = createTransformer((value) => `${value?.color} ${value?.offset ?? 0}%`);
6905 -
6906 -//#endregion
6907 -//#region packages/packages/core/editor-canvas/src/transformers/styles/create-combine-array-transformer.ts
6908 - var createCombineArrayTransformer = (delimiter) => {
6909 - return createTransformer((value) => value?.length ? value.filter(Boolean).join(delimiter) : null);
6910 - };
6911 -
6912 -//#endregion
6913 -//#region packages/packages/core/editor-canvas/src/transformers/styles/create-multi-props-transformer.ts
6914 - var createMultiPropsTransformer = (keys, keyGenerator) => {
6915 - return createTransformer((value, { key: propKey }) => {
6916 - const entries = keys.filter((key) => value[key]).map((key) => [keyGenerator({
6917 - propKey,
6918 - key
6919 - }), value[key]]);
6920 - return createMultiPropsValue(Object.fromEntries(entries));
6921 - });
6922 - };
6923 -
6924 -//#endregion
6925 -//#region packages/packages/core/editor-canvas/src/transformers/styles/filter-transformer.ts
6926 - var filterTransformer = createTransformer((filterValues) => {
6927 - if (filterValues?.length < 1) return null;
6928 - return filterValues.filter(Boolean).map(mapToFilterFunctionString).join(" ");
6929 - });
6930 - var mapToFilterFunctionString = (value) => {
6931 - if (value.func === "drop-shadow") {
6932 - const { xAxis, yAxis, blur, color } = value.args;
6933 - return `drop-shadow(${xAxis || "0px"} ${yAxis || "0px"} ${blur || "10px"} ${color || "transparent"})`;
6934 - }
6935 - const size = value.args?.size;
6936 - if (!value.func || !size) return "";
6937 - return `${value.func}(${size})`;
6938 - };
6939 -
6940 -//#endregion
6941 -//#region packages/packages/core/editor-canvas/src/transformers/styles/flex-transformer.ts
6942 - var DEFAULT_FLEX_GROW = 0;
6943 - var DEFAULT_FLEX_SHRINK = 1;
6944 - var DEFAULT_FLEX_BASIS = "auto";
6945 - var formatBasis = (basis) => typeof basis === "object" && basis.size !== void 0 ? `${basis.size}${basis.unit || ""}` : basis;
6946 - var flexTransformer = createTransformer((value) => {
6947 - const grow = value.flexGrow;
6948 - const shrink = value.flexShrink;
6949 - const basis = value.flexBasis;
6950 - const hasGrow = grow !== void 0 && grow !== null;
6951 - const hasShrink = shrink !== void 0 && shrink !== null;
6952 - const hasBasis = basis !== void 0 && basis !== null;
6953 - if (!hasGrow && !hasShrink && !hasBasis) return null;
6954 - return `${hasGrow ? grow : DEFAULT_FLEX_GROW} ${hasShrink ? shrink : DEFAULT_FLEX_SHRINK} ${hasBasis ? formatBasis(basis) : DEFAULT_FLEX_BASIS}`;
6955 - });
6956 -
6957 -//#endregion
6958 -//#region packages/packages/core/editor-canvas/src/transformers/styles/font-family-transformer.ts
6959 - var fontFamilyTransformer = createTransformer((value) => {
6960 - if (typeof value !== "string" || !value.trim()) return null;
6961 - const trimmed = value.trim();
6962 - if (trimmed.startsWith("\"") && trimmed.endsWith("\"") || trimmed.startsWith("'") && trimmed.endsWith("'")) return trimmed;
6963 - return `"${trimmed}"`;
6964 - });
6965 -
6966 -//#endregion
6967 -//#region packages/packages/core/editor-canvas/src/transformers/styles/grid-track-renderer.ts
6968 - var GRID_TRACK_PROPERTIES = /* @__PURE__ */ new Set(["grid-template-columns", "grid-template-rows"]);
6969 - var isGridTrackProperty = (cssProperty) => GRID_TRACK_PROPERTIES.has(cssProperty);
6970 - var formatGridTrackRepeat = (count) => {
6971 - if (!Number.isFinite(count) || count < 1) return null;
6972 - return `repeat(${count}, 1fr)`;
6973 - };
6974 -
6975 -//#endregion
6976 -//#region packages/packages/core/editor-canvas/src/transformers/styles/grid-track-size-transformer.ts
6977 - var gridTrackSizeTransformer = createTransformer((value) => {
6978 - if (value.unit === "custom") return value.size;
6979 - if (value.unit === "fr") return formatGridTrackRepeat(Math.trunc(Number(value.size)));
6980 - return `${value.size}${value.unit}`;
6981 - });
6982 -
6983 -//#endregion
6984 -//#region packages/packages/core/editor-canvas/src/transformers/styles/perspective-origin-transformer.ts
6985 - var FALLBACK = "0px";
6986 - function getVal$1(val) {
6987 - return `${val ?? FALLBACK}`;
6988 - }
6989 - __name(getVal$1, "getVal");
6990 - var perspectiveOriginTransformer = createTransformer((value) => `${getVal$1(value?.x)} ${getVal$1(value?.y)}`);
6991 -
6992 -//#endregion
6993 -//#region packages/packages/core/editor-canvas/src/transformers/styles/position-transformer.ts
6994 - var positionTransformer = createTransformer(({ x, y }) => `${x ?? "0px"} ${y ?? "0px"}`);
6995 -
6996 -//#endregion
6997 -//#region packages/packages/core/editor-canvas/src/transformers/styles/shadow-transformer.ts
6998 - var shadowTransformer = createTransformer((value) => {
6999 - return [
7000 - value.hOffset,
7001 - value.vOffset,
7002 - value.blur,
7003 - value.spread,
7004 - value.color,
7005 - value.position
7006 - ].filter(Boolean).join(" ");
7007 - });
7008 -
7009 -//#endregion
7010 -//#region packages/packages/core/editor-canvas/src/transformers/styles/size-transformer.ts
7011 - var sizeTransformer = createTransformer((value) => {
7012 - if (value.unit === "auto") return "auto";
7013 - return value.unit === "custom" ? value.size : `${value.size}${value.unit}`;
7014 - });
7015 -
7016 -//#endregion
7017 -//#region packages/packages/core/editor-canvas/src/transformers/styles/span-transformer.ts
7018 - var spanTransformer = createTransformer((value) => {
7019 - return value?.trim() || null;
7020 - });
7021 -
7022 -//#endregion
7023 -//#region packages/packages/core/editor-canvas/src/transformers/styles/stroke-transformer.ts
7024 - var strokeTransformer = createTransformer((value) => {
7025 - return createMultiPropsValue({
7026 - "-webkit-text-stroke": `${value.width} ${value.color}`,
7027 - stroke: `${value.color}`,
7028 - "stroke-width": `${value.width}`
7029 - });
7030 - });
7031 -
7032 -//#endregion
7033 -//#region packages/packages/core/editor-canvas/src/transformers/styles/transform-functions-transformer.ts
7034 - var transformFunctionsTransformer = createTransformer((values) => {
7035 - if (values?.length < 1) return null;
7036 - return values.join(" ");
7037 - });
7038 -
7039 -//#endregion
7040 -//#region packages/packages/core/editor-canvas/src/transformers/styles/transform-move-transformer.ts
7041 - var defaultMove = "0px";
7042 - var transformMoveTransformer = createTransformer((value) => {
7043 - return `translate3d(${value.x ?? defaultMove}, ${value.y ?? defaultMove}, ${value.z ?? defaultMove})`;
7044 - });
7045 -
7046 -//#endregion
7047 -//#region packages/packages/core/editor-canvas/src/transformers/styles/transform-origin-transformer.ts
7048 - var EMPTY_VALUE = "0px";
7049 - var DEFAULT_XY = "50%";
7050 - var DEFAULT_Z = EMPTY_VALUE;
7051 - function getVal(val) {
7052 - return `${val ?? EMPTY_VALUE}`;
7053 - }
7054 - var transformOriginTransformer = createTransformer((value) => {
7055 - const x = getVal(value.x);
7056 - const y = getVal(value.y);
7057 - const z = getVal(value.z);
7058 - if (x === DEFAULT_XY && y === DEFAULT_XY && z === DEFAULT_Z) return null;
7059 - return `${x} ${y} ${z}`;
7060 - });
7061 -
7062 -//#endregion
7063 -//#region packages/packages/core/editor-canvas/src/transformers/styles/transform-rotate-transformer.ts
7064 - var defaultRotate = "0deg";
7065 - var transformRotateTransformer = createTransformer((value) => {
7066 - return [
7067 - `rotateX(${value?.x ?? defaultRotate})`,
7068 - `rotateY(${value?.y ?? defaultRotate})`,
7069 - `rotateZ(${value?.z ?? defaultRotate})`
7070 - ].join(" ");
7071 - });
7072 -
7073 -//#endregion
7074 -//#region packages/packages/core/editor-canvas/src/transformers/styles/transform-scale-transformer.ts
7075 - var transformScaleTransformer = createTransformer((value) => {
7076 - return `scale3d(${value.x ?? 1}, ${value.y ?? 1}, ${value.z ?? 1})`;
7077 - });
7078 -
7079 -//#endregion
7080 -//#region packages/packages/core/editor-canvas/src/transformers/styles/transform-skew-transformer.ts
7081 - var defaultSkew = "0deg";
7082 - var transformSkewTransformer = createTransformer((value) => {
7083 - return `skew(${value?.x ?? defaultSkew}, ${value?.y ?? defaultSkew})`;
7084 - });
7085 -
7086 -//#endregion
7087 -//#region packages/packages/core/editor-canvas/src/transformers/styles/transition-transformer.ts
7088 - var getAllowedProperties = () => {
7089 - const allowedProperties = /* @__PURE__ */ new Set();
7090 - _elementor_editor_controls.transitionProperties.forEach((category) => {
7091 - category.properties.forEach((property) => {
7092 - allowedProperties.add(property.value);
7093 - });
7094 - });
7095 - return allowedProperties;
7096 - };
7097 - var transitionTransformer = createTransformer((transitionValues) => {
7098 - if (transitionValues?.length < 1) return null;
7099 - const allowedProperties = getAllowedProperties();
7100 - const validTransitions = transitionValues.map((value) => mapToTransitionString(value, allowedProperties)).filter(Boolean);
7101 - if (validTransitions.length === 0) return null;
7102 - return validTransitions.join(", ");
7103 - });
7104 - var mapToTransitionString = (value, allowedProperties) => {
7105 - if (!value.selection || !value.size) return "";
7106 - const property = value.selection.value;
7107 - if (!allowedProperties.has(property)) return "";
7108 - return `${property} ${value.size}`;
7109 - };
7110 -
7111 -//#endregion
7112 -//#region packages/packages/core/editor-canvas/src/init-style-transformers.ts
7113 - function initStyleTransformers() {
7114 - styleTransformersRegistry.register("font-family", fontFamilyTransformer).register("size", sizeTransformer).register("grid-track-size", gridTrackSizeTransformer).register("shadow", shadowTransformer).register("stroke", strokeTransformer).register("dimensions", createMultiPropsTransformer([
7115 - "block-start",
7116 - "block-end",
7117 - "inline-start",
7118 - "inline-end"
7119 - ], ({ propKey, key }) => `${propKey}-${key}`)).register("filter", filterTransformer).register("backdrop-filter", filterTransformer).register("box-shadow", createCombineArrayTransformer(",")).register("background", backgroundTransformer).register("background-overlay", backgroundOverlayTransformer).register("background-color-overlay", backgroundColorOverlayTransformer).register("background-image-overlay", backgroundImageOverlayTransformer).register("background-gradient-overlay", backgroundGradientOverlayTransformer).register("gradient-color-stop", createCombineArrayTransformer(",")).register("color-stop", colorStopTransformer).register("background-image-position-offset", positionTransformer).register("background-image-size-scale", backgroundImageSizeScaleTransformer).register("image-src", imageSrcTransformer).register("image", imageTransformer).register("object-position", positionTransformer).register("span", spanTransformer).register("transform-origin", transformOriginTransformer).register("perspective-origin", perspectiveOriginTransformer).register("transform-move", transformMoveTransformer).register("transform-scale", transformScaleTransformer).register("transform-rotate", transformRotateTransformer).register("transform-skew", transformSkewTransformer).register("transform-functions", transformFunctionsTransformer).register("transform", createMultiPropsTransformer([
7120 - "transform-functions",
7121 - "transform-origin",
7122 - "perspective",
7123 - "perspective-origin"
7124 - ], ({ key }) => key === "transform-functions" ? "transform" : key)).register("transition", transitionTransformer).register("layout-direction", createMultiPropsTransformer(["row", "column"], ({ propKey, key }) => `${key}-${propKey}`)).register("flex", flexTransformer).register("border-width-v2", createMultiPropsTransformer([
7125 - "block-start",
7126 - "block-end",
7127 - "inline-start",
7128 - "inline-end"
7129 - ], ({ key }) => `border-${key}-width`)).register("border-radius-v2", createMultiPropsTransformer([
7130 - "start-start",
7131 - "start-end",
7132 - "end-start",
7133 - "end-end"
7134 - ], ({ key }) => `border-${key}-radius`)).registerFallback(plainTransformer);
7135 - }
7136 -
7137 -//#endregion
7138 -//#region packages/packages/core/editor-canvas/src/renderers/create-dom-renderer.ts
7139 - function createDomRenderer() {
7140 - const loader = (0, _elementor_twing.createArrayLoader)({});
7141 - const environment = (0, _elementor_twing.createEnvironment)(loader);
7142 - environment.registerEscapingStrategy(escapeHtmlTag, "html_tag");
7143 - environment.registerEscapingStrategy(escapeURL, "full_url");
7144 - return {
7145 - register: loader.setTemplate,
7146 - render: environment.render
7147 - };
7148 - }
7149 - function getAllowedHtmlWrapperTags() {
7150 - return window.elementorCommon?.config?.allowedHTMLWrapperTags ?? [];
7151 - }
7152 - function escapeHtmlTag(value) {
7153 - const allowedTags = getAllowedHtmlWrapperTags();
7154 - const normalizedTag = value?.toLowerCase?.() ?? "";
7155 - return allowedTags.includes(normalizedTag) ? value : "div";
7156 - }
7157 - function escapeURL(value) {
7158 - const allowedProtocols = [
7159 - "http:",
7160 - "https:",
7161 - "mailto:",
7162 - "tel:"
7163 - ];
7164 - try {
7165 - const parsed = new URL(value);
7166 - return allowedProtocols.includes(parsed.protocol) ? value : "";
7167 - } catch {
7168 - return "";
7169 - }
7170 - }
7171 -
7172 -//#endregion
7173 -//#region packages/packages/core/editor-canvas/src/legacy/create-element-type.ts
7174 - var __typeError$1 = /* @__PURE__ */ __name((msg) => {
7175 - throw TypeError(msg);
7176 - }, "__typeError");
7177 - var __accessCheck$1 = /* @__PURE__ */ __name((obj, member, msg) => member.has(obj) || __typeError$1("Cannot " + msg), "__accessCheck");
7178 - var __privateAdd$1 = /* @__PURE__ */ __name((obj, member, value) => member.has(obj) ? __typeError$1("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value), "__privateAdd");
7179 - var __privateMethod$1 = /* @__PURE__ */ __name((obj, member, method) => (__accessCheck$1(obj, member, "access private method"), method), "__privateMethod");
7180 - function createElementType(type) {
7181 - const legacyWindow = window;
7182 - return class extends legacyWindow.elementor.modules.elements.types.Widget {
7183 - getType() {
7184 - return type;
7185 - }
7186 - getView() {
7187 - return createElementViewClassDeclaration();
7188 - }
7189 - };
7190 - }
7191 - function createElementViewClassDeclaration() {
7192 - var _instances;
7193 - var dispatchEvent_fn;
7194 - var dispatchPreviewEvent_fn;
7195 - var _a;
7196 - const legacyWindow = window;
7197 - return _a = class extends legacyWindow.elementor.modules.elements.views.Widget {
7198 - constructor() {
7199 - super(...arguments);
7200 - __privateAdd$1(this, _instances);
7201 - }
7202 - onRender(...args) {
7203 - super.onRender(...args);
7204 - __privateMethod$1(this, _instances, dispatchEvent_fn).call(this, "elementor/preview/atomic-widget/render");
7205 - __privateMethod$1(this, _instances, dispatchPreviewEvent_fn).call(this, "elementor/element/render");
7206 - }
7207 - onDestroy(...args) {
7208 - super.onDestroy(...args);
7209 - __privateMethod$1(this, _instances, dispatchEvent_fn).call(this, "elementor/preview/atomic-widget/destroy");
7210 - __privateMethod$1(this, _instances, dispatchPreviewEvent_fn).call(this, "elementor/element/destroy");
7211 - }
7212 - attributes() {
7213 - return {
7214 - ...super.attributes(),
7215 - "data-atomic": "",
7216 - style: "display: contents !important;"
7217 - };
7218 - }
7219 - behaviors() {
7220 - const disabledBehaviors = [
7221 - "InlineEditing",
7222 - "Draggable",
7223 - "Resizable"
7224 - ];
7225 - const behaviorsAsEntries = Object.entries(super.behaviors()).filter(([key]) => !disabledBehaviors.includes(key));
7226 - return Object.fromEntries(behaviorsAsEntries);
7227 - }
7228 - getDomElement() {
7229 - return this.$el.find(":first-child");
7230 - }
7231 - getHandlesOverlay() {
7232 - return null;
7233 - }
7234 - getContextMenuGroups() {
7235 - return super.getContextMenuGroups().filter((group) => group.name !== "save");
7236 - }
7237 - }, _instances = /* @__PURE__ */ new WeakSet(), dispatchEvent_fn = function(eventType) {
7238 - window.top?.dispatchEvent(new CustomEvent(eventType, { detail: { id: this.model.get("id") } }));
7239 - }, dispatchPreviewEvent_fn = function(eventType) {
7240 - const element = this.getDomElement().get(0);
7241 - if (!element) return;
7242 - legacyWindow.elementor?.$preview?.[0]?.contentWindow.dispatchEvent(new CustomEvent(eventType, { detail: {
7243 - id: this.model.get("id"),
7244 - type: this.model.get("widgetType"),
7245 - element
7246 - } }));
7247 - }, _a;
7248 - }
7249 -
7250 -//#endregion
7251 -//#region packages/packages/core/editor-canvas/src/renderers/compute-html-tag.ts
7252 - var DEFAULT_LINK_TAG = "a";
7253 - function computeHtmlTag(settings, defaultTag, options = {}) {
7254 - if ((options.followLink ?? true) && settingsHaveActiveLink(settings)) {
7255 - const link = settings.link;
7256 - return extractLinkHtmlTag(isRecord(link) ? link : {});
7257 - }
7258 - const settingsTag = extractHtmlTagValue(settings.tag);
7259 - if (null !== settingsTag && "" !== settingsTag) return settingsTag;
7260 - return defaultTag;
7261 - }
7262 - function settingsHaveActiveLink(settings) {
7263 - const link = settings.link;
7264 - if (!isRecord(link)) return false;
7265 - const href = extractHtmlTagValue(link.href);
7266 - if (null !== href && "" !== href) return true;
7267 - const attributes = link.attributes;
7268 - return typeof attributes === "string" && "" !== attributes;
7269 - }
7270 - function extractLinkHtmlTag(link) {
7271 - const tag = extractHtmlTagValue(link.tag);
7272 - if (null !== tag && "" !== tag) return tag;
7273 - return "a";
7274 - }
7275 - function extractHtmlTagValue(value) {
7276 - if (isRecord(value) && typeof value.value === "string") return value.value;
7277 - if (typeof value === "string") return value;
7278 - return null;
7279 - }
7280 - function isRecord(value) {
7281 - return typeof value === "object" && null !== value && !Array.isArray(value);
7282 - }
7283 -
7284 -//#endregion
7285 -//#region packages/packages/core/editor-canvas/src/legacy/create-pending-element.ts
7286 - function createPendingElement(wrapperView, data, options = {}) {
7287 - const parentContainer = wrapperView.getContainer();
7288 - const model = { ...data };
7289 - if (!model.id) model.id = (0, _elementor_editor_elements.generateElementId)();
7290 - if (!model.elements) model.elements = [];
7291 - if (!(0, _elementor_editor_elements.addModelToParent)(parentContainer.id, model, options)) return;
7292 - const childId = model.id;
7293 - const childModel = (0, _elementor_editor_elements.findModelInDocument)(childId);
7294 - if (!childModel) return;
7295 - const pendingContainer = {
7296 - id: childId,
7297 - settings: {
7298 - get: () => ({}),
7299 - set: () => ({}),
7300 - toJSON: () => ({})
7301 - },
7302 - parent: parentContainer,
7303 - model: childModel,
7304 - view: void 0,
7305 - lookup() {
7306 - return (0, _elementor_editor_elements.getContainer)(childId) ?? pendingContainer;
7307 - }
7308 - };
7309 - wrapperView.once("render", () => {
7310 - wrapperView.model?.trigger?.("navigator:add", childModel, options);
7311 - });
7312 - if (options.edit !== false) selectChildWhenWrapperRenders(wrapperView, childId);
7313 - return { getContainer: () => pendingContainer };
7314 - }
7315 - function selectChildWhenWrapperRenders(wrapperView, childId) {
7316 - wrapperView.once("render", () => {
7317 - const childContainer = (0, _elementor_editor_elements.getContainer)(childId);
7318 - if (childContainer?.model?.trigger) {
7319 - childContainer.model.trigger("request:edit");
7320 - return;
7321 - }
7322 - wrapperView.model?.trigger?.("request:edit");
7323 - });
7324 - }
7325 -
7326 -//#endregion
7327 -//#region packages/packages/core/editor-canvas/src/legacy/twig-rendering-utils.ts
7328 - function setupTwigRenderer({ renderer, element }) {
7329 - const templateKey = element.twig_main_template;
7330 - const baseStylesDictionary = element.base_styles_dictionary;
7331 - Object.entries(element.twig_templates).forEach(([key, template]) => {
7332 - renderer.register(key, template);
7333 - });
7334 - return {
7335 - templateKey,
7336 - baseStylesDictionary,
7337 - resolveProps: createPropsResolver({
7338 - transformers: settingsTransformersRegistry,
7339 - schema: element.atomic_props_schema
7340 - }),
7341 - defaultHtmlTag: element.default_html_tag ?? "div",
7342 - htmlTagFollowsLink: element.html_tag_follows_link ?? true
7343 - };
7344 - }
7345 - function createBeforeRender(view) {
7346 - view._ensureViewIsIntact();
7347 - view._isRendering = true;
7348 - view.resetChildViewContainer();
7349 - view.triggerMethod("before:render", view);
7350 - }
7351 - function createAfterRender(view) {
7352 - view._isRendering = false;
7353 - view.isRendered = true;
7354 - view.triggerMethod("render", view);
7355 - }
7356 - function rerenderExistingChildren(view) {
7357 - view.children?.each((childView) => {
7358 - childView.render();
7359 - });
7360 - }
7361 - async function waitForChildrenToComplete(view) {
7362 - const promises = [];
7363 - view.children?.each((childView) => {
7364 - if (childView._currentRenderPromise) promises.push(childView._currentRenderPromise);
7365 - });
7366 - if (promises.length > 0) await Promise.all(promises);
7367 - }
7368 -
7369 -//#endregion
7370 -//#region packages/packages/core/editor-canvas/src/legacy/create-templated-element-type.ts
7371 - var __defProp$3 = Object.defineProperty;
7372 - var __defNormalProp$3 = /* @__PURE__ */ __name((obj, key, value) => key in obj ? __defProp$3(obj, key, {
7373 - enumerable: true,
7374 - configurable: true,
7375 - writable: true,
7376 - value
7377 - }) : obj[key] = value, "__defNormalProp");
7378 - var __publicField$3 = /* @__PURE__ */ __name((obj, key, value) => __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value), "__publicField");
7379 - function canBeTemplated(element) {
7380 - return !!(element.atomic_props_schema && element.twig_templates && element.twig_main_template && element.base_styles_dictionary);
7381 - }
7382 - function createTemplatedElementView({ type, renderer, element }) {
7383 - const BaseView = createElementViewClassDeclaration();
7384 - const { templateKey, baseStylesDictionary, resolveProps, defaultHtmlTag, htmlTagFollowsLink } = setupTwigRenderer({
7385 - type,
7386 - renderer,
7387 - element
7388 - });
7389 - return class extends BaseView {
7390 - constructor() {
7391 - super(...arguments);
7392 - __publicField$3(this, "_abortController", null);
7393 - __publicField$3(this, "_lastResolvedSettingsHash", null);
7394 - __publicField$3(this, "_domUpdateWasSkipped", false);
7395 - }
7396 - getTemplateType() {
7397 - return "twig";
7398 - }
7399 - getNamespaceKey() {
7400 - return type;
7401 - }
7402 - renderOnChange() {
7403 - this.render();
7404 - }
7405 - getRenderContext() {
7406 - return this._parent?.getRenderContext?.();
7407 - }
7408 - getResolverRenderContext() {
7409 - return this._parent?.getResolverRenderContext?.();
7410 - }
7411 - invalidateRenderCache() {
7412 - this._lastResolvedSettingsHash = null;
7413 - }
7414 - render() {
7415 - this._abortController?.abort();
7416 - this._abortController = new AbortController();
7417 - const process = signalizedProcess(this._abortController.signal).then(() => this._beforeRender()).then(() => this._renderTemplate()).then(() => this._renderChildren()).then(() => this._afterRender());
7418 - this._currentRenderPromise = process.execute();
7419 - return this._currentRenderPromise;
7420 - }
7421 - async _renderChildren() {
7422 - if (this._shouldReuseChildren()) rerenderExistingChildren(this);
7423 - else super._renderChildren();
7424 - await waitForChildrenToComplete(this);
7425 - }
7426 - _shouldReuseChildren() {
7427 - return this._domUpdateWasSkipped && this.children?.length > 0;
7428 - }
7429 - async _renderTemplate() {
7430 - this.triggerMethod("before:render:template");
7431 - await signalizedProcess(this._abortController?.signal).then((_, signal) => {
7432 - const settings = this.model.get("settings").toJSON();
7433 - return resolveProps({
7434 - props: settings,
7435 - signal,
7436 - renderContext: this.getResolverRenderContext()
7437 - });
7438 - }).then((settings) => {
7439 - return this.afterSettingsResolve(settings);
7440 - }).then(async (settings) => {
7441 - const settingsHash = JSON.stringify(settings);
7442 - if (!(settingsHash !== this._lastResolvedSettingsHash) && this.isRendered) {
7443 - this._domUpdateWasSkipped = true;
7444 - return null;
7445 - }
7446 - this._domUpdateWasSkipped = false;
7447 - this._lastResolvedSettingsHash = settingsHash;
7448 - const context = {
7449 - id: this.model.get("id"),
7450 - interaction_id: this.getInteractionId(),
7451 - type,
7452 - settings,
7453 - tag: computeHtmlTag(settings, defaultHtmlTag, { followLink: htmlTagFollowsLink }),
7454 - base_styles: baseStylesDictionary,
7455 - ...this.getResolverRenderContext?.() ?? {}
7456 - };
7457 - return renderer.render(templateKey, context);
7458 - }).then((html) => {
7459 - if (html === null) return;
7460 - this.$el.html(html);
7461 - }).execute();
7462 - this.bindUIElements();
7463 - this.triggerMethod("render:template");
7464 - }
7465 - afterSettingsResolve(settings) {
7466 - return settings;
7467 - }
7468 - _beforeRender() {
7469 - createBeforeRender(this);
7470 - }
7471 - _afterRender() {
7472 - createAfterRender(this);
7473 - }
7474 - _doAfterRender(callback) {
7475 - if (this.isRendered) callback();
7476 - else this.once("render", callback);
7477 - }
7478 - _openEditingPanel(options) {
7479 - this._doAfterRender(() => super._openEditingPanel(options));
7480 - }
7481 - getInteractionId() {
7482 - const originId = this.model.get("originId");
7483 - const id = this.model.get("id");
7484 - return originId ?? id;
7485 - }
7486 - };
7487 - }
7488 -
7489 -//#endregion
7490 -//#region packages/packages/core/editor-canvas/src/legacy/create-nested-templated-element-type.ts
7491 - function canBeNestedTemplated(element) {
7492 - return canBeTemplated(element) && "support_nesting" in element && !!element.support_nesting;
7493 - }
7494 - function createNestedTemplatedElementType({ type, renderer, element, modelExtensions }) {
7495 - const legacyWindow = window;
7496 - return class extends legacyWindow.elementor.modules.elements.types.Base {
7497 - getType() {
7498 - return type;
7499 - }
7500 - getView() {
7501 - return createNestedTemplatedElementView({
7502 - type,
7503 - renderer,
7504 - element
7505 - });
7506 - }
7507 - getModel() {
7508 - const BaseModel = legacyWindow.elementor.modules.elements.models.AtomicElementBase;
7509 - if (modelExtensions && Object.keys(modelExtensions).length > 0) return BaseModel.extend(modelExtensions);
7510 - return BaseModel;
7511 - }
7512 - };
7513 - }
7514 - function buildEditorAttributes(model) {
7515 - const id = model.get("id");
7516 - const originId = model.get("originId");
7517 - const attrs = {
7518 - "data-model-cid": model.cid ?? "",
7519 - "data-interaction-id": originId ?? id,
7520 - "x-ignore": "true"
7521 - };
7522 - return Object.entries(attrs).map(([key, value]) => `${key}="${value}"`).join(" ");
7523 - }
7524 - function buildEditorClasses(model) {
7525 - return [
7526 - "elementor-element",
7527 - "elementor-element-edit-mode",
7528 - `elementor-element-${model.get("id")}`
7529 - ].join(" ");
7530 - }
7531 - function createNestedTemplatedElementView({ type, renderer, element }) {
7532 - const legacyWindow = window;
7533 - const { templateKey, baseStylesDictionary, resolveProps, defaultHtmlTag, htmlTagFollowsLink } = setupTwigRenderer({
7534 - type,
7535 - renderer,
7536 - element
7537 - });
7538 - const AtomicElementBaseView = legacyWindow.elementor.modules.elements.views.createAtomicElementBase(type);
7539 - const parentRenderChildren = AtomicElementBaseView.prototype._renderChildren;
7540 - const parentOpenEditingPanel = AtomicElementBaseView.prototype._openEditingPanel;
7541 - const parentAddElement = AtomicElementBaseView.prototype.addElement;
7542 - return AtomicElementBaseView.extend({
7543 - _abortController: null,
7544 - _lastResolvedSettingsHash: null,
7545 - _domUpdateWasSkipped: false,
7546 - template: false,
7547 - attributes() {
7548 - return { "data-model-cid": this.model.cid };
7549 - },
7550 - getTemplateType() {
7551 - return "twig";
7552 - },
7553 - invalidateRenderCache() {
7554 - this._lastResolvedSettingsHash = null;
7555 - },
7556 - renderOnChange() {
7557 - this.render();
7558 - },
7559 - render() {
7560 - this._abortController?.abort();
7561 - this._abortController = new AbortController();
7562 - const process = signalizedProcess(this._abortController.signal).then(() => this._beforeRender()).then(() => this._renderTemplate()).then(() => this._onTemplateReady()).then(() => this._renderChildren()).then(() => this._afterRender());
7563 - this._currentRenderPromise = process.execute();
7564 - return this._currentRenderPromise;
7565 - },
7566 - _beforeRender() {
7567 - createBeforeRender(this);
7568 - },
7569 - _onTemplateReady() {
7570 - this.dispatchPreviewEvent("elementor/element/render");
7571 - },
7572 - _afterRender() {
7573 - createAfterRender(this);
7574 - this.dispatchPreviewEvent("elementor/element/rendered");
7575 - requestAnimationFrame(() => {
7576 - this._initAlpine();
7577 - });
7578 - this.model.trigger("render:complete");
7579 - window.dispatchEvent(new CustomEvent(_elementor_editor_elements.ELEMENT_STYLE_CHANGE_EVENT));
7580 - },
7581 - async _renderTemplate() {
7582 - const model = this.model;
7583 - this.triggerMethod("before:render:template");
7584 - await signalizedProcess(this._abortController?.signal).then((_, signal) => {
7585 - const settings = model.get("settings").toJSON();
7586 - return resolveProps({
7587 - props: settings,
7588 - signal,
7589 - renderContext: this.getResolverRenderContext?.()
7590 - });
7591 - }).then(async (settings) => {
7592 - const resolvedSettings = this.afterSettingsResolve(settings);
7593 - const settingsHash = JSON.stringify(resolvedSettings);
7594 - if (!(settingsHash !== this._lastResolvedSettingsHash) && this.isRendered) {
7595 - this._domUpdateWasSkipped = true;
7596 - return null;
7597 - }
7598 - this._domUpdateWasSkipped = false;
7599 - this._lastResolvedSettingsHash = settingsHash;
7600 - const context = {
7601 - id: model.get("id"),
7602 - interaction_id: this.getInteractionId(),
7603 - type,
7604 - settings: resolvedSettings,
7605 - tag: computeHtmlTag(resolvedSettings, defaultHtmlTag, { followLink: htmlTagFollowsLink }),
7606 - base_styles: baseStylesDictionary,
7607 - editor_attributes: buildEditorAttributes(model),
7608 - editor_classes: buildEditorClasses(model),
7609 - ...this.getResolverRenderContext?.() ?? {}
7610 - };
7611 - return renderer.render(templateKey, context);
7612 - }).then((html) => {
7613 - if (html === null) return;
7614 - this._attachTwigContent(html);
7615 - }).execute();
7616 - this.bindUIElements();
7617 - this.triggerMethod("render:template");
7618 - },
7619 - afterSettingsResolve(settings) {
7620 - return settings;
7621 - },
7622 - getRenderContext() {
7623 - return this._parent?.getRenderContext?.();
7624 - },
7625 - getResolverRenderContext() {
7626 - return this._parent?.getResolverRenderContext?.();
7627 - },
7628 - getChildType() {
7629 - const allowedTypes = element.allowed_child_types ?? [];
7630 - if (allowedTypes && allowedTypes.length > 0) return allowedTypes;
7631 - return AtomicElementBaseView.prototype.getChildType.call(this);
7632 - },
7633 - _attachTwigContent(html) {
7634 - const $newContent = legacyWindow.jQuery(html);
7635 - const oldEl = this.$el.get(0);
7636 - const newEl = $newContent.get(0);
7637 - if (!oldEl || !newEl) return;
7638 - this._destroyAlpine();
7639 - const overlayHTML = this.getHandlesOverlay()?.get(0)?.outerHTML ?? "";
7640 - const needsTagSwap = oldEl.tagName !== newEl.tagName;
7641 - const targetEl = needsTagSwap ? (oldEl.ownerDocument ?? document).createElement(newEl.tagName) : oldEl;
7642 - Array.from(newEl.attributes).forEach((attr) => {
7643 - targetEl.setAttribute(attr.name, attr.value);
7644 - });
7645 - targetEl.innerHTML = overlayHTML + newEl.innerHTML;
7646 - if (needsTagSwap) {
7647 - oldEl.replaceWith(targetEl);
7648 - this.setElement(legacyWindow.jQuery(targetEl));
7649 - }
7650 - },
7651 - async _renderChildren() {
7652 - if (this._shouldReuseChildren()) rerenderExistingChildren(this);
7653 - else parentRenderChildren.call(this);
7654 - await waitForChildrenToComplete(this);
7655 - this._removeChildrenPlaceholder();
7656 - },
7657 - _shouldReuseChildren() {
7658 - return this._domUpdateWasSkipped && this.children?.length > 0;
7659 - },
7660 - _removeChildrenPlaceholder() {
7661 - const el = this.$el.get(0);
7662 - if (!el) return;
7663 - Array.from(el.childNodes).find((node) => node.nodeType === Node.COMMENT_NODE && node.nodeValue?.trim() === "elementor-children-placeholder")?.remove();
7664 - },
7665 - getChildViewContainer() {
7666 - this.childViewContainer = "";
7667 - return this.$el;
7668 - },
7669 - attachBuffer(_collectionView, buffer) {
7670 - const el = this.$el.get(0);
7671 - if (!el) return;
7672 - const placeholderComment = Array.from(el.childNodes).find((node) => node.nodeType === Node.COMMENT_NODE && node.nodeValue?.trim() === "elementor-children-placeholder");
7673 - if (placeholderComment) {
7674 - placeholderComment.parentNode?.insertBefore(buffer, placeholderComment);
7675 - placeholderComment.remove();
7676 - } else el.append(buffer);
7677 - },
7678 - getDomElement() {
7679 - return this.$el;
7680 - },
7681 - onBeforeDestroy() {
7682 - this._abortController?.abort();
7683 - },
7684 - onDestroy() {
7685 - this.dispatchPreviewEvent("elementor/element/destroy");
7686 - },
7687 - _destroyAlpine() {
7688 - const el = this.$el.get(0);
7689 - if (!el) return;
7690 - if (!el.getAttribute("x-data")) return;
7691 - (el.ownerDocument?.defaultView)?.Alpine?.destroyTree(el);
7692 - },
7693 - _initAlpine() {
7694 - const el = this.$el.get(0);
7695 - if (!el) return;
7696 - el.removeAttribute("x-ignore");
7697 - if (!el.getAttribute("x-data")) return;
7698 - (el.ownerDocument?.defaultView)?.Alpine?.initTree(el);
7699 - },
7700 - _doAfterRender(callback) {
7701 - if (this.isRendered) callback();
7702 - else this.once("render", callback);
7703 - },
7704 - _openEditingPanel(options) {
7705 - this._doAfterRender(() => parentOpenEditingPanel.call(this, options));
7706 - },
7707 - addElement(data, options) {
7708 - if (this.isRendered) return parentAddElement.call(this, data, options);
7709 - return createPendingElement(this, data, options);
7710 - },
7711 - getInteractionId() {
7712 - const originId = this.model.get("originId");
7713 - const id = this.model.get("id");
7714 - return originId ?? id;
7715 - }
7716 - });
7717 - }
7718 -
7719 -//#endregion
7720 -//#region packages/packages/core/editor-canvas/src/legacy/create-pro-promotion-nested-type.ts
7721 - function createProPromotionNestedType({ type, renderer, element }) {
7722 - if (!canBeNestedTemplated(element)) throw new Error(`Element "${type}" is not a valid nested templated element.`);
7723 - const BaseType = createNestedTemplatedElementType({
7724 - type,
7725 - renderer,
7726 - element
7727 - });
7728 - let PromotionView = null;
7729 - return class extends BaseType {
7730 - getView() {
7731 - if (!PromotionView) PromotionView = createPromotionView(new BaseType().getView());
7732 - return PromotionView;
7733 - }
7734 - };
7735 - }
7736 - function createPromotionView(BaseView) {
7737 - return class extends BaseView {
7738 - _afterRender() {
7739 - super._afterRender();
7740 - const removeBtnSelector = ".e-pro-promotion-placeholder__remove-btn";
7741 - const unlockBtnSelector = ".e-pro-promotion-placeholder__unlock-btn";
7742 - this.$el.off("click", removeBtnSelector);
7743 - this.$el.on("click", removeBtnSelector, (e) => {
7744 - e.preventDefault();
7745 - e.stopPropagation();
7746 - window.$e.run("document/elements/delete", { container: this.container });
7747 - });
7748 - this.$el.off("click", unlockBtnSelector);
7749 - this.$el.on("click", unlockBtnSelector, (e) => {
7750 - e.stopPropagation();
7751 - });
7752 - }
7753 - async _renderChildren() {}
7754 - behaviors() {
7755 - const disabledBehaviors = [
7756 - "InlineEditing",
7757 - "Draggable",
7758 - "Resizable"
7759 - ];
7760 - const behaviorsAsEntries = Object.entries(super.behaviors()).filter(([key]) => !disabledBehaviors.includes(key));
7761 - return Object.fromEntries(behaviorsAsEntries);
7762 - }
7763 - getContextMenuGroups() {
7764 - return super.getContextMenuGroups().filter((group) => group.name !== "save");
7765 - }
7766 - onDestroy(...args) {
7767 - super.onDestroy(...args);
7768 - this.$el.off("click", ".e-pro-promotion-placeholder__remove-btn");
7769 - this.$el.off("click", ".e-pro-promotion-placeholder__unlock-btn");
7770 - }
7771 - };
7772 - }
7773 -
7774 -//#endregion
7775 -//#region node_modules/react-dom/client.js
7776 - var require_client = /* @__PURE__ */ __commonJSMin(((exports) => {
7777 - var m = (globalThis.ReactDOM);
7778 - var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
7779 - exports.createRoot = function(c, o) {
7780 - i.usingClientEntryPoint = true;
7781 - try {
7782 - return m.createRoot(c, o);
7783 - } finally {
7784 - i.usingClientEntryPoint = false;
7785 - }
7786 - };
7787 - }));
7788 -
7789 -//#endregion
7790 -//#region packages/packages/core/editor-canvas/src/legacy/replacements/base.ts
7791 -var import_client = require_client();
7792 - var __defProp$2 = Object.defineProperty;
7793 - var __defNormalProp$2 = /* @__PURE__ */ __name((obj, key, value) => key in obj ? __defProp$2(obj, key, {
7794 - enumerable: true,
7795 - configurable: true,
7796 - writable: true,
7797 - value
7798 - }) : obj[key] = value, "__defNormalProp");
7799 - var __publicField$2 = /* @__PURE__ */ __name((obj, key, value) => __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value), "__publicField");
7800 - var TRIGGER_TIMING = {
7801 - before: "before",
7802 - after: "after",
7803 - never: "never"
7804 - };
7805 - var ReplacementBase = class {
7806 - constructor(settings) {
7807 - __publicField$2(this, "getSetting");
7808 - __publicField$2(this, "setSetting");
7809 - __publicField$2(this, "element");
7810 - __publicField$2(this, "type");
7811 - __publicField$2(this, "id");
7812 - __publicField$2(this, "refreshView");
7813 - __publicField$2(this, "reactRoot");
7814 - __publicField$2(this, "reactContainer");
7815 - this.getSetting = settings.getSetting;
7816 - this.setSetting = settings.setSetting;
7817 - this.element = settings.element;
7818 - this.type = settings.type;
7819 - this.id = settings.id;
7820 - this.refreshView = settings.refreshView;
7821 - this.reactRoot = settings.reactRoot;
7822 - this.reactContainer = settings.reactContainer;
7823 - }
7824 - static getTypes() {
7825 - return null;
7826 - }
7827 - shouldRenderReplacement() {
7828 - return true;
7829 - }
7830 - originalMethodsToTrigger() {
7831 - return {
7832 - _beforeRender: TRIGGER_TIMING.before,
7833 - _afterRender: TRIGGER_TIMING.after,
7834 - renderOnChange: TRIGGER_TIMING.never,
7835 - onDestroy: TRIGGER_TIMING.never,
7836 - render: TRIGGER_TIMING.never
7837 - };
7838 - }
7839 - };
7840 -
7841 -//#endregion
7842 -//#region packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/inline-editing-utils.ts
7843 - var EDITOR_ELEMENTS_OUT_OF_IFRAME = [
7844 - "#elementor-editor-wrapper-v2",
7845 - "#elementor-navigator",
7846 - "#elementor-panel"
7847 - ];
7848 - var TOOLBAR_ANCHOR_ID_PREFIX = "inline-editing-toolbar-anchor";
7849 - var TOOLBAR_ANCHOR_STATIC_STYLES = {
7850 - backgroundColor: "transparent",
7851 - border: "none",
7852 - outline: "none",
7853 - boxShadow: "none",
7854 - padding: "0",
7855 - margin: "0",
7856 - borderRadius: "0",
7857 - overflow: "hidden",
7858 - opacity: "0",
7859 - pointerEvents: "none",
7860 - position: "absolute",
7861 - display: "block"
7862 - };
7863 - var INLINE_EDITING_PROPERTY_PER_TYPE = {
7864 - "e-button": "text",
7865 - "e-form-label": "text",
7866 - "e-heading": "title",
7867 - "e-paragraph": "paragraph",
7868 - "e-form-submit-button": "text"
7869 - };
7870 - var getInlineEditorElement = (elementWrapper, expectedTag) => {
7871 - return !expectedTag ? null : elementWrapper.querySelector(expectedTag);
7872 - };
7873 - var useOnClickOutsideIframe = (handleUnmount) => {
7874 - const asyncUnmountInlineEditor = (0, react.useCallback)(() => queueMicrotask(handleUnmount), [handleUnmount]);
7875 - (0, react.useEffect)(() => {
7876 - EDITOR_ELEMENTS_OUT_OF_IFRAME.forEach((selector) => document?.querySelector(selector)?.addEventListener("mousedown", asyncUnmountInlineEditor));
7877 - return () => EDITOR_ELEMENTS_OUT_OF_IFRAME.forEach((selector) => document?.querySelector(selector)?.removeEventListener("mousedown", asyncUnmountInlineEditor));
7878 - }, []);
7879 - };
7880 - var useRenderToolbar = (ownerDocument, id) => {
7881 - const [anchor, setAnchor] = (0, react.useState)(null);
7882 - (0, react.useEffect)(() => {
7883 - if (!anchor) removeToolbarAnchor(ownerDocument, id);
7884 - }, [
7885 - anchor,
7886 - ownerDocument,
7887 - id
7888 - ]);
7889 - const onSelectionEnd = (view) => {
7890 - const hasSelection = !view.state.selection.empty;
7891 - removeToolbarAnchor(ownerDocument, id);
7892 - if (hasSelection) setAnchor(createAnchorBasedOnSelection(ownerDocument, id));
7893 - else setAnchor(null);
7894 - };
7895 - return {
7896 - onSelectionEnd,
7897 - anchor,
7898 - clearAnchor: (0, react.useCallback)(() => {
7899 - setAnchor(null);
7900 - }, [])
7901 - };
7902 - };
7903 - var createAnchorBasedOnSelection = (ownerDocument, id) => {
7904 - const selection = ownerDocument.defaultView?.getSelection();
7905 - if (!selection) return null;
7906 - const selectionRect = selection.getRangeAt(0).getBoundingClientRect();
7907 - const bodyRect = ownerDocument.body.getBoundingClientRect();
7908 - const toolbarAnchor = ownerDocument.createElement("span");
7909 - styleToolbarAnchor(toolbarAnchor, selectionRect, bodyRect);
7910 - toolbarAnchor.setAttribute("id", getToolbarAnchorId(id));
7911 - ownerDocument.body.appendChild(toolbarAnchor);
7912 - return toolbarAnchor;
7913 - };
7914 - var removeToolbarAnchor = (ownerDocument, id) => {
7915 - const toolbarAnchor = getToolbarAnchor(ownerDocument, id);
7916 - if (toolbarAnchor) ownerDocument.body.removeChild(toolbarAnchor);
7917 - };
7918 - var getToolbarAnchorId = (id) => `${TOOLBAR_ANCHOR_ID_PREFIX}-${id}`;
7919 - var getToolbarAnchor = (ownerDocument, id) => ownerDocument.getElementById(getToolbarAnchorId(id));
7920 - var styleToolbarAnchor = (anchor, selectionRect, bodyRect) => {
7921 - const { width, height } = selectionRect;
7922 - Object.assign(anchor.style, {
7923 - ...TOOLBAR_ANCHOR_STATIC_STYLES,
7924 - top: `${selectionRect.top - bodyRect.top}px`,
7925 - left: `${selectionRect.left - bodyRect.left}px`,
7926 - width: `${width}px`,
7927 - height: `${height}px`
7928 - });
7929 - };
7930 - var horizontalShifterMiddleware = {
7931 - name: "horizontalShifter",
7932 - fn(state) {
7933 - const { x: left, y: top, elements: { reference: anchor, floating } } = state;
7934 - const newState = {
7935 - ...state,
7936 - x: left,
7937 - y: top
7938 - };
7939 - if (left < 0) {
7940 - newState.x = 0;
7941 - return newState;
7942 - }
7943 - const anchorRect = anchor.getBoundingClientRect();
7944 - const right = left + floating.offsetWidth;
7945 - const documentWidth = anchor.ownerDocument.body.offsetWidth;
7946 - if (right > documentWidth && anchorRect.right < right) {
7947 - newState.x = left - (right - documentWidth);
7948 - return newState;
7949 - }
7950 - return newState;
7951 - }
7952 - };
7953 -
7954 -//#endregion
7955 -//#region packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/canvas-inline-editor.tsx
7956 - var CanvasInlineEditor = ({ elementClasses, initialValue, expectedTag, rootElement, contentElement, id, setValue, requestDestroy }) => {
7957 - const [active, setActive] = (0, react.useState)(true);
7958 - const [editor, setEditor] = (0, react.useState)(null);
7959 - const { onSelectionEnd, anchor: toolbarAnchor, clearAnchor } = useRenderToolbar(rootElement.ownerDocument, id);
7960 - (0, react.useEffect)(() => {
7961 - if (!active) {
7962 - clearAnchor();
7963 - requestDestroy();
7964 - }
7965 - }, [
7966 - active,
7967 - clearAnchor,
7968 - requestDestroy
7969 - ]);
7970 - const dismiss = (0, react.useCallback)(() => {
7971 - setEditor(null);
7972 - setActive(false);
7973 - }, []);
7974 - useOnClickOutsideIframe(dismiss);
7975 - (0, react.useEffect)(() => {
7976 - const ownerDocument = contentElement.ownerDocument;
7977 - const handleClickAway = (event) => {
7978 - if (contentElement.contains(event.target)) return;
7979 - dismiss();
7980 - };
7981 - ownerDocument.addEventListener("mousedown", handleClickAway);
7982 - return () => ownerDocument.removeEventListener("mousedown", handleClickAway);
7983 - }, [contentElement, dismiss]);
7984 - if (!active) return null;
7985 - return /* @__PURE__ */ react.createElement(_elementor_ui.ThemeProvider, null, /* @__PURE__ */ react.createElement(InlineEditingOverlay, {
7986 - expectedTag,
7987 - rootElement,
7988 - id
7989 - }), /* @__PURE__ */ react.createElement(_elementor_editor_controls.InlineEditor, {
7990 - onEditorCreate: setEditor,
7991 - mountElement: contentElement,
7992 - editorProps: { attributes: { style: "outline: none; display: inherit; justify-content: inherit; align-items: inherit; flex-direction: inherit; text-align: inherit;" } },
7993 - elementClasses,
7994 - value: initialValue,
7995 - setValue,
7996 - onBlur: dismiss,
7997 - autofocus: true,
7998 - onSelectionEnd
7999 - }), toolbarAnchor && editor && /* @__PURE__ */ react.createElement(InlineEditingToolbar, {
8000 - anchor: toolbarAnchor,
8001 - editor,
8002 - id
8003 - }));
8004 - };
8005 - var InlineEditingOverlay = ({ expectedTag, rootElement, id }) => {
8006 - const [overlayRefElement, setOverlayElement] = (0, react.useState)(getInlineEditorElement(rootElement, expectedTag));
8007 - (0, react.useEffect)(() => {
8008 - setOverlayElement(getInlineEditorElement(rootElement, expectedTag));
8009 - }, [expectedTag, rootElement]);
8010 - return overlayRefElement ? /* @__PURE__ */ react.createElement(OutlineOverlay, {
8011 - element: overlayRefElement,
8012 - id,
8013 - isSelected: true
8014 - }) : null;
8015 - };
8016 - var InlineEditingToolbar = ({ anchor, editor, id }) => {
8017 - const { refs, floatingStyles } = useFloating({
8018 - placement: "top",
8019 - strategy: "fixed",
8020 - transform: false,
8021 - whileElementsMounted: autoUpdate,
8022 - middleware: [horizontalShifterMiddleware, flip()]
8023 - });
8024 - (0, react.useLayoutEffect)(() => {
8025 - refs.setReference(anchor);
8026 - return () => refs.setReference(null);
8027 - }, [anchor, refs]);
8028 - return /* @__PURE__ */ react.createElement(FloatingPortal, { id: CANVAS_WRAPPER_ID }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
8029 - ref: refs.setFloating,
8030 - role: "presentation",
8031 - style: {
8032 - ...floatingStyles,
8033 - pointerEvents: "none"
8034 - }
8035 - }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.InlineEditorToolbar, {
8036 - editor,
8037 - elementId: id
8038 - })));
8039 - };
8040 -
8041 -//#endregion
8042 -//#region packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/inline-editing-eligibility.ts
8043 - var hasKey = (propType) => {
8044 - return "key" in propType;
8045 - };
8046 - var TEXT_PROP_TYPE_KEYS = /* @__PURE__ */ new Set([
8047 - _elementor_editor_props.escapedHtmlPropTypeUtil.key,
8048 - _elementor_editor_props.htmlV3PropTypeUtil.key,
8049 - _elementor_editor_props.stringPropTypeUtil.key
8050 - ]);
8051 - var isCoreTextPropTypeKey = (key) => {
8052 - return TEXT_PROP_TYPE_KEYS.has(key);
8053 - };
8054 - var isAllowedBySchema = (propTypeFromSchema) => {
8055 - if (!propTypeFromSchema) return false;
8056 - if (hasKey(propTypeFromSchema) && isCoreTextPropTypeKey(propTypeFromSchema.key)) return true;
8057 - if (propTypeFromSchema.kind !== "union") return false;
8058 - return [...TEXT_PROP_TYPE_KEYS].some((key) => propTypeFromSchema.prop_types[key]);
8059 - };
8060 - var isInlineEditingAllowed = ({ rawValue, propTypeFromSchema }) => {
8061 - if (rawValue === null || rawValue === void 0) return isAllowedBySchema(propTypeFromSchema);
8062 - return _elementor_editor_props.escapedHtmlPropTypeUtil.isValid(rawValue) || _elementor_editor_props.htmlV3PropTypeUtil.isValid(rawValue) || _elementor_editor_props.stringPropTypeUtil.isValid(rawValue);
8063 - };
8064 -
8065 -//#endregion
8066 -//#region packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/inline-editing-elements.tsx
8067 - var __defProp$1 = Object.defineProperty;
8068 - var __defNormalProp$1 = /* @__PURE__ */ __name((obj, key, value) => key in obj ? __defProp$1(obj, key, {
8069 - enumerable: true,
8070 - configurable: true,
8071 - writable: true,
8072 - value
8073 - }) : obj[key] = value, "__defNormalProp");
8074 - var __publicField$1 = /* @__PURE__ */ __name((obj, key, value) => __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value), "__publicField");
8075 - var HISTORY_DEBOUNCE_WAIT = 800;
8076 - var InlineEditingReplacement = class extends ReplacementBase {
8077 - constructor() {
8078 - super(...arguments);
8079 - __publicField$1(this, "handlerAttached", false);
8080 - __publicField$1(this, "editing", false);
8081 - __publicField$1(this, "handleRenderInlineEditor", () => {
8082 - if (this.isEditingModeActive() || !this.isInlineEditingEligible()) return;
8083 - this.renderInlineEditor();
8084 - });
8085 - }
8086 - getReplacementKey() {
8087 - return "inline-editing";
8088 - }
8089 - static getTypes() {
8090 - return Object.keys(INLINE_EDITING_PROPERTY_PER_TYPE);
8091 - }
8092 - isEditingModeActive() {
8093 - return this.editing;
8094 - }
8095 - shouldRenderReplacement() {
8096 - return this.isInlineEditingEligible() && (0, _elementor_editor_v1_adapters.getCurrentEditMode)() === "edit";
8097 - }
8098 - renderOnChange() {
8099 - if (this.isEditingModeActive()) return;
8100 - this.refreshView();
8101 - }
8102 - onDestroy() {
8103 - this.resetInlineEditorRoot();
8104 - }
8105 - _beforeRender() {
8106 - this.resetInlineEditorRoot();
8107 - }
8108 - _afterRender() {
8109 - if (this.isInlineEditingEligible() && !this.handlerAttached) {
8110 - this.element.addEventListener("click", this.handleRenderInlineEditor);
8111 - this.handlerAttached = true;
8112 - }
8113 - }
8114 - originalMethodsToTrigger() {
8115 - const before = this.isEditingModeActive() ? TRIGGER_TIMING.never : TRIGGER_TIMING.before;
8116 - const after = this.isEditingModeActive() ? TRIGGER_TIMING.never : TRIGGER_TIMING.after;
8117 - return {
8118 - _beforeRender: before,
8119 - _afterRender: after,
8120 - renderOnChange: after,
8121 - onDestroy: TRIGGER_TIMING.after,
8122 - render: before
8123 - };
8124 - }
8125 - resetInlineEditorRoot() {
8126 - this.element.removeEventListener("click", this.handleRenderInlineEditor);
8127 - this.handlerAttached = false;
8128 - this.reactRoot.render(null);
8129 - this.editing = false;
8130 - }
8131 - unmountInlineEditor() {
8132 - this.resetInlineEditorRoot();
8133 - this.refreshView();
8134 - }
8135 - isInlineEditingEligible() {
8136 - const settingKey = this.getInlineEditablePropertyName();
8137 - return isInlineEditingAllowed({
8138 - rawValue: this.getSetting(settingKey),
8139 - propTypeFromSchema: this.getInlineEditablePropType()
8140 - });
8141 - }
8142 - getInlineEditablePropertyName() {
8143 - return INLINE_EDITING_PROPERTY_PER_TYPE[this.type] ?? "";
8144 - }
8145 - getInlineEditablePropType() {
8146 - const propSchema = (0, _elementor_editor_elements.getElementType)(this.type)?.propsSchema;
8147 - const propertyName = this.getInlineEditablePropertyName();
8148 - return propSchema?.[propertyName] ?? null;
8149 - }
8150 - getInlineEditablePropValue() {
8151 - const prop = this.getInlineEditablePropType();
8152 - const settingKey = this.getInlineEditablePropertyName();
8153 - return this.getSetting(settingKey) ?? prop?.default ?? null;
8154 - }
8155 - getExtractedContentValue() {
8156 - const propValue = this.getInlineEditablePropValue();
8157 - if (_elementor_editor_props.escapedHtmlPropTypeUtil.isValid(propValue)) return _elementor_editor_props.escapedHtmlPropTypeUtil.extract(propValue) ?? "";
8158 - const extracted = _elementor_editor_props.htmlV3PropTypeUtil.extract(propValue);
8159 - return _elementor_editor_props.stringPropTypeUtil.extract(extracted?.content ?? null) ?? "";
8160 - }
8161 - createContentPropValue(value) {
8162 - const content = value || "";
8163 - if (this.getInlineEditablePropTypeKey() === _elementor_editor_props.htmlV3PropTypeUtil.key) return _elementor_editor_props.htmlV3PropTypeUtil.create({
8164 - content: _elementor_editor_props.stringPropTypeUtil.create(content),
8165 - children: []
8166 - });
8167 - return _elementor_editor_props.escapedHtmlPropTypeUtil.create(content);
8168 - }
8169 - setContentValue(value) {
8170 - const settingKey = this.getInlineEditablePropertyName();
8171 - const valueToSave = this.createContentPropValue(value);
8172 - (0, _elementor_editor_v1_adapters.undoable)({
8173 - do: () => {
8174 - const prevValue = this.getInlineEditablePropValue();
8175 - this.runCommand(settingKey, valueToSave);
8176 - return prevValue;
8177 - },
8178 - undo: (_, prevValue) => {
8179 - this.runCommand(settingKey, prevValue ?? null);
8180 - }
8181 - }, {
8182 - title: (0, _elementor_editor_elements.getElementLabel)(this.id),
8183 - subtitle: (0, _wordpress_i18n.__)("%s edited", "elementor").replace("%s", this.getInlineEditablePropTypeKey() ?? "Inline editing"),
8184 - debounce: { wait: HISTORY_DEBOUNCE_WAIT }
8185 - })();
8186 - }
8187 - getInlineEditablePropTypeKey() {
8188 - const propType = this.getInlineEditablePropType();
8189 - if (!propType) return null;
8190 - if (propType.kind === "union") {
8191 - const textKeys = [
8192 - _elementor_editor_props.escapedHtmlPropTypeUtil.key,
8193 - _elementor_editor_props.htmlV3PropTypeUtil.key,
8194 - _elementor_editor_props.stringPropTypeUtil.key
8195 - ];
8196 - for (const key of textKeys) if (propType.prop_types[key]) return key;
8197 - return null;
8198 - }
8199 - if ("key" in propType && typeof propType.key === "string") return propType.key;
8200 - return null;
8201 - }
8202 - runCommand(key, value) {
8203 - (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("document/elements/set-settings", {
8204 - container: (0, _elementor_editor_elements.getContainer)(this.id),
8205 - settings: { [key]: value }
8206 - }, { internal: true });
8207 - (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("document/save/set-is-modified", { status: true }, { internal: true });
8208 - }
8209 - getExpectedTag() {
8210 - const tagPropType = this.getTagPropType();
8211 - return _elementor_editor_props.stringPropTypeUtil.extract(this.getSetting("tag") ?? null) ?? _elementor_editor_props.stringPropTypeUtil.extract(tagPropType?.default ?? null) ?? null;
8212 - }
8213 - getTagPropType() {
8214 - const propsSchema = (0, _elementor_editor_elements.getElementType)(this.type)?.propsSchema;
8215 - if (!propsSchema?.tag) return null;
8216 - const tagPropType = propsSchema.tag ?? null;
8217 - if (tagPropType.kind === "union") return tagPropType.prop_types.string ?? null;
8218 - return tagPropType;
8219 - }
8220 - renderInlineEditor() {
8221 - if (this.isEditingModeActive()) this.resetInlineEditorRoot();
8222 - const contentElement = this.element.children?.[0];
8223 - if (!contentElement) return;
8224 - const elementClasses = contentElement.classList.toString();
8225 - const propValue = this.getExtractedContentValue();
8226 - const expectedTag = this.getExpectedTag();
8227 - contentElement.innerHTML = "";
8228 - this.editing = true;
8229 - this.reactRoot.render(/* @__PURE__ */ react.createElement(CanvasInlineEditor, {
8230 - elementClasses,
8231 - initialValue: propValue,
8232 - expectedTag,
8233 - rootElement: this.element,
8234 - contentElement,
8235 - id: this.id,
8236 - setValue: this.setContentValue.bind(this),
8237 - requestDestroy: this.unmountInlineEditor.bind(this)
8238 - }));
8239 - }
8240 - };
8241 -
8242 -//#endregion
8243 -//#region packages/packages/core/editor-canvas/src/legacy/replacements/manager.ts
8244 - var __typeError = (msg) => {
8245 - throw TypeError(msg);
8246 - };
8247 - var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
8248 - var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
8249 - var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
8250 - var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8251 - var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
8252 - var replacements = /* @__PURE__ */ new Map();
8253 - var initViewReplacements = () => {
8254 - registerReplacement(InlineEditingReplacement);
8255 - };
8256 - var registerReplacement = (replacement) => {
8257 - const types = replacement.getTypes();
8258 - if (!types) return;
8259 - types.forEach((type) => {
8260 - replacements.set(type, replacement);
8261 - });
8262 - };
8263 - var getReplacement = (type) => {
8264 - return replacements.get(type) ?? null;
8265 - };
8266 - var createViewWithReplacements = (options) => {
8267 - var _replacement;
8268 - var _config;
8269 - var _reactContainer;
8270 - var _reactRoot;
8271 - var _instances;
8272 - var triggerAltMethod_fn;
8273 - var _a;
8274 - const TemplatedView = createTemplatedElementView(options);
8275 - return _a = class extends TemplatedView {
8276 - constructor(...args) {
8277 - super(...args);
8278 - __privateAdd(this, _instances);
8279 - __privateAdd(this, _replacement, null);
8280 - __privateAdd(this, _config);
8281 - __privateAdd(this, _reactContainer);
8282 - __privateAdd(this, _reactRoot);
8283 - const settings = this.model.get("settings");
8284 - __privateSet(this, _reactContainer, this.el.ownerDocument.createElement("div"));
8285 - __privateGet(this, _reactContainer).style.display = "none";
8286 - this.el.ownerDocument.body.appendChild(__privateGet(this, _reactContainer));
8287 - __privateSet(this, _reactRoot, (0, import_client.createRoot)(__privateGet(this, _reactContainer)));
8288 - __privateSet(this, _config, {
8289 - getSetting: settings.get.bind(settings),
8290 - setSetting: settings.set.bind(settings),
8291 - element: this.el,
8292 - type: this?.model?.get("widgetType") ?? this.container?.model?.get("elType") ?? null,
8293 - id: this?.model?.get("id") ?? null,
8294 - refreshView: this.refreshView.bind(this),
8295 - reactRoot: __privateGet(this, _reactRoot),
8296 - reactContainer: __privateGet(this, _reactContainer)
8297 - });
8298 - }
8299 - refreshView() {
8300 - this.invalidateRenderCache?.();
8301 - this.render();
8302 - }
8303 - renderOnChange() {
8304 - __privateMethod(this, _instances, triggerAltMethod_fn).call(this, "renderOnChange");
8305 - }
8306 - render() {
8307 - const config = __privateGet(this, _config);
8308 - const widgetType = config.type;
8309 - const ReplacementClass = widgetType ? getReplacement(widgetType) : null;
8310 - if (ReplacementClass && !__privateGet(this, _replacement)) __privateSet(this, _replacement, new ReplacementClass(config));
8311 - __privateMethod(this, _instances, triggerAltMethod_fn).call(this, "render");
8312 - }
8313 - onDestroy() {
8314 - __privateMethod(this, _instances, triggerAltMethod_fn).call(this, "onDestroy");
8315 - __privateGet(this, _reactRoot).unmount();
8316 - __privateGet(this, _reactContainer).remove();
8317 - }
8318 - _afterRender() {
8319 - __privateMethod(this, _instances, triggerAltMethod_fn).call(this, "_afterRender");
8320 - }
8321 - _beforeRender() {
8322 - __privateMethod(this, _instances, triggerAltMethod_fn).call(this, "_beforeRender");
8323 - }
8324 - }, _replacement = /* @__PURE__ */ new WeakMap(), _config = /* @__PURE__ */ new WeakMap(), _reactContainer = /* @__PURE__ */ new WeakMap(), _reactRoot = /* @__PURE__ */ new WeakMap(), _instances = /* @__PURE__ */ new WeakSet(), triggerAltMethod_fn = function(methodKey) {
8325 - const baseMethod = TemplatedView.prototype[methodKey].bind(this);
8326 - const shouldReplace = __privateGet(this, _replacement)?.shouldRenderReplacement();
8327 - const altMethod = shouldReplace && __privateGet(this, _replacement)?.[methodKey]?.bind(__privateGet(this, _replacement));
8328 - if (!altMethod || !shouldReplace) return baseMethod();
8329 - const renderTiming = __privateGet(this, _replacement)?.originalMethodsToTrigger()[methodKey] ?? "never";
8330 - if (renderTiming === "before") baseMethod();
8331 - altMethod();
8332 - if (renderTiming === "after") baseMethod();
8333 - }, _a;
8334 - };
8335 - var createTemplatedElementTypeWithReplacements = ({ type, renderer, element }) => {
8336 - const legacyWindow = window;
8337 - const view = createViewWithReplacements({
8338 - type,
8339 - renderer,
8340 - element
8341 - });
8342 - return class extends legacyWindow.elementor.modules.elements.types.Widget {
8343 - getType() {
8344 - return type;
8345 - }
8346 - getView() {
8347 - return view;
8348 - }
8349 - };
8350 - };
8351 -
8352 -//#endregion
8353 -//#region packages/packages/core/editor-canvas/src/legacy/init-legacy-views.ts
8354 - var elementsLegacyTypes = {};
8355 - var modelExtensionsRegistry = {};
8356 - function registerModelExtensions(type, extensions) {
8357 - modelExtensionsRegistry[type] = extensions;
8358 - }
8359 - function registerElementType(type, elementTypeGenerator) {
8360 - elementsLegacyTypes[type] = elementTypeGenerator;
8361 - if ((0, _elementor_editor_v1_adapters.__privateIsReady)()) registerElementInLegacyManager(type, createDomRenderer());
8362 - }
8363 - function initLegacyViews() {
8364 - (0, _elementor_editor_v1_adapters.__privateListenTo)((0, _elementor_editor_v1_adapters.v1ReadyEvent)(), () => {
8365 - const widgetsCache = (0, _elementor_editor_elements.getWidgetsCache)() ?? {};
8366 - const renderer = createDomRenderer();
8367 - registerProPromotionTypes(widgetsCache);
8368 - Object.keys(widgetsCache).forEach((type) => {
8369 - registerElementInLegacyManager(type, renderer);
8370 - });
8371 - });
8372 - }
8373 - function registerElementInLegacyManager(type, renderer) {
8374 - const element = ((0, _elementor_editor_elements.getWidgetsCache)() ?? {})[type];
8375 - if (!element?.atomic) return;
8376 - tryRegisterElement(window, type, element, resolveElementType(type, renderer, element));
8377 - }
8378 - function registerProPromotionTypes(widgetsCache) {
8379 - Object.entries(widgetsCache).forEach(([type, element]) => {
8380 - if (element.meta?.is_pro_promotion) registerElementType(type, (options) => createProPromotionNestedType(options));
8381 - });
8382 - }
8383 - function resolveElementType(type, renderer, element) {
8384 - if (canBeNestedTemplated(element)) {
8385 - const customGenerator2 = elementsLegacyTypes[type];
8386 - return customGenerator2 ? customGenerator2({
8387 - type,
8388 - renderer,
8389 - element
8390 - }) : createNestedTemplatedType(type, renderer, element);
8391 - }
8392 - if (!canBeTemplated(element)) return createElementType(type);
8393 - const customGenerator = elementsLegacyTypes[type];
8394 - return customGenerator ? customGenerator({
8395 - type,
8396 - renderer,
8397 - element
8398 - }) : createTemplatedElementTypeWithReplacements({
8399 - type,
8400 - renderer,
8401 - element
8402 - });
8403 - }
8404 - function tryRegisterElement(legacyWindow, type, element, ResolvedElementType) {
8405 - if (!(canBeTemplated(element) || canBeNestedTemplated(element))) return;
8406 - const elementsManager = legacyWindow.elementor.elementsManager;
8407 - const isAlreadyRegistered = Boolean(elementsManager.getElementTypeClass(type));
8408 - try {
8409 - elementsManager.registerElementType(new ResolvedElementType());
8410 - } catch {
8411 - if (canBeNestedTemplated(element) && isAlreadyRegistered) elementsManager.elementTypes[type] = new ResolvedElementType();
8412 - }
8413 - }
8414 - function createNestedTemplatedType(type, renderer, element) {
8415 - return createNestedTemplatedElementType({
8416 - type,
8417 - renderer,
8418 - element,
8419 - modelExtensions: modelExtensionsRegistry[type]
8420 - });
8421 - }
8422 -
8423 -//#endregion
8424 -//#region packages/packages/core/editor-canvas/src/legacy/list-type.ts
8425 - var LIST_TYPE = "e-list";
8426 - function initListType() {
8427 - registerElementType(LIST_TYPE, (options) => createListType(options));
8428 - }
8429 - function createListType(options) {
8430 - const BaseType = createNestedTemplatedElementType(options);
8431 - let ListView = null;
8432 - return class extends BaseType {
8433 - getView() {
8434 - if (!ListView) ListView = createListView(options);
8435 - return ListView;
8436 - }
8437 - };
8438 - }
8439 - function createListView(options) {
8440 - return createNestedTemplatedElementView(options).extend({
8441 - getRenderContext() {
8442 - const parentContext = this._parent?.getRenderContext?.();
8443 - const showMarkersProp = this.model.get("settings")?.get?.("show_markers");
8444 - const showMarkers = showMarkersProp?.value ?? showMarkersProp ?? true;
8445 - return {
8446 - ...parentContext,
8447 - show_markers: showMarkers
8448 - };
8449 - },
8450 - getResolverRenderContext() {
8451 - const parentContext = this._parent?.getResolverRenderContext?.();
8452 - const showMarkersProp = this.model.get("settings")?.get?.("show_markers");
8453 - const showMarkers = showMarkersProp?.value ?? showMarkersProp ?? true;
8454 - return {
8455 - ...parentContext,
8456 - show_markers: showMarkers
8457 - };
8458 - }
8459 - });
8460 - }
8461 -
8462 -//#endregion
8463 -//#region packages/packages/core/editor-canvas/src/legacy/tabs-model-extensions.ts
8464 - var tabModelExtensions = { modifyDefaultChildren(elements) {
8465 - if (!Array.isArray(elements) || elements.length === 0) return elements;
8466 - const [paragraph] = elements;
8467 - const position = this.get("editor_settings")?.initial_position;
8468 - if (!position || !paragraph || typeof paragraph !== "object") return elements;
8469 - const paragraphElement = paragraph;
8470 - return [{
8471 - ...paragraphElement,
8472 - settings: {
8473 - ...paragraphElement.settings,
8474 - paragraph: _elementor_editor_props.escapedHtmlPropTypeUtil.create(`Tab ${position}`)
8475 - }
8476 - }, ...elements.slice(1)];
8477 - } };
8478 - function initTabsModelExtensions() {
8479 - registerModelExtensions("e-tab", tabModelExtensions);
8480 - }
8481 -
8482 -//#endregion
8483 -//#region packages/packages/core/editor-canvas/src/mcp/resources/available-widgets-resource.ts
8484 - var MCP_PROXY_URL$3 = "elementor/v1/mcp-proxy";
8485 - var AVAILABLE_WIDGETS_URI = "elementor://context/available-widgets";
8486 - var AVAILABLE_WIDGETS_URI_V4 = "elementor://context/available-widgets/v4";
8487 - var fetchWidgets = async () => {
8488 - const { data } = await (0, _elementor_http_client.httpService)().post(MCP_PROXY_URL$3, {
8489 - tool: "list-widget-schemas",
8490 - input: { summary: true }
8491 - });
8492 - return data.data?.widgets ?? [];
8493 - };
8494 - var buildContents = async (uri) => {
8495 - const widgets = await fetchWidgets();
8496 - return { contents: [{
8497 - uri,
8498 - mimeType: "application/json",
8499 - text: JSON.stringify(widgets, null, 2)
8500 - }] };
8501 - };
8502 - var initAvailableWidgetsResource = (reg) => {
8503 - const { resource } = reg;
8504 - resource("available-widgets-v4", AVAILABLE_WIDGETS_URI_V4, { description: "All registered v4 version widgets" }, async () => buildContents(AVAILABLE_WIDGETS_URI_V4));
8505 - resource("available-widgets", AVAILABLE_WIDGETS_URI, { description: "All registered v4 widget types with description." }, async () => buildContents(AVAILABLE_WIDGETS_URI));
8506 - };
8507 -
8508 -//#endregion
8509 -//#region packages/packages/core/editor-canvas/src/mcp/resources/best-practices-resource.ts
8510 - var MCP_PROXY_URL$2 = "elementor/v1/mcp-proxy";
8511 - var BEST_PRACTICES_URI = "elementor://style/best-practices";
8512 - var initBestPracticesResource = (reg) => {
8513 - const { resource } = reg;
8514 - resource("style-best-practices", BEST_PRACTICES_URI, {
8515 - description: "Design quality guidelines for avoiding generic AI output: typography, color strategy, spacing, motion, and visual hierarchy best practices.",
8516 - mimeType: "text/markdown"
8517 - }, async (uri) => {
8518 - const { data } = await (0, _elementor_http_client.httpService)().get(MCP_PROXY_URL$2, { params: { uri: uri.href } });
8519 - return { contents: [{
8520 - uri: uri.href,
8521 - mimeType: "text/markdown",
8522 - text: data.data
8523 - }] };
8524 - });
8525 - };
8526 -
8527 -//#endregion
8528 -//#region packages/packages/core/editor-canvas/src/mcp/resources/document-structure-resource.ts
8529 - var DOCUMENT_STRUCTURE_URI = "elementor://document/structure";
8530 - var initDocumentStructureResource = (reg) => {
8531 - const { resource, sendResourceUpdated } = reg;
8532 - let currentDocumentStructure = null;
8533 - const updateDocumentStructure = () => {
8534 - const structure = getDocumentStructure();
8535 - const newStructure = JSON.stringify(structure, null, 2);
8536 - if (newStructure !== currentDocumentStructure) {
8537 - currentDocumentStructure = newStructure;
8538 - sendResourceUpdated({ uri: DOCUMENT_STRUCTURE_URI });
8539 - }
8540 - };
8541 - (0, _elementor_editor_v1_adapters.__privateListenTo)([
8542 - (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/create"),
8543 - (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/delete"),
8544 - (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/move"),
8545 - (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/copy"),
8546 - (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/paste"),
8547 - (0, _elementor_editor_v1_adapters.commandEndEvent)("editor/documents/attach-preview"),
8548 - (0, _elementor_editor_v1_adapters.commandEndEvent)("editor/documents/switch")
8549 - ], updateDocumentStructure);
8550 - updateDocumentStructure();
8551 - resource("document-structure", DOCUMENT_STRUCTURE_URI, { description: "Document structure." }, async () => {
8552 - return { contents: [{
8553 - uri: DOCUMENT_STRUCTURE_URI,
8554 - text: JSON.stringify(getDocumentStructure(), null, 2)
8555 - }] };
8556 - });
8557 - };
8558 - function getDocumentStructure() {
8559 - const document = window.elementor?.documents?.getCurrent?.();
8560 - if (!document) return { error: "No active document found" };
8561 - const elements = (document.container?.children || []).map((container) => extractElementData(container));
8562 - return {
8563 - documentId: document.id,
8564 - documentType: document.config.type,
8565 - title: document.config.settings?.post_title || "Untitled",
8566 - elements: elements.filter((el) => el !== null)
8567 - };
8568 - }
8569 - function resolveElementVersion$1(element) {
8570 - if (element.model?.config?.atomic) return "v4";
8571 - const widgetType = element.model?.attributes?.widgetType;
8572 - if (widgetType && (0, _elementor_editor_elements.getWidgetsCache)()?.[widgetType]?.atomic_props_schema) return "v4";
8573 - return "v3";
8574 - }
8575 - __name(resolveElementVersion$1, "resolveElementVersion");
8576 - function extractElementData(element) {
8577 - if (!element || !element.model) return null;
8578 - const model = element.model.attributes;
8579 - const result = {
8580 - id: model.id,
8581 - elType: model.elType,
8582 - widgetType: model.widgetType || void 0,
8583 - version: resolveElementVersion$1(element)
8584 - };
8585 - const title = model.title || element.model?.editor_settings?.title || element.model.getTitle?.();
8586 - if (title) result.title = title;
8587 - if (element.children && element.children.length > 0) result.children = element.children.map((child) => extractElementData(child)).filter((child) => child !== null);
8588 - return result;
8589 - }
8590 -
8591 -//#endregion
8592 -//#region packages/packages/core/editor-canvas/src/mcp/resources/dynamic-tags-resource.ts
8593 - var DYNAMIC_TAGS_URI = "elementor://dynamic-tags";
8594 - var MCP_PROXY_URL$1 = "elementor/v1/mcp-proxy";
8595 - var fetchDynamicTags = async () => {
8596 - const { data } = await (0, _elementor_http_client.httpService)().get(MCP_PROXY_URL$1, { params: { uri: DYNAMIC_TAGS_URI } });
8597 - return data.data ?? "[]";
8598 - };
8599 - var initDynamicTagsResource = (reg) => {
8600 - const { resource } = reg;
8601 - resource("dynamic-tags", DYNAMIC_TAGS_URI, {
8602 - description: `List of available dynamic tags. To bind a property to a dynamic source, set its value to { "$$type": "dynamic", "value": { "name": <tag name>, "settings": { ... } } } using a tag whose name appears in that property's allowed list, and populate "settings" per the tag entry here.`,
8603 - mimeType: "application/json"
8604 - }, async (uri) => {
8605 - return { contents: [{
8606 - uri: uri.href,
8607 - mimeType: "application/json",
8608 - text: await fetchDynamicTags()
8609 - }] };
8610 - });
8611 - };
8612 -
8613 -//#endregion
8614 -//#region packages/packages/core/editor-canvas/src/mcp/resources/editor-state-resource.ts
8615 - var CURRENTLY_VIEWED_SCREEN = "The user is currently viewing the Elementor editor";
8616 - var PAGE_CONTENT_CHARACTER_LIMIT = 500;
8617 - var PREVIEW_TEXT_NODE_MIN_LENGTH = 2;
8618 - var EDITOR_STATE_URI = "elementor://context/editor-state";
8619 - var initEditorStateResource = (reg) => {
8620 - const { resource, sendResourceUpdated } = reg;
8621 - let lastSerializedState = "";
8622 - const buildState = () => ({
8623 - currentlyViewedScreen: CURRENTLY_VIEWED_SCREEN,
8624 - pageContent: getPageContentFromPreview(),
8625 - pageTitle: getPageTitle()
8626 - });
8627 - const notifyIfChanged = () => {
8628 - const serialized = JSON.stringify(buildState());
8629 - if (serialized === lastSerializedState) return;
8630 - lastSerializedState = serialized;
8631 - sendResourceUpdated({ uri: EDITOR_STATE_URI });
8632 - };
8633 - (0, _elementor_editor_v1_adapters.__privateListenTo)([(0, _elementor_editor_v1_adapters.commandEndEvent)("editor/documents/switch"), (0, _elementor_editor_v1_adapters.commandEndEvent)("editor/documents/attach-preview")], notifyIfChanged);
8634 - lastSerializedState = JSON.stringify(buildState());
8635 - resource("editor-state", EDITOR_STATE_URI, { description: "Editor page title, preview text snapshot, and viewed screen label." }, async () => {
8636 - return { contents: [{
8637 - uri: EDITOR_STATE_URI,
8638 - text: JSON.stringify(buildState(), null, 2)
8639 - }] };
8640 - });
8641 - };
8642 - function getPageContentFromPreview() {
8643 - try {
8644 - const root = window.elementor?.$previewContents?.[0];
8645 - if (!root) return null;
8646 - const content = [];
8647 - const clone = root.cloneNode(true);
8648 - clone.querySelectorAll(".elementor-editor-element-settings, #elementor-add-new-section").forEach((el) => {
8649 - el.remove();
8650 - });
8651 - const walk = (node, insideElementorElement = false) => {
8652 - const isInside = node.classList?.contains("elementor-element") || insideElementorElement;
8653 - if (node.nodeType === Node.TEXT_NODE && isInside) {
8654 - const text2 = node.textContent?.trim().replace(/\s+/g, " ");
8655 - if (text2 && text2.length > PREVIEW_TEXT_NODE_MIN_LENGTH) content.push(text2);
8656 - } else node.childNodes.forEach((child) => {
8657 - walk(child, isInside);
8658 - });
8659 - };
8660 - walk(clone);
8661 - const text = content.join(" ");
8662 - if (text.length > PAGE_CONTENT_CHARACTER_LIMIT) return text.slice(0, PAGE_CONTENT_CHARACTER_LIMIT) + "...";
8663 - return text;
8664 - } catch {
8665 - return null;
8666 - }
8667 - }
8668 - function getPageTitle() {
8669 - try {
8670 - const postTitle = (window.elementor?.documents?.getCurrent?.())?.config?.settings?.post_title;
8671 - if (postTitle) return postTitle;
8672 - let title = document.title || "Page";
8673 - title = title.split(/\s*[‹»|–—-]\s*/)[0];
8674 - return title.trim() || "Page";
8675 - } catch {
8676 - return "Page";
8677 - }
8678 - }
8679 -
8680 -//#endregion
8681 -//#region packages/packages/core/editor-canvas/src/mcp/resources/general-context-resource.ts
8682 - var GENERAL_CONTEXT_URI = "elementor://context/general";
8683 - var initGeneralContextResource = (reg) => {
8684 - const { resource, sendResourceUpdated } = reg;
8685 - let lastSerializedPayload = null;
8686 - const getPageTitle = () => {
8687 - const title = window.elementor?.documents?.getCurrent?.()?.config?.settings?.post_title;
8688 - if (!title?.trim()) return null;
8689 - return title;
8690 - };
8691 - const buildPayload = () => {
8692 - const extendedWindow = window;
8693 - const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
8694 - const postParam = new URLSearchParams(location.search).get("post");
8695 - const parsedPostId = postParam ? Number(postParam) : null;
8696 - const postId = parsedPostId !== null && Number.isFinite(parsedPostId) ? parsedPostId : null;
8697 - const pageTitle = getPageTitle();
8698 - const urlObject = new URL(window.location.href);
8699 - const pageUrl = urlObject.pathname + urlObject.search;
8700 - const pageName = pageTitle || "Elementor Editor";
8701 - const plugins = extendedWindow.angieConfig?.plugins;
8702 - return {
8703 - timezone,
8704 - postId,
8705 - currentPage: {
8706 - pageName,
8707 - pageTitle,
8708 - pageUrl
8709 - },
8710 - ...plugins && { plugins }
8711 - };
8712 - };
8713 - const pushUpdateIfChanged = () => {
8714 - const serialized = JSON.stringify(buildPayload());
8715 - if (serialized === lastSerializedPayload) return;
8716 - lastSerializedPayload = serialized;
8717 - sendResourceUpdated({ uri: GENERAL_CONTEXT_URI });
8718 - };
8719 - resource("general-context", GENERAL_CONTEXT_URI, { description: "General context: timezone, post id, and current page." }, async () => {
8720 - return { contents: [{
8721 - uri: GENERAL_CONTEXT_URI,
8722 - mimeType: "application/json",
8723 - text: JSON.stringify(buildPayload(), null, 2)
8724 - }] };
8725 - });
8726 - (0, _elementor_editor_v1_adapters.__privateListenTo)([
8727 - (0, _elementor_editor_v1_adapters.commandEndEvent)("editor/documents/switch"),
8728 - (0, _elementor_editor_v1_adapters.commandEndEvent)("editor/documents/attach-preview"),
8729 - (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/settings")
8730 - ], pushUpdateIfChanged);
8731 - pushUpdateIfChanged();
8732 - };
8733 -
8734 -//#endregion
8735 -//#region packages/packages/core/editor-canvas/src/mcp/resources/selected-element-resource.ts
8736 - var SELECTED_ELEMENT_URI = "elementor://context/selected-element";
8737 - var initSelectedElementResource = (reg) => {
8738 - const { resource, sendResourceUpdated } = reg;
8739 - let currentPayloadText = null;
8740 - const publishIfChanged = (payload) => {
8741 - const nextText = JSON.stringify(payload);
8742 - if (nextText !== currentPayloadText) {
8743 - currentPayloadText = nextText;
8744 - sendResourceUpdated({ uri: SELECTED_ELEMENT_URI });
8745 - }
8746 - };
8747 - const onCommand = (e) => {
8748 - if (e.type !== "command") return;
8749 - const commandEvent = e;
8750 - if (commandEvent.command === "document/elements/deselect-all") {
8751 - publishIfChanged(createEmptySelectedElementPayload());
8752 - return;
8753 - }
8754 - if (commandEvent.command !== "document/elements/select" && commandEvent.command !== "document/elements/settings") return;
8755 - const { container } = commandEvent.args || {};
8756 - if (container?.id) {
8757 - publishIfChanged(buildPayloadFromContainer(container));
8758 - return;
8759 - }
8760 - publishIfChanged(readSelectionFromEditor());
8761 - };
8762 - (0, _elementor_editor_v1_adapters.__privateListenTo)([
8763 - (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/select"),
8764 - (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/deselect-all"),
8765 - (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/settings")
8766 - ], onCommand);
8767 - publishIfChanged(readSelectionFromEditor());
8768 - resource("selected-element", SELECTED_ELEMENT_URI, { description: "Currently selected Elementor element context." }, async () => {
8769 - return { contents: [{
8770 - uri: SELECTED_ELEMENT_URI,
8771 - text: JSON.stringify(readSelectionFromEditor(), null, 2)
8772 - }] };
8773 - });
8774 - };
8775 - function createEmptySelectedElementPayload() {
8776 - return {
8777 - elementDisplayName: null,
8778 - elementType: null,
8779 - properties: null,
8780 - selectedElementId: null,
8781 - selectedParentId: null,
8782 - version: null,
8783 - widgetType: null
8784 - };
8785 - }
8786 - function readSelectionFromEditor() {
8787 - const elements = (0, _elementor_editor_elements.getSelectedElements)();
8788 - if (elements.length !== 1) return createEmptySelectedElementPayload();
8789 - return buildPayloadFromContainer((0, _elementor_editor_elements.getContainer)(elements[0].id));
8790 - }
8791 - function buildPayloadFromContainer(container) {
8792 - if (!container?.id) return createEmptySelectedElementPayload();
8793 - const widgetType = container.model.get("widgetType") ?? null;
8794 - const elementType = container.type ?? "widget";
8795 - return {
8796 - elementDisplayName: getElementDisplayName(container),
8797 - elementType,
8798 - properties: getElementProperties(container, widgetType),
8799 - selectedElementId: container.id,
8800 - selectedParentId: container.parent?.id ?? null,
8801 - version: resolveElementVersion(container, widgetType),
8802 - widgetType
8803 - };
8804 - }
8805 - function resolveElementVersion(container, widgetType) {
8806 - if (container.model?.config?.atomic) return "v4";
8807 - if (widgetType && (0, _elementor_editor_elements.getWidgetsCache)()?.[widgetType]?.atomic_props_schema) return "v4";
8808 - return "v3";
8809 - }
8810 - function getElementProperties(container, widgetType) {
8811 - const settings = container.settings?.toJSON?.();
8812 - if (!settings || typeof settings !== "object") return null;
8813 - const controls = (widgetType ? (0, _elementor_editor_elements.getWidgetsCache)()?.[widgetType] : null)?.controls;
8814 - const filtered = {};
8815 - for (const [key, value] of Object.entries(settings)) {
8816 - if (value === void 0 || value === null || value === "") continue;
8817 - const controlDefault = controls?.[key]?.default;
8818 - if (controlDefault !== void 0 && JSON.stringify(value) === JSON.stringify(controlDefault)) continue;
8819 - filtered[key] = value;
8820 - }
8821 - return Object.keys(filtered).length > 0 ? filtered : null;
8822 - }
8823 - function getElementDisplayName(container) {
8824 - try {
8825 - if (container.label) return container.label;
8826 - const widgetType = container.model?.get?.("widgetType");
8827 - if (widgetType) return (widgetType.charAt(0).toUpperCase() + widgetType.slice(1)).replace(/-/g, " ");
8828 - if (container.type === "container") return "Container";
8829 - if (container.type === "section") return "Section";
8830 - return `Element ${container.id}`;
8831 - } catch {
8832 - return `Element ${container.id}`;
8833 - }
8834 - }
8835 -
8836 -//#endregion
8837 -//#region packages/packages/core/editor-canvas/src/mcp/utils/merge-custom-css.ts
8838 - var CUSTOM_CSS_SEPARATOR = "\n";
8839 - var mergeCustomCssText = (...cssParts) => cssParts.map((cssPart) => cssPart?.trim()).filter((cssPart) => !!cssPart).join(CUSTOM_CSS_SEPARATOR);
8840 - var readStoredCustomCssText = (raw) => {
8841 - if (!raw) return "";
8842 - try {
8843 - return atob(raw);
8844 - } catch {
8845 - return "";
8846 - }
8847 - };
8848 -
8849 -//#endregion
8850 -//#region packages/packages/core/editor-canvas/src/mcp/utils/resolve-canonical-prop-name.ts
8851 - function buildAliasToCanonicalMap(schema) {
8852 - const aliasToCanonical = {};
8853 - for (const [canonical, propType] of Object.entries(schema)) {
8854 - const aliases = propType.meta?.aliases;
8855 - if (!Array.isArray(aliases)) continue;
8856 - for (const alias of aliases) if (typeof alias === "string" && alias) aliasToCanonical[alias] = canonical;
8857 - }
8858 - return aliasToCanonical;
8859 - }
8860 - function resolveCanonicalPropName(elementType, propertyName) {
8861 - const schema = (0, _elementor_editor_elements.getWidgetsCache)()?.[elementType]?.atomic_props_schema;
8862 - if (!schema || schema[propertyName]) return propertyName;
8863 - return buildAliasToCanonicalMap(schema)[propertyName] ?? propertyName;
8864 - }
8865 - function resolveCanonicalPropKeys(elementType, props) {
8866 - const schema = (0, _elementor_editor_elements.getWidgetsCache)()?.[elementType]?.atomic_props_schema;
8867 - if (!schema) return { ...props };
8868 - const aliasToCanonical = buildAliasToCanonicalMap(schema);
8869 - const resolved = {};
8870 - for (const [key, value] of Object.entries(props)) if (schema[key]) resolved[key] = value;
8871 - for (const [key, value] of Object.entries(props)) {
8872 - if (schema[key]) continue;
8873 - const canonical = aliasToCanonical[key];
8874 - if (!canonical) {
8875 - resolved[key] = value;
8876 - continue;
8877 - }
8878 - if (!Object.prototype.hasOwnProperty.call(resolved, canonical)) resolved[canonical] = value;
8879 - }
8880 - return resolved;
8881 - }
8882 -
8883 -//#endregion
8884 -//#region packages/packages/core/editor-canvas/src/mcp/utils/resolve-dynamic-tag.ts
8885 - var DYNAMIC_PROP_TYPE_KEY = "dynamic";
8886 - var OMITTED_DYNAMIC_SETTING_KEYS = ["fallback"];
8887 - var getAtomicDynamicTags = () => {
8888 - return (0, _elementor_editor_v1_adapters.getElementorConfig)().atomicDynamicTags?.tags ?? {};
8889 - };
8890 - var getDynamicTagNamesByCategories = (categories) => {
8891 - if (!categories.length) return [];
8892 - const wanted = new Set(categories);
8893 - return Object.values(getAtomicDynamicTags()).filter((tag) => tag.categories?.some((category) => wanted.has(category))).map((tag) => tag.name);
8894 - };
8895 - var dynamicTagLLMResolver = (value) => {
8896 - const input = value ?? {};
8897 - const tag = input.name ? getAtomicDynamicTags()[input.name] : void 0;
8898 - if (!tag) return {
8899 - $$type: DYNAMIC_PROP_TYPE_KEY,
8900 - value: {
8901 - name: input.name ?? "",
8902 - group: "",
8903 - settings: {}
8904 - }
8905 - };
8906 - return {
8907 - $$type: DYNAMIC_PROP_TYPE_KEY,
8908 - value: {
8909 - name: tag.name,
8910 - group: tag.group,
8911 - settings: buildStrictSettings(tag.props_schema ?? {}, input.settings ?? {})
8912 - }
8913 - };
8914 - };
8915 - var buildStrictSettings = (schema, provided) => {
8916 - const settings = {};
8917 - for (const [key, propType] of Object.entries(schema)) {
8918 - if (OMITTED_DYNAMIC_SETTING_KEYS.includes(key)) continue;
8919 - const resolved = provided[key] !== void 0 ? wrapSettingValue(provided[key], propType) : defaultSettingValue(propType);
8920 - if (resolved !== void 0 && resolved !== null) settings[key] = resolved;
8921 - }
8922 - return settings;
8923 - };
8924 - var wrapSettingValue = (raw, propType) => {
8925 - if (raw !== null && typeof raw === "object") return raw;
8926 - return propType.key ? {
8927 - $$type: propType.key,
8928 - value: raw
8929 - } : raw;
8930 - };
8931 - var defaultSettingValue = (propType) => {
8932 - if (propType.initial_value !== null && propType.initial_value !== void 0) return propType.initial_value;
8933 - if (propType.default !== null && propType.default !== void 0) return wrapSettingValue(propType.default, propType);
8934 - };
8935 -
8936 -//#endregion
8937 -//#region packages/packages/core/editor-canvas/src/mcp/utils/do-update-element-property.ts
8938 - var __defProp = Object.defineProperty;
8939 - var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
8940 - enumerable: true,
8941 - configurable: true,
8942 - writable: true,
8943 - value
8944 - }) : obj[key] = value;
8945 - var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
8946 - var LOCAL_STYLE_META = {
8947 - breakpoint: "desktop",
8948 - state: null
8949 - };
8950 - var UnsupportedPropertyError = class extends Error {
8951 - constructor(elementType, propertyName, availableProperties) {
8952 - super(`Property "${propertyName}" does not exist on element type "${elementType}". Available properties are: ${availableProperties.join(", ")}`);
8953 - __publicField(this, "elementType");
8954 - __publicField(this, "propertyName");
8955 - this.name = "UnsupportedPropertyError";
8956 - this.elementType = elementType;
8957 - this.propertyName = propertyName;
8958 - }
8959 - };
8960 - function resolvePropValue(value, forceKey) {
8961 - const Utils = window.elementorV2.editorVariables.Utils;
8962 - return _elementor_editor_props.Schema.adjustLlmPropValueSchema(value, {
8963 - forceKey,
8964 - transformers: {
8965 - ...Utils.globalVariablesLLMResolvers,
8966 - [DYNAMIC_PROP_TYPE_KEY]: dynamicTagLLMResolver
8967 - }
8968 - });
8969 - }
8970 - var doUpdateElementProperty = (params) => {
8971 - const { elementId, propertyValue, elementType, customCssWriteMode = "replace" } = params;
8972 - const propertyName = params.propertyName === "_styles" ? params.propertyName : resolveCanonicalPropName(elementType, params.propertyName);
8973 - if (propertyName === "_styles") {
8974 - const elementStyles = (0, _elementor_editor_elements.getElementStyles)(elementId) || {};
8975 - const propertyMapValue = propertyValue;
8976 - const styleSchema = (0, _elementor_editor_styles.getStylesSchema)();
8977 - const transformedStyleValues = Object.fromEntries(Object.entries(propertyMapValue).map(([key, val]) => {
8978 - if (key === "custom_css") return [key, val];
8979 - const { key: propKey2, kind } = styleSchema?.[key] || {};
8980 - if (!propKey2 && kind !== "union") throw new Error(`_styles property ${key} is not supported.`);
8981 - if (val === null) return [key, null];
8982 - return [key, resolvePropValue(val, propKey2)];
8983 - }));
8984 - const localStyle = Object.values(elementStyles).find((style) => style.label === "local");
8985 - const existingCustomCssText = localStyle ? readStoredCustomCssText((0, _elementor_editor_styles.getVariantByMeta)(localStyle, LOCAL_STYLE_META)?.custom_css?.raw) : "";
8986 - let customCss;
8987 - Object.keys(propertyMapValue).forEach((stylePropName) => {
8988 - const propertyRawSchema = styleSchema[stylePropName];
8989 - if (stylePropName === "custom_css") {
8990 - let customCssValue = propertyMapValue[stylePropName];
8991 - if (typeof customCssValue === "object" && customCssValue && customCssValue.value) customCssValue = String(customCssValue.value);
8992 - if (!customCssValue) customCssValue = "";
8993 - const customCssText = customCssWriteMode === "merge-with-stored" ? mergeCustomCssText(existingCustomCssText, customCssValue) : String(customCssValue);
8994 - if (customCssText) customCss = { raw: btoa(customCssText) };
8995 - else customCss = { raw: btoa("") };
8996 - return;
8997 - }
8998 - if (!!!propertyRawSchema) throw new Error(`Style property ${stylePropName} is not supported.`);
8999 - if (propertyRawSchema.kind === "plain") {
9000 - if (typeof propertyMapValue[stylePropName] !== "object") {
9001 - const propUtil = (0, _elementor_editor_props.getPropSchemaFromCache)(propertyRawSchema.key);
9002 - if (propUtil) {
9003 - const plainValue = propUtil.create(propertyMapValue[stylePropName]);
9004 - propertyMapValue[stylePropName] = plainValue;
9005 - }
9006 - }
9007 - }
9008 - });
9009 - delete transformedStyleValues.custom_css;
9010 - if (!localStyle) (0, _elementor_editor_elements.createElementStyle)({
9011 - elementId,
9012 - ...typeof customCss !== "undefined" ? { custom_css: customCss } : {},
9013 - classesProp: "classes",
9014 - label: "local",
9015 - meta: {
9016 - breakpoint: "desktop",
9017 - state: null
9018 - },
9019 - props: { ...transformedStyleValues }
9020 - });
9021 - else (0, _elementor_editor_elements.updateElementStyle)({
9022 - elementId,
9023 - styleId: localStyle.id,
9024 - meta: {
9025 - breakpoint: "desktop",
9026 - state: null
9027 - },
9028 - ...typeof customCss !== "undefined" ? { custom_css: customCss } : {},
9029 - props: { ...transformedStyleValues }
9030 - });
9031 - return;
9032 - }
9033 - const elementPropSchema = (0, _elementor_editor_elements.getWidgetsCache)()?.[elementType]?.atomic_props_schema;
9034 - if (!elementPropSchema) throw new Error(`No prop schema found for element type: ${elementType}`);
9035 - if (!elementPropSchema[propertyName]) throw new UnsupportedPropertyError(elementType, propertyName, Object.keys(elementPropSchema));
9036 - const propKey = elementPropSchema[propertyName].key;
9037 - const value = resolvePropValue(propertyValue, propKey);
9038 - const { valid, jsonSchema } = _elementor_editor_props.Schema.validatePropValue(elementPropSchema[propertyName], propertyValue);
9039 - if (!valid) throw new Error(`Invalid PropValue for elementId: ${elementId}. PropKey: ${propKey}, PropValue: ${JSON.stringify(propertyValue)}
9040 -Expected Schema: ${jsonSchema}`);
9041 - (0, _elementor_editor_elements.updateElementSettings)({
9042 - id: elementId,
9043 - props: { [propertyName]: value },
9044 - withHistory: false
9045 - });
9046 - (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("document/save/set-is-modified", { status: true }, { internal: true });
9047 - };
9048 -
9049 -//#endregion
9050 -//#region packages/packages/core/editor-canvas/src/mcp/tools/configure-element/prompt.ts
9051 - var CONFIGURE_ELEMENT_GUIDE_URI = "elementor://canvas/tools/configure-element-guide";
9052 - var generatePrompt = () => {
9053 - const configureElementToolPrompt = (0, _elementor_editor_mcp.toolPrompts)("configure-element");
9054 - configureElementToolPrompt.description(`
9055 -Configure an existing element on the page.
9056 -
9057 -# **CRITICAL - REQUIRED INFORMATION (Must read before using this tool)**
9058 -1. [${WIDGET_SCHEMA_URI}] \u2014 **Widget properties** (\`propertiesToChange\`): each widgetType (e.g. e-heading, e-button) has its own PropType schema; values must be PropValues with \`$$type\`.
9059 -2. [elementor://global-variables] \u2014 **Design tokens for styling**: use labels in CSS as \`var(--label)\` or \`var(--label, fallback)\`; only variables listed here are valid.
9060 -3. **Styling** (\`style\` parameter): flat map of CSS property \u2192 value strings \u2014 **not** PropValues. The server converts to native styles; unconvertible declarations become custom CSS.
9061 -4. **Current state**: \`get-element-configuration-values\` returns \`properties\` as PropValues and \`style\` in stored form; when writing, send raw CSS in \`style\`, not copied PropValues.
9062 -
9063 -Before using this tool, read the widget PropType schema at editor-canvas__elementor://widgets/schema/{widgetType}
9064 -
9065 -# When to use this tool
9066 -When a user requires to change anything in an element, such as updating text, colors, sizes, or other configurable properties.
9067 -This tool handles elements of type "widget".
9068 -This tool handles styling elements, using the "style" parameter (raw CSS as a property \u2192 value map).
9069 -
9070 -To CLEAR a property (i.e., set it to default or none), provide null as a value - example: \`background-color: null\`.
9071 -
9072 -The element's schema must be known before using this tool.
9073 -
9074 -**PropValue structure (for \`propertiesToChange\` only \u2014 not for \`style\`):**
9075 -{
9076 - "$$type": string, // MANDATORY as defined in the PropType schema under the "key" property
9077 - value: unknown // The value according to the PropType schema for kinds of "array", use array with PropValues items inside. For "object", read the shape property of the PropType schema. For "plain", use strings.
9078 -}
9079 -
9080 -<IMPORTANT>
9081 -ALWAYS MAKE SURE you have the PropType schemas for the element you are configuring. If you are not sure, retrieve the schema from the resources mentioned above.
9082 -</IMPORTANT>
9083 -
9084 -You can use multiple property changes at once by providing multiple entries in the propertiesToChange object.
9085 -Some properties are nested, use the root property name, then objects with nested values inside, as the complete schema suggests.
9086 -
9087 -Make sure you have the "widget-schema-by-type" resource available to retrieve the PropType schema for the element type you are configuring.
9088 -
9089 -# How to configure elements
9090 -We use a dedicated PropType Schema for configuring element properties (propertiesToChange). When you configure an element property, you must use the EXACT PropType Value as defined in the schema.
9091 -For styling, use the "style" parameter with raw CSS declarations (property \u2192 value strings) - e.g. \`color: var(--primary-text, #000); height: 4rem;\`;
9092 -For all non-primitive entries in \`propertiesToChange\`, provide the schema \`key\` as \`$$type\` in the generated object, as it is MANDATORY for parsing.
9093 -
9094 -Use the EXACT PropType schema given, and ALWAYS include the \`key\` from the schema for every property you are changing in \`propertiesToChange\`.
9095 -
9096 -# Dynamic tags
9097 -A value can be made dynamic wherever its schema exposes a variant with "$$type": "dynamic". This may be the property root OR a NESTED field: for example an image is made dynamic on its "src" (the root stays "image"), NOT on the whole "image" value.
9098 -Put the dynamic object EXACTLY at the node whose schema offers the "dynamic" variant, in place of the static variant. The variant's "name" enumerates the tags allowed at that node.
9099 -1. Read the [${DYNAMIC_TAGS_URI}] resource for each allowed tag's settings schema.
9100 -2. Provide, at that node:
9101 -{
9102 - "$$type": "dynamic",
9103 - "value": {
9104 - "name": "<allowed tag name>",
9105 - "settings": { /* strictly per the tag's settings schema */ }
9106 - }
9107 -}
9108 -Image example: { "$$type": "image", "value": { "src": { "$$type": "dynamic", "value": { "name": "<image tag>", "settings": { ... } } } } }
9109 -Do NOT send "group" (it is resolved automatically). Use { "settings": {} } only when the tag has no settings.
9110 -`);
9111 - configureElementToolPrompt.parameter("elementId", "The ID of the element to configure. MANDATORY.");
9112 - configureElementToolPrompt.parameter("elementType", "The type of the element to configure (i.e. e-heading, e-button). MANDATORY.");
9113 - configureElementToolPrompt.parameter("propertiesToChange", "An object containing the properties to change, with their new values. MANDATORY. When updating a style only, provide an empty object.");
9114 - configureElementToolPrompt.parameter("style", "A flat map of raw CSS declarations (property → value), e.g. { \"line-height\": \"1.25rem\", \"color\": \"var(--primary-text, #000)\" }. font-family must be a single Google Font name or a var(--label) — no fallback stacks. Set a value to null to reset that property to its default. OPTIONAL.");
9115 - configureElementToolPrompt.example(`
9116 -\`\`\`json
9117 -{
9118 - propertiesToChange: {
9119 - // List of properties TO CHANGE, following the PropType schema for the element as defined in the resource [${WIDGET_SCHEMA_URI}]
9120 - title: {
9121 - $$type: 'string',
9122 - value: 'New Title Text'
9123 - },
9124 - border: {
9125 - $$type: 'boolean',
9126 - value: false
9127 - },
9128 - },
9129 - style: {
9130 - 'line-height': '1.25rem',
9131 - 'color': 'var(--primary-text, #000)'
9132 - },
9133 - elementId: 'element-id',
9134 - elementType: 'element-type'
9135 -};
9136 -\`\`\`
9137 -`);
9138 - configureElementToolPrompt.instruction("The $$type property is MANDATORY for every value in propertiesToChange; it is not used in the style parameter (raw CSS only).");
9139 - configureElementToolPrompt.instruction(`
9140 -V4 only: If MCP fails, give manual steps using V4 UI.
9141 -
9142 -V4 Editor structure:
9143 -Panel tabs: General (\u2192 Settings section: ID, Tag, and Link where the widget supports it), Style, Interactions.
9144 -NO Advanced tab. Never mention Advanced tab.
9145 -Note: \`link\` is valid only when the element's PropType schema (which you must already have) includes a \`link\` property. Sending \`link\` to a widget whose schema lacks it is skipped and reported in the response \`warnings\` (other changes still apply) and the link is lost.
9146 -`);
9147 - return configureElementToolPrompt.prompt();
9148 - };
9149 -
9150 -//#endregion
9151 -//#region packages/packages/core/editor-canvas/src/mcp/tools/configure-element/schema.ts
9152 - var inputSchema = {
9153 - propertiesToChange: _elementor_schema.z.record(_elementor_schema.z.string().describe("The property name."), _elementor_schema.z.any().describe(`PropValue, refer to [${WIDGET_SCHEMA_URI}] by correct type, as appears in elementType`), _elementor_schema.z.any()).describe("An object record containing property names and their new values to be set on the element"),
9154 - style: _elementor_schema.z.record(_elementor_schema.z.string().describe("A CSS property name, e.g. \"color\", \"margin-top\"."), _elementor_schema.z.string().nullable().describe("A CSS value, e.g. \"red\", \"10px\", \"1px solid #000\". Use null to reset the property to its default.")).describe("Raw CSS declarations as a flat property→value map. Converted to native styles server-side; any declaration that cannot be converted is stored as the element custom CSS. A null value resets that property to its default.").default({}),
9155 - elementType: _elementor_schema.z.string().describe("The type of the element to retrieve the schema"),
9156 - elementId: _elementor_schema.z.string().describe("The unique id of the element to configure")
9157 - };
9158 - var outputSchema = {
9159 - success: _elementor_schema.z.boolean().describe("Whether the configuration change was successful, only if propertyName and propertyValue are provided"),
9160 - warnings: _elementor_schema.z.string().describe("Non-fatal notices. Present when some props were skipped because they are not in the element schema (e.g. a \"link\" on a widget with no link prop). Other changes were still applied.").optional()
9161 - };
9162 -
9163 -//#endregion
9164 -//#region packages/packages/core/editor-canvas/src/mcp/tools/configure-element/tool.ts
9165 - var initConfigureElementTool = (reg) => {
9166 - const { addTool, resource } = reg;
9167 - resource("configure-element-guide", CONFIGURE_ELEMENT_GUIDE_URI, {
9168 - title: "Configure Element Guide",
9169 - description: "Detailed guide for using the configure-element tool",
9170 - mimeType: "text/plain"
9171 - }, async (uri) => ({ contents: [{
9172 - uri: uri.href,
9173 - mimeType: "text/plain",
9174 - text: generatePrompt()
9175 - }] }));
9176 - addTool({
9177 - name: "configure-element",
9178 - description: "Configure an existing V4 element's properties and styles. Read the guide resource before use.",
9179 - schema: inputSchema,
9180 - outputSchema,
9181 - requiredResources: [
9182 - {
9183 - description: "Widgets schema",
9184 - uri: WIDGET_SCHEMA_URI
9185 - },
9186 - {
9187 - description: "Configure element guide",
9188 - uri: CONFIGURE_ELEMENT_GUIDE_URI
9189 - },
9190 - {
9191 - description: "Dynamic tags catalog",
9192 - uri: DYNAMIC_TAGS_URI
9193 - }
9194 - ],
9195 - handler: async ({ elementId, propertiesToChange, elementType, style }) => {
9196 - const widgetData = (0, _elementor_editor_elements.getWidgetsCache)()?.[elementType];
9197 - if (!widgetData) throw new Error(`Unknown element type: ${elementType}. Check the available-widgets resource for valid types.`);
9198 - const container = (0, _elementor_editor_elements.getContainer)(elementId);
9199 - if (!container) throw new Error(`Element with id ${elementId} not found`);
9200 - if (!(container.settings.get("widgetType") === elementType || container.type === elementType)) throw new Error(`Element with ID ${elementId} is not of type ${elementType}`);
9201 - if (!widgetData.atomic_props_schema) throw new Error(`This tool does not support V3 elements. Please use the elementor-v3-mcp tools instead for element type: ${elementType}`);
9202 - const propertiesToUpdate = resolveCanonicalPropKeys(elementType, propertiesToChange);
9203 - const toUpdate = Object.entries(propertiesToUpdate);
9204 - const skippedProps = [];
9205 - for (const [propertyName, propertyValue] of toUpdate) {
9206 - if (!_elementor_editor_props.Schema.isPropKeyConfigurable(propertyName)) throw new Error(`Not allowed to update ${propertyName}`);
9207 - try {
9208 - doUpdateElementProperty({
9209 - elementId,
9210 - elementType,
9211 - propertyName,
9212 - propertyValue
9213 - });
9214 - } catch (error) {
9215 - if (error instanceof UnsupportedPropertyError) {
9216 - skippedProps.push(error.propertyName);
9217 - continue;
9218 - }
9219 - const errorMessage = createUpdateErrorMessage({
9220 - propertyName,
9221 - elementId,
9222 - elementType,
9223 - error,
9224 - propertyType: "prop"
9225 - });
9226 - throw new Error(errorMessage);
9227 - }
9228 - }
9229 - await applyStyleFromCss({
9230 - elementId,
9231 - elementType,
9232 - style
9233 - });
9234 - return {
9235 - success: true,
9236 - warnings: skippedProps.length ? `Skipped unsupported props (not in the "${elementType}" schema; other changes were applied): ${skippedProps.join(", ")}.` : void 0
9237 - };
9238 - }
9239 - });
9240 - };
9241 - async function applyStyleFromCss(opts) {
9242 - const { elementId, elementType, style } = opts;
9243 - if (!style || Object.keys(style).length === 0) return;
9244 - const { props, customCss } = await convertCssToAtomic(style);
9245 - const styleValue = { ...props };
9246 - if (customCss) styleValue.custom_css = customCss;
9247 - if (Object.keys(styleValue).length === 0) return;
9248 - try {
9249 - doUpdateElementProperty({
9250 - elementId,
9251 - elementType,
9252 - propertyName: "_styles",
9253 - propertyValue: styleValue,
9254 - customCssWriteMode: "merge-with-stored"
9255 - });
9256 - (0, _elementor_editor_mcp.dispatchMcpStylesAppliedEvent)({ styleValue });
9257 - } catch (error) {
9258 - throw new Error(createUpdateErrorMessage({
9259 - propertyName: "(style)",
9260 - elementId,
9261 - elementType,
9262 - propertyType: "style",
9263 - error
9264 - }));
9265 - }
9266 - }
9267 - function createUpdateErrorMessage(opts) {
9268 - const { propertyName, elementId, elementType, error, propertyType } = opts;
9269 - return `Failed to update property "${propertyName}" on element "${elementId}": ${error.message}.
9270 -${propertyType === "prop" ? `
9271 -Check the element's PropType schema at the resource [${WIDGET_SCHEMA_URI.replace("{widgetType}", elementType)}] for type "${elementType}" to ensure the property exists and the value matches the expected PropType.
9272 -Now that you have this information, ensure you have the schema and try again.` : `
9273 -Provide styling as raw CSS via the "style" parameter (a flat map of CSS property \u2192 value). Declarations that cannot be converted are stored as the element custom CSS.`};
9274 -}`;
9275 - }
9276 -
9277 -//#endregion
9278 -//#region packages/packages/core/editor-canvas/src/mcp/utils/get-mcp-error-message.ts
9279 - function getMcpErrorMessage(error, toolName) {
9280 - if (error instanceof _elementor_http_client.AxiosError) {
9281 - const data = error.response?.data;
9282 - if (data?.message) return data.code ? `${data.code}: ${data.message}` : data.message;
9283 - }
9284 - if (error instanceof Error) return error.message;
9285 - return `${toolName} failed with an unknown error.`;
9286 - }
9287 -
9288 -//#endregion
9289 -//#region packages/packages/core/editor-canvas/src/mcp/tools/get-page-structure/tool.ts
9290 - var MCP_PROXY_URL = "elementor/v1/mcp-proxy";
9291 - var initGetPageStructureTool = (reg) => {
9292 - const { addTool } = reg;
9293 - addTool({
9294 - name: "get-page-structure",
9295 - description: "Returns a lean Elementor element tree skeleton (id, elType, widgetType, title, nested elements) for a post or page. If no postId is provided, uses the currently open document. Optionally scope to a subtree with elementId. Set includeContent=true (requires elementId) to also return each node's settings and styles.",
9296 - schema: {
9297 - postId: _elementor_schema.z.number().optional().describe("WordPress post ID of the Elementor document. If omitted, uses the currently open document."),
9298 - elementId: _elementor_schema.z.string().optional().describe("If provided, returns only the subtree rooted at that element id."),
9299 - includeContent: _elementor_schema.z.boolean().optional().describe("If true, includes each node's settings and styles (same shape build-composition accepts as input). Requires elementId.")
9300 - },
9301 - outputSchema: { elements: _elementor_schema.z.array(_elementor_schema.z.any()).describe("Skeleton of Elementor elements (id, elType, widgetType, title, nested elements). When includeContent is true, each node also includes settings and styles.") },
9302 - handler: async ({ postId, elementId, includeContent }) => {
9303 - const resolvedPostId = postId ?? (0, _elementor_editor_documents.getCurrentDocument)()?.id;
9304 - if (!resolvedPostId) throw new Error("No post ID provided and no active document found.");
9305 - try {
9306 - const { data } = await (0, _elementor_http_client.httpService)().post(MCP_PROXY_URL, {
9307 - tool: "get-page-structure",
9308 - input: {
9309 - post_id: resolvedPostId,
9310 - ...elementId ? { element_id: elementId } : {},
9311 - ...includeContent ? { include_content: true } : {}
9312 - }
9313 - });
9314 - return { elements: data.data.elements };
9315 - } catch (error) {
9316 - throw new Error(getMcpErrorMessage(error, "get-page-structure"));
9317 - }
9318 - }
9319 - });
9320 - };
9321 -
9322 -//#endregion
9323 -//#region packages/packages/core/editor-canvas/src/mcp/canvas-mcp.ts
9324 - var initCanvasMcp = (reg) => {
9325 - _elementor_editor_props.Schema.setDynamicTagNamesResolver(getDynamicTagNamesByCategories);
9326 - initWidgetsSchemaResource(reg);
9327 - initAvailableWidgetsResource(reg);
9328 - initDocumentStructureResource(reg);
9329 - initDynamicTagsResource(reg);
9330 - initSelectedElementResource(reg);
9331 - initEditorStateResource(reg);
9332 - initGeneralContextResource(reg);
9333 - initBestPracticesResource(reg);
9334 - initConfigureElementTool(reg);
9335 - initGetPageStructureTool(reg);
9336 - initBreakpointsResource(reg);
9337 - };
9338 -
9339 -//#endregion
9340 -//#region packages/packages/core/editor-canvas/src/mcp/mcp-description.ts
9341 - var ELEMENT_SCHEMA_URI = WIDGET_SCHEMA_URI.replace("{widgetType}", "element-schema");
9342 - var mcpDescription = `Elementor Canvas MCP
9343 -This MCP enables configuration and styling of existing V4 elements on the Elementor canvas using the configure-element tool.
9344 -
9345 -# Core Concepts
9346 -
9347 -## PropValues Structure
9348 -All data in Elementor uses PropValues - a typed wrapper for values:
9349 -\`\`\`json
9350 -{
9351 - "$$type": "the-prop-type-schema-kind",
9352 - "value": "the-actual-value-as-defined-for-the-propType"
9353 -}
9354 -\`\`\`
9355 -The \`$$type\` defines how Elementor interprets the value. Providing the correct \`$$type\` is critical - incorrect types will be rejected.
9356 -
9357 -## Design System Resources
9358 -- **Global Variables**: Reusable colors, sizes, and fonts (\`elementor://global-variables\`)
9359 -- **Global Classes**: Reusable style sets that can be applied to elements (\`elementor://global-classes\`)
9360 -- **Widget Schemas**: Configuration options for each widget type (\`${WIDGET_SCHEMA_URI}\`)
9361 -
9362 -# Configuring Elements with configure-element
9363 -
9364 -The \`configure-element\` tool updates settings and styles on existing V4 elements. Read the configure-element guide resource before use.
9365 -
9366 -## Complete Workflow
9367 -
9368 -### 1. Parse User Requirements
9369 -Understand what needs to change: content, settings, or styling on existing elements.
9370 -
9371 -### 2. Check Global Resources FIRST
9372 -Always check existing resources before styling:
9373 -- List \`elementor://global-variables\` for available variables (colors, sizes, fonts)
9374 -- List \`elementor://global-classes\` for available style sets
9375 -- **Always prefer using existing global resources over creating inline styles**
9376 -
9377 -### 3. Retrieve Widget Schemas
9378 -For each element you will configure:
9379 -- List \`${WIDGET_SCHEMA_URI}\` to see available widgets
9380 -- Retrieve configuration schema from \`${ELEMENT_SCHEMA_URI}\` for each widget
9381 -- Check the \`llm_guidance\` property for container nesting, \`default_styles\`, and \`default_settings\`
9382 -
9383 -### 4. Get Current Element State
9384 -Use page structure and element configuration resources to find element IDs and current values.
9385 -
9386 -### 5. Create propertiesToChange
9387 -Map property names to PropValues using the widget schema:
9388 -- Use correct \`$$type\` matching the widget's schema
9389 -- Use global variables in PropValues where applicable
9390 -- Example:
9391 -\`\`\`json
9392 -{
9393 - "text": { "$$type": "string", "value": "Welcome" },
9394 - "tag": { "$$type": "string", "value": "h1" }
9395 -}
9396 -\`\`\`
9397 -
9398 -### 6. Create style
9399 -Provide raw CSS declarations (property \u2192 value strings). The server converts them to native styles and stores any unconvertible declarations as the element custom CSS.
9400 -- Example:
9401 -\`\`\`json
9402 -{
9403 - "color": "#1a1a1a",
9404 - "font-size": "2rem"
9405 -}
9406 -\`\`\`
9407 -
9408 -### 7. Execute configure-element
9409 -Call the tool with elementId, elementType, propertiesToChange, and style as needed.
9410 -
9411 -## Key Points
9412 -
9413 -- **PropValue Types**: Arrays that accept union types are typed as mixed arrays
9414 -- **Visual Sizing**: Widget sizes MUST be defined via the style parameter (raw CSS). Widget properties like image "size" control resolution, not visual appearance
9415 -- **Global Variables**: Reference by label/name: (e.g. var(--card-background-color)
9416 -- **Naming Conventions**: Use meaningful, purpose-based names (e.g., "primary-button", "heading-large"), not value-based names (e.g., "blue-style", "20px-padding")
9417 -
9418 -## Example: e-image PropValue Structure
9419 -\`\`\`json
9420 -{
9421 - "$$type": "image",
9422 - "value": {
9423 - "src": {
9424 - "$$type": "image-src",
9425 - "value": {
9426 - "url": { "$$type": "url", "value": "https://example.com/image.jpg" }
9427 - }
9428 - },
9429 - "size": { "$$type": "string", "value": "full" }
9430 - }
9431 -}
9432 -\`\`\`
9433 -Note: The "size" property controls image resolution/loading, not visual size. Set visual dimensions via the style parameter (raw CSS).
9434 -`;
9435 -
9436 -//#endregion
9437 -//#region packages/packages/core/editor-canvas/src/prevent-link-in-link-commands.ts
9438 - function initLinkInLinkPrevention() {
9439 - (0, _elementor_editor_v1_adapters.blockCommand)({
9440 - command: "document/elements/paste",
9441 - condition: blockLinkInLinkPaste
9442 - });
9443 - (0, _elementor_editor_v1_adapters.blockCommand)({
9444 - command: "document/elements/move",
9445 - condition: blockLinkInLinkMove
9446 - });
9447 - }
9448 - var learnMoreActionProps = {
9449 - href: "https://go.elementor.com/element-link-inside-link-infotip",
9450 - target: "_blank",
9451 - color: "inherit",
9452 - variant: "text",
9453 - sx: { marginInlineStart: "20px" },
9454 - children: "Learn more"
9455 - };
9456 - function blockLinkInLinkPaste(args) {
9457 - const { containers = [args.container], storageType } = args;
9458 - const targetElements = containers;
9459 - if (storageType !== "localstorage") return false;
9460 - const data = window?.elementorCommon?.storage?.get();
9461 - if (!data?.clipboard?.elements) return false;
9462 - const sourceElements = data.clipboard.elements;
9463 - const notification = {
9464 - type: "default",
9465 - message: (0, _wordpress_i18n.__)("To paste a link to this element, first remove the link from it's parent container.", "elementor"),
9466 - id: "paste-in-link-blocked",
9467 - additionalActionProps: [learnMoreActionProps]
9468 - };
9469 - const blocked = shouldBlock(sourceElements, targetElements);
9470 - if (blocked) (0, _elementor_editor_notifications.notify)(notification);
9471 - return blocked;
9472 - }
9473 - function blockLinkInLinkMove(args) {
9474 - const { containers = [args.container], target } = args;
9475 - const sourceElements = containers;
9476 - const targetElement = target;
9477 - const notification = {
9478 - type: "default",
9479 - message: (0, _wordpress_i18n.__)("To drag a link to this element, first remove the link from it's parent container.", "elementor"),
9480 - id: "move-in-link-blocked",
9481 - additionalActionProps: [learnMoreActionProps]
9482 - };
9483 - const isBlocked = shouldBlock(sourceElements, [targetElement]);
9484 - if (isBlocked) (0, _elementor_editor_notifications.notify)(notification);
9485 - return isBlocked;
9486 - }
9487 - function shouldBlock(sourceElements, targetElements) {
9488 - if (!sourceElements?.length || !targetElements?.length) return false;
9489 - if (!sourceElements.some((src) => {
9490 - return src?.id ? (0, _elementor_editor_elements.isElementAnchored)(src.id) || !!(0, _elementor_editor_elements.getAnchoredDescendantId)(src.id) : false;
9491 - })) return false;
9492 - return targetElements.some((target) => {
9493 - return target?.id ? (0, _elementor_editor_elements.isElementAnchored)(target.id) || !!(0, _elementor_editor_elements.getAnchoredAncestorId)(target.id) : false;
9494 - });
9495 - }
9496 -
9497 -//#endregion
9498 -//#region packages/packages/core/editor-canvas/src/utils/command-utils.ts
9499 - function hasAtomicWidgets(args) {
9500 - const { containers = [args.container] } = args;
9501 - return containers.some(isAtomicWidget);
9502 - }
9503 - function isAtomicWidget(container) {
9504 - if (!container) return false;
9505 - return Boolean(getContainerSchema(container));
9506 - }
9507 - function getClassesProp(container) {
9508 - const propsSchema = getContainerSchema(container);
9509 - if (!propsSchema) return null;
9510 - const [propKey] = Object.entries(propsSchema).find(([, propType]) => propType.kind === "plain" && propType.key === _elementor_editor_props.CLASSES_PROP_KEY) ?? [];
9511 - return propKey ?? null;
9512 - }
9513 - function getContainerSchema(container) {
9514 - const type = container?.model.get("widgetType") || container?.model.get("elType");
9515 - return ((0, _elementor_editor_elements.getWidgetsCache)()?.[type])?.atomic_props_schema ?? null;
9516 - }
9517 - function getClipboardElements(storageKey = "clipboard") {
9518 - try {
9519 - return JSON.parse(localStorage.getItem("elementor") ?? "{}")[storageKey]?.elements;
9520 - } catch {
9521 - return;
9522 - }
9523 - }
9524 - function getTitleForContainers(containers) {
9525 - return containers.length > 1 ? (0, _wordpress_i18n.__)("Elements", "elementor") : (0, _elementor_editor_elements.getElementLabel)(containers[0].id);
9526 - }
9527 -
9528 -//#endregion
9529 -//#region packages/packages/core/editor-canvas/src/style-commands/undoable-actions/paste-element-style.ts
9530 - var undoablePasteElementStyle = () => (0, _elementor_editor_v1_adapters.undoable)({
9531 - do: ({ containers, newStyle }) => {
9532 - return containers.map((container) => {
9533 - const elementId = container.id;
9534 - const classesProp = getClassesProp(container);
9535 - if (!classesProp) return null;
9536 - const originalStyles = (0, _elementor_editor_elements.getElementStyles)(container.id);
9537 - const [styleId, styleDef] = Object.entries(originalStyles ?? {})[0] ?? [];
9538 - const revertData = {
9539 - styleId,
9540 - originalStyle: Object.keys(styleDef ?? {}).length ? styleDef : null
9541 - };
9542 - if (styleId) newStyle.variants.forEach(({ meta, props, custom_css: customCss }) => {
9543 - (0, _elementor_editor_elements.updateElementStyle)({
9544 - elementId,
9545 - styleId,
9546 - meta,
9547 - props,
9548 - custom_css: customCss
9549 - });
9550 - });
9551 - else {
9552 - const [firstVariant] = newStyle.variants;
9553 - const additionalVariants = newStyle.variants.slice(1);
9554 - revertData.styleId = (0, _elementor_editor_elements.createElementStyle)({
9555 - elementId,
9556 - classesProp,
9557 - label: _elementor_editor_styles_repository.ELEMENTS_STYLES_RESERVED_LABEL,
9558 - ...firstVariant,
9559 - additionalVariants
9560 - });
9561 - }
9562 - return revertData;
9563 - });
9564 - },
9565 - undo: ({ containers }, revertDataItems) => {
9566 - containers.forEach((container, index) => {
9567 - const revertData = revertDataItems[index];
9568 - if (!revertData) return;
9569 - if (!revertData.originalStyle) {
9570 - (0, _elementor_editor_elements.deleteElementStyle)(container.id, revertData.styleId);
9571 - return;
9572 - }
9573 - const classesProp = getClassesProp(container);
9574 - if (!classesProp) return;
9575 - const [firstVariant] = revertData.originalStyle.variants;
9576 - const additionalVariants = revertData.originalStyle.variants.slice(1);
9577 - (0, _elementor_editor_elements.createElementStyle)({
9578 - elementId: container.id,
9579 - classesProp,
9580 - label: _elementor_editor_styles_repository.ELEMENTS_STYLES_RESERVED_LABEL,
9581 - styleId: revertData.styleId,
9582 - ...firstVariant,
9583 - additionalVariants
9584 - });
9585 - });
9586 - }
9587 - }, {
9588 - title: ({ containers }) => getTitleForContainers(containers),
9589 - subtitle: (0, _wordpress_i18n.__)("Style Pasted", "elementor")
9590 - });
9591 -
9592 -//#endregion
9593 -//#region packages/packages/core/editor-canvas/src/style-commands/paste-style.ts
9594 - function initPasteStyleCommand() {
9595 - const pasteElementStyleCommand = undoablePasteElementStyle();
9596 - (0, _elementor_editor_v1_adapters.blockCommand)({
9597 - command: "document/elements/paste-style",
9598 - condition: hasAtomicWidgets
9599 - });
9600 - (0, _elementor_editor_v1_adapters.__privateListenTo)((0, _elementor_editor_v1_adapters.commandStartEvent)("document/elements/paste-style"), (e) => pasteStyles(e.args, pasteElementStyleCommand));
9601 - }
9602 - function pasteStyles(args, pasteLocalStyle) {
9603 - const { containers = [args.container], storageKey } = args;
9604 - const atomicContainers = containers.filter(isAtomicWidget);
9605 - if (!atomicContainers.length) return;
9606 - const [clipboardElement] = getClipboardElements(storageKey) ?? [];
9607 - const clipboardContainer = (0, _elementor_editor_elements.getContainer)(clipboardElement.id);
9608 - if (!clipboardElement || !clipboardContainer || !isAtomicWidget(clipboardContainer)) return;
9609 - const elementStyles = clipboardElement.styles;
9610 - const elementStyle = Object.values(elementStyles ?? {})[0];
9611 - const classesSetting = getClassesWithoutLocalStyle(clipboardContainer, elementStyle);
9612 - if (classesSetting.length) pasteClasses(atomicContainers, classesSetting);
9613 - if (elementStyle) pasteLocalStyle({
9614 - containers: atomicContainers,
9615 - newStyle: elementStyle
9616 - });
9617 - }
9618 - function getClassesWithoutLocalStyle(clipboardContainer, style) {
9619 - const classesProp = getClassesProp(clipboardContainer);
9620 - if (!classesProp) return [];
9621 - return (0, _elementor_editor_elements.getElementSetting)(clipboardContainer.id, classesProp)?.value.filter((styleId) => styleId !== style?.id) ?? [];
9622 - }
9623 - function pasteClasses(containers, classes) {
9624 - containers.forEach((container) => {
9625 - const classesProp = getClassesProp(container);
9626 - if (!classesProp) return;
9627 - const classesSetting = (0, _elementor_editor_elements.getElementSetting)(container.id, classesProp);
9628 - const currentClasses = _elementor_editor_props.classesPropTypeUtil.extract(classesSetting) ?? [];
9629 - const newClasses = _elementor_editor_props.classesPropTypeUtil.create(Array.from(/* @__PURE__ */ new Set([...classes, ...currentClasses])));
9630 - (0, _elementor_editor_elements.updateElementSettings)({
9631 - id: container.id,
9632 - props: { [classesProp]: newClasses }
9633 - });
9634 - });
9635 - }
9636 -
9637 -//#endregion
9638 -//#region packages/packages/core/editor-canvas/src/style-commands/undoable-actions/reset-element-style.ts
9639 - var undoableResetElementStyle = () => (0, _elementor_editor_v1_adapters.undoable)({
9640 - do: ({ containers }) => {
9641 - return containers.map((container) => {
9642 - const elementId = container.model.get("id");
9643 - const containerStyles = (0, _elementor_editor_elements.getElementStyles)(elementId);
9644 - Object.keys(containerStyles ?? {}).forEach((styleId) => (0, _elementor_editor_elements.deleteElementStyle)(elementId, styleId));
9645 - return containerStyles;
9646 - });
9647 - },
9648 - undo: ({ containers }, revertDataItems) => {
9649 - containers.forEach((container, index) => {
9650 - const classesProp = getClassesProp(container);
9651 - if (!classesProp) return;
9652 - const elementId = container.model.get("id");
9653 - const containerStyles = revertDataItems[index];
9654 - Object.entries(containerStyles ?? {}).forEach(([styleId, style]) => {
9655 - const [firstVariant] = style.variants;
9656 - const additionalVariants = style.variants.slice(1);
9657 - (0, _elementor_editor_elements.createElementStyle)({
9658 - elementId,
9659 - classesProp,
9660 - styleId,
9661 - label: _elementor_editor_styles_repository.ELEMENTS_STYLES_RESERVED_LABEL,
9662 - ...firstVariant,
9663 - additionalVariants
9664 - });
9665 - });
9666 - });
9667 - }
9668 - }, {
9669 - title: ({ containers }) => getTitleForContainers(containers),
9670 - subtitle: (0, _wordpress_i18n.__)("Style Reset", "elementor")
9671 - });
9672 -
9673 -//#endregion
9674 -//#region packages/packages/core/editor-canvas/src/style-commands/reset-style.ts
9675 - function initResetStyleCommand() {
9676 - const resetElementStyles = undoableResetElementStyle();
9677 - (0, _elementor_editor_v1_adapters.blockCommand)({
9678 - command: "document/elements/reset-style",
9679 - condition: hasAtomicWidgets
9680 - });
9681 - (0, _elementor_editor_v1_adapters.__privateListenTo)((0, _elementor_editor_v1_adapters.commandStartEvent)("document/elements/reset-style"), (e) => resetStyles(e.args, resetElementStyles));
9682 - }
9683 - function resetStyles(args, resetElementStyles) {
9684 - const { containers = [args.container] } = args;
9685 - const atomicContainers = containers.filter(isAtomicWidget);
9686 - if (!atomicContainers.length) return;
9687 - resetElementStyles({ containers: atomicContainers });
9688 - }
9689 -
9690 -//#endregion
9691 -//#region packages/packages/core/editor-canvas/src/style-commands/init-style-commands.ts
9692 - function initStyleCommands() {
9693 - initPasteStyleCommand();
9694 - initResetStyleCommand();
9695 - }
9696 -
9697 -//#endregion
9698 -//#region packages/packages/core/editor-canvas/src/init.tsx
9699 - function init() {
9700 - initStyleTransformers();
9701 - initStyleCommands();
9702 - initLinkInLinkPrevention();
9703 - initFormNestingPrevention();
9704 - initFormAncestorEnforcement();
9705 - initViewReplacements();
9706 - initLegacyViews();
9707 - initSettingsTransformers();
9708 - (0, _elementor_editor.injectIntoTop)({
9709 - id: "elements-overlays",
9710 - component: ElementsOverlays
9711 - });
9712 - (0, _elementor_editor.injectIntoTop)({
9713 - id: "canvas-style-render",
9714 - component: StyleRenderer
9715 - });
9716 - (0, _elementor_editor.injectIntoTop)({
9717 - id: "canvas-interactions-render",
9718 - component: InteractionsRenderer
9719 - });
9720 - (0, _elementor_editor.injectIntoLogic)({
9721 - id: "classes-rename",
9722 - component: ClassesRename
9723 - });
9724 - initCanvasMcp((0, _elementor_editor_mcp.getMCPByDomain)("canvas", {
9725 - instructions: `Everything related to V4 ( Atomic ) canvas.
9726 -# Canvas workflow
9727 -- Configure element settings and styles with configure-element
9728 -- Get page structure and element configuration values
9729 -`,
9730 - docs: mcpDescription
9731 - }));
9732 - initTabsModelExtensions();
9733 - initListType();
9734 - }
9735 -
9736 -//#endregion
9737 -//#region packages/packages/core/editor-canvas/src/sync/drag-element-from-panel.ts
9738 - var DRAG_GROUPS = ["elementor-element"];
9739 - var endDragElementFromPanel = () => {
9740 - getElementorChannels()?.panelElements?.trigger("element:drag:end");
9741 - };
9742 - var startDragElementFromPanel = (props, event) => {
9743 - setDragGroups(event);
9744 - const channels = getElementorChannels();
9745 - channels?.editor.reply("element:dragged", null);
9746 - channels?.panelElements.reply("element:selected", getLegacyPanelElementView(props)).trigger("element:drag:start");
9747 - };
9748 - var setDragGroups = (event) => {
9749 - const dataContainer = { groups: getDragGroups(event) };
9750 - event.dataTransfer?.setData(JSON.stringify(dataContainer), "true");
9751 - };
9752 - var getDragGroups = (event) => {
9753 - const dataContainer = event.dataTransfer?.getData("text/plain");
9754 - return dataContainer ? JSON.parse(dataContainer).groups : DRAG_GROUPS;
9755 - };
9756 - var getElementorChannels = () => {
9757 - const channels = window.elementor?.channels;
9758 - if (!channels) throw new Error("Elementor channels not found: Elementor editor is not initialized or channels are unavailable.");
9759 - return channels;
9760 - };
9761 - var getLegacyPanelElementView = ({ settings, ...rest }) => {
9762 - const LegacyElementModel = window.elementor?.modules?.elements?.models?.Element;
9763 - if (!LegacyElementModel) throw new Error("Elementor legacy Element model not found in editor modules");
9764 - return { model: new LegacyElementModel({
9765 - ...rest,
9766 - custom: {
9767 - isPreset: !!settings,
9768 - preset_settings: settings
9769 - }
9770 - }) };
9771 - };
9772 -
9773 -//#endregion
9774 -//#region packages/packages/core/editor-canvas/src/sync/global-styles-imported-event.ts
9775 - var GLOBAL_STYLES_IMPORTED_EVENT = "elementor/global-styles/imported";
9776 -
9777 -//#endregion
9778 -//#region packages/packages/core/editor-canvas/src/components/spotlight-backdrop.tsx
9779 - function SpotlightBackdrop({ canvas, element, onExit, ariaLabel }) {
9780 - const rect = useElementRect(element);
9781 - const backdropStyle = {
9782 - position: "fixed",
9783 - top: 0,
9784 - left: 0,
9785 - width: "100vw",
9786 - height: "100vh",
9787 - backgroundColor: "rgba(0, 0, 0, 0.5)",
9788 - zIndex: 999,
9789 - pointerEvents: "painted",
9790 - cursor: "pointer",
9791 - clipPath: element ? getRectClipPath(rect, canvas.defaultView) : void 0
9792 - };
9793 - const handleKeyDown = (event) => {
9794 - if (event.key === "Enter" || event.key === " ") {
9795 - event.preventDefault();
9796 - onExit();
9797 - }
9798 - };
9799 - return /* @__PURE__ */ react.createElement("div", {
9800 - style: backdropStyle,
9801 - onClick: onExit,
9802 - onKeyDown: handleKeyDown,
9803 - role: "button",
9804 - tabIndex: 0,
9805 - "aria-label": ariaLabel
9806 - });
9807 - }
9808 - function getRectClipPath(rect, viewport) {
9809 - const { x, y, width, height } = rect;
9810 - const { innerWidth: vw, innerHeight: vh } = viewport;
9811 - return `path(evenodd, 'M 0 0 L ${vw} 0 L ${vw} ${vh} L 0 ${vh} Z M ${x} ${y} L ${x + width} ${y} L ${x + width} ${y + height} L ${x} ${y + height} L ${x} ${y} Z')`;
9812 - }
9813 -
9814 -//#endregion
9815 -//#region packages/packages/core/editor-canvas/src/hooks/use-canvas-document.ts
9816 - function useCanvasDocument() {
9817 - return (0, _elementor_editor_v1_adapters.__privateUseListenTo)((0, _elementor_editor_v1_adapters.commandEndEvent)("editor/documents/attach-preview"), () => (0, _elementor_editor_v1_adapters.getCanvasIframeDocument)());
9818 - }
9819 -
9820 -//#endregion
9821 -//#region packages/packages/core/editor-canvas/src/hooks/use-escape-on-canvas.ts
9822 - function useEscapeOnCanvas(canvasDocument, onEscape) {
9823 - (0, react.useEffect)(() => {
9824 - if (!canvasDocument) return;
9825 - const handleEsc = (event) => {
9826 - if (event.key === "Escape") onEscape();
9827 - };
9828 - canvasDocument.body.addEventListener("keydown", handleEsc);
9829 - return () => {
9830 - canvasDocument.body.removeEventListener("keydown", handleEsc);
9831 - };
9832 - }, [canvasDocument, onEscape]);
9833 - }
9834 -
9835 -//#endregion
9836 -//#region packages/packages/core/editor-canvas/src/utils/after-render.ts
9837 - function doAfterRender(elementIds, callback) {
9838 - const pending = elementIds.map((elementId) => {
9839 - const view = (0, _elementor_editor_elements.getContainer)(elementId)?.view;
9840 - if (!view || !hasDoAfterRender(view)) return;
9841 - return new Promise((resolve) => view._doAfterRender(resolve));
9842 - }).filter(Boolean);
9843 - if (pending.length > 0) Promise.all(pending).then(() => callback(elementIds));
9844 - else callback(elementIds);
9845 - }
9846 - function hasDoAfterRender(view) {
9847 - return typeof view?._doAfterRender === "function";
9848 - }
9849 -
9850 -//#endregion
9851 -//#region packages/packages/core/editor-canvas/src/sync/element-added-event.ts
9852 - var ELEMENT_ADDED_EVENT = "elementor/canvas/element-added";
9853 -
9854 -//#endregion
9855 -//#region packages/packages/core/editor-canvas/src/index.ts
9856 - var src_exports = /* @__PURE__ */ __exportAll({
9857 - BREAKPOINTS_SCHEMA_FULL_URI: () => BREAKPOINTS_SCHEMA_FULL_URI,
9858 - BREAKPOINTS_SCHEMA_URI: () => BREAKPOINTS_SCHEMA_URI,
9859 - DOCUMENT_STRUCTURE_URI: () => DOCUMENT_STRUCTURE_URI,
9860 - ELEMENT_ADDED_EVENT: () => ELEMENT_ADDED_EVENT,
9861 - GLOBAL_STYLES_IMPORTED_EVENT: () => GLOBAL_STYLES_IMPORTED_EVENT,
9862 - SpotlightBackdrop: () => SpotlightBackdrop,
9863 - UnknownStyleStateError: () => UnknownStyleStateError,
9864 - UnknownStyleTypeError: () => UnknownStyleTypeError,
9865 - WIDGET_SCHEMA_FULL_URI: () => WIDGET_SCHEMA_FULL_URI,
9866 - WIDGET_SCHEMA_URI: () => WIDGET_SCHEMA_URI,
9867 - canBeNestedTemplated: () => canBeNestedTemplated,
9868 - convertCssToAtomic: () => convertCssToAtomic,
9869 - convertStyleBlocksToAtomic: () => convertStyleBlocksToAtomic,
9870 - createNestedTemplatedElementType: () => createNestedTemplatedElementType,
9871 - createNestedTemplatedElementView: () => createNestedTemplatedElementView,
9872 - createPropsResolver: () => createPropsResolver,
9873 - createTemplatedElementView: () => createTemplatedElementView,
9874 - createTransformer: () => createTransformer,
9875 - createTransformersRegistry: () => createTransformersRegistry,
9876 - doAfterRender: () => doAfterRender,
9877 - endDragElementFromPanel: () => endDragElementFromPanel,
9878 - formatGridTrackRepeat: () => formatGridTrackRepeat,
9879 - init: () => init,
9880 - isAtomicWidget: () => isAtomicWidget,
9881 - isGridTrackProperty: () => isGridTrackProperty,
9882 - registerElementType: () => registerElementType,
9883 - registerModelExtensions: () => registerModelExtensions,
9884 - settingsTransformersRegistry: () => settingsTransformersRegistry,
9885 - startDragElementFromPanel: () => startDragElementFromPanel,
9886 - styleTransformersRegistry: () => styleTransformersRegistry,
9887 - stylesInheritanceTransformersRegistry: () => stylesInheritanceTransformersRegistry,
9888 - useCanvasDocument: () => useCanvasDocument,
9889 - useEscapeOnCanvas: () => useEscapeOnCanvas,
9890 - waitForChildrenToComplete: () => waitForChildrenToComplete
9891 - });
9892 -
9893 -//#endregion
9894 -//#region \0elementor-package-library-entry
9895 - (window.elementorV2 = window.elementorV2 || {}).editorCanvas = src_exports;
9896 -
9897 -//#endregion
9898 -})(elementorV2.editorV1Adapters, elementorV2.editorMcp, elementorV2.httpClient, elementorV2.editor, React, elementorV2.editorDocuments, elementorV2.editorStylesRepository, elementorV2.utils, elementorV2.editorElements, elementorV2.ui, ReactDOM, elementorV2.editorInteractions, elementorV2.editorResponsive, elementorV2.editorStyles, elementorV2.editorProps, elementorV2.editorNotifications, wp.i18n, elementorV2.wpMedia, elementorV2.editorControls, elementorV2.twing, elementorV2.schema);
9899 -window.elementorV2.editorCanvas?.init?.();
1 +/*! For license information please see editor-canvas.js.LICENSE.txt */
2 +!function(){"use strict";var e,t,n={"./packages/node_modules/@floating-ui/core/dist/floating-ui.core.mjs":function(e,t,n){n.r(t),n.d(t,{arrow:function(){return arrow},autoPlacement:function(){return autoPlacement},computePosition:function(){return computePosition},detectOverflow:function(){return detectOverflow},flip:function(){return flip},hide:function(){return hide},inline:function(){return inline},limitShift:function(){return limitShift},offset:function(){return offset},rectToClientRect:function(){return r.rectToClientRect},shift:function(){return shift},size:function(){return size}});var r=n("./packages/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs");function computeCoordsFromPlacement(e,t,n){let{reference:o,floating:s}=e;const i=(0,r.getSideAxis)(t),a=(0,r.getAlignmentAxis)(t),c=(0,r.getAxisLength)(a),l=(0,r.getSide)(t),u="y"===i,d=o.x+o.width/2-s.width/2,f=o.y+o.height/2-s.height/2,p=o[c]/2-s[c]/2;let m;switch(l){case"top":m={x:d,y:o.y-s.height};break;case"bottom":m={x:d,y:o.y+o.height};break;case"right":m={x:o.x+o.width,y:f};break;case"left":m={x:o.x-s.width,y:f};break;default:m={x:o.x,y:o.y}}switch((0,r.getAlignment)(t)){case"start":m[a]-=p*(n&&u?-1:1);break;case"end":m[a]+=p*(n&&u?-1:1)}return m}const computePosition=async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:s=[],platform:i}=n,a=s.filter(Boolean),c=await(null==i.isRTL?void 0:i.isRTL(t));let l=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:u,y:d}=computeCoordsFromPlacement(l,r,c),f=r,p={},m=0;for(let n=0;n<a.length;n++){const{name:s,fn:g}=a[n],{x:y,y:h,data:v,reset:b}=await g({x:u,y:d,initialPlacement:r,placement:f,strategy:o,middlewareData:p,rects:l,platform:i,elements:{reference:e,floating:t}});u=null!=y?y:u,d=null!=h?h:d,p={...p,[s]:{...p[s],...v}},b&&m<=50&&(m++,"object"==typeof b&&(b.placement&&(f=b.placement),b.rects&&(l=!0===b.rects?await i.getElementRects({reference:e,floating:t,strategy:o}):b.rects),({x:u,y:d}=computeCoordsFromPlacement(l,f,c))),n=-1)}return{x:u,y:d,placement:f,strategy:o,middlewareData:p}};async function detectOverflow(e,t){var n;void 0===t&&(t={});const{x:o,y:s,platform:i,rects:a,elements:c,strategy:l}=e,{boundary:u="clippingAncestors",rootBoundary:d="viewport",elementContext:f="floating",altBoundary:p=!1,padding:m=0}=(0,r.evaluate)(t,e),g=(0,r.getPaddingObject)(m),y=c[p?"floating"===f?"reference":"floating":f],h=(0,r.rectToClientRect)(await i.getClippingRect({element:null==(n=await(null==i.isElement?void 0:i.isElement(y)))||n?y:y.contextElement||await(null==i.getDocumentElement?void 0:i.getDocumentElement(c.floating)),boundary:u,rootBoundary:d,strategy:l})),v="floating"===f?{x:o,y:s,width:a.floating.width,height:a.floating.height}:a.reference,b=await(null==i.getOffsetParent?void 0:i.getOffsetParent(c.floating)),E=await(null==i.isElement?void 0:i.isElement(b))&&await(null==i.getScale?void 0:i.getScale(b))||{x:1,y:1},k=(0,r.rectToClientRect)(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:c,rect:v,offsetParent:b,strategy:l}):v);return{top:(h.top-k.top+g.top)/E.y,bottom:(k.bottom-h.bottom+g.bottom)/E.y,left:(h.left-k.left+g.left)/E.x,right:(k.right-h.right+g.right)/E.x}}const arrow=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:o,placement:s,rects:i,platform:a,elements:c,middlewareData:l}=t,{element:u,padding:d=0}=(0,r.evaluate)(e,t)||{};if(null==u)return{};const f=(0,r.getPaddingObject)(d),p={x:n,y:o},m=(0,r.getAlignmentAxis)(s),g=(0,r.getAxisLength)(m),y=await a.getDimensions(u),h="y"===m,v=h?"top":"left",b=h?"bottom":"right",E=h?"clientHeight":"clientWidth",k=i.reference[g]+i.reference[m]-p[m]-i.floating[g],w=p[m]-i.reference[m],T=await(null==a.getOffsetParent?void 0:a.getOffsetParent(u));let R=T?T[E]:0;R&&await(null==a.isElement?void 0:a.isElement(T))||(R=c.floating[E]||i.floating[g]);const x=k/2-w/2,S=R/2-y[g]/2-1,C=(0,r.min)(f[v],S),P=(0,r.min)(f[b],S),I=C,_=R-y[g]-P,O=R/2-y[g]/2+x,M=(0,r.clamp)(I,O,_),A=!l.arrow&&null!=(0,r.getAlignment)(s)&&O!==M&&i.reference[g]/2-(O<I?C:P)-y[g]/2<0,L=A?O<I?O-I:O-_:0;return{[m]:p[m]+L,data:{[m]:M,centerOffset:O-M-L,...A&&{alignmentOffset:L}},reset:A}}});const autoPlacement=function(e){return void 0===e&&(e={}),{name:"autoPlacement",options:e,async fn(t){var n,o,s;const{rects:i,middlewareData:a,placement:c,platform:l,elements:u}=t,{crossAxis:d=!1,alignment:f,allowedPlacements:p=r.placements,autoAlignment:m=!0,...g}=(0,r.evaluate)(e,t),y=void 0!==f||p===r.placements?function getPlacementList(e,t,n){return(e?[...n.filter(t=>(0,r.getAlignment)(t)===e),...n.filter(t=>(0,r.getAlignment)(t)!==e)]:n.filter(e=>(0,r.getSide)(e)===e)).filter(n=>!e||(0,r.getAlignment)(n)===e||!!t&&(0,r.getOppositeAlignmentPlacement)(n)!==n)}(f||null,m,p):p,h=await detectOverflow(t,g),v=(null==(n=a.autoPlacement)?void 0:n.index)||0,b=y[v];if(null==b)return{};const E=(0,r.getAlignmentSides)(b,i,await(null==l.isRTL?void 0:l.isRTL(u.floating)));if(c!==b)return{reset:{placement:y[0]}};const k=[h[(0,r.getSide)(b)],h[E[0]],h[E[1]]],w=[...(null==(o=a.autoPlacement)?void 0:o.overflows)||[],{placement:b,overflows:k}],T=y[v+1];if(T)return{data:{index:v+1,overflows:w},reset:{placement:T}};const R=w.map(e=>{const t=(0,r.getAlignment)(e.placement);return[e.placement,t&&d?e.overflows.slice(0,2).reduce((e,t)=>e+t,0):e.overflows[0],e.overflows]}).sort((e,t)=>e[1]-t[1]),x=(null==(s=R.filter(e=>e[2].slice(0,(0,r.getAlignment)(e[0])?2:3).every(e=>e<=0))[0])?void 0:s[0])||R[0][0];return x!==c?{data:{index:v+1,overflows:w},reset:{placement:x}}:{}}}},flip=function(e){return void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var n,o;const{placement:s,middlewareData:i,rects:a,initialPlacement:c,platform:l,elements:u}=t,{mainAxis:d=!0,crossAxis:f=!0,fallbackPlacements:p,fallbackStrategy:m="bestFit",fallbackAxisSideDirection:g="none",flipAlignment:y=!0,...h}=(0,r.evaluate)(e,t);if(null!=(n=i.arrow)&&n.alignmentOffset)return{};const v=(0,r.getSide)(s),b=(0,r.getSideAxis)(c),E=(0,r.getSide)(c)===c,k=await(null==l.isRTL?void 0:l.isRTL(u.floating)),w=p||(E||!y?[(0,r.getOppositePlacement)(c)]:(0,r.getExpandedPlacements)(c)),T="none"!==g;!p&&T&&w.push(...(0,r.getOppositeAxisPlacements)(c,y,g,k));const R=[c,...w],x=await detectOverflow(t,h),S=[];let C=(null==(o=i.flip)?void 0:o.overflows)||[];if(d&&S.push(x[v]),f){const e=(0,r.getAlignmentSides)(s,a,k);S.push(x[e[0]],x[e[1]])}if(C=[...C,{placement:s,overflows:S}],!S.every(e=>e<=0)){var P,I;const e=((null==(P=i.flip)?void 0:P.index)||0)+1,t=R[e];if(t){if(!("alignment"===f&&b!==(0,r.getSideAxis)(t))||C.every(e=>(0,r.getSideAxis)(e.placement)!==b||e.overflows[0]>0))return{data:{index:e,overflows:C},reset:{placement:t}}}let n=null==(I=C.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:I.placement;if(!n)switch(m){case"bestFit":{var _;const e=null==(_=C.filter(e=>{if(T){const t=(0,r.getSideAxis)(e.placement);return t===b||"y"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:_[0];e&&(n=e);break}case"initialPlacement":n=c}if(s!==n)return{reset:{placement:n}}}return{}}}};function getSideOffsets(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function isAnySideFullyClipped(e){return r.sides.some(t=>e[t]>=0)}const hide=function(e){return void 0===e&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n}=t,{strategy:o="referenceHidden",...s}=(0,r.evaluate)(e,t);switch(o){case"referenceHidden":{const e=getSideOffsets(await detectOverflow(t,{...s,elementContext:"reference"}),n.reference);return{data:{referenceHiddenOffsets:e,referenceHidden:isAnySideFullyClipped(e)}}}case"escaped":{const e=getSideOffsets(await detectOverflow(t,{...s,altBoundary:!0}),n.floating);return{data:{escapedOffsets:e,escaped:isAnySideFullyClipped(e)}}}default:return{}}}}};function getBoundingRect(e){const t=(0,r.min)(...e.map(e=>e.left)),n=(0,r.min)(...e.map(e=>e.top));return{x:t,y:n,width:(0,r.max)(...e.map(e=>e.right))-t,height:(0,r.max)(...e.map(e=>e.bottom))-n}}const inline=function(e){return void 0===e&&(e={}),{name:"inline",options:e,async fn(t){const{placement:n,elements:o,rects:s,platform:i,strategy:a}=t,{padding:c=2,x:l,y:u}=(0,r.evaluate)(e,t),d=Array.from(await(null==i.getClientRects?void 0:i.getClientRects(o.reference))||[]),f=function getRectsByLine(e){const t=e.slice().sort((e,t)=>e.y-t.y),n=[];let o=null;for(let e=0;e<t.length;e++){const r=t[e];!o||r.y-o.y>o.height/2?n.push([r]):n[n.length-1].push(r),o=r}return n.map(e=>(0,r.rectToClientRect)(getBoundingRect(e)))}(d),p=(0,r.rectToClientRect)(getBoundingRect(d)),m=(0,r.getPaddingObject)(c);const g=await i.getElementRects({reference:{getBoundingClientRect:function getBoundingClientRect(){if(2===f.length&&f[0].left>f[1].right&&null!=l&&null!=u)return f.find(e=>l>e.left-m.left&&l<e.right+m.right&&u>e.top-m.top&&u<e.bottom+m.bottom)||p;if(f.length>=2){if("y"===(0,r.getSideAxis)(n)){const e=f[0],t=f[f.length-1],o="top"===(0,r.getSide)(n),s=e.top,i=t.bottom,a=o?e.left:t.left,c=o?e.right:t.right;return{top:s,bottom:i,left:a,right:c,width:c-a,height:i-s,x:a,y:s}}const e="left"===(0,r.getSide)(n),t=(0,r.max)(...f.map(e=>e.right)),o=(0,r.min)(...f.map(e=>e.left)),s=f.filter(n=>e?n.left===o:n.right===t),i=s[0].top,a=s[s.length-1].bottom;return{top:i,bottom:a,left:o,right:t,width:t-o,height:a-i,x:o,y:i}}return p}},floating:o.floating,strategy:a});return s.reference.x!==g.reference.x||s.reference.y!==g.reference.y||s.reference.width!==g.reference.width||s.reference.height!==g.reference.height?{reset:{rects:g}}:{}}}},o=new Set(["left","top"]);const offset=function(e){return void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var n,s;const{x:i,y:a,placement:c,middlewareData:l}=t,u=await async function convertValueToCoords(e,t){const{placement:n,platform:s,elements:i}=e,a=await(null==s.isRTL?void 0:s.isRTL(i.floating)),c=(0,r.getSide)(n),l=(0,r.getAlignment)(n),u="y"===(0,r.getSideAxis)(n),d=o.has(c)?-1:1,f=a&&u?-1:1,p=(0,r.evaluate)(t,e);let{mainAxis:m,crossAxis:g,alignmentAxis:y}="number"==typeof p?{mainAxis:p,crossAxis:0,alignmentAxis:null}:{mainAxis:p.mainAxis||0,crossAxis:p.crossAxis||0,alignmentAxis:p.alignmentAxis};return l&&"number"==typeof y&&(g="end"===l?-1*y:y),u?{x:g*f,y:m*d}:{x:m*d,y:g*f}}(t,e);return c===(null==(n=l.offset)?void 0:n.placement)&&null!=(s=l.arrow)&&s.alignmentOffset?{}:{x:i+u.x,y:a+u.y,data:{...u,placement:c}}}}},shift=function(e){return void 0===e&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:o,placement:s}=t,{mainAxis:i=!0,crossAxis:a=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=(0,r.evaluate)(e,t),u={x:n,y:o},d=await detectOverflow(t,l),f=(0,r.getSideAxis)((0,r.getSide)(s)),p=(0,r.getOppositeAxis)(f);let m=u[p],g=u[f];if(i){const e="y"===p?"bottom":"right",t=m+d["y"===p?"top":"left"],n=m-d[e];m=(0,r.clamp)(t,m,n)}if(a){const e="y"===f?"bottom":"right",t=g+d["y"===f?"top":"left"],n=g-d[e];g=(0,r.clamp)(t,g,n)}const y=c.fn({...t,[p]:m,[f]:g});return{...y,data:{x:y.x-n,y:y.y-o,enabled:{[p]:i,[f]:a}}}}}},limitShift=function(e){return void 0===e&&(e={}),{options:e,fn(t){const{x:n,y:s,placement:i,rects:a,middlewareData:c}=t,{offset:l=0,mainAxis:u=!0,crossAxis:d=!0}=(0,r.evaluate)(e,t),f={x:n,y:s},p=(0,r.getSideAxis)(i),m=(0,r.getOppositeAxis)(p);let g=f[m],y=f[p];const h=(0,r.evaluate)(l,t),v="number"==typeof h?{mainAxis:h,crossAxis:0}:{mainAxis:0,crossAxis:0,...h};if(u){const e="y"===m?"height":"width",t=a.reference[m]-a.floating[e]+v.mainAxis,n=a.reference[m]+a.reference[e]-v.mainAxis;g<t?g=t:g>n&&(g=n)}if(d){var b,E;const e="y"===m?"width":"height",t=o.has((0,r.getSide)(i)),n=a.reference[p]-a.floating[e]+(t&&(null==(b=c.offset)?void 0:b[p])||0)+(t?0:v.crossAxis),s=a.reference[p]+a.reference[e]+(t?0:(null==(E=c.offset)?void 0:E[p])||0)-(t?v.crossAxis:0);y<n?y=n:y>s&&(y=s)}return{[m]:g,[p]:y}}}},size=function(e){return void 0===e&&(e={}),{name:"size",options:e,async fn(t){var n,o;const{placement:s,rects:i,platform:a,elements:c}=t,{apply:l=()=>{},...u}=(0,r.evaluate)(e,t),d=await detectOverflow(t,u),f=(0,r.getSide)(s),p=(0,r.getAlignment)(s),m="y"===(0,r.getSideAxis)(s),{width:g,height:y}=i.floating;let h,v;"top"===f||"bottom"===f?(h=f,v=p===(await(null==a.isRTL?void 0:a.isRTL(c.floating))?"start":"end")?"left":"right"):(v=f,h="end"===p?"top":"bottom");const b=y-d.top-d.bottom,E=g-d.left-d.right,k=(0,r.min)(y-d[h],b),w=(0,r.min)(g-d[v],E),T=!t.middlewareData.shift;let R=k,x=w;if(null!=(n=t.middlewareData.shift)&&n.enabled.x&&(x=E),null!=(o=t.middlewareData.shift)&&o.enabled.y&&(R=b),T&&!p){const e=(0,r.max)(d.left,0),t=(0,r.max)(d.right,0),n=(0,r.max)(d.top,0),o=(0,r.max)(d.bottom,0);m?x=g-2*(0!==e||0!==t?e+t:(0,r.max)(d.left,d.right)):R=y-2*(0!==n||0!==o?n+o:(0,r.max)(d.top,d.bottom))}await l({...t,availableWidth:x,availableHeight:R});const S=await a.getDimensions(c.floating);return g!==S.width||y!==S.height?{reset:{rects:!0}}:{}}}}},"./packages/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs":function(e,t,n){n.r(t),n.d(t,{arrow:function(){return y},autoPlacement:function(){return d},autoUpdate:function(){return autoUpdate},computePosition:function(){return computePosition},detectOverflow:function(){return l},flip:function(){return p},getOverflowAncestors:function(){return s.getOverflowAncestors},hide:function(){return g},inline:function(){return h},limitShift:function(){return v},offset:function(){return u},platform:function(){return c},shift:function(){return f},size:function(){return m}});var r=n("./packages/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs"),o=n("./packages/node_modules/@floating-ui/core/dist/floating-ui.core.mjs"),s=n("./packages/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs");function getCssDimensions(e){const t=(0,s.getComputedStyle)(e);let n=parseFloat(t.width)||0,o=parseFloat(t.height)||0;const i=(0,s.isHTMLElement)(e),a=i?e.offsetWidth:n,c=i?e.offsetHeight:o,l=(0,r.round)(n)!==a||(0,r.round)(o)!==c;return l&&(n=a,o=c),{width:n,height:o,$:l}}function unwrapElement(e){return(0,s.isElement)(e)?e:e.contextElement}function getScale(e){const t=unwrapElement(e);if(!(0,s.isHTMLElement)(t))return(0,r.createCoords)(1);const n=t.getBoundingClientRect(),{width:o,height:i,$:a}=getCssDimensions(t);let c=(a?(0,r.round)(n.width):n.width)/o,l=(a?(0,r.round)(n.height):n.height)/i;return c&&Number.isFinite(c)||(c=1),l&&Number.isFinite(l)||(l=1),{x:c,y:l}}const i=(0,r.createCoords)(0);function getVisualOffsets(e){const t=(0,s.getWindow)(e);return(0,s.isWebKit)()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:i}function getBoundingClientRect(e,t,n,o){void 0===t&&(t=!1),void 0===n&&(n=!1);const i=e.getBoundingClientRect(),a=unwrapElement(e);let c=(0,r.createCoords)(1);t&&(o?(0,s.isElement)(o)&&(c=getScale(o)):c=getScale(e));const l=function shouldAddVisualOffsets(e,t,n){return void 0===t&&(t=!1),!(!n||t&&n!==(0,s.getWindow)(e))&&t}(a,n,o)?getVisualOffsets(a):(0,r.createCoords)(0);let u=(i.left+l.x)/c.x,d=(i.top+l.y)/c.y,f=i.width/c.x,p=i.height/c.y;if(a){const e=(0,s.getWindow)(a),t=o&&(0,s.isElement)(o)?(0,s.getWindow)(o):o;let n=e,r=(0,s.getFrameElement)(n);for(;r&&o&&t!==n;){const e=getScale(r),t=r.getBoundingClientRect(),o=(0,s.getComputedStyle)(r),i=t.left+(r.clientLeft+parseFloat(o.paddingLeft))*e.x,a=t.top+(r.clientTop+parseFloat(o.paddingTop))*e.y;u*=e.x,d*=e.y,f*=e.x,p*=e.y,u+=i,d+=a,n=(0,s.getWindow)(r),r=(0,s.getFrameElement)(n)}}return(0,r.rectToClientRect)({width:f,height:p,x:u,y:d})}function getWindowScrollBarX(e,t){const n=(0,s.getNodeScroll)(e).scrollLeft;return t?t.left+n:getBoundingClientRect((0,s.getDocumentElement)(e)).left+n}function getHTMLOffset(e,t){const n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-getWindowScrollBarX(e,n),y:n.top+t.scrollTop}}const a=new Set(["absolute","fixed"]);function getClientRectFromClippingAncestor(e,t,n){let o;if("viewport"===t)o=function getViewportRect(e,t){const n=(0,s.getWindow)(e),r=(0,s.getDocumentElement)(e),o=n.visualViewport;let i=r.clientWidth,a=r.clientHeight,c=0,l=0;if(o){i=o.width,a=o.height;const e=(0,s.isWebKit)();(!e||e&&"fixed"===t)&&(c=o.offsetLeft,l=o.offsetTop)}const u=getWindowScrollBarX(r);if(u<=0){const e=r.ownerDocument,t=e.body,n=getComputedStyle(t),o="CSS1Compat"===e.compatMode&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,s=Math.abs(r.clientWidth-t.clientWidth-o);s<=25&&(i-=s)}else u<=25&&(i+=u);return{width:i,height:a,x:c,y:l}}(e,n);else if("document"===t)o=function getDocumentRect(e){const t=(0,s.getDocumentElement)(e),n=(0,s.getNodeScroll)(e),o=e.ownerDocument.body,i=(0,r.max)(t.scrollWidth,t.clientWidth,o.scrollWidth,o.clientWidth),a=(0,r.max)(t.scrollHeight,t.clientHeight,o.scrollHeight,o.clientHeight);let c=-n.scrollLeft+getWindowScrollBarX(e);const l=-n.scrollTop;return"rtl"===(0,s.getComputedStyle)(o).direction&&(c+=(0,r.max)(t.clientWidth,o.clientWidth)-i),{width:i,height:a,x:c,y:l}}((0,s.getDocumentElement)(e));else if((0,s.isElement)(t))o=function getInnerBoundingClientRect(e,t){const n=getBoundingClientRect(e,!0,"fixed"===t),o=n.top+e.clientTop,i=n.left+e.clientLeft,a=(0,s.isHTMLElement)(e)?getScale(e):(0,r.createCoords)(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:o*a.y}}(t,n);else{const n=getVisualOffsets(e);o={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return(0,r.rectToClientRect)(o)}function hasFixedPositionAncestor(e,t){const n=(0,s.getParentNode)(e);return!(n===t||!(0,s.isElement)(n)||(0,s.isLastTraversableNode)(n))&&("fixed"===(0,s.getComputedStyle)(n).position||hasFixedPositionAncestor(n,t))}function getRectRelativeToOffsetParent(e,t,n){const o=(0,s.isHTMLElement)(t),i=(0,s.getDocumentElement)(t),a="fixed"===n,c=getBoundingClientRect(e,!0,a,t);let l={scrollLeft:0,scrollTop:0};const u=(0,r.createCoords)(0);function setLeftRTLScrollbarOffset(){u.x=getWindowScrollBarX(i)}if(o||!o&&!a)if(("body"!==(0,s.getNodeName)(t)||(0,s.isOverflowElement)(i))&&(l=(0,s.getNodeScroll)(t)),o){const e=getBoundingClientRect(t,!0,a,t);u.x=e.x+t.clientLeft,u.y=e.y+t.clientTop}else i&&setLeftRTLScrollbarOffset();a&&!o&&i&&setLeftRTLScrollbarOffset();const d=!i||o||a?(0,r.createCoords)(0):getHTMLOffset(i,l);return{x:c.left+l.scrollLeft-u.x-d.x,y:c.top+l.scrollTop-u.y-d.y,width:c.width,height:c.height}}function isStaticPositioned(e){return"static"===(0,s.getComputedStyle)(e).position}function getTrueOffsetParent(e,t){if(!(0,s.isHTMLElement)(e)||"fixed"===(0,s.getComputedStyle)(e).position)return null;if(t)return t(e);let n=e.offsetParent;return(0,s.getDocumentElement)(e)===n&&(n=n.ownerDocument.body),n}function getOffsetParent(e,t){const n=(0,s.getWindow)(e);if((0,s.isTopLayer)(e))return n;if(!(0,s.isHTMLElement)(e)){let t=(0,s.getParentNode)(e);for(;t&&!(0,s.isLastTraversableNode)(t);){if((0,s.isElement)(t)&&!isStaticPositioned(t))return t;t=(0,s.getParentNode)(t)}return n}let r=getTrueOffsetParent(e,t);for(;r&&(0,s.isTableElement)(r)&&isStaticPositioned(r);)r=getTrueOffsetParent(r,t);return r&&(0,s.isLastTraversableNode)(r)&&isStaticPositioned(r)&&!(0,s.isContainingBlock)(r)?n:r||(0,s.getContainingBlock)(e)||n}const c={convertOffsetParentRelativeRectToViewportRelativeRect:function convertOffsetParentRelativeRectToViewportRelativeRect(e){let{elements:t,rect:n,offsetParent:o,strategy:i}=e;const a="fixed"===i,c=(0,s.getDocumentElement)(o),l=!!t&&(0,s.isTopLayer)(t.floating);if(o===c||l&&a)return n;let u={scrollLeft:0,scrollTop:0},d=(0,r.createCoords)(1);const f=(0,r.createCoords)(0),p=(0,s.isHTMLElement)(o);if((p||!p&&!a)&&(("body"!==(0,s.getNodeName)(o)||(0,s.isOverflowElement)(c))&&(u=(0,s.getNodeScroll)(o)),(0,s.isHTMLElement)(o))){const e=getBoundingClientRect(o);d=getScale(o),f.x=e.x+o.clientLeft,f.y=e.y+o.clientTop}const m=!c||p||a?(0,r.createCoords)(0):getHTMLOffset(c,u);return{width:n.width*d.x,height:n.height*d.y,x:n.x*d.x-u.scrollLeft*d.x+f.x+m.x,y:n.y*d.y-u.scrollTop*d.y+f.y+m.y}},getDocumentElement:s.getDocumentElement,getClippingRect:function getClippingRect(e){let{element:t,boundary:n,rootBoundary:o,strategy:i}=e;const c=[..."clippingAncestors"===n?(0,s.isTopLayer)(t)?[]:function getClippingElementAncestors(e,t){const n=t.get(e);if(n)return n;let r=(0,s.getOverflowAncestors)(e,[],!1).filter(e=>(0,s.isElement)(e)&&"body"!==(0,s.getNodeName)(e)),o=null;const i="fixed"===(0,s.getComputedStyle)(e).position;let c=i?(0,s.getParentNode)(e):e;for(;(0,s.isElement)(c)&&!(0,s.isLastTraversableNode)(c);){const t=(0,s.getComputedStyle)(c),n=(0,s.isContainingBlock)(c);n||"fixed"!==t.position||(o=null),(i?!n&&!o:!n&&"static"===t.position&&o&&a.has(o.position)||(0,s.isOverflowElement)(c)&&!n&&hasFixedPositionAncestor(e,c))?r=r.filter(e=>e!==c):o=t,c=(0,s.getParentNode)(c)}return t.set(e,r),r}(t,this._c):[].concat(n),o],l=c[0],u=c.reduce((e,n)=>{const o=getClientRectFromClippingAncestor(t,n,i);return e.top=(0,r.max)(o.top,e.top),e.right=(0,r.min)(o.right,e.right),e.bottom=(0,r.min)(o.bottom,e.bottom),e.left=(0,r.max)(o.left,e.left),e},getClientRectFromClippingAncestor(t,l,i));return{width:u.right-u.left,height:u.bottom-u.top,x:u.left,y:u.top}},getOffsetParent:getOffsetParent,getElementRects:async function(e){const t=this.getOffsetParent||getOffsetParent,n=this.getDimensions,r=await n(e.floating);return{reference:getRectRelativeToOffsetParent(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}},getClientRects:function getClientRects(e){return Array.from(e.getClientRects())},getDimensions:function getDimensions(e){const{width:t,height:n}=getCssDimensions(e);return{width:t,height:n}},getScale:getScale,isElement:s.isElement,isRTL:function isRTL(e){return"rtl"===(0,s.getComputedStyle)(e).direction}};function rectsAreEqual(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function autoUpdate(e,t,n,o){void 0===o&&(o={});const{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:c="function"==typeof ResizeObserver,layoutShift:l="function"==typeof IntersectionObserver,animationFrame:u=!1}=o,d=unwrapElement(e),f=i||a?[...d?(0,s.getOverflowAncestors)(d):[],...(0,s.getOverflowAncestors)(t)]:[];f.forEach(e=>{i&&e.addEventListener("scroll",n,{passive:!0}),a&&e.addEventListener("resize",n)});const p=d&&l?function observeMove(e,t){let n,o=null;const i=(0,s.getDocumentElement)(e);function cleanup(){var e;clearTimeout(n),null==(e=o)||e.disconnect(),o=null}return function refresh(s,a){void 0===s&&(s=!1),void 0===a&&(a=1),cleanup();const c=e.getBoundingClientRect(),{left:l,top:u,width:d,height:f}=c;if(s||t(),!d||!f)return;const p={rootMargin:-(0,r.floor)(u)+"px "+-(0,r.floor)(i.clientWidth-(l+d))+"px "+-(0,r.floor)(i.clientHeight-(u+f))+"px "+-(0,r.floor)(l)+"px",threshold:(0,r.max)(0,(0,r.min)(1,a))||1};let m=!0;function handleObserve(t){const r=t[0].intersectionRatio;if(r!==a){if(!m)return refresh();r?refresh(!1,r):n=setTimeout(()=>{refresh(!1,1e-7)},1e3)}1!==r||rectsAreEqual(c,e.getBoundingClientRect())||refresh(),m=!1}try{o=new IntersectionObserver(handleObserve,{...p,root:i.ownerDocument})}catch(e){o=new IntersectionObserver(handleObserve,p)}o.observe(e)}(!0),cleanup}(d,n):null;let m,g=-1,y=null;c&&(y=new ResizeObserver(e=>{let[r]=e;r&&r.target===d&&y&&(y.unobserve(t),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{var e;null==(e=y)||e.observe(t)})),n()}),d&&!u&&y.observe(d),y.observe(t));let h=u?getBoundingClientRect(e):null;return u&&function frameLoop(){const t=getBoundingClientRect(e);h&&!rectsAreEqual(h,t)&&n();h=t,m=requestAnimationFrame(frameLoop)}(),n(),()=>{var e;f.forEach(e=>{i&&e.removeEventListener("scroll",n),a&&e.removeEventListener("resize",n)}),null==p||p(),null==(e=y)||e.disconnect(),y=null,u&&cancelAnimationFrame(m)}}const l=o.detectOverflow,u=o.offset,d=o.autoPlacement,f=o.shift,p=o.flip,m=o.size,g=o.hide,y=o.arrow,h=o.inline,v=o.limitShift,computePosition=(e,t,n)=>{const r=new Map,s={platform:c,...n},i={...s.platform,_c:r};return(0,o.computePosition)(e,t,{...s,platform:i})}},"./packages/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs":function(e,t,n){n.r(t),n.d(t,{arrow:function(){return arrow},autoPlacement:function(){return autoPlacement},autoUpdate:function(){return r.autoUpdate},computePosition:function(){return r.computePosition},detectOverflow:function(){return r.detectOverflow},flip:function(){return flip},getOverflowAncestors:function(){return o.getOverflowAncestors},hide:function(){return hide},inline:function(){return inline},limitShift:function(){return limitShift},offset:function(){return offset},platform:function(){return r.platform},shift:function(){return shift},size:function(){return size},useFloating:function(){return useFloating}});var r=n("./packages/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs"),o=n("./packages/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs"),s=n("react"),i=n("react-dom"),a="undefined"!=typeof document?s.useLayoutEffect:function noop(){};function deepEqual(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if("function"==typeof e&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&"object"==typeof e){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;0!==r--;)if(!deepEqual(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;0!==r--;)if(!{}.hasOwnProperty.call(t,o[r]))return!1;for(r=n;0!==r--;){const n=o[r];if(("_owner"!==n||!e.$$typeof)&&!deepEqual(e[n],t[n]))return!1}return!0}return e!=e&&t!=t}function getDPR(e){if("undefined"==typeof window)return 1;return(e.ownerDocument.defaultView||window).devicePixelRatio||1}function roundByDPR(e,t){const n=getDPR(e);return Math.round(t*n)/n}function useLatestRef(e){const t=s.useRef(e);return a(()=>{t.current=e}),t}function useFloating(e){void 0===e&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:o=[],platform:c,elements:{reference:l,floating:u}={},transform:d=!0,whileElementsMounted:f,open:p}=e,[m,g]=s.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[y,h]=s.useState(o);deepEqual(y,o)||h(o);const[v,b]=s.useState(null),[E,k]=s.useState(null),w=s.useCallback(e=>{e!==S.current&&(S.current=e,b(e))},[]),T=s.useCallback(e=>{e!==C.current&&(C.current=e,k(e))},[]),R=l||v,x=u||E,S=s.useRef(null),C=s.useRef(null),P=s.useRef(m),I=null!=f,_=useLatestRef(f),O=useLatestRef(c),M=useLatestRef(p),A=s.useCallback(()=>{if(!S.current||!C.current)return;const e={placement:t,strategy:n,middleware:y};O.current&&(e.platform=O.current),(0,r.computePosition)(S.current,C.current,e).then(e=>{const t={...e,isPositioned:!1!==M.current};L.current&&!deepEqual(P.current,t)&&(P.current=t,i.flushSync(()=>{g(t)}))})},[y,t,n,O,M]);a(()=>{!1===p&&P.current.isPositioned&&(P.current.isPositioned=!1,g(e=>({...e,isPositioned:!1})))},[p]);const L=s.useRef(!1);a(()=>(L.current=!0,()=>{L.current=!1}),[]),a(()=>{if(R&&(S.current=R),x&&(C.current=x),R&&x){if(_.current)return _.current(R,x,A);A()}},[R,x,A,_,I]);const D=s.useMemo(()=>({reference:S,floating:C,setReference:w,setFloating:T}),[w,T]),N=s.useMemo(()=>({reference:R,floating:x}),[R,x]),F=s.useMemo(()=>{const e={position:n,left:0,top:0};if(!N.floating)return e;const t=roundByDPR(N.floating,m.x),r=roundByDPR(N.floating,m.y);return d?{...e,transform:"translate("+t+"px, "+r+"px)",...getDPR(N.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:t,top:r}},[n,d,N.floating,m.x,m.y]);return s.useMemo(()=>({...m,update:A,refs:D,elements:N,floatingStyles:F}),[m,A,D,N,F])}const arrow$1=e=>({name:"arrow",options:e,fn(t){const{element:n,padding:o}="function"==typeof e?e(t):e;return n&&function isRef(e){return{}.hasOwnProperty.call(e,"current")}(n)?null!=n.current?(0,r.arrow)({element:n.current,padding:o}).fn(t):{}:n?(0,r.arrow)({element:n,padding:o}).fn(t):{}}}),offset=(e,t)=>({...(0,r.offset)(e),options:[e,t]}),shift=(e,t)=>({...(0,r.shift)(e),options:[e,t]}),limitShift=(e,t)=>({...(0,r.limitShift)(e),options:[e,t]}),flip=(e,t)=>({...(0,r.flip)(e),options:[e,t]}),size=(e,t)=>({...(0,r.size)(e),options:[e,t]}),autoPlacement=(e,t)=>({...(0,r.autoPlacement)(e),options:[e,t]}),hide=(e,t)=>({...(0,r.hide)(e),options:[e,t]}),inline=(e,t)=>({...(0,r.inline)(e),options:[e,t]}),arrow=(e,t)=>({...arrow$1(e),options:[e,t]})},"./packages/node_modules/@floating-ui/react/dist/floating-ui.react.mjs":function(e,t,n){var r;n.r(t),n.d(t,{Composite:function(){return x},CompositeItem:function(){return S},FloatingArrow:function(){return M},FloatingDelayGroup:function(){return FloatingDelayGroup},FloatingFocusManager:function(){return FloatingFocusManager},FloatingList:function(){return FloatingList},FloatingNode:function(){return FloatingNode},FloatingOverlay:function(){return Q},FloatingPortal:function(){return FloatingPortal},FloatingTree:function(){return FloatingTree},NextFloatingDelayGroup:function(){return NextFloatingDelayGroup},arrow:function(){return u.arrow},autoPlacement:function(){return u.autoPlacement},autoUpdate:function(){return d.autoUpdate},computePosition:function(){return d.computePosition},detectOverflow:function(){return d.detectOverflow},flip:function(){return u.flip},getOverflowAncestors:function(){return a.getOverflowAncestors},hide:function(){return u.hide},inline:function(){return u.inline},inner:function(){return inner},limitShift:function(){return u.limitShift},offset:function(){return u.offset},platform:function(){return d.platform},safePolygon:function(){return safePolygon},shift:function(){return u.shift},size:function(){return u.size},useClick:function(){return useClick},useClientPoint:function(){return useClientPoint},useDelayGroup:function(){return useDelayGroup},useDelayGroupContext:function(){return useDelayGroupContext},useDismiss:function(){return useDismiss},useFloating:function(){return useFloating},useFloatingNodeId:function(){return useFloatingNodeId},useFloatingParentNodeId:function(){return useFloatingParentNodeId},useFloatingPortalNode:function(){return useFloatingPortalNode},useFloatingRootContext:function(){return useFloatingRootContext},useFloatingTree:function(){return useFloatingTree},useFocus:function(){return useFocus},useHover:function(){return useHover},useId:function(){return _},useInnerOffset:function(){return useInnerOffset},useInteractions:function(){return useInteractions},useListItem:function(){return useListItem},useListNavigation:function(){return useListNavigation},useMergeRefs:function(){return useMergeRefs},useNextDelayGroup:function(){return useNextDelayGroup},useRole:function(){return useRole},useTransitionStatus:function(){return useTransitionStatus},useTransitionStyles:function(){return useTransitionStyles},useTypeahead:function(){return useTypeahead}});var o=n("react"),s=n("./packages/node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs"),i=n("./packages/node_modules/react/jsx-runtime.js"),a=n("./packages/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs"),c=n("./packages/node_modules/tabbable/dist/index.esm.js"),l=n("react-dom"),u=n("./packages/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs"),d=n("./packages/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs"),f=n("./packages/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs");function useMergeRefs(e){const t=o.useRef(void 0),n=o.useCallback(t=>{const n=e.map(e=>{if(null!=e){if("function"==typeof e){const n=e,r=n(t);return"function"==typeof r?r:()=>{n(null)}}return e.current=t,()=>{e.current=null}}});return()=>{n.forEach(e=>null==e?void 0:e())}},e);return o.useMemo(()=>e.every(e=>null==e)?null:e=>{t.current&&(t.current(),t.current=void 0),null!=e&&(t.current=n(e))},e)}function sortByDocumentPosition(e,t){const n=e.compareDocumentPosition(t);return n&Node.DOCUMENT_POSITION_FOLLOWING||n&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:n&Node.DOCUMENT_POSITION_PRECEDING||n&Node.DOCUMENT_POSITION_CONTAINS?1:0}const p=o.createContext({register:()=>{},unregister:()=>{},map:new Map,elementsRef:{current:[]}});function FloatingList(e){const{children:t,elementsRef:n,labelsRef:r}=e,[s,a]=o.useState(()=>new Set),c=o.useCallback(e=>{a(t=>new Set(t).add(e))},[]),l=o.useCallback(e=>{a(t=>{const n=new Set(t);return n.delete(e),n})},[]),u=o.useMemo(()=>{const e=new Map;return Array.from(s.keys()).sort(sortByDocumentPosition).forEach((t,n)=>{e.set(t,n)}),e},[s]);return(0,i.jsx)(p.Provider,{value:o.useMemo(()=>({register:c,unregister:l,map:u,elementsRef:n,labelsRef:r}),[c,l,u,n,r]),children:t})}function useListItem(e){void 0===e&&(e={});const{label:t}=e,{register:n,unregister:r,map:i,elementsRef:a,labelsRef:c}=o.useContext(p),[l,u]=o.useState(null),d=o.useRef(null),f=o.useCallback(e=>{if(d.current=e,null!==l&&(a.current[l]=e,c)){var n;const r=void 0!==t;c.current[l]=r?t:null!=(n=null==e?void 0:e.textContent)?n:null}},[l,a,c,t]);return(0,s.useModernLayoutEffect)(()=>{const e=d.current;if(e)return n(e),()=>{r(e)}},[n,r]),(0,s.useModernLayoutEffect)(()=>{const e=d.current?i.get(d.current):null;null!=e&&u(e)},[i]),o.useMemo(()=>({ref:f,index:null==l?-1:l}),[l,f])}const m="data-floating-ui-focusable",g="active",y="selected",h="ArrowLeft",v="ArrowRight",b="ArrowUp",E="ArrowDown";function renderJsx(e,t){return"function"==typeof e?e(t):e?o.cloneElement(e,t):(0,i.jsx)("div",{...t})}const k=o.createContext({activeIndex:0,onNavigate:()=>{}}),w=[h,v],T=[b,E],R=[...w,...T],x=o.forwardRef(function Composite(e,t){const{render:n,orientation:r="both",loop:a=!0,rtl:c=!1,cols:l=1,disabledIndices:u,activeIndex:d,onNavigate:f,itemSizes:p,dense:m=!1,...g}=e,[y,x]=o.useState(0),S=null!=d?d:y,C=(0,s.useEffectEvent)(null!=f?f:x),P=o.useRef([]),I=n&&"function"!=typeof n?n.props:{},_=o.useMemo(()=>({activeIndex:S,onNavigate:C}),[S,C]),O=l>1;const M={...g,...I,ref:t,"aria-orientation":"both"===r?void 0:r,onKeyDown(e){null==g.onKeyDown||g.onKeyDown(e),null==I.onKeyDown||I.onKeyDown(e),function handleKeyDown(e){if(!R.includes(e.key))return;let t=S;const n=(0,s.getMinListIndex)(P,u),o=(0,s.getMaxListIndex)(P,u),i=c?h:v,d=c?v:h;if(O){const d=p||Array.from({length:P.current.length},()=>({width:1,height:1})),f=(0,s.createGridCellMap)(d,l,m),g=f.findIndex(e=>null!=e&&!(0,s.isListIndexDisabled)(P,e,u)),y=f.reduce((e,t,n)=>null==t||(0,s.isListIndexDisabled)(P,t,u)?e:n,-1),h=f[(0,s.getGridNavigatedIndex)({current:f.map(e=>e?P.current[e]:null)},{event:e,orientation:r,loop:a,rtl:c,cols:l,disabledIndices:(0,s.getGridCellIndices)([...("function"!=typeof u?u:null)||P.current.map((e,t)=>(0,s.isListIndexDisabled)(P,t,u)?t:void 0),void 0],f),minIndex:g,maxIndex:y,prevIndex:(0,s.getGridCellIndexOfCorner)(S>o?n:S,d,f,l,e.key===E?"bl":e.key===i?"tr":"tl")})];null!=h&&(t=h)}const f={horizontal:[i],vertical:[E],both:[i,E]}[r],g={horizontal:[d],vertical:[b],both:[d,b]}[r],y=O?R:{horizontal:w,vertical:T,both:R}[r];var k;t===S&&[...f,...g].includes(e.key)&&(t=a&&t===o&&f.includes(e.key)?n:a&&t===n&&g.includes(e.key)?o:(0,s.findNonDisabledListIndex)(P,{startingIndex:t,decrement:g.includes(e.key),disabledIndices:u})),t===S||(0,s.isIndexOutOfListBounds)(P,t)||(e.stopPropagation(),y.includes(e.key)&&e.preventDefault(),C(t),null==(k=P.current[t])||k.focus())}(e)}};return(0,i.jsx)(k.Provider,{value:_,children:(0,i.jsx)(FloatingList,{elementsRef:P,children:renderJsx(n,M)})})}),S=o.forwardRef(function CompositeItem(e,t){const{render:n,...r}=e,s=n&&"function"!=typeof n?n.props:{},{activeIndex:i,onNavigate:a}=o.useContext(k),{ref:c,index:l}=useListItem(),u=useMergeRefs([c,t,s.ref]),d=i===l;return renderJsx(n,{...r,...s,ref:u,tabIndex:d?0:-1,"data-active":d?"":void 0,onFocus(e){null==r.onFocus||r.onFocus(e),null==s.onFocus||s.onFocus(e),a(l)}})}),C={...r||(r=n.t(o,2))};let P=!1,I=0;const genId=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+I++;const _=C.useId||function useFloatingId(){const[e,t]=o.useState(()=>P?genId():void 0);return(0,s.useModernLayoutEffect)(()=>{null==e&&t(genId())},[]),o.useEffect(()=>{P=!0},[]),e};let O;function warn(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];const o="Floating UI: "+n.join(" ");var s;null!=(e=O)&&e.has(o)||(null==(s=O)||s.add(o),console.warn(o))}O=new Set;const M=o.forwardRef(function FloatingArrow(e,t){const{context:{placement:n,elements:{floating:r},middlewareData:{arrow:c,shift:l}},width:u=14,height:d=7,tipRadius:f=0,strokeWidth:p=0,staticOffset:m,stroke:g,d:y,style:{transform:h,...v}={},...b}=e;t||warn("The `ref` prop is required for `FloatingArrow`.");const E=_(),[k,w]=o.useState(!1);if((0,s.useModernLayoutEffect)(()=>{if(!r)return;"rtl"===(0,a.getComputedStyle)(r).direction&&w(!0)},[r]),!r)return null;const[T,R]=n.split("-"),x="top"===T||"bottom"===T;let S=m;(x&&null!=l&&l.x||!x&&null!=l&&l.y)&&(S=null);const C=2*p,P=C/2,I=u/2*(f/-8+1),O=d/2*f/4,M=!!y,A=S&&"end"===R?"bottom":"top";let L=S&&"end"===R?"right":"left";S&&k&&(L="end"===R?"left":"right");const D=null!=(null==c?void 0:c.x)?S||c.x:"",N=null!=(null==c?void 0:c.y)?S||c.y:"",F=y||"M0,0 H"+u+" L"+(u-I)+","+(d-O)+" Q"+u/2+","+d+" "+I+","+(d-O)+" Z",j={top:M?"rotate(180deg)":"",left:M?"rotate(90deg)":"rotate(-90deg)",bottom:M?"":"rotate(180deg)",right:M?"rotate(-90deg)":"rotate(90deg)"}[T];return(0,i.jsxs)("svg",{...b,"aria-hidden":!0,ref:t,width:M?u:u+C,height:u,viewBox:"0 0 "+u+" "+(d>u?d:u),style:{position:"absolute",pointerEvents:"none",[L]:D,[A]:N,[T]:x||M?"100%":"calc(100% - "+C/2+"px)",transform:[j,h].filter(e=>!!e).join(" "),...v},children:[C>0&&(0,i.jsx)("path",{clipPath:"url(#"+E+")",fill:"none",stroke:g,strokeWidth:C+(y?0:1),d:F}),(0,i.jsx)("path",{stroke:C&&!y?b.fill:"none",d:F}),(0,i.jsx)("clipPath",{id:E,children:(0,i.jsx)("rect",{x:-P,y:P*(M?-1:1),width:u+C,height:u})})]})});function createEventEmitter(){const e=new Map;return{emit(t,n){var r;null==(r=e.get(t))||r.forEach(e=>e(n))},on(t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)},off(t,n){var r;null==(r=e.get(t))||r.delete(n)}}}const A=o.createContext(null),L=o.createContext(null),useFloatingParentNodeId=()=>{var e;return(null==(e=o.useContext(A))?void 0:e.id)||null},useFloatingTree=()=>o.useContext(L);function useFloatingNodeId(e){const t=_(),n=useFloatingTree(),r=useFloatingParentNodeId(),o=e||r;return(0,s.useModernLayoutEffect)(()=>{if(!t)return;const e={id:t,parentId:o};return null==n||n.addNode(e),()=>{null==n||n.removeNode(e)}},[n,t,o]),t}function FloatingNode(e){const{children:t,id:n}=e,r=useFloatingParentNodeId();return(0,i.jsx)(A.Provider,{value:o.useMemo(()=>({id:n,parentId:r}),[n,r]),children:t})}function FloatingTree(e){const{children:t}=e,n=o.useRef([]),r=o.useCallback(e=>{n.current=[...n.current,e]},[]),s=o.useCallback(e=>{n.current=n.current.filter(t=>t!==e)},[]),[a]=o.useState(()=>createEventEmitter());return(0,i.jsx)(L.Provider,{value:o.useMemo(()=>({nodesRef:n,addNode:r,removeNode:s,events:a}),[r,s,a]),children:t})}function createAttribute(e){return"data-floating-ui-"+e}function clearTimeoutIfSet(e){-1!==e.current&&(clearTimeout(e.current),e.current=-1)}const D=createAttribute("safe-polygon");function getDelay(e,t,n){if(n&&!(0,s.isMouseLikePointerType)(n))return 0;if("number"==typeof e)return e;if("function"==typeof e){const n=e();return"number"==typeof n?n:null==n?void 0:n[t]}return null==e?void 0:e[t]}function getRestMs(e){return"function"==typeof e?e():e}function useHover(e,t){void 0===t&&(t={});const{open:n,onOpenChange:r,dataRef:i,events:c,elements:l}=e,{enabled:u=!0,delay:d=0,handleClose:f=null,mouseOnly:p=!1,restMs:m=0,move:g=!0}=t,y=useFloatingTree(),h=useFloatingParentNodeId(),v=(0,s.useLatestRef)(f),b=(0,s.useLatestRef)(d),E=(0,s.useLatestRef)(n),k=(0,s.useLatestRef)(m),w=o.useRef(),T=o.useRef(-1),R=o.useRef(),x=o.useRef(-1),S=o.useRef(!0),C=o.useRef(!1),P=o.useRef(()=>{}),I=o.useRef(!1),_=(0,s.useEffectEvent)(()=>{var e;const t=null==(e=i.current.openEvent)?void 0:e.type;return(null==t?void 0:t.includes("mouse"))&&"mousedown"!==t});o.useEffect(()=>{if(u)return c.on("openchange",onOpenChange),()=>{c.off("openchange",onOpenChange)};function onOpenChange(e){let{open:t}=e;t||(clearTimeoutIfSet(T),clearTimeoutIfSet(x),S.current=!0,I.current=!1)}},[u,c]),o.useEffect(()=>{if(!u)return;if(!v.current)return;if(!n)return;function onLeave(e){_()&&r(!1,e,"hover")}const e=(0,s.getDocument)(l.floating).documentElement;return e.addEventListener("mouseleave",onLeave),()=>{e.removeEventListener("mouseleave",onLeave)}},[l.floating,n,r,u,v,_]);const O=o.useCallback(function(e,t,n){void 0===t&&(t=!0),void 0===n&&(n="hover");const o=getDelay(b.current,"close",w.current);o&&!R.current?(clearTimeoutIfSet(T),T.current=window.setTimeout(()=>r(!1,e,n),o)):t&&(clearTimeoutIfSet(T),r(!1,e,n))},[b,r]),M=(0,s.useEffectEvent)(()=>{P.current(),R.current=void 0}),A=(0,s.useEffectEvent)(()=>{if(C.current){const e=(0,s.getDocument)(l.floating).body;e.style.pointerEvents="",e.removeAttribute(D),C.current=!1}}),L=(0,s.useEffectEvent)(()=>!!i.current.openEvent&&["click","mousedown"].includes(i.current.openEvent.type));o.useEffect(()=>{if(u&&(0,a.isElement)(l.domReference)){const e=l.domReference,t=l.floating;return n&&e.addEventListener("mouseleave",onScrollMouseLeave),g&&e.addEventListener("mousemove",onReferenceMouseEnter,{once:!0}),e.addEventListener("mouseenter",onReferenceMouseEnter),e.addEventListener("mouseleave",onReferenceMouseLeave),t&&(t.addEventListener("mouseleave",onScrollMouseLeave),t.addEventListener("mouseenter",onFloatingMouseEnter),t.addEventListener("mouseleave",onFloatingMouseLeave)),()=>{n&&e.removeEventListener("mouseleave",onScrollMouseLeave),g&&e.removeEventListener("mousemove",onReferenceMouseEnter),e.removeEventListener("mouseenter",onReferenceMouseEnter),e.removeEventListener("mouseleave",onReferenceMouseLeave),t&&(t.removeEventListener("mouseleave",onScrollMouseLeave),t.removeEventListener("mouseenter",onFloatingMouseEnter),t.removeEventListener("mouseleave",onFloatingMouseLeave))}}function onReferenceMouseEnter(e){if(clearTimeoutIfSet(T),S.current=!1,p&&!(0,s.isMouseLikePointerType)(w.current)||getRestMs(k.current)>0&&!getDelay(b.current,"open"))return;const t=getDelay(b.current,"open",w.current);t?T.current=window.setTimeout(()=>{E.current||r(!0,e,"hover")},t):n||r(!0,e,"hover")}function onReferenceMouseLeave(e){if(L())return void A();P.current();const t=(0,s.getDocument)(l.floating);if(clearTimeoutIfSet(x),I.current=!1,v.current&&i.current.floatingContext){n||clearTimeoutIfSet(T),R.current=v.current({...i.current.floatingContext,tree:y,x:e.clientX,y:e.clientY,onClose(){A(),M(),L()||O(e,!0,"safe-polygon")}});const r=R.current;return t.addEventListener("mousemove",r),void(P.current=()=>{t.removeEventListener("mousemove",r)})}("touch"!==w.current||!(0,s.contains)(l.floating,e.relatedTarget))&&O(e)}function onScrollMouseLeave(e){L()||i.current.floatingContext&&(null==v.current||v.current({...i.current.floatingContext,tree:y,x:e.clientX,y:e.clientY,onClose(){A(),M(),L()||O(e)}})(e))}function onFloatingMouseEnter(){clearTimeoutIfSet(T)}function onFloatingMouseLeave(e){L()||O(e,!1)}},[l,u,e,p,g,O,M,A,r,n,E,y,b,v,i,L,k]),(0,s.useModernLayoutEffect)(()=>{var e;if(u&&n&&null!=(e=v.current)&&null!=(e=e.__options)&&e.blockPointerEvents&&_()){C.current=!0;const e=l.floating;if((0,a.isElement)(l.domReference)&&e){var t;const n=(0,s.getDocument)(l.floating).body;n.setAttribute(D,"");const r=l.domReference,o=null==y||null==(t=y.nodesRef.current.find(e=>e.id===h))||null==(t=t.context)?void 0:t.elements.floating;return o&&(o.style.pointerEvents=""),n.style.pointerEvents="none",r.style.pointerEvents="auto",e.style.pointerEvents="auto",()=>{n.style.pointerEvents="",r.style.pointerEvents="",e.style.pointerEvents=""}}}},[u,n,h,l,y,v,_]),(0,s.useModernLayoutEffect)(()=>{n||(w.current=void 0,I.current=!1,M(),A())},[n,M,A]),o.useEffect(()=>()=>{M(),clearTimeoutIfSet(T),clearTimeoutIfSet(x),A()},[u,l.domReference,M,A]);const N=o.useMemo(()=>{function setPointerRef(e){w.current=e.pointerType}return{onPointerDown:setPointerRef,onPointerEnter:setPointerRef,onMouseMove(e){const{nativeEvent:t}=e;function handleMouseMove(){S.current||E.current||r(!0,t,"hover")}p&&!(0,s.isMouseLikePointerType)(w.current)||n||0===getRestMs(k.current)||I.current&&e.movementX**2+e.movementY**2<2||(clearTimeoutIfSet(x),"touch"===w.current?handleMouseMove():(I.current=!0,x.current=window.setTimeout(handleMouseMove,getRestMs(k.current))))}}},[p,r,n,E,k]);return o.useMemo(()=>u?{reference:N}:{},[u,N])}const NOOP=()=>{},N=o.createContext({delay:0,initialDelay:0,timeoutMs:0,currentId:null,setCurrentId:NOOP,setState:NOOP,isInstantPhase:!1}),useDelayGroupContext=()=>o.useContext(N);function FloatingDelayGroup(e){const{children:t,delay:n,timeoutMs:r=0}=e,[a,c]=o.useReducer((e,t)=>({...e,...t}),{delay:n,timeoutMs:r,initialDelay:n,currentId:null,isInstantPhase:!1}),l=o.useRef(null),u=o.useCallback(e=>{c({currentId:e})},[]);return(0,s.useModernLayoutEffect)(()=>{a.currentId?null===l.current?l.current=a.currentId:a.isInstantPhase||c({isInstantPhase:!0}):(a.isInstantPhase&&c({isInstantPhase:!1}),l.current=null)},[a.currentId,a.isInstantPhase]),(0,i.jsx)(N.Provider,{value:o.useMemo(()=>({...a,setState:c,setCurrentId:u}),[a,u]),children:t})}function useDelayGroup(e,t){void 0===t&&(t={});const{open:n,onOpenChange:r,floatingId:o}=e,{id:i,enabled:a=!0}=t,c=null!=i?i:o,l=useDelayGroupContext(),{currentId:u,setCurrentId:d,initialDelay:f,setState:p,timeoutMs:m}=l;return(0,s.useModernLayoutEffect)(()=>{a&&u&&(p({delay:{open:1,close:getDelay(f,"close")}}),u!==c&&r(!1))},[a,c,r,p,u,f]),(0,s.useModernLayoutEffect)(()=>{function unset(){r(!1),p({delay:f,currentId:null})}if(a&&u&&!n&&u===c){if(m){const e=window.setTimeout(unset,m);return()=>{clearTimeout(e)}}unset()}},[a,n,p,u,c,r,f,m]),(0,s.useModernLayoutEffect)(()=>{a&&d!==NOOP&&n&&d(c)},[a,n,d,c]),l}const F=o.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeoutIdRef:{current:-1},currentIdRef:{current:null},currentContextRef:{current:null}});function NextFloatingDelayGroup(e){const{children:t,delay:n,timeoutMs:r=0}=e,s=o.useRef(n),a=o.useRef(n),c=o.useRef(null),l=o.useRef(null),u=o.useRef(-1);return(0,i.jsx)(F.Provider,{value:o.useMemo(()=>({hasProvider:!0,delayRef:s,initialDelayRef:a,currentIdRef:c,timeoutMs:r,currentContextRef:l,timeoutIdRef:u}),[r]),children:t})}function useNextDelayGroup(e,t){void 0===t&&(t={});const{open:n,onOpenChange:r,floatingId:i}=e,{enabled:a=!0}=t,c=o.useContext(F),{currentIdRef:l,delayRef:u,timeoutMs:d,initialDelayRef:f,currentContextRef:p,hasProvider:m,timeoutIdRef:g}=c,[y,h]=o.useState(!1);return(0,s.useModernLayoutEffect)(()=>{function unset(){var e;h(!1),null==(e=p.current)||e.setIsInstantPhase(!1),l.current=null,p.current=null,u.current=f.current}if(a&&l.current&&!n&&l.current===i){if(h(!1),d)return g.current=window.setTimeout(unset,d),()=>{clearTimeout(g.current)};unset()}},[a,n,i,l,u,d,f,p,g]),(0,s.useModernLayoutEffect)(()=>{if(!a)return;if(!n)return;const e=p.current,t=l.current;p.current={onOpenChange:r,setIsInstantPhase:h},l.current=i,u.current={open:0,close:getDelay(f.current,"close")},null!==t&&t!==i?(clearTimeoutIfSet(g),h(!0),null==e||e.setIsInstantPhase(!0),null==e||e.onOpenChange(!1)):(h(!1),null==e||e.setIsInstantPhase(!1))},[a,n,i,r,l,u,d,f,p,g]),(0,s.useModernLayoutEffect)(()=>()=>{p.current=null},[p]),o.useMemo(()=>({hasProvider:m,delayRef:u,isInstantPhase:y}),[m,u,y])}let j=0;function enqueueFocus(e,t){void 0===t&&(t={});const{preventScroll:n=!1,cancelPrevious:r=!0,sync:o=!1}=t;r&&cancelAnimationFrame(j);const exec=()=>null==e?void 0:e.focus({preventScroll:n});o?exec():j=requestAnimationFrame(exec)}function contains(e,t){if(!e||!t)return!1;const n=null==t.getRootNode?void 0:t.getRootNode();if(e.contains(t))return!0;if(n&&(0,a.isShadowRoot)(n)){let n=t;for(;n;){if(e===n)return!0;n=n.parentNode||n.host}}return!1}const $={inert:new WeakMap,"aria-hidden":new WeakMap,none:new WeakMap};function getCounterMap(e){return"inert"===e?$.inert:"aria-hidden"===e?$["aria-hidden"]:$.none}let V=new WeakSet,W={},B=0;const supportsInert=()=>"undefined"!=typeof HTMLElement&&"inert"in HTMLElement.prototype,unwrapHost=e=>e&&(e.host||unwrapHost(e.parentNode)),correctElements=(e,t)=>t.map(t=>{if(e.contains(t))return t;const n=unwrapHost(t);return e.contains(n)?n:null}).filter(e=>null!=e);function markOthers(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);const r=function getDocument(e){return(null==e?void 0:e.ownerDocument)||document}(e[0]).body;return function applyAttributeToOthers(e,t,n,r){const o="data-floating-ui-inert",s=r?"inert":n?"aria-hidden":null,i=correctElements(t,e),c=new Set,l=new Set(i),u=[];W[o]||(W[o]=new WeakMap);const d=W[o];return i.forEach(function keep(e){e&&!c.has(e)&&(c.add(e),e.parentNode&&keep(e.parentNode))}),function deep(e){e&&!l.has(e)&&[].forEach.call(e.children,e=>{if("script"!==(0,a.getNodeName)(e))if(c.has(e))deep(e);else{const t=s?e.getAttribute(s):null,n=null!==t&&"false"!==t,r=getCounterMap(s),i=(r.get(e)||0)+1,a=(d.get(e)||0)+1;r.set(e,i),d.set(e,a),u.push(e),1===i&&n&&V.add(e),1===a&&e.setAttribute(o,""),!n&&s&&e.setAttribute(s,"inert"===s?"":"true")}})}(t),c.clear(),B++,()=>{u.forEach(e=>{const t=getCounterMap(s),n=(t.get(e)||0)-1,r=(d.get(e)||0)-1;t.set(e,n),d.set(e,r),n||(!V.has(e)&&s&&e.removeAttribute(s),V.delete(e)),r||e.removeAttribute(o)}),B--,B||($.inert=new WeakMap,$["aria-hidden"]=new WeakMap,$.none=new WeakMap,V=new WeakSet,W={})}}(e.concat(Array.from(r.querySelectorAll('[aria-live],[role="status"],output'))),r,t,n)}const U={border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"fixed",whiteSpace:"nowrap",width:"1px",top:0,left:0},z=o.forwardRef(function FocusGuard(e,t){const[n,r]=o.useState();(0,s.useModernLayoutEffect)(()=>{(0,s.isSafari)()&&r("button")},[]);const a={ref:t,tabIndex:0,role:n,"aria-hidden":!n||void 0,[createAttribute("focus-guard")]:"",style:U};return(0,i.jsx)("span",{...e,...a})}),H=o.createContext(null),G=createAttribute("portal");function useFloatingPortalNode(e){void 0===e&&(e={});const{id:t,root:n}=e,r=_(),i=usePortalContext(),[c,l]=o.useState(null),u=o.useRef(null);return(0,s.useModernLayoutEffect)(()=>()=>{null==c||c.remove(),queueMicrotask(()=>{u.current=null})},[c]),(0,s.useModernLayoutEffect)(()=>{if(!r)return;if(u.current)return;const e=t?document.getElementById(t):null;if(!e)return;const n=document.createElement("div");n.id=r,n.setAttribute(G,""),e.appendChild(n),u.current=n,l(n)},[t,r]),(0,s.useModernLayoutEffect)(()=>{if(null===n)return;if(!r)return;if(u.current)return;let e=n||(null==i?void 0:i.portalNode);e&&!(0,a.isNode)(e)&&(e=e.current),e=e||document.body;let o=null;t&&(o=document.createElement("div"),o.id=t,e.appendChild(o));const s=document.createElement("div");s.id=r,s.setAttribute(G,""),e=o||e,e.appendChild(s),u.current=s,l(s)},[t,n,r,i]),c}function FloatingPortal(e){const{children:t,id:n,root:r,preserveTabOrder:a=!0}=e,c=useFloatingPortalNode({id:n,root:r}),[u,d]=o.useState(null),f=o.useRef(null),p=o.useRef(null),m=o.useRef(null),g=o.useRef(null),y=null==u?void 0:u.modal,h=null==u?void 0:u.open,v=!!u&&!u.modal&&u.open&&a&&!(!r&&!c);return o.useEffect(()=>{if(c&&a&&!y)return c.addEventListener("focusin",onFocus,!0),c.addEventListener("focusout",onFocus,!0),()=>{c.removeEventListener("focusin",onFocus,!0),c.removeEventListener("focusout",onFocus,!0)};function onFocus(e){if(c&&(0,s.isOutsideEvent)(e)){("focusin"===e.type?s.enableFocusInside:s.disableFocusInside)(c)}}},[c,a,y]),o.useEffect(()=>{c&&(h||(0,s.enableFocusInside)(c))},[h,c]),(0,i.jsxs)(H.Provider,{value:o.useMemo(()=>({preserveTabOrder:a,beforeOutsideRef:f,afterOutsideRef:p,beforeInsideRef:m,afterInsideRef:g,portalNode:c,setFocusManagerState:d}),[a,c]),children:[v&&c&&(0,i.jsx)(z,{"data-type":"outside",ref:f,onFocus:e=>{if((0,s.isOutsideEvent)(e,c)){var t;null==(t=m.current)||t.focus()}else{const e=u?u.domReference:null,t=(0,s.getPreviousTabbable)(e);null==t||t.focus()}}}),v&&c&&(0,i.jsx)("span",{"aria-owns":c.id,style:U}),c&&l.createPortal(t,c),v&&c&&(0,i.jsx)(z,{"data-type":"outside",ref:p,onFocus:e=>{if((0,s.isOutsideEvent)(e,c)){var t;null==(t=g.current)||t.focus()}else{const t=u?u.domReference:null,n=(0,s.getNextTabbable)(t);null==n||n.focus(),(null==u?void 0:u.closeOnFocusOut)&&(null==u||u.onOpenChange(!1,e.nativeEvent,"focus-out"))}}})]})}const usePortalContext=()=>o.useContext(H);function useLiteMergeRefs(e){return o.useMemo(()=>t=>{e.forEach(e=>{e&&(e.current=t)})},e)}const q=20;let K=[];function clearDisconnectedPreviouslyFocusedElements(){K=K.filter(e=>e.isConnected)}function getPreviouslyFocusedElement(){return clearDisconnectedPreviouslyFocusedElements(),K[K.length-1]}function handleTabIndex(e,t){var n;if(!(t.current.includes("floating")||null!=(n=e.getAttribute("role"))&&n.includes("dialog")))return;const r=(0,s.getTabbableOptions)(),o=(0,c.focusable)(e,r).filter(e=>{const t=e.getAttribute("data-tabindex")||"";return(0,c.isTabbable)(e,r)||e.hasAttribute("data-tabindex")&&!t.startsWith("-")}),i=e.getAttribute("tabindex");t.current.includes("floating")||0===o.length?"0"!==i&&e.setAttribute("tabindex","0"):("-1"!==i||e.hasAttribute("data-tabindex")&&"-1"!==e.getAttribute("data-tabindex"))&&(e.setAttribute("tabindex","-1"),e.setAttribute("data-tabindex","-1"))}const Y=o.forwardRef(function VisuallyHiddenDismiss(e,t){return(0,i.jsx)("button",{...e,type:"button",ref:t,tabIndex:-1,style:U})});function FloatingFocusManager(e){const{context:t,children:n,disabled:r=!1,order:l=["content"],guards:u=!0,initialFocus:d=0,returnFocus:f=!0,restoreFocus:p=!1,modal:m=!0,visuallyHiddenDismiss:g=!1,closeOnFocusOut:y=!0,outsideElementsInert:h=!1,getInsideElements:v=()=>[]}=e,{open:b,onOpenChange:E,events:k,dataRef:w,elements:{domReference:T,floating:R}}=t,x=(0,s.useEffectEvent)(()=>{var e;return null==(e=w.current.floatingContext)?void 0:e.nodeId}),S=(0,s.useEffectEvent)(v),C="number"==typeof d&&d<0,P=(0,s.isTypeableCombobox)(T)&&C,I=supportsInert(),_=!I||u,O=!_||I&&h,M=(0,s.useLatestRef)(l),A=(0,s.useLatestRef)(d),L=(0,s.useLatestRef)(f),D=useFloatingTree(),N=usePortalContext(),F=o.useRef(null),j=o.useRef(null),$=o.useRef(!1),V=o.useRef(!1),W=o.useRef(-1),B=o.useRef(-1),H=null!=N,G=(0,s.getFloatingFocusElement)(R),X=(0,s.useEffectEvent)(function(e){return void 0===e&&(e=G),e?(0,c.tabbable)(e,(0,s.getTabbableOptions)()):[]}),J=(0,s.useEffectEvent)(e=>{const t=X(e);return M.current.map(e=>T&&"reference"===e?T:G&&"floating"===e?G:t).filter(Boolean).flat()});o.useEffect(()=>{if(r)return;if(!m)return;function onKeyDown(e){if("Tab"===e.key){(0,s.contains)(G,(0,s.activeElement)((0,s.getDocument)(G)))&&0===X().length&&!P&&(0,s.stopEvent)(e);const t=J(),n=(0,s.getTarget)(e);"reference"===M.current[0]&&n===T&&((0,s.stopEvent)(e),e.shiftKey?enqueueFocus(t[t.length-1]):enqueueFocus(t[1])),"floating"===M.current[1]&&n===G&&e.shiftKey&&((0,s.stopEvent)(e),enqueueFocus(t[0]))}}const e=(0,s.getDocument)(G);return e.addEventListener("keydown",onKeyDown),()=>{e.removeEventListener("keydown",onKeyDown)}},[r,T,G,m,M,P,X,J]),o.useEffect(()=>{if(!r&&R)return R.addEventListener("focusin",handleFocusIn),()=>{R.removeEventListener("focusin",handleFocusIn)};function handleFocusIn(e){const t=(0,s.getTarget)(e),n=X().indexOf(t);-1!==n&&(W.current=n)}},[r,R,X]),o.useEffect(()=>{if(r)return;if(!y)return;function handlePointerDown(){V.current=!0,setTimeout(()=>{V.current=!1})}function handleFocusOutside(e){const t=e.relatedTarget,n=e.currentTarget,r=(0,s.getTarget)(e);queueMicrotask(()=>{const o=x(),i=!((0,s.contains)(T,t)||(0,s.contains)(R,t)||(0,s.contains)(t,R)||(0,s.contains)(null==N?void 0:N.portalNode,t)||null!=t&&t.hasAttribute(createAttribute("focus-guard"))||D&&((0,s.getNodeChildren)(D.nodesRef.current,o).find(e=>{var n,r;return(0,s.contains)(null==(n=e.context)?void 0:n.elements.floating,t)||(0,s.contains)(null==(r=e.context)?void 0:r.elements.domReference,t)})||(0,s.getNodeAncestors)(D.nodesRef.current,o).find(e=>{var n,r,o;return[null==(n=e.context)?void 0:n.elements.floating,(0,s.getFloatingFocusElement)(null==(r=e.context)?void 0:r.elements.floating)].includes(t)||(null==(o=e.context)?void 0:o.elements.domReference)===t})));if(n===T&&G&&handleTabIndex(G,M),p&&n!==T&&(null==r||!r.isConnected)&&(0,s.activeElement)((0,s.getDocument)(G))===(0,s.getDocument)(G).body){(0,a.isHTMLElement)(G)&&G.focus();const e=W.current,t=X(),n=t[e]||t[t.length-1]||G;(0,a.isHTMLElement)(n)&&n.focus()}w.current.insideReactTree?w.current.insideReactTree=!1:!P&&m||!t||!i||V.current||t===getPreviouslyFocusedElement()||($.current=!0,E(!1,e,"focus-out"))})}const e=Boolean(!D&&N);function markInsideReactTree(){clearTimeoutIfSet(B),w.current.insideReactTree=!0,B.current=window.setTimeout(()=>{w.current.insideReactTree=!1})}return R&&(0,a.isHTMLElement)(T)?(T.addEventListener("focusout",handleFocusOutside),T.addEventListener("pointerdown",handlePointerDown),R.addEventListener("focusout",handleFocusOutside),e&&R.addEventListener("focusout",markInsideReactTree,!0),()=>{T.removeEventListener("focusout",handleFocusOutside),T.removeEventListener("pointerdown",handlePointerDown),R.removeEventListener("focusout",handleFocusOutside),e&&R.removeEventListener("focusout",markInsideReactTree,!0)}):void 0},[r,T,R,G,m,D,N,E,y,p,X,P,x,M,w]);const Q=o.useRef(null),Z=o.useRef(null),ee=useLiteMergeRefs([Q,null==N?void 0:N.beforeInsideRef]),te=useLiteMergeRefs([Z,null==N?void 0:N.afterInsideRef]);function renderDismissButton(e){return!r&&g&&m?(0,i.jsx)(Y,{ref:"start"===e?F:j,onClick:e=>E(!1,e.nativeEvent),children:"string"==typeof g?g:"Dismiss"}):null}o.useEffect(()=>{var e,t;if(r)return;if(!R)return;const n=Array.from((null==N||null==(e=N.portalNode)?void 0:e.querySelectorAll("["+createAttribute("portal")+"]"))||[]),o=null==(t=(D?(0,s.getNodeAncestors)(D.nodesRef.current,x()):[]).find(e=>{var t;return(0,s.isTypeableCombobox)((null==(t=e.context)?void 0:t.elements.domReference)||null)}))||null==(t=t.context)?void 0:t.elements.domReference,i=[R,o,...n,...S(),F.current,j.current,Q.current,Z.current,null==N?void 0:N.beforeOutsideRef.current,null==N?void 0:N.afterOutsideRef.current,M.current.includes("reference")||P?T:null].filter(e=>null!=e),a=m||P?markOthers(i,!O,O):markOthers(i);return()=>{a()}},[r,T,R,m,M,N,P,_,O,D,x,S]),(0,s.useModernLayoutEffect)(()=>{if(r||!(0,a.isHTMLElement)(G))return;const e=(0,s.getDocument)(G),t=(0,s.activeElement)(e);queueMicrotask(()=>{const e=J(G),n=A.current,r=("number"==typeof n?e[n]:n.current)||G,o=(0,s.contains)(G,t);C||o||!b||enqueueFocus(r,{preventScroll:r===G})})},[r,b,G,C,J,A]),(0,s.useModernLayoutEffect)(()=>{if(r||!G)return;const e=(0,s.getDocument)(G);function onOpenChange(e){let{reason:t,event:n,nested:r}=e;if(["hover","safe-polygon"].includes(t)&&"mouseleave"===n.type&&($.current=!0),"outside-press"===t)if(r)$.current=!1;else if((0,s.isVirtualClick)(n)||(0,s.isVirtualPointerEvent)(n))$.current=!1;else{let e=!1;document.createElement("div").focus({get preventScroll(){return e=!0,!1}}),$.current=!e}}!function addPreviouslyFocusedElement(e){clearDisconnectedPreviouslyFocusedElements(),e&&"body"!==(0,a.getNodeName)(e)&&(K.push(e),K.length>q&&(K=K.slice(-20)))}((0,s.activeElement)(e)),k.on("openchange",onOpenChange);const t=e.createElement("span");return t.setAttribute("tabindex","-1"),t.setAttribute("aria-hidden","true"),Object.assign(t.style,U),H&&T&&T.insertAdjacentElement("afterend",t),()=>{k.off("openchange",onOpenChange);const n=(0,s.activeElement)(e),r=(0,s.contains)(R,n)||D&&(0,s.getNodeChildren)(D.nodesRef.current,x(),!1).some(e=>{var t;return(0,s.contains)(null==(t=e.context)?void 0:t.elements.floating,n)}),o=function getReturnElement(){if("boolean"==typeof L.current){const e=T||getPreviouslyFocusedElement();return e&&e.isConnected?e:t}return L.current.current||t}();queueMicrotask(()=>{const i=function getFirstTabbableElement(e){const t=(0,s.getTabbableOptions)();return(0,c.isTabbable)(e,t)?e:(0,c.tabbable)(e,t)[0]||e}(o);L.current&&!$.current&&(0,a.isHTMLElement)(i)&&(i===n||n===e.body||r)&&i.focus({preventScroll:!0}),t.remove()})}},[r,R,G,L,w,k,D,H,T,x]),o.useEffect(()=>(queueMicrotask(()=>{$.current=!1}),()=>{queueMicrotask(clearDisconnectedPreviouslyFocusedElements)}),[r]),(0,s.useModernLayoutEffect)(()=>{if(!r&&N)return N.setFocusManagerState({modal:m,closeOnFocusOut:y,open:b,onOpenChange:E,domReference:T}),()=>{N.setFocusManagerState(null)}},[r,N,m,b,E,y,T]),(0,s.useModernLayoutEffect)(()=>{r||G&&handleTabIndex(G,M)},[r,G,M]);const ne=!r&&_&&(!m||!P)&&(H||m);return(0,i.jsxs)(i.Fragment,{children:[ne&&(0,i.jsx)(z,{"data-type":"inside",ref:ee,onFocus:e=>{if(m){const e=J();enqueueFocus("reference"===l[0]?e[0]:e[e.length-1])}else if(null!=N&&N.preserveTabOrder&&N.portalNode)if($.current=!1,(0,s.isOutsideEvent)(e,N.portalNode)){const e=(0,s.getNextTabbable)(T);null==e||e.focus()}else{var t;null==(t=N.beforeOutsideRef.current)||t.focus()}}}),!P&&renderDismissButton("start"),n,renderDismissButton("end"),ne&&(0,i.jsx)(z,{"data-type":"inside",ref:te,onFocus:e=>{if(m)enqueueFocus(J()[0]);else if(null!=N&&N.preserveTabOrder&&N.portalNode)if(y&&($.current=!0),(0,s.isOutsideEvent)(e,N.portalNode)){const e=(0,s.getPreviousTabbable)(T);null==e||e.focus()}else{var t;null==(t=N.afterOutsideRef.current)||t.focus()}}})]})}let X=0;const J="--floating-ui-scrollbar-width";let cleanup=()=>{};const Q=o.forwardRef(function FloatingOverlay(e,t){const{lockScroll:n=!1,...r}=e;return(0,s.useModernLayoutEffect)(()=>{if(n)return X++,1===X&&(cleanup=function enableScrollLock(){const e=(0,s.getPlatform)(),t=/iP(hone|ad|od)|iOS/.test(e)||"MacIntel"===e&&navigator.maxTouchPoints>1,n=document.body.style,r=Math.round(document.documentElement.getBoundingClientRect().left)+document.documentElement.scrollLeft?"paddingLeft":"paddingRight",o=window.innerWidth-document.documentElement.clientWidth,i=n.left?parseFloat(n.left):window.scrollX,a=n.top?parseFloat(n.top):window.scrollY;if(n.overflow="hidden",n.setProperty(J,o+"px"),o&&(n[r]=o+"px"),t){var c,l;const e=(null==(c=window.visualViewport)?void 0:c.offsetLeft)||0,t=(null==(l=window.visualViewport)?void 0:l.offsetTop)||0;Object.assign(n,{position:"fixed",top:-(a-Math.floor(t))+"px",left:-(i-Math.floor(e))+"px",right:"0"})}return()=>{Object.assign(n,{overflow:"",[r]:""}),n.removeProperty(J),t&&(Object.assign(n,{position:"",top:"",left:"",right:""}),window.scrollTo(i,a))}}()),()=>{X--,0===X&&cleanup()}},[n]),(0,i.jsx)("div",{ref:t,...r,style:{position:"fixed",overflow:"auto",top:0,right:0,bottom:0,left:0,...r.style}})});function isButtonTarget(e){return(0,a.isHTMLElement)(e.target)&&"BUTTON"===e.target.tagName}function isSpaceIgnored(e){return(0,s.isTypeableElement)(e)}function useClick(e,t){void 0===t&&(t={});const{open:n,onOpenChange:r,dataRef:i,elements:{domReference:c}}=e,{enabled:l=!0,event:u="click",toggle:d=!0,ignoreMouse:f=!1,keyboardHandlers:p=!0,stickIfOpen:m=!0}=t,g=o.useRef(),y=o.useRef(!1),h=o.useMemo(()=>({onPointerDown(e){g.current=e.pointerType},onMouseDown(e){const t=g.current;0===e.button&&"click"!==u&&((0,s.isMouseLikePointerType)(t,!0)&&f||(!n||!d||i.current.openEvent&&m&&"mousedown"!==i.current.openEvent.type?(e.preventDefault(),r(!0,e.nativeEvent,"click")):r(!1,e.nativeEvent,"click")))},onClick(e){const t=g.current;"mousedown"===u&&g.current?g.current=void 0:(0,s.isMouseLikePointerType)(t,!0)&&f||(!n||!d||i.current.openEvent&&m&&"click"!==i.current.openEvent.type?r(!0,e.nativeEvent,"click"):r(!1,e.nativeEvent,"click"))},onKeyDown(e){g.current=void 0,e.defaultPrevented||!p||isButtonTarget(e)||(" "!==e.key||isSpaceIgnored(c)||(e.preventDefault(),y.current=!0),function isAnchorTarget(e){return(0,a.isHTMLElement)(e.target)&&"A"===e.target.tagName}(e)||"Enter"===e.key&&r(!n||!d,e.nativeEvent,"click"))},onKeyUp(e){e.defaultPrevented||!p||isButtonTarget(e)||isSpaceIgnored(c)||" "===e.key&&y.current&&(y.current=!1,r(!n||!d,e.nativeEvent,"click"))}}),[i,c,u,f,p,r,n,m,d]);return o.useMemo(()=>l?{reference:h}:{},[l,h])}function isMouseBasedEvent(e){return null!=e&&null!=e.clientX}function useClientPoint(e,t){void 0===t&&(t={});const{open:n,dataRef:r,elements:{floating:i,domReference:c},refs:l}=e,{enabled:u=!0,axis:d="both",x:f=null,y:p=null}=t,m=o.useRef(!1),g=o.useRef(null),[y,h]=o.useState(),[v,b]=o.useState([]),E=(0,s.useEffectEvent)((e,t)=>{m.current||r.current.openEvent&&!isMouseBasedEvent(r.current.openEvent)||l.setPositionReference(function createVirtualElement(e,t){let n=null,r=null,o=!1;return{contextElement:e||void 0,getBoundingClientRect(){var s;const i=(null==e?void 0:e.getBoundingClientRect())||{width:0,height:0,x:0,y:0},a="x"===t.axis||"both"===t.axis,c="y"===t.axis||"both"===t.axis,l=["mouseenter","mousemove"].includes((null==(s=t.dataRef.current.openEvent)?void 0:s.type)||"")&&"touch"!==t.pointerType;let u=i.width,d=i.height,f=i.x,p=i.y;return null==n&&t.x&&a&&(n=i.x-t.x),null==r&&t.y&&c&&(r=i.y-t.y),f-=n||0,p-=r||0,u=0,d=0,!o||l?(u="y"===t.axis?i.width:0,d="x"===t.axis?i.height:0,f=a&&null!=t.x?t.x:f,p=c&&null!=t.y?t.y:p):o&&!l&&(d="x"===t.axis?i.height:d,u="y"===t.axis?i.width:u),o=!0,{width:u,height:d,x:f,y:p,top:p,right:f+u,bottom:p+d,left:f}}}}(c,{x:e,y:t,axis:d,dataRef:r,pointerType:y}))}),k=(0,s.useEffectEvent)(e=>{null==f&&null==p&&(n?g.current||b([]):E(e.clientX,e.clientY))}),w=(0,s.isMouseLikePointerType)(y)?i:n,T=o.useCallback(()=>{if(!w||!u||null!=f||null!=p)return;const e=(0,a.getWindow)(i);function handleMouseMove(t){const n=(0,s.getTarget)(t);(0,s.contains)(i,n)?(e.removeEventListener("mousemove",handleMouseMove),g.current=null):E(t.clientX,t.clientY)}if(!r.current.openEvent||isMouseBasedEvent(r.current.openEvent)){e.addEventListener("mousemove",handleMouseMove);const cleanup=()=>{e.removeEventListener("mousemove",handleMouseMove),g.current=null};return g.current=cleanup,cleanup}l.setPositionReference(c)},[w,u,f,p,i,r,l,c,E]);o.useEffect(()=>T(),[T,v]),o.useEffect(()=>{u&&!i&&(m.current=!1)},[u,i]),o.useEffect(()=>{!u&&n&&(m.current=!0)},[u,n]),(0,s.useModernLayoutEffect)(()=>{!u||null==f&&null==p||(m.current=!1,E(f,p))},[u,f,p,E]);const R=o.useMemo(()=>{function setPointerTypeRef(e){let{pointerType:t}=e;h(t)}return{onPointerDown:setPointerTypeRef,onPointerEnter:setPointerTypeRef,onMouseMove:k,onMouseEnter:k}},[k]);return o.useMemo(()=>u?{reference:R}:{},[u,R])}const Z={pointerdown:"onPointerDown",mousedown:"onMouseDown",click:"onClick"},ee={pointerdown:"onPointerDownCapture",mousedown:"onMouseDownCapture",click:"onClickCapture"},normalizeProp=e=>{var t,n;return{escapeKey:"boolean"==typeof e?e:null!=(t=null==e?void 0:e.escapeKey)&&t,outsidePress:"boolean"==typeof e?e:null==(n=null==e?void 0:e.outsidePress)||n}};function useDismiss(e,t){void 0===t&&(t={});const{open:n,onOpenChange:r,elements:i,dataRef:c}=e,{enabled:l=!0,escapeKey:u=!0,outsidePress:d=!0,outsidePressEvent:f="pointerdown",referencePress:p=!1,referencePressEvent:m="pointerdown",ancestorScroll:g=!1,bubbles:y,capture:h}=t,v=useFloatingTree(),b=(0,s.useEffectEvent)("function"==typeof d?d:()=>!1),E="function"==typeof d?b:d,k=o.useRef(!1),{escapeKey:w,outsidePress:T}=normalizeProp(y),{escapeKey:R,outsidePress:x}=normalizeProp(h),S=o.useRef(!1),C=(0,s.useEffectEvent)(e=>{var t;if(!n||!l||!u||"Escape"!==e.key)return;if(S.current)return;const o=null==(t=c.current.floatingContext)?void 0:t.nodeId,i=v?(0,s.getNodeChildren)(v.nodesRef.current,o):[];if(!w&&(e.stopPropagation(),i.length>0)){let e=!0;if(i.forEach(t=>{var n;null==(n=t.context)||!n.open||t.context.dataRef.current.__escapeKeyBubbles||(e=!1)}),!e)return}r(!1,(0,s.isReactEvent)(e)?e.nativeEvent:e,"escape-key")}),P=(0,s.useEffectEvent)(e=>{var t;const callback=()=>{var t;C(e),null==(t=(0,s.getTarget)(e))||t.removeEventListener("keydown",callback)};null==(t=(0,s.getTarget)(e))||t.addEventListener("keydown",callback)}),I=(0,s.useEffectEvent)(e=>{var t;const n=c.current.insideReactTree;c.current.insideReactTree=!1;const o=k.current;if(k.current=!1,"click"===f&&o)return;if(n)return;if("function"==typeof E&&!E(e))return;const l=(0,s.getTarget)(e),u="["+createAttribute("inert")+"]",d=(0,s.getDocument)(i.floating).querySelectorAll(u);let p=(0,a.isElement)(l)?l:null;for(;p&&!(0,a.isLastTraversableNode)(p);){const e=(0,a.getParentNode)(p);if((0,a.isLastTraversableNode)(e)||!(0,a.isElement)(e))break;p=e}if(d.length&&(0,a.isElement)(l)&&!(0,s.isRootElement)(l)&&!(0,s.contains)(l,i.floating)&&Array.from(d).every(e=>!(0,s.contains)(p,e)))return;if((0,a.isHTMLElement)(l)&&M){const t=(0,a.isLastTraversableNode)(l),n=(0,a.getComputedStyle)(l),r=/auto|scroll/,o=t||r.test(n.overflowX),s=t||r.test(n.overflowY),i=o&&l.clientWidth>0&&l.scrollWidth>l.clientWidth,c=s&&l.clientHeight>0&&l.scrollHeight>l.clientHeight,u="rtl"===n.direction,d=c&&(u?e.offsetX<=l.offsetWidth-l.clientWidth:e.offsetX>l.clientWidth),f=i&&e.offsetY>l.clientHeight;if(d||f)return}const m=null==(t=c.current.floatingContext)?void 0:t.nodeId,g=v&&(0,s.getNodeChildren)(v.nodesRef.current,m).some(t=>{var n;return(0,s.isEventTargetWithin)(e,null==(n=t.context)?void 0:n.elements.floating)});if((0,s.isEventTargetWithin)(e,i.floating)||(0,s.isEventTargetWithin)(e,i.domReference)||g)return;const y=v?(0,s.getNodeChildren)(v.nodesRef.current,m):[];if(y.length>0){let e=!0;if(y.forEach(t=>{var n;null==(n=t.context)||!n.open||t.context.dataRef.current.__outsidePressBubbles||(e=!1)}),!e)return}r(!1,e,"outside-press")}),_=(0,s.useEffectEvent)(e=>{var t;const callback=()=>{var t;I(e),null==(t=(0,s.getTarget)(e))||t.removeEventListener(f,callback)};null==(t=(0,s.getTarget)(e))||t.addEventListener(f,callback)});o.useEffect(()=>{if(!n||!l)return;c.current.__escapeKeyBubbles=w,c.current.__outsidePressBubbles=T;let e=-1;function onScroll(e){r(!1,e,"ancestor-scroll")}function handleCompositionStart(){window.clearTimeout(e),S.current=!0}function handleCompositionEnd(){e=window.setTimeout(()=>{S.current=!1},(0,a.isWebKit)()?5:0)}const t=(0,s.getDocument)(i.floating);u&&(t.addEventListener("keydown",R?P:C,R),t.addEventListener("compositionstart",handleCompositionStart),t.addEventListener("compositionend",handleCompositionEnd)),E&&t.addEventListener(f,x?_:I,x);let o=[];return g&&((0,a.isElement)(i.domReference)&&(o=(0,a.getOverflowAncestors)(i.domReference)),(0,a.isElement)(i.floating)&&(o=o.concat((0,a.getOverflowAncestors)(i.floating))),!(0,a.isElement)(i.reference)&&i.reference&&i.reference.contextElement&&(o=o.concat((0,a.getOverflowAncestors)(i.reference.contextElement)))),o=o.filter(e=>{var n;return e!==(null==(n=t.defaultView)?void 0:n.visualViewport)}),o.forEach(e=>{e.addEventListener("scroll",onScroll,{passive:!0})}),()=>{u&&(t.removeEventListener("keydown",R?P:C,R),t.removeEventListener("compositionstart",handleCompositionStart),t.removeEventListener("compositionend",handleCompositionEnd)),E&&t.removeEventListener(f,x?_:I,x),o.forEach(e=>{e.removeEventListener("scroll",onScroll)}),window.clearTimeout(e)}},[c,i,u,E,f,n,r,g,l,w,T,C,R,P,I,x,_]),o.useEffect(()=>{c.current.insideReactTree=!1},[c,E,f]);const O=o.useMemo(()=>({onKeyDown:C,...p&&{[Z[m]]:e=>{r(!1,e.nativeEvent,"reference-press")},..."click"!==m&&{onClick(e){r(!1,e.nativeEvent,"reference-press")}}}}),[C,r,p,m]),M=o.useMemo(()=>({onKeyDown:C,onMouseDown(){k.current=!0},onMouseUp(){k.current=!0},[ee[f]]:()=>{c.current.insideReactTree=!0}}),[C,f,c]);return o.useMemo(()=>l?{reference:O,floating:M}:{},[l,O,M])}function useFloatingRootContext(e){const{open:t=!1,onOpenChange:n,elements:r}=e,i=_(),c=o.useRef({}),[l]=o.useState(()=>createEventEmitter()),u=null!=useFloatingParentNodeId();{const e=r.reference;e&&!(0,a.isElement)(e)&&function error(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];const o="Floating UI: "+n.join(" ");var s;null!=(e=O)&&e.has(o)||(null==(s=O)||s.add(o),console.error(o))}("Cannot pass a virtual element to the `elements.reference` option,","as it must be a real DOM element. Use `refs.setPositionReference()`","instead.")}const[d,f]=o.useState(r.reference),p=(0,s.useEffectEvent)((e,t,r)=>{c.current.openEvent=e?t:void 0,l.emit("openchange",{open:e,event:t,reason:r,nested:u}),null==n||n(e,t,r)}),m=o.useMemo(()=>({setPositionReference:f}),[]),g=o.useMemo(()=>({reference:d||r.reference||null,floating:r.floating||null,domReference:r.reference}),[d,r.reference,r.floating]);return o.useMemo(()=>({dataRef:c,open:t,onOpenChange:p,elements:g,events:l,floatingId:i,refs:m}),[t,p,g,l,i,m])}function useFloating(e){void 0===e&&(e={});const{nodeId:t}=e,n=useFloatingRootContext({...e,elements:{reference:null,floating:null,...e.elements}}),r=e.rootContext||n,i=r.elements,[c,l]=o.useState(null),[d,f]=o.useState(null),p=(null==i?void 0:i.domReference)||c,m=o.useRef(null),g=useFloatingTree();(0,s.useModernLayoutEffect)(()=>{p&&(m.current=p)},[p]);const y=(0,u.useFloating)({...e,elements:{...i,...d&&{reference:d}}}),h=o.useCallback(e=>{const t=(0,a.isElement)(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),getClientRects:()=>e.getClientRects(),contextElement:e}:e;f(t),y.refs.setReference(t)},[y.refs]),v=o.useCallback(e=>{((0,a.isElement)(e)||null===e)&&(m.current=e,l(e)),((0,a.isElement)(y.refs.reference.current)||null===y.refs.reference.current||null!==e&&!(0,a.isElement)(e))&&y.refs.setReference(e)},[y.refs]),b=o.useMemo(()=>({...y.refs,setReference:v,setPositionReference:h,domReference:m}),[y.refs,v,h]),E=o.useMemo(()=>({...y.elements,domReference:p}),[y.elements,p]),k=o.useMemo(()=>({...y,...r,refs:b,elements:E,nodeId:t}),[y,b,E,t,r]);return(0,s.useModernLayoutEffect)(()=>{r.dataRef.current.floatingContext=k;const e=null==g?void 0:g.nodesRef.current.find(e=>e.id===t);e&&(e.context=k)}),o.useMemo(()=>({...y,context:k,refs:b,elements:E}),[y,b,E,k])}function isMacSafari(){return(0,s.isMac)()&&(0,s.isSafari)()}function useFocus(e,t){void 0===t&&(t={});const{open:n,onOpenChange:r,events:i,dataRef:c,elements:l}=e,{enabled:u=!0,visibleOnly:d=!0}=t,f=o.useRef(!1),p=o.useRef(-1),m=o.useRef(!0);o.useEffect(()=>{if(!u)return;const e=(0,a.getWindow)(l.domReference);function onBlur(){!n&&(0,a.isHTMLElement)(l.domReference)&&l.domReference===(0,s.activeElement)((0,s.getDocument)(l.domReference))&&(f.current=!0)}function onKeyDown(){m.current=!0}function onPointerDown(){m.current=!1}return e.addEventListener("blur",onBlur),isMacSafari()&&(e.addEventListener("keydown",onKeyDown,!0),e.addEventListener("pointerdown",onPointerDown,!0)),()=>{e.removeEventListener("blur",onBlur),isMacSafari()&&(e.removeEventListener("keydown",onKeyDown,!0),e.removeEventListener("pointerdown",onPointerDown,!0))}},[l.domReference,n,u]),o.useEffect(()=>{if(u)return i.on("openchange",onOpenChange),()=>{i.off("openchange",onOpenChange)};function onOpenChange(e){let{reason:t}=e;"reference-press"!==t&&"escape-key"!==t||(f.current=!0)}},[i,u]),o.useEffect(()=>()=>{clearTimeoutIfSet(p)},[]);const g=o.useMemo(()=>({onMouseLeave(){f.current=!1},onFocus(e){if(f.current)return;const t=(0,s.getTarget)(e.nativeEvent);if(d&&(0,a.isElement)(t))if(isMacSafari()&&!e.relatedTarget){if(!m.current&&!(0,s.isTypeableElement)(t))return}else if(!(0,s.matchesFocusVisible)(t))return;r(!0,e.nativeEvent,"focus")},onBlur(e){f.current=!1;const t=e.relatedTarget,n=e.nativeEvent,o=(0,a.isElement)(t)&&t.hasAttribute(createAttribute("focus-guard"))&&"outside"===t.getAttribute("data-type");p.current=window.setTimeout(()=>{var e;const i=(0,s.activeElement)(l.domReference?l.domReference.ownerDocument:document);(t||i!==l.domReference)&&((0,s.contains)(null==(e=c.current.floatingContext)?void 0:e.refs.floating.current,i)||(0,s.contains)(l.domReference,i)||o||r(!1,n,"focus"))})}}),[c,l.domReference,r,d]);return o.useMemo(()=>u?{reference:g}:{},[u,g])}function mergeProps(e,t,n){const r=new Map,o="item"===n;let s=e;if(o&&e){const{[g]:t,[y]:n,...r}=e;s=r}return{..."floating"===n&&{tabIndex:-1,[m]:""},...s,...t.map(t=>{const r=t?t[n]:null;return"function"==typeof r?e?r(e):null:r}).concat(e).reduce((e,t)=>t?(Object.entries(t).forEach(t=>{let[n,s]=t;var i;o&&[g,y].includes(n)||(0===n.indexOf("on")?(r.has(n)||r.set(n,[]),"function"==typeof s&&(null==(i=r.get(n))||i.push(s),e[n]=function(){for(var e,t=arguments.length,o=new Array(t),s=0;s<t;s++)o[s]=arguments[s];return null==(e=r.get(n))?void 0:e.map(e=>e(...o)).find(e=>void 0!==e)})):e[n]=s)}),e):e,{})}}function useInteractions(e){void 0===e&&(e=[]);const t=e.map(e=>null==e?void 0:e.reference),n=e.map(e=>null==e?void 0:e.floating),r=e.map(e=>null==e?void 0:e.item),s=o.useCallback(t=>mergeProps(t,e,"reference"),t),i=o.useCallback(t=>mergeProps(t,e,"floating"),n),a=o.useCallback(t=>mergeProps(t,e,"item"),r);return o.useMemo(()=>({getReferenceProps:s,getFloatingProps:i,getItemProps:a}),[s,i,a])}const te="Escape";function doSwitch(e,t,n){switch(e){case"vertical":return t;case"horizontal":return n;default:return t||n}}function isMainOrientationKey(e,t){return doSwitch(t,e===b||e===E,e===h||e===v)}function isMainOrientationToEndKey(e,t,n){return doSwitch(t,e===E,n?e===h:e===v)||"Enter"===e||" "===e||""===e}function isCrossOrientationOpenKey(e,t,n){return doSwitch(t,n?e===h:e===v,e===E)}function isCrossOrientationCloseKey(e,t,n,r){return"both"===t||"horizontal"===t&&r&&r>1?e===te:doSwitch(t,n?e===v:e===h,e===b)}function useListNavigation(e,t){const{open:n,onOpenChange:r,elements:i,floatingId:c}=e,{listRef:l,activeIndex:u,onNavigate:d=()=>{},enabled:f=!0,selectedIndex:p=null,allowEscape:m=!1,loop:g=!1,nested:y=!1,rtl:b=!1,virtual:k=!1,focusItemOnOpen:w="auto",focusItemOnHover:T=!0,openOnArrowKeyDown:R=!0,disabledIndices:x,orientation:S="vertical",parentOrientation:C,cols:P=1,scrollItemIntoView:I=!0,virtualItemRef:_,itemSizes:O,dense:M=!1}=t;m&&(g||warn("`useListNavigation` looping must be enabled to allow escaping."),k||warn("`useListNavigation` must be virtual to allow escaping.")),"vertical"===S&&P>1&&warn("In grid list navigation mode (`cols` > 1), the `orientation` should",'be either "horizontal" or "both".');const A=(0,s.getFloatingFocusElement)(i.floating),L=(0,s.useLatestRef)(A),D=useFloatingParentNodeId(),N=useFloatingTree();(0,s.useModernLayoutEffect)(()=>{e.dataRef.current.orientation=S},[e,S]);const F=(0,s.useEffectEvent)(()=>{d(-1===V.current?null:V.current)}),j=(0,s.isTypeableCombobox)(i.domReference),$=o.useRef(w),V=o.useRef(null!=p?p:-1),W=o.useRef(null),B=o.useRef(!0),U=o.useRef(F),z=o.useRef(!!i.floating),H=o.useRef(n),G=o.useRef(!1),q=o.useRef(!1),K=(0,s.useLatestRef)(x),Y=(0,s.useLatestRef)(n),X=(0,s.useLatestRef)(I),J=(0,s.useLatestRef)(p),[Q,Z]=o.useState(),[ee,te]=o.useState(),ne=(0,s.useEffectEvent)(()=>{function runFocus(e){var t;k?(null!=(t=e.id)&&t.endsWith("-fui-option")&&(e.id=c+"-"+Math.random().toString(16).slice(2,10)),Z(e.id),null==N||N.events.emit("virtualfocus",e),_&&(_.current=e)):enqueueFocus(e,{sync:G.current,preventScroll:!0})}const e=l.current[V.current],t=q.current;e&&runFocus(e);(G.current?e=>e():requestAnimationFrame)(()=>{const n=l.current[V.current]||e;if(!n)return;e||runFocus(n);const r=X.current;r&&oe&&(t||!B.current)&&(null==n.scrollIntoView||n.scrollIntoView("boolean"==typeof r?{block:"nearest",inline:"nearest"}:r))})});(0,s.useModernLayoutEffect)(()=>{f&&(n&&i.floating?$.current&&null!=p&&(q.current=!0,V.current=p,F()):z.current&&(V.current=-1,U.current()))},[f,n,i.floating,p,F]),(0,s.useModernLayoutEffect)(()=>{if(f&&n&&i.floating)if(null==u){if(G.current=!1,null!=J.current)return;if(z.current&&(V.current=-1,ne()),(!H.current||!z.current)&&$.current&&(null!=W.current||!0===$.current&&null==W.current)){let e=0;const waitForListPopulated=()=>{if(null==l.current[0]){if(e<2){(e?requestAnimationFrame:queueMicrotask)(waitForListPopulated)}e++}else V.current=null==W.current||isMainOrientationToEndKey(W.current,S,b)||y?(0,s.getMinListIndex)(l,K.current):(0,s.getMaxListIndex)(l,K.current),W.current=null,F()};waitForListPopulated()}}else(0,s.isIndexOutOfListBounds)(l,u)||(V.current=u,ne(),q.current=!1)},[f,n,i.floating,u,J,y,l,S,b,F,ne,K]),(0,s.useModernLayoutEffect)(()=>{var e;if(!f||i.floating||!N||k||!z.current)return;const t=N.nodesRef.current,n=null==(e=t.find(e=>e.id===D))||null==(e=e.context)?void 0:e.elements.floating,r=(0,s.activeElement)((0,s.getDocument)(i.floating)),o=t.some(e=>e.context&&(0,s.contains)(e.context.elements.floating,r));n&&!o&&B.current&&n.focus({preventScroll:!0})},[f,i.floating,N,D,k]),(0,s.useModernLayoutEffect)(()=>{if(f&&N&&k&&!D)return N.events.on("virtualfocus",handleVirtualFocus),()=>{N.events.off("virtualfocus",handleVirtualFocus)};function handleVirtualFocus(e){te(e.id),_&&(_.current=e)}},[f,N,k,D,_]),(0,s.useModernLayoutEffect)(()=>{U.current=F,H.current=n,z.current=!!i.floating}),(0,s.useModernLayoutEffect)(()=>{n||(W.current=null,$.current=w)},[n,w]);const re=null!=u,oe=o.useMemo(()=>{function syncCurrentTarget(e){if(!Y.current)return;const t=l.current.indexOf(e);-1!==t&&V.current!==t&&(V.current=t,F())}return{onFocus(e){let{currentTarget:t}=e;G.current=!0,syncCurrentTarget(t)},onClick:e=>{let{currentTarget:t}=e;return t.focus({preventScroll:!0})},onMouseMove(e){let{currentTarget:t}=e;G.current=!0,q.current=!1,T&&syncCurrentTarget(t)},onPointerLeave(e){let{pointerType:t}=e;var n;B.current&&"touch"!==t&&(G.current=!0,T&&(V.current=-1,F(),k||null==(n=L.current)||n.focus({preventScroll:!0})))}}},[Y,L,T,l,F,k]),se=o.useCallback(()=>{var e;return null!=C?C:null==N||null==(e=N.nodesRef.current.find(e=>e.id===D))||null==(e=e.context)||null==(e=e.dataRef)?void 0:e.current.orientation},[D,N,C]),ie=(0,s.useEffectEvent)(e=>{if(B.current=!1,G.current=!0,229===e.which)return;if(!Y.current&&e.currentTarget===L.current)return;if(y&&isCrossOrientationCloseKey(e.key,S,b,P))return isMainOrientationKey(e.key,se())||(0,s.stopEvent)(e),r(!1,e.nativeEvent,"list-navigation"),void((0,a.isHTMLElement)(i.domReference)&&(k?null==N||N.events.emit("virtualfocus",i.domReference):i.domReference.focus()));const t=V.current,o=(0,s.getMinListIndex)(l,x),c=(0,s.getMaxListIndex)(l,x);if(j||("Home"===e.key&&((0,s.stopEvent)(e),V.current=o,F()),"End"===e.key&&((0,s.stopEvent)(e),V.current=c,F())),P>1){const t=O||Array.from({length:l.current.length},()=>({width:1,height:1})),n=(0,s.createGridCellMap)(t,P,M),r=n.findIndex(e=>null!=e&&!(0,s.isListIndexDisabled)(l,e,x)),i=n.reduce((e,t,n)=>null==t||(0,s.isListIndexDisabled)(l,t,x)?e:n,-1),a=n[(0,s.getGridNavigatedIndex)({current:n.map(e=>null!=e?l.current[e]:null)},{event:e,orientation:S,loop:g,rtl:b,cols:P,disabledIndices:(0,s.getGridCellIndices)([...("function"!=typeof x?x:null)||l.current.map((e,t)=>(0,s.isListIndexDisabled)(l,t,x)?t:void 0),void 0],n),minIndex:r,maxIndex:i,prevIndex:(0,s.getGridCellIndexOfCorner)(V.current>c?o:V.current,t,n,P,e.key===E?"bl":e.key===(b?h:v)?"tr":"tl"),stopEvent:!0})];if(null!=a&&(V.current=a,F()),"both"===S)return}if(isMainOrientationKey(e.key,S)){if((0,s.stopEvent)(e),n&&!k&&(0,s.activeElement)(e.currentTarget.ownerDocument)===e.currentTarget)return V.current=isMainOrientationToEndKey(e.key,S,b)?o:c,void F();isMainOrientationToEndKey(e.key,S,b)?V.current=g?t>=c?m&&t!==l.current.length?-1:o:(0,s.findNonDisabledListIndex)(l,{startingIndex:t,disabledIndices:x}):Math.min(c,(0,s.findNonDisabledListIndex)(l,{startingIndex:t,disabledIndices:x})):V.current=g?t<=o?m&&-1!==t?l.current.length:c:(0,s.findNonDisabledListIndex)(l,{startingIndex:t,decrement:!0,disabledIndices:x}):Math.max(o,(0,s.findNonDisabledListIndex)(l,{startingIndex:t,decrement:!0,disabledIndices:x})),(0,s.isIndexOutOfListBounds)(l,V.current)&&(V.current=-1),F()}}),ae=o.useMemo(()=>k&&n&&re&&{"aria-activedescendant":ee||Q},[k,n,re,ee,Q]),ce=o.useMemo(()=>({"aria-orientation":"both"===S?void 0:S,...j?{}:ae,onKeyDown:ie,onPointerMove(){B.current=!0}}),[ae,ie,S,j]),le=o.useMemo(()=>{function checkVirtualMouse(e){"auto"===w&&(0,s.isVirtualClick)(e.nativeEvent)&&($.current=!0)}function checkVirtualPointer(e){$.current=w,"auto"===w&&(0,s.isVirtualPointerEvent)(e.nativeEvent)&&($.current=!0)}return{...ae,onKeyDown(e){B.current=!1;const t=e.key.startsWith("Arrow"),o=["Home","End"].includes(e.key),i=t||o,a=isCrossOrientationOpenKey(e.key,S,b),c=isCrossOrientationCloseKey(e.key,S,b,P),u=isCrossOrientationOpenKey(e.key,se(),b),d=isMainOrientationKey(e.key,S),f=(y?u:d)||"Enter"===e.key||""===e.key.trim();if(k&&n){const t=null==N?void 0:N.nodesRef.current.find(e=>null==e.parentId),n=N&&t?(0,s.getDeepestNode)(N.nodesRef.current,t.id):null;if(i&&n&&_){const t=new KeyboardEvent("keydown",{key:e.key,bubbles:!0});if(a||c){var m,g;const r=(null==(m=n.context)?void 0:m.elements.domReference)===e.currentTarget,o=c&&!r?null==(g=n.context)?void 0:g.elements.domReference:a?l.current.find(e=>(null==e?void 0:e.id)===Q):null;o&&((0,s.stopEvent)(e),o.dispatchEvent(t),te(void 0))}var h;if((d||o)&&n.context)if(n.context.open&&n.parentId&&e.currentTarget!==n.context.elements.domReference)return(0,s.stopEvent)(e),void(null==(h=n.context.elements.domReference)||h.dispatchEvent(t))}return ie(e)}if(n||R||!t){if(f){const t=isMainOrientationKey(e.key,se());W.current=y&&t?null:e.key}y?u&&((0,s.stopEvent)(e),n?(V.current=(0,s.getMinListIndex)(l,K.current),F()):r(!0,e.nativeEvent,"list-navigation")):d&&(null!=p&&(V.current=p),(0,s.stopEvent)(e),!n&&R?r(!0,e.nativeEvent,"list-navigation"):ie(e),n&&F())}},onFocus(){n&&!k&&(V.current=-1,F())},onPointerDown:checkVirtualPointer,onPointerEnter:checkVirtualPointer,onMouseDown:checkVirtualMouse,onClick:checkVirtualMouse}},[Q,ae,P,ie,K,w,l,y,F,r,n,R,S,se,b,p,N,k,_]);return o.useMemo(()=>f?{reference:le,floating:ce,item:oe}:{},[f,le,ce,oe])}const ne=new Map([["select","listbox"],["combobox","listbox"],["label",!1]]);function useRole(e,t){var n,r;void 0===t&&(t={});const{open:i,elements:a,floatingId:c}=e,{enabled:l=!0,role:u="dialog"}=t,d=_(),f=(null==(n=a.domReference)?void 0:n.id)||d,p=o.useMemo(()=>{var e;return(null==(e=(0,s.getFloatingFocusElement)(a.floating))?void 0:e.id)||c},[a.floating,c]),m=null!=(r=ne.get(u))?r:u,g=null!=useFloatingParentNodeId(),y=o.useMemo(()=>"tooltip"===m||"label"===u?{["aria-"+("label"===u?"labelledby":"describedby")]:i?p:void 0}:{"aria-expanded":i?"true":"false","aria-haspopup":"alertdialog"===m?"dialog":m,"aria-controls":i?p:void 0,..."listbox"===m&&{role:"combobox"},..."menu"===m&&{id:f},..."menu"===m&&g&&{role:"menuitem"},..."select"===u&&{"aria-autocomplete":"none"},..."combobox"===u&&{"aria-autocomplete":"list"}},[m,p,g,i,f,u]),h=o.useMemo(()=>{const e={id:p,...m&&{role:m}};return"tooltip"===m||"label"===u?e:{...e,..."menu"===m&&{"aria-labelledby":f}}},[m,p,f,u]),v=o.useCallback(e=>{let{active:t,selected:n}=e;const r={role:"option",...t&&{id:p+"-fui-option"}};switch(u){case"select":case"combobox":return{...r,"aria-selected":n}}return{}},[p,u]);return o.useMemo(()=>l?{reference:y,floating:h,item:v}:{},[l,y,h,v])}const camelCaseToKebabCase=e=>e.replace(/[A-Z]+(?![a-z])|[A-Z]/g,(e,t)=>(t?"-":"")+e.toLowerCase());function execWithArgsOrReturn(e,t){return"function"==typeof e?e(t):e}function useTransitionStatus(e,t){void 0===t&&(t={});const{open:n,elements:{floating:r}}=e,{duration:i=250}=t,a=("number"==typeof i?i:i.close)||0,[c,u]=o.useState("unmounted"),d=function useDelayUnmount(e,t){const[n,r]=o.useState(e);return e&&!n&&r(!0),o.useEffect(()=>{if(!e&&n){const e=setTimeout(()=>r(!1),t);return()=>clearTimeout(e)}},[e,n,t]),n}(n,a);return d||"close"!==c||u("unmounted"),(0,s.useModernLayoutEffect)(()=>{if(r){if(n){u("initial");const e=requestAnimationFrame(()=>{l.flushSync(()=>{u("open")})});return()=>{cancelAnimationFrame(e)}}u("close")}},[n,r]),{isMounted:d,status:c}}function useTransitionStyles(e,t){void 0===t&&(t={});const{initial:n={opacity:0},open:r,close:i,common:a,duration:c=250}=t,l=e.placement,u=l.split("-")[0],d=o.useMemo(()=>({side:u,placement:l}),[u,l]),f="number"==typeof c,p=(f?c:c.open)||0,m=(f?c:c.close)||0,[g,y]=o.useState(()=>({...execWithArgsOrReturn(a,d),...execWithArgsOrReturn(n,d)})),{isMounted:h,status:v}=useTransitionStatus(e,{duration:c}),b=(0,s.useLatestRef)(n),E=(0,s.useLatestRef)(r),k=(0,s.useLatestRef)(i),w=(0,s.useLatestRef)(a);return(0,s.useModernLayoutEffect)(()=>{const e=execWithArgsOrReturn(b.current,d),t=execWithArgsOrReturn(k.current,d),n=execWithArgsOrReturn(w.current,d),r=execWithArgsOrReturn(E.current,d)||Object.keys(e).reduce((e,t)=>(e[t]="",e),{});if("initial"===v&&y(t=>({transitionProperty:t.transitionProperty,...n,...e})),"open"===v&&y({transitionProperty:Object.keys(r).map(camelCaseToKebabCase).join(","),transitionDuration:p+"ms",...n,...r}),"close"===v){const r=t||e;y({transitionProperty:Object.keys(r).map(camelCaseToKebabCase).join(","),transitionDuration:m+"ms",...n,...r})}},[m,k,b,E,w,p,v,d]),{isMounted:h,styles:g}}function useTypeahead(e,t){var n;const{open:r,dataRef:i}=e,{listRef:a,activeIndex:c,onMatch:l,onTypingChange:u,enabled:d=!0,findMatch:f=null,resetMs:p=750,ignoreKeys:m=[],selectedIndex:g=null}=t,y=o.useRef(-1),h=o.useRef(""),v=o.useRef(null!=(n=null!=g?g:c)?n:-1),b=o.useRef(null),E=(0,s.useEffectEvent)(l),k=(0,s.useEffectEvent)(u),w=(0,s.useLatestRef)(f),T=(0,s.useLatestRef)(m);(0,s.useModernLayoutEffect)(()=>{r&&(clearTimeoutIfSet(y),b.current=null,h.current="")},[r]),(0,s.useModernLayoutEffect)(()=>{var e;r&&""===h.current&&(v.current=null!=(e=null!=g?g:c)?e:-1)},[r,g,c]);const R=(0,s.useEffectEvent)(e=>{e?i.current.typing||(i.current.typing=e,k(e)):i.current.typing&&(i.current.typing=e,k(e))}),x=(0,s.useEffectEvent)(e=>{function getMatchingIndex(e,t,n){const r=w.current?w.current(t,n):t.find(e=>0===(null==e?void 0:e.toLocaleLowerCase().indexOf(n.toLocaleLowerCase())));return r?e.indexOf(r):-1}const t=a.current;if(h.current.length>0&&" "!==h.current[0]&&(-1===getMatchingIndex(t,t,h.current)?R(!1):" "===e.key&&(0,s.stopEvent)(e)),null==t||T.current.includes(e.key)||1!==e.key.length||e.ctrlKey||e.metaKey||e.altKey)return;r&&" "!==e.key&&((0,s.stopEvent)(e),R(!0));t.every(e=>{var t,n;return!e||(null==(t=e[0])?void 0:t.toLocaleLowerCase())!==(null==(n=e[1])?void 0:n.toLocaleLowerCase())})&&h.current===e.key&&(h.current="",v.current=b.current),h.current+=e.key,clearTimeoutIfSet(y),y.current=window.setTimeout(()=>{h.current="",v.current=b.current,R(!1)},p);const n=v.current,o=getMatchingIndex(t,[...t.slice((n||0)+1),...t.slice(0,(n||0)+1)],h.current);-1!==o?(E(o),b.current=o):" "!==e.key&&(h.current="",R(!1))}),S=o.useMemo(()=>({onKeyDown:x}),[x]),C=o.useMemo(()=>({onKeyDown:x,onKeyUp(e){" "===e.key&&R(!1)}}),[x,R]);return o.useMemo(()=>d?{reference:S,floating:C}:{},[d,S,C])}function getArgsWithCustomFloatingHeight(e,t){return{...e,rects:{...e.rects,floating:{...e.rects.floating,height:t}}}}const inner=e=>({name:"inner",options:e,async fn(t){const{listRef:n,overflowRef:r,onFallbackChange:o,offset:s=0,index:i=0,minItemsVisible:a=4,referenceOverflowThreshold:c=0,scrollRef:p,...m}=(0,f.evaluate)(e,t),{rects:g,elements:{floating:y}}=t,h=n.current[i],v=(null==p?void 0:p.current)||y,b=y.clientTop||v.clientTop,E=0!==y.clientTop,k=0!==v.clientTop,w=y===v;if(t.placement.startsWith("bottom")||warn('`placement` side must be "bottom" when using the `inner`',"middleware."),!h)return{};const T={...t,...await(0,u.offset)(-h.offsetTop-y.clientTop-g.reference.height/2-h.offsetHeight/2-s).fn(t)},R=await(0,d.detectOverflow)(getArgsWithCustomFloatingHeight(T,v.scrollHeight+b+y.clientTop),m),x=await(0,d.detectOverflow)(T,{...m,elementContext:"reference"}),S=(0,f.max)(0,R.top),C=T.y+S,P=(v.scrollHeight>v.clientHeight?e=>e:f.round)((0,f.max)(0,v.scrollHeight+(E&&w||k?2*b:0)-S-(0,f.max)(0,R.bottom)));if(v.style.maxHeight=P+"px",v.scrollTop=S,o){const e=v.offsetHeight<h.offsetHeight*(0,f.min)(a,n.current.length)-1||x.top>=-c||x.bottom>=-c;l.flushSync(()=>o(e))}return r&&(r.current=await(0,d.detectOverflow)(getArgsWithCustomFloatingHeight({...T,y:C},v.offsetHeight+b+y.clientTop),m)),{y:C}}});function useInnerOffset(e,t){const{open:n,elements:r}=e,{enabled:i=!0,overflowRef:a,scrollRef:c,onChange:u}=t,d=(0,s.useEffectEvent)(u),f=o.useRef(!1),p=o.useRef(null),m=o.useRef(null);o.useEffect(()=>{if(!i)return;function onWheel(t){if(t.ctrlKey||!e||null==a.current)return;const n=t.deltaY,r=a.current.top>=-.5,o=a.current.bottom>=-.5,i=e.scrollHeight-e.clientHeight,c=n<0?-1:1,u=n<0?"max":"min";e.scrollHeight<=e.clientHeight||(!r&&n>0||!o&&n<0?(t.preventDefault(),l.flushSync(()=>{d(e=>e+Math[u](n,i*c))})):/firefox/i.test((0,s.getUserAgent)())&&(e.scrollTop+=n))}const e=(null==c?void 0:c.current)||r.floating;return n&&e?(e.addEventListener("wheel",onWheel),requestAnimationFrame(()=>{p.current=e.scrollTop,null!=a.current&&(m.current={...a.current})}),()=>{p.current=null,m.current=null,e.removeEventListener("wheel",onWheel)}):void 0},[i,n,r.floating,a,c,d]);const g=o.useMemo(()=>({onKeyDown(){f.current=!0},onWheel(){f.current=!1},onPointerMove(){f.current=!1},onScroll(){const e=(null==c?void 0:c.current)||r.floating;if(a.current&&e&&f.current){if(null!==p.current){const t=e.scrollTop-p.current;(a.current.bottom<-.5&&t<-1||a.current.top<-.5&&t>1)&&l.flushSync(()=>d(e=>e+t))}requestAnimationFrame(()=>{p.current=e.scrollTop})}}}),[r.floating,d,a,c]);return o.useMemo(()=>i?{floating:g}:{},[i,g])}function getNodeChildren(e,t,n){void 0===n&&(n=!0);return e.filter(e=>{var r;return e.parentId===t&&(!n||(null==(r=e.context)?void 0:r.open))}).flatMap(t=>[t,...getNodeChildren(e,t.id,n)])}function isPointInPolygon(e,t){const[n,r]=e;let o=!1;const s=t.length;for(let e=0,i=s-1;e<s;i=e++){const[s,a]=t[e]||[0,0],[c,l]=t[i]||[0,0];a>=r!=l>=r&&n<=(c-s)*(r-a)/(l-a)+s&&(o=!o)}return o}function safePolygon(e){void 0===e&&(e={});const{buffer:t=.5,blockPointerEvents:n=!1,requireIntent:r=!0}=e,o={current:-1};let s=!1,i=null,c=null,l="undefined"!=typeof performance?performance.now():0;const fn=e=>{let{x:n,y:u,placement:d,elements:f,onClose:p,nodeId:m,tree:g}=e;return function onMouseMove(e){function close(){clearTimeoutIfSet(o),p()}if(clearTimeoutIfSet(o),!f.domReference||!f.floating||null==d||null==n||null==u)return;const{clientX:y,clientY:h}=e,v=[y,h],b=function getTarget(e){return"composedPath"in e?e.composedPath()[0]:e.target}(e),E="mouseleave"===e.type,k=contains(f.floating,b),w=contains(f.domReference,b),T=f.domReference.getBoundingClientRect(),R=f.floating.getBoundingClientRect(),x=d.split("-")[0],S=n>R.right-R.width/2,C=u>R.bottom-R.height/2,P=function isInside(e,t){return e[0]>=t.x&&e[0]<=t.x+t.width&&e[1]>=t.y&&e[1]<=t.y+t.height}(v,T),I=R.width>T.width,_=R.height>T.height,O=(I?T:R).left,M=(I?T:R).right,A=(_?T:R).top,L=(_?T:R).bottom;if(k&&(s=!0,!E))return;if(w&&(s=!1),w&&!E)return void(s=!0);if(E&&(0,a.isElement)(e.relatedTarget)&&contains(f.floating,e.relatedTarget))return;if(g&&getNodeChildren(g.nodesRef.current,m).length)return;if("top"===x&&u>=T.bottom-1||"bottom"===x&&u<=T.top+1||"left"===x&&n>=T.right-1||"right"===x&&n<=T.left+1)return close();let D=[];switch(x){case"top":D=[[O,T.top+1],[O,R.bottom-1],[M,R.bottom-1],[M,T.top+1]];break;case"bottom":D=[[O,R.top+1],[O,T.bottom-1],[M,T.bottom-1],[M,R.top+1]];break;case"left":D=[[R.right-1,L],[R.right-1,A],[T.left+1,A],[T.left+1,L]];break;case"right":D=[[T.right-1,L],[T.right-1,A],[R.left+1,A],[R.left+1,L]]}if(!isPointInPolygon([y,h],D)){if(s&&!P)return close();if(!E&&r){const t=function getCursorSpeed(e,t){const n=performance.now(),r=n-l;if(null===i||null===c||0===r)return i=e,c=t,l=n,null;const o=e-i,s=t-c,a=Math.sqrt(o*o+s*s);return i=e,c=t,l=n,a/r}(e.clientX,e.clientY);if(null!==t&&t<.1)return close()}isPointInPolygon([y,h],function getPolygon(e){let[n,r]=e;switch(x){case"top":return[[I?n+t/2:S?n+4*t:n-4*t,r+t+1],[I?n-t/2:S?n+4*t:n-4*t,r+t+1],...[[R.left,S||I?R.bottom-t:R.top],[R.right,S?I?R.bottom-t:R.top:R.bottom-t]]];case"bottom":return[[I?n+t/2:S?n+4*t:n-4*t,r-t],[I?n-t/2:S?n+4*t:n-4*t,r-t],...[[R.left,S||I?R.top+t:R.bottom],[R.right,S?I?R.top+t:R.bottom:R.top+t]]];case"left":{const e=[n+t+1,_?r+t/2:C?r+4*t:r-4*t],o=[n+t+1,_?r-t/2:C?r+4*t:r-4*t];return[...[[C||_?R.right-t:R.left,R.top],[C?_?R.right-t:R.left:R.right-t,R.bottom]],e,o]}case"right":return[[n-t,_?r+t/2:C?r+4*t:r-4*t],[n-t,_?r-t/2:C?r+4*t:r-4*t],...[[C||_?R.left+t:R.right,R.top],[C?_?R.left+t:R.right:R.left+t,R.bottom]]]}}([n,u]))?!s&&r&&(o.current=window.setTimeout(close,40)):close()}}};return fn.__options={blockPointerEvents:n},fn}},"./packages/node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs":function(e,t,n){var r;n.r(t),n.d(t,{activeElement:function(){return activeElement},contains:function(){return contains},createGridCellMap:function(){return createGridCellMap},disableFocusInside:function(){return disableFocusInside},enableFocusInside:function(){return enableFocusInside},findNonDisabledListIndex:function(){return findNonDisabledListIndex},getDeepestNode:function(){return getDeepestNode},getDocument:function(){return getDocument},getFloatingFocusElement:function(){return getFloatingFocusElement},getGridCellIndexOfCorner:function(){return getGridCellIndexOfCorner},getGridCellIndices:function(){return getGridCellIndices},getGridNavigatedIndex:function(){return getGridNavigatedIndex},getMaxListIndex:function(){return getMaxListIndex},getMinListIndex:function(){return getMinListIndex},getNextTabbable:function(){return getNextTabbable},getNodeAncestors:function(){return getNodeAncestors},getNodeChildren:function(){return getNodeChildren},getPlatform:function(){return getPlatform},getPreviousTabbable:function(){return getPreviousTabbable},getTabbableOptions:function(){return getTabbableOptions},getTarget:function(){return getTarget},getUserAgent:function(){return getUserAgent},isAndroid:function(){return isAndroid},isDifferentGridRow:function(){return isDifferentGridRow},isEventTargetWithin:function(){return isEventTargetWithin},isIndexOutOfListBounds:function(){return isIndexOutOfListBounds},isJSDOM:function(){return isJSDOM},isListIndexDisabled:function(){return isListIndexDisabled},isMac:function(){return isMac},isMouseLikePointerType:function(){return isMouseLikePointerType},isOutsideEvent:function(){return isOutsideEvent},isReactEvent:function(){return isReactEvent},isRootElement:function(){return isRootElement},isSafari:function(){return isSafari},isTypeableCombobox:function(){return isTypeableCombobox},isTypeableElement:function(){return isTypeableElement},isVirtualClick:function(){return isVirtualClick},isVirtualPointerEvent:function(){return isVirtualPointerEvent},matchesFocusVisible:function(){return matchesFocusVisible},stopEvent:function(){return stopEvent},useEffectEvent:function(){return useEffectEvent},useLatestRef:function(){return useLatestRef},useModernLayoutEffect:function(){return m}});var o=n("./packages/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs"),s=n("react"),i=n("./packages/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs"),a=n("./packages/node_modules/tabbable/dist/index.esm.js");function getPlatform(){const e=navigator.userAgentData;return null!=e&&e.platform?e.platform:navigator.platform}function getUserAgent(){const e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(e=>{let{brand:t,version:n}=e;return t+"/"+n}).join(" "):navigator.userAgent}function isSafari(){return/apple/i.test(navigator.vendor)}function isAndroid(){const e=/android/i;return e.test(getPlatform())||e.test(getUserAgent())}function isMac(){return getPlatform().toLowerCase().startsWith("mac")&&!navigator.maxTouchPoints}function isJSDOM(){return getUserAgent().includes("jsdom/")}const c="data-floating-ui-focusable",l="input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])",u="ArrowLeft",d="ArrowRight",f="ArrowUp",p="ArrowDown";function activeElement(e){let t=e.activeElement;for(;null!=(null==(n=t)||null==(n=n.shadowRoot)?void 0:n.activeElement);){var n;t=t.shadowRoot.activeElement}return t}function contains(e,t){if(!e||!t)return!1;const n=null==t.getRootNode?void 0:t.getRootNode();if(e.contains(t))return!0;if(n&&(0,o.isShadowRoot)(n)){let n=t;for(;n;){if(e===n)return!0;n=n.parentNode||n.host}}return!1}function getTarget(e){return"composedPath"in e?e.composedPath()[0]:e.target}function isEventTargetWithin(e,t){if(null==t)return!1;if("composedPath"in e)return e.composedPath().includes(t);const n=e;return null!=n.target&&t.contains(n.target)}function isRootElement(e){return e.matches("html,body")}function getDocument(e){return(null==e?void 0:e.ownerDocument)||document}function isTypeableElement(e){return(0,o.isHTMLElement)(e)&&e.matches(l)}function isTypeableCombobox(e){return!!e&&("combobox"===e.getAttribute("role")&&isTypeableElement(e))}function matchesFocusVisible(e){if(!e||isJSDOM())return!0;try{return e.matches(":focus-visible")}catch(e){return!0}}function getFloatingFocusElement(e){return e?e.hasAttribute(c)?e:e.querySelector("["+c+"]")||e:null}function getNodeChildren(e,t,n){void 0===n&&(n=!0);return e.filter(e=>{var r;return e.parentId===t&&(!n||(null==(r=e.context)?void 0:r.open))}).flatMap(t=>[t,...getNodeChildren(e,t.id,n)])}function getDeepestNode(e,t){let n,r=-1;return function findDeepest(t,o){o>r&&(n=t,r=o),getNodeChildren(e,t).forEach(e=>{findDeepest(e.id,o+1)})}(t,0),e.find(e=>e.id===n)}function getNodeAncestors(e,t){var n;let r=[],o=null==(n=e.find(e=>e.id===t))?void 0:n.parentId;for(;o;){const t=e.find(e=>e.id===o);o=null==t?void 0:t.parentId,t&&(r=r.concat(t))}return r}function stopEvent(e){e.preventDefault(),e.stopPropagation()}function isReactEvent(e){return"nativeEvent"in e}function isVirtualClick(e){return!(0!==e.mozInputSource||!e.isTrusted)||(isAndroid()&&e.pointerType?"click"===e.type&&1===e.buttons:0===e.detail&&!e.pointerType)}function isVirtualPointerEvent(e){return!isJSDOM()&&(!isAndroid()&&0===e.width&&0===e.height||isAndroid()&&1===e.width&&1===e.height&&0===e.pressure&&0===e.detail&&"mouse"===e.pointerType||e.width<1&&e.height<1&&0===e.pressure&&0===e.detail&&"touch"===e.pointerType)}function isMouseLikePointerType(e,t){const n=["mouse","pen"];return t||n.push("",void 0),n.includes(e)}var m="undefined"!=typeof document?s.useLayoutEffect:function noop(){};function useLatestRef(e){const t=s.useRef(e);return m(()=>{t.current=e}),t}const g={...r||(r=n.t(s,2))}.useInsertionEffect||(e=>e());function useEffectEvent(e){const t=s.useRef(()=>{throw new Error("Cannot call an event handler while rendering.")});return g(()=>{t.current=e}),s.useCallback(function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return null==t.current?void 0:t.current(...n)},[])}function isDifferentGridRow(e,t,n){return Math.floor(e/t)!==n}function isIndexOutOfListBounds(e,t){return t<0||t>=e.current.length}function getMinListIndex(e,t){return findNonDisabledListIndex(e,{disabledIndices:t})}function getMaxListIndex(e,t){return findNonDisabledListIndex(e,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}function findNonDisabledListIndex(e,t){let{startingIndex:n=-1,decrement:r=!1,disabledIndices:o,amount:s=1}=void 0===t?{}:t,i=n;do{i+=r?-s:s}while(i>=0&&i<=e.current.length-1&&isListIndexDisabled(e,i,o));return i}function getGridNavigatedIndex(e,t){let{event:n,orientation:r,loop:o,rtl:s,cols:a,disabledIndices:c,minIndex:l,maxIndex:m,prevIndex:g,stopEvent:y=!1}=t,h=g;if(n.key===f){if(y&&stopEvent(n),-1===g)h=m;else if(h=findNonDisabledListIndex(e,{startingIndex:h,amount:a,decrement:!0,disabledIndices:c}),o&&(g-a<l||h<0)){const e=g%a,t=m%a,n=m-(t-e);h=t===e?m:t>e?n:n-a}isIndexOutOfListBounds(e,h)&&(h=g)}if(n.key===p&&(y&&stopEvent(n),-1===g?h=l:(h=findNonDisabledListIndex(e,{startingIndex:g,amount:a,disabledIndices:c}),o&&g+a>m&&(h=findNonDisabledListIndex(e,{startingIndex:g%a-a,amount:a,disabledIndices:c}))),isIndexOutOfListBounds(e,h)&&(h=g)),"both"===r){const t=(0,i.floor)(g/a);n.key===(s?u:d)&&(y&&stopEvent(n),g%a!==a-1?(h=findNonDisabledListIndex(e,{startingIndex:g,disabledIndices:c}),o&&isDifferentGridRow(h,a,t)&&(h=findNonDisabledListIndex(e,{startingIndex:g-g%a-1,disabledIndices:c}))):o&&(h=findNonDisabledListIndex(e,{startingIndex:g-g%a-1,disabledIndices:c})),isDifferentGridRow(h,a,t)&&(h=g)),n.key===(s?d:u)&&(y&&stopEvent(n),g%a!==0?(h=findNonDisabledListIndex(e,{startingIndex:g,decrement:!0,disabledIndices:c}),o&&isDifferentGridRow(h,a,t)&&(h=findNonDisabledListIndex(e,{startingIndex:g+(a-g%a),decrement:!0,disabledIndices:c}))):o&&(h=findNonDisabledListIndex(e,{startingIndex:g+(a-g%a),decrement:!0,disabledIndices:c})),isDifferentGridRow(h,a,t)&&(h=g));const r=(0,i.floor)(m/a)===t;isIndexOutOfListBounds(e,h)&&(h=o&&r?n.key===(s?d:u)?m:findNonDisabledListIndex(e,{startingIndex:g-g%a-1,disabledIndices:c}):g)}return h}function createGridCellMap(e,t,n){const r=[];let o=0;return e.forEach((e,s)=>{let{width:i,height:a}=e;if(i>t)throw new Error("[Floating UI]: Invalid grid - item width at index "+s+" is greater than grid columns");let c=!1;for(n&&(o=0);!c;){const e=[];for(let n=0;n<i;n++)for(let r=0;r<a;r++)e.push(o+n+r*t);o%t+i<=t&&e.every(e=>null==r[e])?(e.forEach(e=>{r[e]=s}),c=!0):o++}}),[...r]}function getGridCellIndexOfCorner(e,t,n,r,o){if(-1===e)return-1;const s=n.indexOf(e),i=t[e];switch(o){case"tl":return s;case"tr":return i?s+i.width-1:s;case"bl":return i?s+(i.height-1)*r:s;case"br":return n.lastIndexOf(e)}}function getGridCellIndices(e,t){return t.flatMap((t,n)=>e.includes(t)?[n]:[])}function isListIndexDisabled(e,t,n){if("function"==typeof n)return n(t);if(n)return n.includes(t);const r=e.current[t];return null==r||r.hasAttribute("disabled")||"true"===r.getAttribute("aria-disabled")}const getTabbableOptions=()=>({getShadowRoot:!0,displayCheck:"function"==typeof ResizeObserver&&ResizeObserver.toString().includes("[native code]")?"full":"none"});function getTabbableIn(e,t){const n=(0,a.tabbable)(e,getTabbableOptions()),r=n.length;if(0===r)return;const o=activeElement(getDocument(e)),s=n.indexOf(o);return n[-1===s?1===t?0:r-1:s+t]}function getNextTabbable(e){return getTabbableIn(getDocument(e).body,1)||e}function getPreviousTabbable(e){return getTabbableIn(getDocument(e).body,-1)||e}function isOutsideEvent(e,t){const n=t||e.currentTarget,r=e.relatedTarget;return!r||!contains(n,r)}function disableFocusInside(e){(0,a.tabbable)(e,getTabbableOptions()).forEach(e=>{e.dataset.tabindex=e.getAttribute("tabindex")||"",e.setAttribute("tabindex","-1")})}function enableFocusInside(e){e.querySelectorAll("[data-tabindex]").forEach(e=>{const t=e.dataset.tabindex;delete e.dataset.tabindex,t?e.setAttribute("tabindex",t):e.removeAttribute("tabindex")})}},"./packages/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs":function(e,t,n){function hasWindow(){return"undefined"!=typeof window}function getNodeName(e){return isNode(e)?(e.nodeName||"").toLowerCase():"#document"}function getWindow(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function getDocumentElement(e){var t;return null==(t=(isNode(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function isNode(e){return!!hasWindow()&&(e instanceof Node||e instanceof getWindow(e).Node)}function isElement(e){return!!hasWindow()&&(e instanceof Element||e instanceof getWindow(e).Element)}function isHTMLElement(e){return!!hasWindow()&&(e instanceof HTMLElement||e instanceof getWindow(e).HTMLElement)}function isShadowRoot(e){return!(!hasWindow()||"undefined"==typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof getWindow(e).ShadowRoot)}n.r(t),n.d(t,{getComputedStyle:function(){return getComputedStyle},getContainingBlock:function(){return getContainingBlock},getDocumentElement:function(){return getDocumentElement},getFrameElement:function(){return getFrameElement},getNearestOverflowAncestor:function(){return getNearestOverflowAncestor},getNodeName:function(){return getNodeName},getNodeScroll:function(){return getNodeScroll},getOverflowAncestors:function(){return getOverflowAncestors},getParentNode:function(){return getParentNode},getWindow:function(){return getWindow},isContainingBlock:function(){return isContainingBlock},isElement:function(){return isElement},isHTMLElement:function(){return isHTMLElement},isLastTraversableNode:function(){return isLastTraversableNode},isNode:function(){return isNode},isOverflowElement:function(){return isOverflowElement},isShadowRoot:function(){return isShadowRoot},isTableElement:function(){return isTableElement},isTopLayer:function(){return isTopLayer},isWebKit:function(){return isWebKit}});const r=new Set(["inline","contents"]);function isOverflowElement(e){const{overflow:t,overflowX:n,overflowY:o,display:s}=getComputedStyle(e);return/auto|scroll|overlay|hidden|clip/.test(t+o+n)&&!r.has(s)}const o=new Set(["table","td","th"]);function isTableElement(e){return o.has(getNodeName(e))}const s=[":popover-open",":modal"];function isTopLayer(e){return s.some(t=>{try{return e.matches(t)}catch(e){return!1}})}const i=["transform","translate","scale","rotate","perspective"],a=["transform","translate","scale","rotate","perspective","filter"],c=["paint","layout","strict","content"];function isContainingBlock(e){const t=isWebKit(),n=isElement(e)?getComputedStyle(e):e;return i.some(e=>!!n[e]&&"none"!==n[e])||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||a.some(e=>(n.willChange||"").includes(e))||c.some(e=>(n.contain||"").includes(e))}function getContainingBlock(e){let t=getParentNode(e);for(;isHTMLElement(t)&&!isLastTraversableNode(t);){if(isContainingBlock(t))return t;if(isTopLayer(t))return null;t=getParentNode(t)}return null}function isWebKit(){return!("undefined"==typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}const l=new Set(["html","body","#document"]);function isLastTraversableNode(e){return l.has(getNodeName(e))}function getComputedStyle(e){return getWindow(e).getComputedStyle(e)}function getNodeScroll(e){return isElement(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function getParentNode(e){if("html"===getNodeName(e))return e;const t=e.assignedSlot||e.parentNode||isShadowRoot(e)&&e.host||getDocumentElement(e);return isShadowRoot(t)?t.host:t}function getNearestOverflowAncestor(e){const t=getParentNode(e);return isLastTraversableNode(t)?e.ownerDocument?e.ownerDocument.body:e.body:isHTMLElement(t)&&isOverflowElement(t)?t:getNearestOverflowAncestor(t)}function getOverflowAncestors(e,t,n){var r;void 0===t&&(t=[]),void 0===n&&(n=!0);const o=getNearestOverflowAncestor(e),s=o===(null==(r=e.ownerDocument)?void 0:r.body),i=getWindow(o);if(s){const e=getFrameElement(i);return t.concat(i,i.visualViewport||[],isOverflowElement(o)?o:[],e&&n?getOverflowAncestors(e):[])}return t.concat(o,getOverflowAncestors(o,[],n))}function getFrameElement(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}},"./packages/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs":function(e,t,n){n.r(t),n.d(t,{alignments:function(){return o},clamp:function(){return clamp},createCoords:function(){return createCoords},evaluate:function(){return evaluate},expandPaddingObject:function(){return expandPaddingObject},floor:function(){return l},getAlignment:function(){return getAlignment},getAlignmentAxis:function(){return getAlignmentAxis},getAlignmentSides:function(){return getAlignmentSides},getAxisLength:function(){return getAxisLength},getExpandedPlacements:function(){return getExpandedPlacements},getOppositeAlignmentPlacement:function(){return getOppositeAlignmentPlacement},getOppositeAxis:function(){return getOppositeAxis},getOppositeAxisPlacements:function(){return getOppositeAxisPlacements},getOppositePlacement:function(){return getOppositePlacement},getPaddingObject:function(){return getPaddingObject},getSide:function(){return getSide},getSideAxis:function(){return getSideAxis},max:function(){return a},min:function(){return i},placements:function(){return s},rectToClientRect:function(){return rectToClientRect},round:function(){return c},sides:function(){return r}});const r=["top","right","bottom","left"],o=["start","end"],s=r.reduce((e,t)=>e.concat(t,t+"-"+o[0],t+"-"+o[1]),[]),i=Math.min,a=Math.max,c=Math.round,l=Math.floor,createCoords=e=>({x:e,y:e}),u={left:"right",right:"left",bottom:"top",top:"bottom"},d={start:"end",end:"start"};function clamp(e,t,n){return a(e,i(t,n))}function evaluate(e,t){return"function"==typeof e?e(t):e}function getSide(e){return e.split("-")[0]}function getAlignment(e){return e.split("-")[1]}function getOppositeAxis(e){return"x"===e?"y":"x"}function getAxisLength(e){return"y"===e?"height":"width"}const f=new Set(["top","bottom"]);function getSideAxis(e){return f.has(getSide(e))?"y":"x"}function getAlignmentAxis(e){return getOppositeAxis(getSideAxis(e))}function getAlignmentSides(e,t,n){void 0===n&&(n=!1);const r=getAlignment(e),o=getAlignmentAxis(e),s=getAxisLength(o);let i="x"===o?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[s]>t.floating[s]&&(i=getOppositePlacement(i)),[i,getOppositePlacement(i)]}function getExpandedPlacements(e){const t=getOppositePlacement(e);return[getOppositeAlignmentPlacement(e),t,getOppositeAlignmentPlacement(t)]}function getOppositeAlignmentPlacement(e){return e.replace(/start|end/g,e=>d[e])}const p=["left","right"],m=["right","left"],g=["top","bottom"],y=["bottom","top"];function getOppositeAxisPlacements(e,t,n,r){const o=getAlignment(e);let s=function getSideList(e,t,n){switch(e){case"top":case"bottom":return n?t?m:p:t?p:m;case"left":case"right":return t?g:y;default:return[]}}(getSide(e),"start"===n,r);return o&&(s=s.map(e=>e+"-"+o),t&&(s=s.concat(s.map(getOppositeAlignmentPlacement)))),s}function getOppositePlacement(e){return e.replace(/left|right|bottom|top/g,e=>u[e])}function expandPaddingObject(e){return{top:0,right:0,bottom:0,left:0,...e}}function getPaddingObject(e){return"number"!=typeof e?expandPaddingObject(e):{top:e,right:e,bottom:e,left:e}}function rectToClientRect(e){const{x:t,y:n,width:r,height:o}=e;return{width:r,height:o,top:n,left:t,right:t+r,bottom:n+o,x:t,y:n}}},"./packages/node_modules/react-dom/client.js":function(e,t,n){var r=n("react-dom"),o=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;t.createRoot=function(e,t){o.usingClientEntryPoint=!0;try{return r.createRoot(e,t)}finally{o.usingClientEntryPoint=!1}},t.hydrateRoot=function(e,t,n){o.usingClientEntryPoint=!0;try{return r.hydrateRoot(e,t,n)}finally{o.usingClientEntryPoint=!1}}},"./packages/node_modules/react/cjs/react-jsx-runtime.development.js":function(e,t,n){(function(){var e=n("react"),r=Symbol.for("react.element"),o=Symbol.for("react.portal"),s=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),c=Symbol.for("react.provider"),l=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),f=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),g=Symbol.for("react.offscreen"),y=Symbol.iterator;var h=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function error(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];!function printWarning(e,t,n){var r=h.ReactDebugCurrentFrame,o=r.getStackAddendum();""!==o&&(t+="%s",n=n.concat([o]));var s=n.map(function(e){return String(e)});s.unshift("Warning: "+t),Function.prototype.apply.call(console[e],console,s)}("error",e,n)}var v;function getContextName(e){return e.displayName||"Context"}function getComponentNameFromType(e){if(null==e)return null;if("number"==typeof e.tag&&error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),"function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case s:return"Fragment";case o:return"Portal";case a:return"Profiler";case i:return"StrictMode";case d:return"Suspense";case f:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case l:return getContextName(e)+".Consumer";case c:return getContextName(e._context)+".Provider";case u:return function getWrappedName(e,t,n){var r=e.displayName;if(r)return r;var o=t.displayName||t.name||"";return""!==o?n+"("+o+")":n}(e,e.render,"ForwardRef");case p:var t=e.displayName||null;return null!==t?t:getComponentNameFromType(e.type)||"Memo";case m:var n=e,r=n._payload,g=n._init;try{return getComponentNameFromType(g(r))}catch(e){return null}}return null}v=Symbol.for("react.module.reference");var b,E,k,w,T,R,x,S=Object.assign,C=0;function disabledLog(){}disabledLog.__reactDisabledLog=!0;var P,I=h.ReactCurrentDispatcher;function describeBuiltInComponentFrame(e,t,n){if(void 0===P)try{throw Error()}catch(e){var r=e.stack.trim().match(/\n( *(at )?)/);P=r&&r[1]||""}return"\n"+P+e}var _,O=!1,M="function"==typeof WeakMap?WeakMap:Map;function describeNativeComponentFrame(e,t){if(!e||O)return"";var n,r=_.get(e);if(void 0!==r)return r;O=!0;var o,s=Error.prepareStackTrace;Error.prepareStackTrace=void 0,o=I.current,I.current=null,function disableLogs(){if(0===C){b=console.log,E=console.info,k=console.warn,w=console.error,T=console.group,R=console.groupCollapsed,x=console.groupEnd;var e={configurable:!0,enumerable:!0,value:disabledLog,writable:!0};Object.defineProperties(console,{info:e,log:e,warn:e,error:e,group:e,groupCollapsed:e,groupEnd:e})}C++}();try{if(t){var Fake=function(){throw Error()};if(Object.defineProperty(Fake.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(Fake,[])}catch(e){n=e}Reflect.construct(e,[],Fake)}else{try{Fake.call()}catch(e){n=e}e.call(Fake.prototype)}}else{try{throw Error()}catch(e){n=e}e()}}catch(t){if(t&&n&&"string"==typeof t.stack){for(var i=t.stack.split("\n"),a=n.stack.split("\n"),c=i.length-1,l=a.length-1;c>=1&&l>=0&&i[c]!==a[l];)l--;for(;c>=1&&l>=0;c--,l--)if(i[c]!==a[l]){if(1!==c||1!==l)do{if(c--,--l<0||i[c]!==a[l]){var u="\n"+i[c].replace(" at new "," at ");return e.displayName&&u.includes("<anonymous>")&&(u=u.replace("<anonymous>",e.displayName)),"function"==typeof e&&_.set(e,u),u}}while(c>=1&&l>=0);break}}}finally{O=!1,I.current=o,function reenableLogs(){if(0===--C){var e={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:S({},e,{value:b}),info:S({},e,{value:E}),warn:S({},e,{value:k}),error:S({},e,{value:w}),group:S({},e,{value:T}),groupCollapsed:S({},e,{value:R}),groupEnd:S({},e,{value:x})})}C<0&&error("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}(),Error.prepareStackTrace=s}var d=e?e.displayName||e.name:"",f=d?describeBuiltInComponentFrame(d):"";return"function"==typeof e&&_.set(e,f),f}function describeUnknownElementTypeFrameInDEV(e,t,n){if(null==e)return"";if("function"==typeof e)return describeNativeComponentFrame(e,function shouldConstruct(e){var t=e.prototype;return!(!t||!t.isReactComponent)}(e));if("string"==typeof e)return describeBuiltInComponentFrame(e);switch(e){case d:return describeBuiltInComponentFrame("Suspense");case f:return describeBuiltInComponentFrame("SuspenseList")}if("object"==typeof e)switch(e.$$typeof){case u:return function describeFunctionComponentFrame(e,t,n){return describeNativeComponentFrame(e,!1)}(e.render);case p:return describeUnknownElementTypeFrameInDEV(e.type,t,n);case m:var r=e,o=r._payload,s=r._init;try{return describeUnknownElementTypeFrameInDEV(s(o),t,n)}catch(e){}}return""}_=new M;var A=Object.prototype.hasOwnProperty,L={},D=h.ReactDebugCurrentFrame;function setCurrentlyValidatingElement(e){if(e){var t=e._owner,n=describeUnknownElementTypeFrameInDEV(e.type,e._source,t?t.type:null);D.setExtraStackFrame(n)}else D.setExtraStackFrame(null)}var N=Array.isArray;function isArray(e){return N(e)}function testStringCoercion(e){return""+e}function checkKeyStringCoercion(e){if(function willCoercionThrow(e){try{return testStringCoercion(e),!1}catch(e){return!0}}(e))return error("The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.",function typeName(e){return"function"==typeof Symbol&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object"}(e)),testStringCoercion(e)}var F,j,$,V=h.ReactCurrentOwner,W={key:!0,ref:!0,__self:!0,__source:!0};$={};function jsxDEV(e,t,n,o,s){var i,a={},c=null,l=null;for(i in void 0!==n&&(checkKeyStringCoercion(n),c=""+n),function hasValidKey(e){if(A.call(e,"key")){var t=Object.getOwnPropertyDescriptor(e,"key").get;if(t&&t.isReactWarning)return!1}return void 0!==e.key}(t)&&(checkKeyStringCoercion(t.key),c=""+t.key),function hasValidRef(e){if(A.call(e,"ref")){var t=Object.getOwnPropertyDescriptor(e,"ref").get;if(t&&t.isReactWarning)return!1}return void 0!==e.ref}(t)&&(l=t.ref,function warnIfStringRefCannotBeAutoConverted(e,t){if("string"==typeof e.ref&&V.current&&t&&V.current.stateNode!==t){var n=getComponentNameFromType(V.current.type);$[n]||(error('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref',getComponentNameFromType(V.current.type),e.ref),$[n]=!0)}}(t,s)),t)A.call(t,i)&&!W.hasOwnProperty(i)&&(a[i]=t[i]);if(e&&e.defaultProps){var u=e.defaultProps;for(i in u)void 0===a[i]&&(a[i]=u[i])}if(c||l){var d="function"==typeof e?e.displayName||e.name||"Unknown":e;c&&function defineKeyPropWarningGetter(e,t){var warnAboutAccessingKey=function(){F||(F=!0,error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",t))};warnAboutAccessingKey.isReactWarning=!0,Object.defineProperty(e,"key",{get:warnAboutAccessingKey,configurable:!0})}(a,d),l&&function defineRefPropWarningGetter(e,t){var warnAboutAccessingRef=function(){j||(j=!0,error("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)",t))};warnAboutAccessingRef.isReactWarning=!0,Object.defineProperty(e,"ref",{get:warnAboutAccessingRef,configurable:!0})}(a,d)}return function(e,t,n,o,s,i,a){var c={$$typeof:r,type:e,key:t,ref:n,props:a,_owner:i,_store:{}};return Object.defineProperty(c._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(c,"_self",{configurable:!1,enumerable:!1,writable:!1,value:o}),Object.defineProperty(c,"_source",{configurable:!1,enumerable:!1,writable:!1,value:s}),Object.freeze&&(Object.freeze(c.props),Object.freeze(c)),c}(e,c,l,s,o,V.current,a)}var B,U=h.ReactCurrentOwner,z=h.ReactDebugCurrentFrame;function setCurrentlyValidatingElement$1(e){if(e){var t=e._owner,n=describeUnknownElementTypeFrameInDEV(e.type,e._source,t?t.type:null);z.setExtraStackFrame(n)}else z.setExtraStackFrame(null)}function isValidElement(e){return"object"==typeof e&&null!==e&&e.$$typeof===r}function getDeclarationErrorAddendum(){if(U.current){var e=getComponentNameFromType(U.current.type);if(e)return"\n\nCheck the render method of `"+e+"`."}return""}B=!1;var H={};function validateExplicitKey(e,t){if(e._store&&!e._store.validated&&null==e.key){e._store.validated=!0;var n=function getCurrentComponentErrorInfo(e){var t=getDeclarationErrorAddendum();if(!t){var n="string"==typeof e?e:e.displayName||e.name;n&&(t="\n\nCheck the top-level render call using <"+n+">.")}return t}(t);if(!H[n]){H[n]=!0;var r="";e&&e._owner&&e._owner!==U.current&&(r=" It was passed a child from "+getComponentNameFromType(e._owner.type)+"."),setCurrentlyValidatingElement$1(e),error('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',n,r),setCurrentlyValidatingElement$1(null)}}}function validateChildKeys(e,t){if("object"==typeof e)if(isArray(e))for(var n=0;n<e.length;n++){var r=e[n];isValidElement(r)&&validateExplicitKey(r,t)}else if(isValidElement(e))e._store&&(e._store.validated=!0);else if(e){var o=function getIteratorFn(e){if(null===e||"object"!=typeof e)return null;var t=y&&e[y]||e["@@iterator"];return"function"==typeof t?t:null}(e);if("function"==typeof o&&o!==e.entries)for(var s,i=o.call(e);!(s=i.next()).done;)isValidElement(s.value)&&validateExplicitKey(s.value,t)}}function validatePropTypes(e){var t,n=e.type;if(null!=n&&"string"!=typeof n){if("function"==typeof n)t=n.propTypes;else{if("object"!=typeof n||n.$$typeof!==u&&n.$$typeof!==p)return;t=n.propTypes}if(t){var r=getComponentNameFromType(n);!function checkPropTypes(e,t,n,r,o){var s=Function.call.bind(A);for(var i in e)if(s(e,i)){var a=void 0;try{if("function"!=typeof e[i]){var c=Error((r||"React class")+": "+n+" type `"+i+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof e[i]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw c.name="Invariant Violation",c}a=e[i](t,i,r,n,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(e){a=e}!a||a instanceof Error||(setCurrentlyValidatingElement(o),error("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",r||"React class",n,i,typeof a),setCurrentlyValidatingElement(null)),a instanceof Error&&!(a.message in L)&&(L[a.message]=!0,setCurrentlyValidatingElement(o),error("Failed %s type: %s",n,a.message),setCurrentlyValidatingElement(null))}}(t,e.props,"prop",r,e)}else if(void 0!==n.PropTypes&&!B){B=!0,error("Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?",getComponentNameFromType(n)||"Unknown")}"function"!=typeof n.getDefaultProps||n.getDefaultProps.isReactClassApproved||error("getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.")}}var G={};function jsxWithValidation(e,t,n,o,y,h){var b=function isValidElementType(e){return"string"==typeof e||"function"==typeof e||e===s||e===a||e===i||e===d||e===f||e===g||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===p||e.$$typeof===c||e.$$typeof===l||e.$$typeof===u||e.$$typeof===v||void 0!==e.getModuleId)}(e);if(!b){var E="";(void 0===e||"object"==typeof e&&null!==e&&0===Object.keys(e).length)&&(E+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var k,w=function getSourceInfoErrorAddendum(e){return void 0!==e?"\n\nCheck your code at "+e.fileName.replace(/^.*[\\\/]/,"")+":"+e.lineNumber+".":""}(y);E+=w||getDeclarationErrorAddendum(),null===e?k="null":isArray(e)?k="array":void 0!==e&&e.$$typeof===r?(k="<"+(getComponentNameFromType(e.type)||"Unknown")+" />",E=" Did you accidentally export a JSX literal instead of a component?"):k=typeof e,error("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",k,E)}var T=jsxDEV(e,t,n,y,h);if(null==T)return T;if(b){var R=t.children;if(void 0!==R)if(o)if(isArray(R)){for(var x=0;x<R.length;x++)validateChildKeys(R[x],e);Object.freeze&&Object.freeze(R)}else error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else validateChildKeys(R,e)}if(A.call(t,"key")){var S=getComponentNameFromType(e),C=Object.keys(t).filter(function(e){return"key"!==e}),P=C.length>0?"{key: someKey, "+C.join(": ..., ")+": ...}":"{key: someKey}";if(!G[S+P])error('A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />',P,S,C.length>0?"{"+C.join(": ..., ")+": ...}":"{}",S),G[S+P]=!0}return e===s?function validateFragmentProps(e){for(var t=Object.keys(e.props),n=0;n<t.length;n++){var r=t[n];if("children"!==r&&"key"!==r){setCurrentlyValidatingElement$1(e),error("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.",r),setCurrentlyValidatingElement$1(null);break}}null!==e.ref&&(setCurrentlyValidatingElement$1(e),error("Invalid attribute `ref` supplied to `React.Fragment`."),setCurrentlyValidatingElement$1(null))}(T):validatePropTypes(T),T}var q=function jsxWithValidationDynamic(e,t,n){return jsxWithValidation(e,t,n,!1)},K=function jsxWithValidationStatic(e,t,n){return jsxWithValidation(e,t,n,!0)};t.Fragment=s,t.jsx=q,t.jsxs=K})()},"./packages/node_modules/react/jsx-runtime.js":function(e,t,n){e.exports=n("./packages/node_modules/react/cjs/react-jsx-runtime.development.js")},"./packages/node_modules/tabbable/dist/index.esm.js":function(e,t,n){n.r(t),n.d(t,{focusable:function(){return T},getTabIndex:function(){return f},isFocusable:function(){return S},isTabbable:function(){return R},tabbable:function(){return w}});var r=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],o=r.join(","),s="undefined"==typeof Element,i=s?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,a=!s&&Element.prototype.getRootNode?function(e){var t;return null==e||null===(t=e.getRootNode)||void 0===t?void 0:t.call(e)}:function(e){return null==e?void 0:e.ownerDocument},c=function isInert(e,t){var n;void 0===t&&(t=!0);var r=null==e||null===(n=e.getAttribute)||void 0===n?void 0:n.call(e,"inert");return""===r||"true"===r||t&&e&&c(e.parentNode)},l=function getCandidates(e,t,n){if(c(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(o));return t&&i.call(e,o)&&r.unshift(e),r=r.filter(n)},u=function getCandidatesIteratively(e,t,n){for(var r=[],s=Array.from(e);s.length;){var a=s.shift();if(!c(a,!1))if("SLOT"===a.tagName){var l=a.assignedElements(),d=l.length?l:a.children,f=u(d,!0,n);n.flatten?r.push.apply(r,f):r.push({scopeParent:a,candidates:f})}else{i.call(a,o)&&n.filter(a)&&(t||!e.includes(a))&&r.push(a);var p=a.shadowRoot||"function"==typeof n.getShadowRoot&&n.getShadowRoot(a),m=!c(p,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(a));if(p&&m){var g=u(!0===p?a.children:p.children,!0,n);n.flatten?r.push.apply(r,g):r.push({scopeParent:a,candidates:g})}else s.unshift.apply(s,a.children)}}return r},d=function hasTabIndex(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},f=function getTabIndex(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||function isContentEditable(e){var t,n=null==e||null===(t=e.getAttribute)||void 0===t?void 0:t.call(e,"contenteditable");return""===n||"true"===n}(e))&&!d(e)?0:e.tabIndex},p=function sortOrderedTabbables(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},m=function isInput(e){return"INPUT"===e.tagName},g=function isNonTabbableRadio(e){return function isRadio(e){return m(e)&&"radio"===e.type}(e)&&!function isTabbableRadio(e){if(!e.name)return!0;var t,n=e.form||a(e),r=function queryRadios(e){return n.querySelectorAll('input[type="radio"][name="'+e+'"]')};if("undefined"!=typeof window&&void 0!==window.CSS&&"function"==typeof window.CSS.escape)t=r(window.CSS.escape(e.name));else try{t=r(e.name)}catch(e){return console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s",e.message),!1}var o=function getCheckedRadio(e,t){for(var n=0;n<e.length;n++)if(e[n].checked&&e[n].form===t)return e[n]}(t,e.form);return!o||o===e}(e)},y=function isZeroArea(e){var t=e.getBoundingClientRect(),n=t.width,r=t.height;return 0===n&&0===r},h=function isHidden(e,t){var n=t.displayCheck,r=t.getShadowRoot;if("full-native"===n&&"checkVisibility"in e)return!e.checkVisibility({checkOpacity:!1,opacityProperty:!1,contentVisibilityAuto:!0,visibilityProperty:!0,checkVisibilityCSS:!0});if("hidden"===getComputedStyle(e).visibility)return!0;var o=i.call(e,"details>summary:first-of-type")?e.parentElement:e;if(i.call(o,"details:not([open]) *"))return!0;if(n&&"full"!==n&&"full-native"!==n&&"legacy-full"!==n){if("non-zero-area"===n)return y(e)}else{if("function"==typeof r){for(var s=e;e;){var c=e.parentElement,l=a(e);if(c&&!c.shadowRoot&&!0===r(c))return y(e);e=e.assignedSlot?e.assignedSlot:c||l===e.ownerDocument?c:l.host}e=s}if(function isNodeAttached(e){var t,n,r,o,s=e&&a(e),i=null===(t=s)||void 0===t?void 0:t.host,c=!1;if(s&&s!==e)for(c=!!(null!==(n=i)&&void 0!==n&&null!==(r=n.ownerDocument)&&void 0!==r&&r.contains(i)||null!=e&&null!==(o=e.ownerDocument)&&void 0!==o&&o.contains(e));!c&&i;){var l,u,d;c=!(null===(u=i=null===(l=s=a(i))||void 0===l?void 0:l.host)||void 0===u||null===(d=u.ownerDocument)||void 0===d||!d.contains(i))}return c}(e))return!e.getClientRects().length;if("legacy-full"!==n)return!0}return!1},v=function isNodeMatchingSelectorFocusable(e,t){return!(t.disabled||c(t)||function isHiddenInput(e){return m(e)&&"hidden"===e.type}(t)||h(t,e)||function isDetailsWithSummary(e){return"DETAILS"===e.tagName&&Array.prototype.slice.apply(e.children).some(function(e){return"SUMMARY"===e.tagName})}(t)||function isDisabledFromFieldset(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if("FIELDSET"===t.tagName&&t.disabled){for(var n=0;n<t.children.length;n++){var r=t.children.item(n);if("LEGEND"===r.tagName)return!!i.call(t,"fieldset[disabled] *")||!r.contains(e)}return!0}t=t.parentElement}return!1}(t))},b=function isNodeMatchingSelectorTabbable(e,t){return!(g(t)||f(t)<0||!v(e,t))},E=function isShadowRootTabbable(e){var t=parseInt(e.getAttribute("tabindex"),10);return!!(isNaN(t)||t>=0)},k=function sortByOrder(e){var t=[],n=[];return e.forEach(function(e,r){var o=!!e.scopeParent,s=o?e.scopeParent:e,i=function getSortOrderTabIndex(e,t){var n=f(e);return n<0&&t&&!d(e)?0:n}(s,o),a=o?k(e.candidates):s;0===i?o?t.push.apply(t,a):t.push(s):n.push({documentOrder:r,tabIndex:i,item:e,isScope:o,content:a})}),n.sort(p).reduce(function(e,t){return t.isScope?e.push.apply(e,t.content):e.push(t.content),e},[]).concat(t)},w=function tabbable(e,t){var n;return n=(t=t||{}).getShadowRoot?u([e],t.includeContainer,{filter:b.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:E}):l(e,t.includeContainer,b.bind(null,t)),k(n)},T=function focusable(e,t){return(t=t||{}).getShadowRoot?u([e],t.includeContainer,{filter:v.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):l(e,t.includeContainer,v.bind(null,t))},R=function isTabbable(e,t){if(t=t||{},!e)throw new Error("No node provided");return!1!==i.call(e,o)&&b(t,e)},x=r.concat("iframe").join(","),S=function isFocusable(e,t){if(t=t||{},!e)throw new Error("No node provided");return!1!==i.call(e,x)&&v(t,e)}},"./packages/packages/core/editor-canvas/src/components/classes-rename.tsx":function(e,t,n){n.r(t),n.d(t,{ClassesRename:function(){return ClassesRename}});var r=n("react"),o=n("@elementor/editor-documents"),s=n("@elementor/editor-styles-repository"),i=n("@elementor/utils");const ClassesRename=()=>((0,r.useEffect)(()=>{const e=subscribeToStylesRepository();return()=>{e()}},[]),null),subscribeToStylesRepository=()=>s.stylesRepository.subscribe((e,t)=>{if(!e||!t)return;Object.keys(t).forEach(n=>{if(!(e[n]&&(0,i.hash)(e[n])!==(0,i.hash)(t[n])))return;const r=e[n],o=t[n];r.label!==o.label&&renameClass(r.label,o.label)})}),renameClass=(e,t)=>{Object.values((0,o.getV1DocumentsManager)().documents).forEach(n=>{const r=n.container;r.view?.el?.querySelectorAll(`.elementor .${e}`).forEach(n=>{n.classList.replace(e,t)})})}},"./packages/packages/core/editor-canvas/src/components/elements-overlays.tsx":function(e,t,n){n.r(t),n.d(t,{ElementsOverlays:function(){return ElementsOverlays}});var r=n("react"),o=n("@elementor/editor-elements"),s=n("@elementor/editor-v1-adapters"),i=n("./packages/packages/core/editor-canvas/src/components/outline-overlay.tsx");const a="atomic",c=[{component:i.OutlineOverlay,shouldRender:()=>!0}];function ElementsOverlays(){const e=(0,o.useSelectedElement)(),t=function useElementsDom(){return(0,s.__privateUseListenTo)([(0,s.windowEvent)("elementor/editor/element-rendered"),(0,s.windowEvent)("elementor/editor/element-destroyed")],()=>(0,o.getElements)().filter(e=>a in(e.view?.el?.dataset??{})).map(e=>({id:e.id,domElement:e.view?.getDomElement?.()?.get?.(0),isGlobal:e.model.get("isGlobal")??!1})).filter(e=>!!e.domElement))}(),n="edit"===(0,s.useEditMode)(),i=(0,s.__privateUseIsRouteActive)("panel/global");return n&&!i?t.map(({id:t,domElement:n,isGlobal:o})=>{const s=e.element?.id===t;return c.map(({shouldRender:e,component:i},a)=>e({id:t,element:n,isSelected:s})&&r.createElement(i,{key:`${t}-${a}`,id:t,element:n,isSelected:s,isGlobal:o}))}):null}},"./packages/packages/core/editor-canvas/src/components/interactions-renderer.tsx":function(e,t,n){n.r(t),n.d(t,{InteractionsRenderer:function(){return InteractionsRenderer}});var r=n("react"),o=n("@elementor/editor-v1-adapters"),s=n("@elementor/ui"),i=n("./packages/packages/core/editor-canvas/src/hooks/use-interactions-items.ts");function InteractionsRenderer(){const e=function usePortalContainer(){return(0,o.__privateUseListenTo)((0,o.commandEndEvent)("editor/documents/attach-preview"),()=>(0,o.getCanvasIframeDocument)()?.head)}(),t=(0,i.useInteractionsItems)();if(!e)return null;const n=JSON.stringify(Array.isArray(t)?t:[]);return r.createElement(s.Portal,{container:e},r.createElement("script",{type:"application/json","data-e-interactions":"true",dangerouslySetInnerHTML:{__html:n}}))}},"./packages/packages/core/editor-canvas/src/components/outline-overlay.tsx":function(e,t,n){n.r(t),n.d(t,{CANVAS_WRAPPER_ID:function(){return l},OutlineOverlay:function(){return OutlineOverlay}});var r=n("react"),o=n("@elementor/ui"),s=n("./packages/node_modules/@floating-ui/react/dist/floating-ui.react.mjs"),i=n("./packages/packages/core/editor-canvas/src/hooks/use-bind-react-props-to-element.ts"),a=n("./packages/packages/core/editor-canvas/src/hooks/use-floating-on-element.ts"),c=n("./packages/packages/core/editor-canvas/src/hooks/use-has-overlapping.ts");function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_extends.apply(null,arguments)}const l="elementor-preview-responsive-wrapper",u=(0,o.styled)(o.Box,{shouldForwardProp:e=>"isSelected"!==e&&"isSmallerOffset"!==e&&"isGlobal"!==e})(({theme:e,isSelected:t,isSmallerOffset:n,isGlobal:r})=>({outline:`${t?"2px":"1px"} solid ${r?e.palette.global.main:e.palette.primary.light}`,outlineOffset:t&&!n?"-2px":"-1px",pointerEvents:"none"})),OutlineOverlay=({element:e,isSelected:t,id:n,isGlobal:o=!1})=>{const{context:d,floating:f,isVisible:p}=(0,a.useFloatingOnElement)({element:e,isSelected:t}),{getFloatingProps:m,getReferenceProps:g}=(0,s.useInteractions)([(0,s.useHover)(d)]),y=(0,c.useHasOverlapping)();(0,i.useBindReactPropsToElement)(e,g);const h=e.offsetHeight<=1;return p&&!y&&r.createElement(s.FloatingPortal,{id:l},r.createElement(u,_extends({ref:f.setRef,isSelected:t,isGlobal:o,style:f.styles,"data-element-overlay":n,role:"presentation",isSmallerOffset:h},m())))}},"./packages/packages/core/editor-canvas/src/components/style-renderer.tsx":function(e,t,n){n.r(t),n.d(t,{StyleRenderer:function(){return StyleRenderer}});var r=n("react"),o=n("@elementor/editor-v1-adapters"),s=n("@elementor/ui"),i=n("./packages/packages/core/editor-canvas/src/hooks/use-documents-css-links.ts"),a=n("./packages/packages/core/editor-canvas/src/hooks/use-style-items.ts");function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_extends.apply(null,arguments)}function StyleRenderer(){const e=function usePortalContainer(){return(0,o.__privateUseListenTo)((0,o.commandEndEvent)("editor/documents/attach-preview"),()=>(0,o.getCanvasIframeDocument)()?.head)}(),t=(0,a.useStyleItems)(),n=(0,i.useDocumentsCssLinks)();return e?r.createElement(s.Portal,{container:e},t.map((e,t)=>r.createElement("style",{key:`${e.id}-${t}-${e.breakpoint}`},e.value)),n.map(e=>r.createElement("link",_extends({},e,{key:e.id})))):null}},"./packages/packages/core/editor-canvas/src/composition-builder/composition-builder.ts":function(e,t,n){n.r(t),n.d(t,{CompositionBuilder:function(){return CompositionBuilder}});var r=n("@elementor/editor-elements"),o=n("./packages/packages/core/editor-canvas/src/mcp/utils/do-update-element-property.ts"),s=n("./packages/packages/core/editor-canvas/src/mcp/utils/validate-input.ts");class CompositionBuilder{elementConfig={};elementStylesConfig={};rootContainers=[];containerElements=[];api={createElement:r.createElement,getWidgetsCache:r.getWidgetsCache,generateElementId:r.generateElementId,getContainer:r.getContainer,doUpdateElementProperty:o.doUpdateElementProperty};static fromXMLString(e,t={}){const n=(new DOMParser).parseFromString(e,"application/xml"),r=n.querySelector("parsererror");if(r)throw new Error("Failed to parse XML string: "+r.textContent);return new CompositionBuilder({xml:n,api:t})}constructor(e){const{api:t={},elementConfig:n={},stylesConfig:r={},xml:o}=e;this.xml=o,Object.assign(this.api,t),this.setElementConfig(n),this.setStylesConfig(r)}setElementConfig(e){this.elementConfig=e}setStylesConfig(e){this.elementStylesConfig=e}getXML(){return this.xml}iterateBuild(e,t,n){const o=e.tagName,s=this.containerElements.includes(o);let i="e-tabs"===t.model.get("elType")?t.children?.[1].children?.[n]?.id||t.children?.[1].id:t.id;i||(i=t.id);const a=s?this.api.createElement({containerId:i,model:{elType:o,id:(0,r.generateElementId)()},options:{useHistory:!1}}):this.api.createElement({containerId:i,model:{elType:"widget",widgetType:o,id:(0,r.generateElementId)()},options:{useHistory:!1}});"document"===t.id&&this.rootContainers.push(a),e.setAttribute("id",a.id);let c=0;for(const t of Array.from(e.children))this.iterateBuild(t,a,c),c++}findSchemaForNode(e){const t=this.api.getWidgetsCache()||{},n=e.tagName,r=t[n]?.atomic_props_schema;return r||null}matchNodeByConfigId(e){const t=this.xml.querySelector(`[configuration-id="${e}"]`);if(!t)throw new Error(`Configuration id "${e}" does not have target node.`);const n=t.getAttribute("id");if(!n)throw new Error(`Node with configuration id "${e}" does not have element id.`);const r=this.api.getContainer(n);if(!r)throw new Error(`Element with id "${n}" not found but should exist.`);return{element:r,node:t}}applyStyles(){const e=[],t={},n={};for(const[r,o]of Object.entries(this.elementStylesConfig)){const{element:i,node:a}=this.matchNodeByConfigId(r);for(const[r,c]of Object.entries(o)){const{valid:l,errors:u}=s.validateInput.validateStyles({[r]:c});l?n[r]=c:(o.$intention&&(t[i.id]=t[i.id]||[],t[i.id].push(r)),e.push(...u||[])),this.api.doUpdateElementProperty({elementId:i.id,propertyName:"_styles",propertyValue:n,elementType:a.tagName})}}return{errors:e,invalidStyles:t}}applyConfigs(){const e=[];for(const[t,n]of Object.entries(this.elementConfig)){const{element:r,node:o}=this.matchNodeByConfigId(t),i=this.findSchemaForNode(o),a=s.validateInput.validateProps(i,n);if(!a.valid&&a.errors?.length)e.push(...a.errors);else for(const[t,s]of Object.entries(n))try{this.api.doUpdateElementProperty({elementId:r.id,propertyName:t,propertyValue:s,elementType:o.tagName})}catch(t){e.push(t.message)}}return e}build(e){const t=this.api.getWidgetsCache()||{},n=Object.values(t).filter(e=>e.meta?.is_container).map(e=>e.elType).filter(e=>"string"==typeof e);this.containerElements=n,new Set(this.xml.querySelectorAll("*")).forEach(e=>{if(!t[e.tagName])throw new Error(`Unknown widget type: ${e.tagName}`)});const r=Array.from(this.xml.children);let o=0;for(const t of r)this.iterateBuild(t,e,o),o++;const{errors:s,invalidStyles:i}=this.applyStyles();return{configErrors:this.applyConfigs(),styleErrors:s,invalidStyles:i,rootContainers:[...this.rootContainers]}}}},"./packages/packages/core/editor-canvas/src/hooks/use-bind-react-props-to-element.ts":function(e,t,n){n.r(t),n.d(t,{useBindReactPropsToElement:function(){return useBindReactPropsToElement}});var r=n("react");function useBindReactPropsToElement(e,t){(0,r.useEffect)(()=>{const n=e,{events:r,attrs:o}=function groupProps(e){const t=/^on(?=[A-Z])/;return Object.entries(e).reduce((e,[n,r])=>{if(!t.test(n))return e.attrs.push([n,r]),e;const o=n.replace(t,"").toLowerCase(),s=r;return e.events.push([o,s]),e},{events:[],attrs:[]})}(t());return r.forEach(([e,t])=>n.addEventListener(e,t)),o.forEach(([e,t])=>n.setAttribute(e,t)),()=>{r.forEach(([e,t])=>n.removeEventListener(e,t)),o.forEach(([e])=>n.removeAttribute(e))}},[t,e])}},"./packages/packages/core/editor-canvas/src/hooks/use-documents-css-links.ts":function(e,t,n){n.r(t),n.d(t,{useDocumentsCssLinks:function(){return useDocumentsCssLinks}});var r=n("@elementor/editor-v1-adapters");const o="data-e-removed",s="data-elementor-id",i="elementor-post-",a="-css";function useDocumentsCssLinks(){return(0,r.__privateUseListenTo)((0,r.commandEndEvent)("editor/documents/attach-preview"),()=>{const e=(0,r.getCanvasIframeDocument)();if(!e)return[];const t=function getDocumentsIdsInCanvas(e){return[...e.body.querySelectorAll(`[${s}]`)??[]].map(e=>e.getAttribute(s)||"")}(e).map(e=>`${i}${e}${a}`),n=function getDocumentsCssLinks(e){return[...e.head.querySelectorAll(`link[rel="stylesheet"][id^=${i}][id$=${a}]`)??[]]}(e).filter(e=>t.includes(e.getAttribute("id")??""));return n.forEach(e=>{e.hasAttribute(o)||e.remove()}),n.map(e=>({...getLinkAttrs(e),id:e.getAttribute("id")??"",[o]:!0}))})}function getLinkAttrs(e){const t=[...e.attributes].map(e=>[e.name,e.value]);return Object.fromEntries(t)}},"./packages/packages/core/editor-canvas/src/hooks/use-floating-on-element.ts":function(e,t,n){n.r(t),n.d(t,{useFloatingOnElement:function(){return useFloatingOnElement}});var r=n("react"),o=n("./packages/node_modules/@floating-ui/react/dist/floating-ui.react.mjs"),s=n("./packages/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs"),i=n("./packages/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs");function useFloatingOnElement({element:e,isSelected:t}){const[n,a]=(0,r.useState)(!1),{refs:c,floatingStyles:l,context:u}=(0,o.useFloating)({open:n||t,onOpenChange:a,whileElementsMounted:s.autoUpdate,middleware:[(0,i.size)(()=>({apply({elements:e,rects:t}){Object.assign(e.floating.style,{width:`${t.reference.width+2}px`,height:`${t.reference.height+2}px`})}})),(0,i.offset)(({rects:e})=>-e.reference.height/2-e.floating.height/2)]});return(0,r.useEffect)(()=>{c.setReference(e)},[e,c]),{isVisible:n||t,context:u,floating:{setRef:c.setFloating,ref:c.floating,styles:l}}}},"./packages/packages/core/editor-canvas/src/hooks/use-has-overlapping.ts":function(e,t,n){n.r(t),n.d(t,{useHasOverlapping:function(){return useHasOverlapping}});const r=[".e-off-canvas"],useHasOverlapping=()=>{const e=window.elementor?.$preview?.[0];if(!e)return!1;return r.map(t=>Array.from(e?.contentWindow?.document.body.querySelectorAll(t)??[])).flat().some(e=>e.checkVisibility({opacityProperty:!0,visibilityProperty:!0,contentVisibilityAuto:!0}))}},"./packages/packages/core/editor-canvas/src/hooks/use-interactions-items.ts":function(e,t,n){n.r(t),n.d(t,{useInteractionsItems:function(){return useInteractionsItems}});var r=n("react"),o=n("@elementor/editor-interactions"),s=n("@elementor/editor-v1-adapters"),i=n("./packages/packages/core/editor-canvas/src/hooks/use-on-mount.ts");function useInteractionsItems(){const[e,t]=(0,r.useState)({}),n=(0,r.useMemo)(()=>{try{const e=o.interactionsRepository.getProviders();return e.map(e=>({provider:e,subscriber:createProviderSubscriber({provider:e,setInteractionItems:t})}))}catch{return[]}},[]);return(0,r.useEffect)(()=>{if(0===n.length)return;const e=n.map(({provider:e,subscriber:t})=>e.subscribe(()=>{try{t()}catch{}}));return()=>{e.forEach(e=>e())}},[n]),(0,i.useOnMount)(()=>{0!==n.length&&(0,s.registerDataHook)("after","editor/documents/attach-preview",async()=>{n.forEach(({subscriber:e})=>{try{e()}catch{}})})}),(0,r.useMemo)(()=>Object.values(e).sort(sortByProviderPriority).flatMap(({items:e})=>e),[e])}function sortByProviderPriority({provider:e},{provider:t}){return e.priority-t.priority}function createProviderSubscriber({provider:e,setInteractionItems:t}){return()=>{try{const n=e.actions.all(),r=e.getKey();t(t=>({...t,[r]:{provider:e,items:n}}))}catch{}}}},"./packages/packages/core/editor-canvas/src/hooks/use-on-mount.ts":function(e,t,n){n.r(t),n.d(t,{useOnMount:function(){return useOnMount}});var r=n("react");function useOnMount(e){const t=(0,r.useRef)(!1);(0,r.useEffect)(()=>{t.current||(t.current=!0,e())},[])}},"./packages/packages/core/editor-canvas/src/hooks/use-style-items.ts":function(e,t,n){n.r(t),n.d(t,{useStyleItems:function(){return useStyleItems}});var r=n("react"),o=n("@elementor/editor-responsive"),s=n("@elementor/editor-styles"),i=n("@elementor/editor-styles-repository"),a=n("@elementor/editor-v1-adapters"),c=n("./packages/packages/core/editor-canvas/src/utils/abort-previous-runs.ts"),l=n("./packages/packages/core/editor-canvas/src/utils/signalized-process.ts"),u=n("./packages/packages/core/editor-canvas/src/hooks/use-on-mount.ts"),d=n("./packages/packages/core/editor-canvas/src/hooks/use-style-prop-resolver.ts"),f=n("./packages/packages/core/editor-canvas/src/hooks/use-style-renderer.ts");function useStyleItems(){const e=(0,d.useStylePropResolver)(),t=(0,f.useStyleRenderer)(e),[n,s]=(0,r.useState)({}),c=(0,r.useMemo)(()=>i.stylesRepository.getProviders().map(e=>({provider:e,subscriber:createProviderSubscriber({provider:e,renderStyles:t,setStyleItems:s})})),[t]);(0,r.useEffect)(()=>{const e=c.map(({provider:e,subscriber:t})=>e.subscribe(t));return()=>{e.forEach(e=>e())}},[c]),(0,u.useOnMount)(()=>{(0,a.registerDataHook)("after","editor/documents/attach-preview",async()=>{const e=c.map(async({subscriber:e})=>e());await Promise.all(e)})});const l=(0,o.getBreakpoints)().map(e=>e.id);return(0,r.useMemo)(()=>Object.values(n).sort(sortByProviderPriority).flatMap(({items:e})=>e).sort(sortByStateType).sort(function sortByBreakpoint(e){return({breakpoint:t},{breakpoint:n})=>e.indexOf(t)-e.indexOf(n)}(l)),[n,l.join("-")])}function sortByProviderPriority({provider:e},{provider:t}){return e.priority-t.priority}function sortByStateType({state:e},{state:t}){return(0,s.isClassState)(e)&&!(0,s.isClassState)(t)?-1:!(0,s.isClassState)(e)&&(0,s.isClassState)(t)?1:0}function createProviderSubscriber({provider:e,renderStyles:t,setStyleItems:n}){return(0,c.abortPreviousRuns)(r=>(0,l.signalizedProcess)(r.signal).then((n,r)=>{const o=e.actions.all().map((t,n,r)=>{const o=r[r.length-1-n];return{...o,cssName:e.actions.resolveCssName(o.id)}});return t({styles:breakToBreakpoints(o),signal:r})}).then(t=>{n(n=>({...n,[e.getKey()]:{provider:e,items:t}}))}).execute());function breakToBreakpoints(e){return Object.values(e.reduce((e,t)=>(t.variants.forEach(n=>{const r=n.meta.breakpoint||"desktop";e[t.id]||(e[t.id]={}),e[t.id][r]||(e[t.id][r]={...t,variants:[]}),e[t.id][r].variants.push(n)}),e),{})).flatMap(e=>Object.values(e))}}},"./packages/packages/core/editor-canvas/src/hooks/use-style-prop-resolver.ts":function(e,t,n){n.r(t),n.d(t,{useStylePropResolver:function(){return useStylePropResolver}});var r=n("react"),o=n("@elementor/editor-styles"),s=n("./packages/packages/core/editor-canvas/src/renderers/create-props-resolver.ts"),i=n("./packages/packages/core/editor-canvas/src/style-transformers-registry.ts"),a=n("./packages/packages/core/editor-canvas/src/sync/enqueue-font.ts");function useStylePropResolver(){return(0,r.useMemo)(()=>(0,s.createPropsResolver)({transformers:i.styleTransformersRegistry,schema:(0,o.getStylesSchema)(),onPropResolve:({key:e,value:t})=>{"font-family"===e&&"string"==typeof t&&(0,a.enqueueFont)(t)}}),[])}},"./packages/packages/core/editor-canvas/src/hooks/use-style-renderer.ts":function(e,t,n){n.r(t),n.d(t,{useStyleRenderer:function(){return useStyleRenderer}});var r=n("react"),o=n("@elementor/editor-responsive"),s=n("./packages/packages/core/editor-canvas/src/renderers/create-styles-renderer.ts");const i=".elementor";function useStyleRenderer(e){const t=(0,o.useBreakpointsMap)();return(0,r.useMemo)(()=>(0,s.createStylesRenderer)({selectorPrefix:i,breakpoints:t,resolve:e}),[e,t])}},"./packages/packages/core/editor-canvas/src/init-settings-transformers.ts":function(e,t,n){n.r(t),n.d(t,{initSettingsTransformers:function(){return initSettingsTransformers}});var r=n("./packages/packages/core/editor-canvas/src/settings-transformers-registry.ts"),o=n("./packages/packages/core/editor-canvas/src/transformers/settings/attributes-transformer.ts"),s=n("./packages/packages/core/editor-canvas/src/transformers/settings/classes-transformer.ts"),i=n("./packages/packages/core/editor-canvas/src/transformers/settings/date-time-transformer.ts"),a=n("./packages/packages/core/editor-canvas/src/transformers/settings/link-transformer.ts"),c=n("./packages/packages/core/editor-canvas/src/transformers/settings/query-transformer.ts"),l=n("./packages/packages/core/editor-canvas/src/transformers/shared/image-src-transformer.ts"),u=n("./packages/packages/core/editor-canvas/src/transformers/shared/image-transformer.ts"),d=n("./packages/packages/core/editor-canvas/src/transformers/shared/plain-transformer.ts");function initSettingsTransformers(){r.settingsTransformersRegistry.register("classes",(0,s.createClassesTransformer)()).register("link",a.linkTransformer).register("query",c.queryTransformer).register("image",u.imageTransformer).register("image-src",l.imageSrcTransformer).register("attributes",o.attributesTransformer).register("date-time",i.dateTimeTransformer).registerFallback(d.plainTransformer)}},"./packages/packages/core/editor-canvas/src/init-style-transformers.ts":function(e,t,n){n.r(t),n.d(t,{initStyleTransformers:function(){return initStyleTransformers}});var r=n("./packages/packages/core/editor-canvas/src/style-transformers-registry.ts"),o=n("./packages/packages/core/editor-canvas/src/transformers/shared/image-src-transformer.ts"),s=n("./packages/packages/core/editor-canvas/src/transformers/shared/image-transformer.ts"),i=n("./packages/packages/core/editor-canvas/src/transformers/shared/plain-transformer.ts"),a=n("./packages/packages/core/editor-canvas/src/transformers/styles/background-color-overlay-transformer.ts"),c=n("./packages/packages/core/editor-canvas/src/transformers/styles/background-gradient-overlay-transformer.ts"),l=n("./packages/packages/core/editor-canvas/src/transformers/styles/background-image-overlay-transformer.ts"),u=n("./packages/packages/core/editor-canvas/src/transformers/styles/background-image-size-scale-transformer.ts"),d=n("./packages/packages/core/editor-canvas/src/transformers/styles/background-overlay-transformer.ts"),f=n("./packages/packages/core/editor-canvas/src/transformers/styles/background-transformer.ts"),p=n("./packages/packages/core/editor-canvas/src/transformers/styles/color-stop-transformer.ts"),m=n("./packages/packages/core/editor-canvas/src/transformers/styles/create-combine-array-transformer.ts"),g=n("./packages/packages/core/editor-canvas/src/transformers/styles/create-multi-props-transformer.ts"),y=n("./packages/packages/core/editor-canvas/src/transformers/styles/filter-transformer.ts"),h=n("./packages/packages/core/editor-canvas/src/transformers/styles/flex-transformer.ts"),v=n("./packages/packages/core/editor-canvas/src/transformers/styles/perspective-origin-transformer.ts"),b=n("./packages/packages/core/editor-canvas/src/transformers/styles/position-transformer.ts"),E=n("./packages/packages/core/editor-canvas/src/transformers/styles/shadow-transformer.ts"),k=n("./packages/packages/core/editor-canvas/src/transformers/styles/size-transformer.ts"),w=n("./packages/packages/core/editor-canvas/src/transformers/styles/stroke-transformer.ts"),T=n("./packages/packages/core/editor-canvas/src/transformers/styles/transform-functions-transformer.ts"),R=n("./packages/packages/core/editor-canvas/src/transformers/styles/transform-move-transformer.ts"),x=n("./packages/packages/core/editor-canvas/src/transformers/styles/transform-origin-transformer.ts"),S=n("./packages/packages/core/editor-canvas/src/transformers/styles/transform-rotate-transformer.ts"),C=n("./packages/packages/core/editor-canvas/src/transformers/styles/transform-scale-transformer.ts"),P=n("./packages/packages/core/editor-canvas/src/transformers/styles/transform-skew-transformer.ts"),I=n("./packages/packages/core/editor-canvas/src/transformers/styles/transition-transformer.ts");function initStyleTransformers(){r.styleTransformersRegistry.register("size",k.sizeTransformer).register("shadow",E.shadowTransformer).register("stroke",w.strokeTransformer).register("dimensions",(0,g.createMultiPropsTransformer)(["block-start","block-end","inline-start","inline-end"],({propKey:e,key:t})=>`${e}-${t}`)).register("filter",y.filterTransformer).register("backdrop-filter",y.filterTransformer).register("box-shadow",(0,m.createCombineArrayTransformer)(",")).register("background",f.backgroundTransformer).register("background-overlay",d.backgroundOverlayTransformer).register("background-color-overlay",a.backgroundColorOverlayTransformer).register("background-image-overlay",l.backgroundImageOverlayTransformer).register("background-gradient-overlay",c.backgroundGradientOverlayTransformer).register("gradient-color-stop",(0,m.createCombineArrayTransformer)(",")).register("color-stop",p.colorStopTransformer).register("background-image-position-offset",b.positionTransformer).register("background-image-size-scale",u.backgroundImageSizeScaleTransformer).register("image-src",o.imageSrcTransformer).register("image",s.imageTransformer).register("object-position",b.positionTransformer).register("transform-origin",x.transformOriginTransformer).register("perspective-origin",v.perspectiveOriginTransformer).register("transform-move",R.transformMoveTransformer).register("transform-scale",C.transformScaleTransformer).register("transform-rotate",S.transformRotateTransformer).register("transform-skew",P.transformSkewTransformer).register("transform-functions",T.transformFunctionsTransformer).register("transform",(0,g.createMultiPropsTransformer)(["transform-functions","transform-origin","perspective","perspective-origin"],({key:e})=>"transform-functions"===e?"transform":e)).register("transition",I.transitionTransformer).register("layout-direction",(0,g.createMultiPropsTransformer)(["row","column"],({propKey:e,key:t})=>`${t}-${e}`)).register("flex",h.flexTransformer).register("border-width",(0,g.createMultiPropsTransformer)(["block-start","block-end","inline-start","inline-end"],({key:e})=>`border-${e}-width`)).register("border-radius",(0,g.createMultiPropsTransformer)(["start-start","start-end","end-start","end-end"],({key:e})=>`border-${e}-radius`)).registerFallback(i.plainTransformer)}},"./packages/packages/core/editor-canvas/src/init.tsx":function(e,t,n){n.r(t),n.d(t,{init:function(){return init}});var r=n("@elementor/editor"),o=n("@elementor/editor-interactions"),s=n("@elementor/editor-mcp"),i=n("./packages/packages/core/editor-canvas/src/components/classes-rename.tsx"),a=n("./packages/packages/core/editor-canvas/src/components/elements-overlays.tsx"),c=n("./packages/packages/core/editor-canvas/src/components/interactions-renderer.tsx"),l=n("./packages/packages/core/editor-canvas/src/components/style-renderer.tsx"),u=n("./packages/packages/core/editor-canvas/src/init-settings-transformers.ts"),d=n("./packages/packages/core/editor-canvas/src/init-style-transformers.ts"),f=n("./packages/packages/core/editor-canvas/src/legacy/init-legacy-views.ts"),p=n("./packages/packages/core/editor-canvas/src/legacy/replacements/manager.ts"),m=n("./packages/packages/core/editor-canvas/src/mcp/canvas-mcp.ts"),g=n("./packages/packages/core/editor-canvas/src/mcp/mcp-description.ts"),y=n("./packages/packages/core/editor-canvas/src/prevent-link-in-link-commands.ts"),h=n("./packages/packages/core/editor-canvas/src/style-commands/init-style-commands.ts");function init(){(0,d.initStyleTransformers)(),(0,h.initStyleCommands)(),(0,y.initLinkInLinkPrevention)(),(0,p.initViewReplacements)(),(0,f.initLegacyViews)(),(0,u.initSettingsTransformers)(),(0,o.init)(),(0,r.injectIntoTop)({id:"elements-overlays",component:a.ElementsOverlays}),(0,r.injectIntoTop)({id:"canvas-style-render",component:l.StyleRenderer}),(0,r.injectIntoTop)({id:"canvas-interactions-render",component:c.InteractionsRenderer}),(0,r.injectIntoLogic)({id:"classes-rename",component:i.ClassesRename}),(0,m.initCanvasMcp)((0,s.getMCPByDomain)("canvas",{instructions:g.mcpDescription}))}},"./packages/packages/core/editor-canvas/src/legacy/create-element-type.ts":function(e,t,n){function createElementType(e){const t=window;return class extends t.elementor.modules.elements.types.Widget{getType(){return e}getView(){return createElementViewClassDeclaration()}}}function createElementViewClassDeclaration(){const e=window;return class extends e.elementor.modules.elements.views.Widget{onRender(...e){super.onRender(...e),this.#e("elementor/preview/atomic-widget/render"),this.#t("elementor/element/render")}onDestroy(...e){super.onDestroy(...e),this.#e("elementor/preview/atomic-widget/destroy"),this.#t("elementor/element/destroy")}attributes(){return{...super.attributes(),"data-atomic":"",style:"display: contents !important;"}}behaviors(){const e=["InlineEditing","Draggable","Resizable"],t=Object.entries(super.behaviors()).filter(([t])=>!e.includes(t));return Object.fromEntries(t)}getDomElement(){return this.$el.find(":first-child")}getHandlesOverlay(){return null}#e(e){window.top?.dispatchEvent(new CustomEvent(e,{detail:{id:this.model.get("id")}}))}#t(t){const n=this.getDomElement().get(0);n&&e.elementor?.$preview?.[0]?.contentWindow.dispatchEvent(new CustomEvent(t,{detail:{id:this.model.get("id"),type:this.model.get("widgetType"),element:n}}))}getContextMenuGroups(){return super.getContextMenuGroups().filter(e=>"save"!==e.name)}}}n.r(t),n.d(t,{createElementType:function(){return createElementType},createElementViewClassDeclaration:function(){return createElementViewClassDeclaration}})},"./packages/packages/core/editor-canvas/src/legacy/create-templated-element-type.ts":function(e,t,n){n.r(t),n.d(t,{canBeTemplated:function(){return canBeTemplated},createTemplatedElementType:function(){return createTemplatedElementType},createTemplatedElementView:function(){return createTemplatedElementView}});var r=n("./packages/packages/core/editor-canvas/src/renderers/create-props-resolver.ts"),o=n("./packages/packages/core/editor-canvas/src/settings-transformers-registry.ts"),s=n("./packages/packages/core/editor-canvas/src/utils/signalized-process.ts"),i=n("./packages/packages/core/editor-canvas/src/legacy/create-element-type.ts");function createTemplatedElementType({type:e,renderer:t,element:n}){const r=window,o=createTemplatedElementView({type:e,renderer:t,element:n});return class extends r.elementor.modules.elements.types.Widget{getType(){return e}getView(){return o}}}function canBeTemplated(e){return!!(e.atomic_props_schema&&e.twig_templates&&e.twig_main_template&&e.base_styles_dictionary)}function createTemplatedElementView({type:e,renderer:t,element:n}){const a=(0,i.createElementViewClassDeclaration)(),c=n.twig_main_template,l=n.base_styles_dictionary;Object.entries(n.twig_templates).forEach(([e,n])=>{t.register(e,n)});const u=(0,r.createPropsResolver)({transformers:o.settingsTransformersRegistry,schema:n.atomic_props_schema});return class extends a{#n=null;#r=[];#o=null;#s=!1;getTemplateType(){return"twig"}getNamespaceKey(){return e}renderOnChange(){this.render()}getRenderContext(){return this._parent?.getRenderContext?.()}getResolverRenderContext(){return this._parent?.getResolverRenderContext?.()}invalidateRenderCache(){this.#o=null}render(){this.#n?.abort(),this.#n=new AbortController;const e=(0,s.signalizedProcess)(this.#n.signal).then(()=>this._beforeRender()).then(()=>this._renderTemplate()).then(()=>this._renderChildren()).then(()=>this._afterRender());return this._currentRenderPromise=e.execute(),this._currentRenderPromise}async _renderChildren(){this.#r=[],this.#i()?this.#a():super._renderChildren(),this.#c(),await this._waitForChildrenToComplete()}#i(){return this.#s&&this.children?.length>0}#a(){this.children?.each(e=>{e.render()})}#c(){this.children?.each(e=>{e._currentRenderPromise&&this.#r.push(e._currentRenderPromise)})}async _waitForChildrenToComplete(){this.#r.length>0&&await Promise.all(this.#r)}async _renderTemplate(){this.triggerMethod("before:render:template");const n=(0,s.signalizedProcess)(this.#n?.signal).then((e,t)=>{const n=this.model.get("settings").toJSON();return u({props:n,signal:t,renderContext:this.getResolverRenderContext()})}).then(e=>this.afterSettingsResolve(e)).then(async n=>{const r=JSON.stringify(n);if(!(r!==this.#o)&&this.isRendered)return this.#s=!0,null;this.#s=!1,this.#o=r;const o={id:this.model.get("id"),type:e,settings:n,base_styles:l};return t.render(c,o)}).then(e=>{null!==e&&this.$el.html(e)});await n.execute(),this.bindUIElements(),this.triggerMethod("render:template")}afterSettingsResolve(e){return e}_beforeRender(){this._ensureViewIsIntact(),this._isRendering=!0,this.resetChildViewContainer(),this.triggerMethod("before:render",this)}_afterRender(){this._isRendering=!1,this.isRendered=!0,this.triggerMethod("render",this)}_doAfterRender(e){this.isRendered?e():this.once("render",e)}_openEditingPanel(e){this._doAfterRender(()=>super._openEditingPanel(e))}}}},"./packages/packages/core/editor-canvas/src/legacy/init-legacy-views.ts":function(e,t,n){n.r(t),n.d(t,{elementsLegacyTypes:function(){return l},initLegacyViews:function(){return initLegacyViews},registerElementType:function(){return registerElementType}});var r=n("@elementor/editor-elements"),o=n("@elementor/editor-v1-adapters"),s=n("./packages/packages/core/editor-canvas/src/renderers/create-dom-renderer.ts"),i=n("./packages/packages/core/editor-canvas/src/legacy/create-element-type.ts"),a=n("./packages/packages/core/editor-canvas/src/legacy/create-templated-element-type.ts"),c=n("./packages/packages/core/editor-canvas/src/legacy/replacements/manager.ts");const l={};function registerElementType(e,t){l[e]=t}function initLegacyViews(){(0,o.__privateListenTo)((0,o.v1ReadyEvent)(),()=>{const e=(0,r.getWidgetsCache)()??{},t=window,n=(0,s.createDomRenderer)();Object.entries(e).forEach(([e,r])=>{if(!r.atomic)return;let o;o=l[e]&&(0,a.canBeTemplated)(r)?l[e]({type:e,renderer:n,element:r}):(0,a.canBeTemplated)(r)?(0,c.createTemplatedElementTypeWithReplacements)({type:e,renderer:n,element:r}):(0,i.createElementType)(e),t.elementor.elementsManager.registerElementType(new o)})})}},"./packages/packages/core/editor-canvas/src/legacy/replacements/base.ts":function(e,t,n){n.r(t),n.d(t,{ReplacementBase:function(){return ReplacementBase},TRIGGER_TIMING:function(){return r}});const r={before:"before",after:"after",never:"never"};class ReplacementBase{constructor(e){this.getSetting=e.getSetting,this.setSetting=e.setSetting,this.element=e.element,this.type=e.type,this.id=e.id,this.refreshView=e.refreshView}static getTypes(){return null}shouldRenderReplacement(){return!0}originalMethodsToTrigger(){return{_beforeRender:r.before,_afterRender:r.after,renderOnChange:r.never,onDestroy:r.never,render:r.never}}}},"./packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/canvas-inline-editor.tsx":function(e,t,n){n.r(t),n.d(t,{CanvasInlineEditor:function(){return CanvasInlineEditor}});var r=n("react"),o=n("@elementor/editor-controls"),s=n("@elementor/ui"),i=n("./packages/node_modules/@floating-ui/react/dist/floating-ui.react.mjs"),a=n("./packages/packages/core/editor-canvas/src/components/outline-overlay.tsx"),c=n("./packages/packages/core/editor-canvas/src/hooks/use-bind-react-props-to-element.ts"),l=n("./packages/packages/core/editor-canvas/src/hooks/use-floating-on-element.ts"),u=n("./packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/inline-editing-utils.ts");function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_extends.apply(null,arguments)}const d=["#elementor-editor-wrapper-v2","#elementor-navigator","#elementor-panel"],f="inline-editor-wrapper",CanvasInlineEditor=({elementClasses:e,initialValue:t,expectedTag:n,rootElement:i,id:a,setValue:c,onBlur:l})=>{const[d,p]=(0,r.useState)(null),[m,g]=(0,r.useState)(null);return useOnClickOutsideIframe(l),r.createElement(s.ThemeProvider,null,r.createElement(InlineEditingOverlay,{expectedTag:n,rootElement:i,id:a}),r.createElement("style",null,`\n\t\t\t.${f}, .${f} > * {\n\t\t\t\theight: 100%;\n\t\t\t}\n\t\t\t.ProseMirror > * {\n\t\t\t\theight: 100%;\n\t\t\t}\n\t\t\t`),r.createElement(o.InlineEditor,{onEditorCreate:g,editorProps:{attributes:{style:"outline: none;overflow-wrap: normal;height:100%"}},elementClasses:e,value:t,setValue:c,onBlur:l,autofocus:!0,expectedTag:n,wrapperClassName:f,onSelectionEnd:e=>{const t=!e.state.selection.empty;p(t?(0,u.calcSelectionCenterOffsets)(e):null)}}),d&&m&&r.createElement(InlineEditingToolbarWrapper,{expectedTag:n,editor:m,rootElement:i,id:a,selectionOffsets:d}))},InlineEditingOverlay=({expectedTag:e,rootElement:t,id:n})=>{const o=getInlineEditorElement(t,e),[s,i]=(0,r.useState)(o);return(0,r.useEffect)(()=>{i(getInlineEditorElement(t,e))},[e,t]),s?r.createElement(a.OutlineOverlay,{element:s,id:n,isSelected:!0}):null},InlineEditingToolbarWrapper=({expectedTag:e,editor:t,rootElement:n,id:o,selectionOffsets:s})=>{const[i,a]=(0,r.useState)(null);return(0,r.useEffect)(()=>{a(getInlineEditorElement(n,e))},[e,n]),i?r.createElement(InlineEditingToolbar,{element:i,editor:t,id:o,selectionOffsets:s}):null},InlineEditingToolbar=({element:e,editor:t,id:n,selectionOffsets:d})=>{const{floating:f}=(0,l.useFloatingOnElement)({element:e,isSelected:!0}),{getFloatingProps:p,getReferenceProps:m}=(0,i.useInteractions)(),g=(0,u.getComputedStyle)(f.styles,d);return(0,c.useBindReactPropsToElement)(e,m),r.createElement(i.FloatingPortal,{id:a.CANVAS_WRAPPER_ID},r.createElement(s.Box,_extends({ref:f.setRef,style:{...f.styles,pointerEvents:"none"},role:"presentation"},p({style:g})),f.styles.transform&&r.createElement(s.Box,{sx:{position:"relative",transform:"translateY(-100%)",height:"max-content"}},r.createElement(o.InlineEditorToolbar,{editor:t,elementId:n,sx:{transform:"translateX(-50%)"}}))))},getInlineEditorElement=(e,t)=>t?e.querySelector(t):null,useOnClickOutsideIframe=e=>{const t=r.useCallback(()=>queueMicrotask(e),[e]);(0,r.useEffect)(()=>(d.forEach(e=>document?.querySelector(e)?.addEventListener("mousedown",t)),()=>d.forEach(e=>document?.querySelector(e)?.removeEventListener("mousedown",t))),[])}},"./packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/inline-editing-elements.tsx":function(e,t,n){n.r(t),n.d(t,{default:function(){return InlineEditingReplacement}});var r=n("react"),o=n("./packages/node_modules/react-dom/client.js"),s=n("@elementor/editor-elements"),i=n("@elementor/editor-props"),a=n("@elementor/editor-v1-adapters"),c=n("@wordpress/i18n"),l=n("./packages/packages/core/editor-canvas/src/legacy/replacements/base.ts"),u=n("./packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/canvas-inline-editor.tsx"),d=n("./packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/inline-editing-eligibility.ts"),f=n("./packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/inline-editing-utils.ts");class InlineEditingReplacement extends l.ReplacementBase{inlineEditorRoot=null;handlerAttached=!1;getReplacementKey(){return"inline-editing"}static getTypes(){return Object.keys(f.INLINE_EDITING_PROPERTY_PER_TYPE)}isEditingModeActive(){return!!this.inlineEditorRoot}shouldRenderReplacement(){return this.isInlineEditingEligible()&&"edit"===(0,a.getCurrentEditMode)()}handleRenderInlineEditor=()=>{!this.isEditingModeActive()&&this.isInlineEditingEligible()&&this.renderInlineEditor()};renderOnChange(){this.isEditingModeActive()||this.refreshView()}onDestroy(){this.resetInlineEditorRoot()}_beforeRender(){this.resetInlineEditorRoot()}_afterRender(){this.isInlineEditingEligible()&&!this.handlerAttached&&(this.element.addEventListener("click",this.handleRenderInlineEditor),this.handlerAttached=!0)}originalMethodsToTrigger(){const e=this.isEditingModeActive()?l.TRIGGER_TIMING.never:l.TRIGGER_TIMING.before,t=this.isEditingModeActive()?l.TRIGGER_TIMING.never:l.TRIGGER_TIMING.after;return{_beforeRender:e,_afterRender:t,renderOnChange:t,onDestroy:l.TRIGGER_TIMING.after,render:e}}resetInlineEditorRoot(){this.element.removeEventListener("click",this.handleRenderInlineEditor),this.handlerAttached=!1,this.inlineEditorRoot?.unmount?.(),this.inlineEditorRoot=null}unmountInlineEditor(){this.resetInlineEditorRoot(),this.refreshView()}isInlineEditingEligible(){const e=this.getInlineEditablePropertyName(),t=this.getSetting(e);return(0,d.isInlineEditingAllowed)({rawValue:t,propTypeFromSchema:this.getInlineEditablePropType()})}getInlineEditablePropertyName(){return f.INLINE_EDITING_PROPERTY_PER_TYPE[this.type]??""}getInlineEditablePropType(){const e=(0,s.getElementType)(this.type)?.propsSchema,t=this.getInlineEditablePropertyName();return e?.[t]??null}getInlineEditablePropValue(){const e=this.getInlineEditablePropType(),t=this.getInlineEditablePropertyName();return this.getSetting(t)??e?.default??null}getExtractedContentValue(){const e=this.getInlineEditablePropValue();return i.htmlPropTypeUtil.extract(e)??""}setContentValue(e){const t=this.getInlineEditablePropertyName(),n=i.htmlPropTypeUtil.create(e||"");(0,a.undoable)({do:()=>{const e=this.getInlineEditablePropValue();return this.runCommand(t,n),e},undo:(e,n)=>{this.runCommand(t,n??null)}},{title:(0,s.getElementLabel)(this.id),subtitle:(0,c.__)("%s edited","elementor").replace("%s",this.getInlineEditablePropTypeKey()??"Inline editing"),debounce:{wait:800}})()}getInlineEditablePropTypeKey(){const e=this.getInlineEditablePropType();return e?"union"===e.kind?e.prop_types[i.htmlPropTypeUtil.key]?i.htmlPropTypeUtil.key:e.prop_types[i.stringPropTypeUtil.key]?i.stringPropTypeUtil.key:null:"key"in e&&"string"==typeof e.key?e.key:null:null}runCommand(e,t){(0,a.__privateRunCommandSync)("document/elements/set-settings",{container:(0,s.getContainer)(this.id),settings:{[e]:t}},{internal:!0}),(0,a.__privateRunCommandSync)("document/save/set-is-modified",{status:!0},{internal:!0})}getExpectedTag(){const e=this.getTagPropType();return i.stringPropTypeUtil.extract(this.getSetting("tag")??null)??i.stringPropTypeUtil.extract(e?.default??null)??null}getTagPropType(){const e=(0,s.getElementType)(this.type)?.propsSchema;if(!e?.tag)return null;const t=e.tag??null;return"union"===t.kind?t.prop_types.string??null:t}renderInlineEditor(){this.isEditingModeActive()&&this.resetInlineEditorRoot();const e=this.element.children?.[0]?.classList.toString()??"",t=this.getExtractedContentValue(),n=this.getExpectedTag();this.element.innerHTML="",this.inlineEditorRoot=(0,o.createRoot)(this.element),this.inlineEditorRoot.render(r.createElement(u.CanvasInlineEditor,{elementClasses:e,initialValue:t,expectedTag:n,rootElement:this.element,id:this.id,setValue:this.setContentValue.bind(this),onBlur:this.unmountInlineEditor.bind(this)}))}}},"./packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/inline-editing-eligibility.ts":function(e,t,n){n.r(t),n.d(t,{isInlineEditingAllowed:function(){return isInlineEditingAllowed}});var r=n("@elementor/editor-props");const isAllowedBySchema=e=>{return!!e&&("key"in e&&((t=e.key)===r.htmlPropTypeUtil.key||t===r.stringPropTypeUtil.key)||"union"===e.kind&&Boolean(e.prop_types[r.htmlPropTypeUtil.key]||e.prop_types[r.stringPropTypeUtil.key]));var t},isInlineEditingAllowed=({rawValue:e,propTypeFromSchema:t})=>null==e?isAllowedBySchema(t):r.htmlPropTypeUtil.isValid(e)||r.stringPropTypeUtil.isValid(e)},"./packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/inline-editing-utils.ts":function(e,t,n){n.r(t),n.d(t,{INLINE_EDITING_PROPERTY_PER_TYPE:function(){return r},calcSelectionCenterOffsets:function(){return calcSelectionCenterOffsets},getComputedStyle:function(){return getComputedStyle},getWidgetType:function(){return getWidgetType},legacyWindow:function(){return o}});const r={"e-form-label":"text","e-heading":"title","e-paragraph":"paragraph"},o=window,getWidgetType=e=>e?.model?.get("widgetType")??e?.model?.get("elType")??null,calcSelectionCenterOffsets=e=>{const t=e.root?.defaultView,n=t?.getSelection(),r=e.dom;if(!n||!r)return null;const o=n.getRangeAt(0).getBoundingClientRect(),s=r.getBoundingClientRect();if(!o||!s)return null;const i=o.top-s.top;return{left:o?.left+o?.width/2-s.left,top:i}},getComputedStyle=(e,t)=>extractTransformValue(e)?{...e,marginLeft:`${t.left}px`,marginTop:`${t.top}px`,pointerEvents:"none"}:{display:"none"},extractTransformValue=e=>{const t=e?.transform?.match(/translate\([^)]*\)\s?/g)?.[0],n=t?.match(/(-?\d+\.?\d*)/g);if(!t||!n)return null;const[r,o]=n.map(Number);return r&&o?e.transform:null}},"./packages/packages/core/editor-canvas/src/legacy/replacements/manager.ts":function(e,t,n){n.r(t),n.d(t,{createTemplatedElementTypeWithReplacements:function(){return createTemplatedElementTypeWithReplacements},createViewWithReplacements:function(){return createViewWithReplacements},getReplacement:function(){return getReplacement},initViewReplacements:function(){return initViewReplacements},registerReplacement:function(){return registerReplacement}});var r=n("./packages/packages/core/editor-canvas/src/legacy/create-templated-element-type.ts"),o=n("./packages/packages/core/editor-canvas/src/legacy/replacements/inline-editing/inline-editing-elements.tsx");const s=new Map,initViewReplacements=()=>{registerReplacement(o.default)},registerReplacement=e=>{const t=e.getTypes();t&&t.forEach(t=>{s.set(t,e)})},getReplacement=e=>s.get(e)??null,createViewWithReplacements=e=>{const t=(0,r.createTemplatedElementView)(e);return class extends t{#l=null;#u;constructor(...e){super(...e);const t=this.model.get("settings");this.#u={getSetting:t.get.bind(t),setSetting:t.set.bind(t),element:this.el,type:this?.model?.get("widgetType")??this.container?.model?.get("elType")??null,id:this?.model?.get("id")??null,refreshView:this.refreshView.bind(this)}}refreshView(){this.invalidateRenderCache?.(),this.render()}renderOnChange(){this.#d("renderOnChange")}render(){const e=this.#u,t=e.type,n=t?getReplacement(t):null;n&&!this.#l&&(this.#l=new n(e)),this.#d("render")}onDestroy(){this.#d("onDestroy")}_afterRender(){this.#d("_afterRender")}_beforeRender(){this.#d("_beforeRender")}#d(e){const n=t.prototype[e].bind(this),r=this.#l?.shouldRenderReplacement(),o=r&&this.#l?.[e]?.bind(this.#l);if(!o||!r)return n();const s=this.#l?.originalMethodsToTrigger()[e]??"never";"before"===s&&n(),o(),"after"===s&&n()}}},createTemplatedElementTypeWithReplacements=({type:e,renderer:t,element:n})=>{const r=window,o=createViewWithReplacements({type:e,renderer:t,element:n});return class extends r.elementor.modules.elements.types.Widget{getType(){return e}getView(){return o}}}},"./packages/packages/core/editor-canvas/src/legacy/types.ts":function(e,t,n){n.r(t)},"./packages/packages/core/editor-canvas/src/mcp/canvas-mcp.ts":function(e,t,n){n.r(t),n.d(t,{initCanvasMcp:function(){return initCanvasMcp}});var r=n("./packages/packages/core/editor-canvas/src/mcp/resources/breakpoints-resource.ts"),o=n("./packages/packages/core/editor-canvas/src/mcp/resources/document-structure-resource.ts"),s=n("./packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts"),i=n("./packages/packages/core/editor-canvas/src/mcp/tools/build-composition/tool.ts"),a=n("./packages/packages/core/editor-canvas/src/mcp/tools/configure-element/tool.ts"),c=n("./packages/packages/core/editor-canvas/src/mcp/tools/get-element-config/tool.ts");const initCanvasMcp=e=>{const{setMCPDescription:t}=e;t('Everything related to creative design, layout, styling and building the pages, specifically element of type "widget"'),(0,s.initWidgetsSchemaResource)(e),(0,o.initDocumentStructureResource)(e),(0,i.initBuildCompositionsTool)(e),(0,c.initGetElementConfigTool)(e),(0,a.initConfigureElementTool)(e),(0,r.initBreakpointsResource)(e)}},"./packages/packages/core/editor-canvas/src/mcp/mcp-description.ts":function(e,t,n){n.r(t),n.d(t,{mcpDescription:function(){return s}});var r=n("./packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts");const o=r.WIDGET_SCHEMA_URI.replace("{widgetType}","element-schema"),s=`Elementor Canvas MCP\nThis MCP enables creation, configuration, and styling of elements on the Elementor canvas using the build_composition tool.\n\n# Core Concepts\n\n## PropValues Structure\nAll data in Elementor uses PropValues - a typed wrapper for values:\n\`\`\`json\n{\n "$$type": "the-prop-type-schema-kind",\n "value": "the-actual-value-as-defined-for-the-propType"\n}\n\`\`\`\nThe \`$$type\` defines how Elementor interprets the value. Providing the correct \`$$type\` is critical - incorrect types will be rejected.\n\n## Design System Resources\n- **Global Variables**: Reusable colors, sizes, and fonts (\`elementor://global-variables\`)\n- **Global Classes**: Reusable style sets that can be applied to elements (\`elementor://global-classes\`)\n- **Widget Schemas**: Configuration options for each widget type (\`${r.WIDGET_SCHEMA_URI}\`)\n- **Style Schema**: Common styles shared across all widgets and containers (\`${r.STYLE_SCHEMA_URI}\`)\n\n# Building Compositions with build_composition\n\nThe \`build_composition\` tool is the primary way to create elements. It accepts structure (XML), configuration, and styling in a single operation.\n\n## Complete Workflow\n\n### 1. Parse User Requirements\nUnderstand what needs to be built: structure, content, and styling.\n\n### 2. Check Global Resources FIRST\nAlways check existing resources before building:\n- List \`elementor://global-variables\` for available variables (colors, sizes, fonts)\n- List \`elementor://global-classes\` for available style sets\n- **Always prefer using existing global resources over creating inline styles**\n\n### 3. Retrieve Widget Schemas\nFor each widget you'll use:\n- List \`${r.WIDGET_SCHEMA_URI}\` to see available widgets\n- Retrieve configuration schema from \`${o}\` for each widget\n- Check the \`llm_guidance\` property to understand if a widget is a container (can have children)\n\n### 4. Build XML Structure\nCreate valid XML with configuration-ids:\n- Each element must have a unique \`configuration-id\` attribute\n- No text nodes, classes, or IDs in XML - structure only\n- Example:\n\`\`\`xml\n<e-container configuration-id="container-1">\n <e-heading configuration-id="heading-1" />\n <e-text configuration-id="text-1" />\n</e-container>\n\`\`\`\n\n### 5. Create elementConfig\nMap each configuration-id to its widget properties using PropValues:\n- Use correct \`$$type\` matching the widget's schema\n- Use global variables in PropValues where applicable\n- Example:\n\`\`\`json\n{\n "heading-1": {\n "text": { "$$type": "string", "value": "Welcome" },\n "tag": { "$$type": "string", "value": "h1" }\n }\n}\n\`\`\`\n\n### 6. Create stylesConfig\nMap each configuration-id to style PropValues from \`${r.STYLE_SCHEMA_URI}\`:\n- Use global variables for colors, sizes, and fonts\n- Example using global variable:\n\`\`\`json\n{\n "heading-1": {\n "color": { "$$type": "global-color-variable", "value": "primary-color-id" },\n "font-size": { "$$type": "size", "value": "2rem" }\n }\n}\n\`\`\`\n\n### 7. Execute build_composition\nCall the tool with your XML structure, elementConfig, and stylesConfig. The response will contain the created element IDs.\nAt the response you will also find llm_instructions for you to do afterwards, read and follow them!\n\n## Key Points\n\n- **PropValue Types**: Arrays that accept union types are typed as mixed arrays\n- **Visual Sizing**: Widget sizes MUST be defined in stylesConfig. Widget properties like image "size" control resolution, not visual appearance\n- **Global Variables**: Reference by ID in PropValues (e.g., \`{ "$$type": "global-color-variable", "value": "variable-id" }\`)\n- **Naming Conventions**: Use meaningful, purpose-based names (e.g., "primary-button", "heading-large"), not value-based names (e.g., "blue-style", "20px-padding")\n\n## Example: e-image PropValue Structure\n\`\`\`json\n{\n "$$type": "image",\n "value": {\n "src": {\n "$$type": "image-src",\n "value": {\n "url": { "$$type": "url", "value": "https://example.com/image.jpg" }\n }\n },\n "size": { "$$type": "string", "value": "full" }\n }\n}\n\`\`\`\nNote: The "size" property controls image resolution/loading, not visual size. Set visual dimensions in stylesConfig.\n`},"./packages/packages/core/editor-canvas/src/mcp/resources/breakpoints-resource.ts":function(e,t,n){n.r(t),n.d(t,{BREAKPOINTS_SCHEMA_URI:function(){return o},initBreakpointsResource:function(){return initBreakpointsResource}});var r=n("@elementor/editor-v1-adapters");const o="elementor://breakpoints/list",initBreakpointsResource=e=>{const{mcpServer:t,sendResourceUpdated:n}=e,getBreakpointsList=()=>{const{breakpoints:e}=window.elementor?.config?.responsive||{};return e?Object.values(e).filter(e=>e.is_enabled).map(e=>{const{direction:t,label:n,value:r}=e;return{label:n,constraint:t,value:r}}):[]},buildResourceResponse=()=>({contents:[{uri:o,mimeType:"application/json",text:JSON.stringify(getBreakpointsList())}]});t.resource("breakpoints ",o,()=>buildResourceResponse()),window.addEventListener((0,r.v1ReadyEvent)().name,()=>{n({uri:o,...buildResourceResponse()})})}},"./packages/packages/core/editor-canvas/src/mcp/resources/document-structure-resource.ts":function(e,t,n){n.r(t),n.d(t,{DOCUMENT_STRUCTURE_URI:function(){return o},initDocumentStructureResource:function(){return initDocumentStructureResource}});var r=n("@elementor/editor-v1-adapters");const o="elementor://document/structure",initDocumentStructureResource=e=>{const{mcpServer:t,sendResourceUpdated:n}=e;let s=null;const updateDocumentStructure=()=>{const e=getDocumentStructure(),t=JSON.stringify(e,null,2);t!==s&&(s=t,n({uri:o}))};(0,r.__privateListenTo)([(0,r.commandEndEvent)("document/elements/create"),(0,r.commandEndEvent)("document/elements/delete"),(0,r.commandEndEvent)("document/elements/move"),(0,r.commandEndEvent)("document/elements/copy"),(0,r.commandEndEvent)("document/elements/paste"),(0,r.commandEndEvent)("editor/documents/attach-preview")],updateDocumentStructure),updateDocumentStructure(),t.resource("document-structure",o,async()=>{const e=getDocumentStructure();return{contents:[{uri:o,text:JSON.stringify(e,null,2)}]}})};function getDocumentStructure(){const e=window,t=e.elementor?.documents?.getCurrent?.();if(!t)return{error:"No active document found"};const n=(t.container?.children||[]).map(e=>extractElementData(e));return{documentId:t.id,documentType:t.config.type,title:t.config.settings?.post_title||"Untitled",elements:n.filter(e=>null!==e)}}function extractElementData(e){if(!e||!e.model)return null;const t=e.model.attributes,n={id:t.id,elType:t.elType,widgetType:t.widgetType||void 0},r=t.title||e.model?.editor_settings?.title;return r&&(n.title=r),e.children&&e.children.length>0&&(n.children=e.children.map(e=>extractElementData(e)).filter(e=>null!==e)),n}},"./packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts":function(e,t,n){n.r(t),n.d(t,{BEST_PRACTICES_URI:function(){return l},STYLE_SCHEMA_URI:function(){return c},WIDGET_SCHEMA_URI:function(){return a},initWidgetsSchemaResource:function(){return initWidgetsSchemaResource}});var r=n("@elementor/editor-elements"),o=n("@elementor/editor-mcp"),s=n("@elementor/editor-props"),i=n("@elementor/editor-styles");const a="elementor://widgets/schema/{widgetType}",c="elementor://styles/schema/{category}",l="elementor://styles/best-practices",initWidgetsSchemaResource=e=>{const{mcpServer:t}=e;t.resource("styles-best-practices",l,async()=>({contents:[{uri:l,text:`# Styling best practices\nPrefer using "em" and "rem" values for text-related sizes, padding and spacing. Use percentages for dynamic sizing relative to parent containers.\nThis flexboxes are by default "flex" with "stretch" alignment. To ensure proper layout, define the "justify-content" and "align-items" as in the schema.\n\nWhen applicable for styles, apply style PropValues using the ${c}.\nThe css string must follow standard CSS syntax, with properties and values separated by semicolons, no selectors, or nesting rules allowed.`}]})),t.resource("styles-schema",new o.ResourceTemplate(c,{list:()=>({resources:[...Object.keys((0,i.getStylesSchema)())].filter(e=>"all"!==e).map(e=>({uri:`elementor://styles/schema/${e}`,name:"Style schema for "+e}))})}),{description:"Common styles schema for the specified category"},async(e,t)=>{const n="string"==typeof t.category?t.category:t.category?.[0],r=(0,i.getStylesSchema)()[n];if(!r)throw new Error(`No styles schema found for category: ${n}`);const o=s.Schema.propTypeToJsonSchema(r);return{contents:[{uri:e.toString(),mimeType:"application/json",text:JSON.stringify(s.Schema.enrichWithIntention(o,'Desired CSS in format "property: value;"'))}]}}),t.resource("widget-schema-by-type",new o.ResourceTemplate(a,{list:()=>{const e=(0,r.getWidgetsCache)()||{};return{resources:Object.keys(e||{}).filter(t=>e[t]?.atomic_props_schema&&!1!==e[t].meta?.llm_support).map(e=>({uri:`elementor://widgets/schema/${e}`,name:"Widget schema for "+e}))}}}),{description:"PropType schema for the specified widget type"},async(e,t)=>{const n="string"==typeof t.widgetType?t.widgetType:t.widgetType?.[0],o=(0,r.getWidgetsCache)()?.[n],i=o?.atomic_props_schema;if(!i||!o)throw new Error(`No prop schema found for element type: ${n}`);const a=Object.fromEntries(Object.entries(i).map(([e,t])=>[e,s.Schema.propTypeToJsonSchema(t)]));s.Schema.nonConfigurablePropKeys.forEach(e=>{delete a[e]});const c="string"==typeof o?.meta?.description?o.meta.description:void 0,l={},u=o?.base_styles;u&&Object.values(u).forEach(e=>{e.variants.forEach(e=>{Object.assign(l,e.props)})});const d=Object.keys(l).length>0,f={can_have_children:!!o?.meta?.is_container};return d&&(f.instructions="These are the default styles applied to the widget. Override only when necessary.",f.default_styles=l),{contents:[{uri:e.toString(),mimeType:"application/json",text:JSON.stringify({type:"object",properties:a,description:c,llm_guidance:f})}]}})}},"./packages/packages/core/editor-canvas/src/mcp/tools/build-composition/prompt.ts":function(e,t,n){n.r(t),n.d(t,{generatePrompt:function(){return generatePrompt}});var r=n("@elementor/editor-mcp"),o=n("./packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts");const generatePrompt=()=>{const e=(0,r.toolPrompts)("build-compositions");return e.description(`\n# REQUIRED RESOURCES (Read before use)\n1. [${o.WIDGET_SCHEMA_URI}] - Widget types, configuration schemas, and PropType definitions\n2. [${o.STYLE_SCHEMA_URI}] - Common styles schema shared by all widgets\n3. [elementor://global-classes] - Existing global classes (check FIRST to reuse)\n\n# THREE-PHASE WORKFLOW (MANDATORY)\n\n## Phase 1: Create Global Classes\n1. Analyze requirements → identify reusable patterns (typography, colors, spacing)\n2. Check [elementor://global-classes] for existing classes\n3. Use "create-global-class" tool for NEW reusable styles BEFORE building\n\n## Phase 2: Build Composition (THIS TOOL)\n4. Build valid XML with minimal inline styles (layout/positioning only)\n5. Avoid duplicating styles that should be global classes\n\n## Phase 3: Apply Classes\n6. Use "apply-global-class" tool to apply global classes to elements\n\n# CORE INSTRUCTIONS\n\n**Structure:**\n- Build valid XML using allowed widget tags (e.g., \`<e-button configuration-id="btn1"></e-button>\`)\n- Containers only: "e-flexbox", "e-div-block", "e-tabs"\n- Every element MUST have unique "configuration-id" attribute\n- No attributes, classes, IDs, or text nodes in XML\n\n**Configuration:**\n- Map each configuration-id to elementConfig (widget props) and stylesConfig (styles)\n- Follow exact PropType schemas from resources above\n- All PropValues need \`$$type\` property matching schema\n- Keep stylesConfig MINIMAL - layout only, NOT reusable styles\n\n**Validation:**\n- Parse XML before submission\n- Match all PropValues to schema (\`$$type\` required)\n- NO LINKS in any configuration\n- Retry on errors up to 10x, reading error messages carefully\n\n# DESIGN QUALITY: AVOID AI SLOP\n\n**Problem:** LLMs default to generic patterns (purple gradients, #333 grays, 24px headings, uniform spacing)\n**Solution:** Make intentional, distinctive choices. When unsure, choose bold over safe.\n\n## Typography Rules\n❌ AVOID: Inter/Roboto/Arial, small ratios (1.5x), medium weights (500-700)\n✅ USE: 3x+ size ratios, extreme weight contrasts (100/200 vs 800/900), tight headlines (1.1 line-height)\n\n## Color Rules\n❌ AVOID: Purple gradients, pure grays (#333/#666/#999), even distribution\n✅ USE: ONE dominant color (60-70%), 1-2 accent colors (10-15%), tinted neutrals (warm/cool grays)\n\n## Spacing Rules\n❌ AVOID: Uniform spacing (all 16px/24px), cramped layouts, centered everything\n✅ USE: Generous spacing (80-120px sections), dramatic variation (12px/48px/96px), asymmetric layouts\n\n## Background Rules\n❌ AVOID: Solid white/gray, single colors\n✅ USE: Layered gradients (2-3 layers), subtle patterns, alternating light/dark sections\n\n## Visual Hierarchy\n1. **Primary** (1 element): Largest, highest contrast, most space\n2. **Secondary** (2-3 elements): 40-60% of primary size\n3. **Tertiary** (rest): Minimal weight, muted\n\n**Contrast techniques:** 3x size differences, 300+ weight differences, color hierarchy (brand → neutral → muted)\n\n# DESIGN CONSTRAINTS (NEVER VIOLATE)\n\n**Typography:**\n- NEVER use Inter, Roboto, Arial, Helvetica as primary display fonts\n- NEVER use font-size ratios < 2.5x between headlines and body\n- NEVER use font-weight 500-700 for headlines (go lighter or heavier)\n\n**Color:**\n- PREFER not to use pure grays - use tinted neutrals (#2d2622, #faf8f6, not #333/#f5f5f5)\n- NEVER distribute colors evenly - commit to ONE dominant\n- NEVER use more than 3 core colors - except for info/alert/badges\n\n**Spacing:**\n- NEVER use uniform spacing\n- NEVER use < 4rem (64px) padding for major sections\n- NEVER center everything\n- PRIORITIZE rem based values over pixel based\n\n**Background:**\n- NEVER use solid #ffffff or #f5f5f5 without texture/gradients\n- ALWAYS layer 2+ gradient/color elements\n\n# WIDGET NOTES\n- Check \`llm_guidance\` property in widget schemas for context\n- Avoid SVG widgets (require content upload tools) - when must, prior to execution ensure assets uploaded\n- Apply style schema to containers for layout control\n\n# PARAMETERS (ALL MANDATORY)\n- **xmlStructure**: Valid XML with configuration-id attributes\n- **elementConfig**: Record of configuration-id → widget PropValues\n- **stylesConfig**: Record of configuration-id → style PropValues (layout only)\n `),e.example('\nA Heading and a button inside a flexbox\n{\n xmlStructure: "<e-flexbox configuration-id="flex1"><e-heading configuration-id="heading1"></e-heading><e-button configuration-id="button1"></e-button></e-flexbox>"\n elementConfig: {\n "flex1": {\n "tag": {\n "$$type": "string",\n "value": "section"\n },\n },\n stylesConfig: {\n "heading1": {\n "font-size": {\n "$$type": "size",\n "value": {\n "size": { "$$type": "number", "value": 24 },\n "unit": { "$$type": "string", "value": "px" }\n }\n },\n "color": {\n "$$type": "color",\n "value": { "$$type": "string", "value": "#333" }\n }\n }\n },\n}\n'),e.parameter("xmlStructure","**MANDATORY** A valid XML structure representing the composition to be built, using custom elementor tags, styling and configuration PropValues."),e.parameter("elementConfig","**MANDATORY** A record mapping configuration IDs to their corresponding configuration objects, defining the PropValues for each element created."),e.parameter("stylesConfig","**MANDATORY** A record mapping style PropTypes to their corresponding style configuration objects, defining the PropValues for styles to be applied to elements."),e.instruction("You will be provided the XML structure with element IDs. These IDs represent the actual elementor widgets created on the page/post.\nYou should use these IDs as reference for further configuration, styling or changing elements later on."),e.instruction('**CRITICAL WORKFLOW REMINDER**:\n1. FIRST: Create reusable global classes for typography, colors, spacing patterns using "create-global-class" tool\n2. SECOND: Use THIS tool with minimal inline styles (only layout & unique properties)\n3. THIRD: Apply global classes to elements using "apply-global-class" tool\n\nThis ensures maximum reusability and consistency across your design system. ALWAYS check [elementor://global-classes] for existing classes before creating new ones.'),e.prompt()}},"./packages/packages/core/editor-canvas/src/mcp/tools/build-composition/schema.ts":function(e,t,n){n.r(t),n.d(t,{inputSchema:function(){return s},outputSchema:function(){return i}});var r=n("@elementor/schema"),o=n("./packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts");const s={xmlStructure:r.z.string().describe("The XML structure representing the composition to be built"),elementConfig:r.z.record(r.z.string().describe("The configuration id"),r.z.record(r.z.string().describe("property name"),r.z.any().describe(`The PropValue for the property, refer to ${o.WIDGET_SCHEMA_URI}`))).describe("A record mapping element IDs to their configuration objects. REQUIRED"),stylesConfig:r.z.record(r.z.string().describe("The configuration id"),r.z.record(r.z.string().describe("StyleSchema property name"),r.z.any().describe(`The PropValue for the style property. MANDATORY, refer to [${o.STYLE_SCHEMA_URI}]`))).describe(`A record mapping element IDs to their styles configuration objects. Use the actual styles schema from [${o.STYLE_SCHEMA_URI}].`).default({})},i={errors:r.z.string().describe("Error message if the composition building failed").optional(),xmlStructure:r.z.string().describe("The built XML structure as a string. Must use this XML after completion of building the composition, it contains real IDs.").optional()}},"./packages/packages/core/editor-canvas/src/mcp/tools/build-composition/tool.ts":function(e,t,n){n.r(t),n.d(t,{initBuildCompositionsTool:function(){return initBuildCompositionsTool}});var r=n("@elementor/editor-elements"),o=n("./packages/packages/core/editor-canvas/src/composition-builder/composition-builder.ts"),s=n("./packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts"),i=n("./packages/packages/core/editor-canvas/src/mcp/utils/do-update-element-property.ts"),a=n("./packages/packages/core/editor-canvas/src/mcp/tools/build-composition/prompt.ts"),c=n("./packages/packages/core/editor-canvas/src/mcp/tools/build-composition/schema.ts");const initBuildCompositionsTool=e=>{const{addTool:t}=e;t({name:"build-compositions",description:(0,a.generatePrompt)(),schema:c.inputSchema,requiredResources:[{description:"Widgets schema",uri:s.WIDGET_SCHEMA_URI},{description:"Styles schema",uri:s.STYLE_SCHEMA_URI},{description:"Global Classes",uri:"elementor://global-classes"},{description:"Global Variables",uri:"elementor://global-variables"},{description:"Styles best practices",uri:s.BEST_PRACTICES_URI}],outputSchema:c.outputSchema,modelPreferences:{hints:[{name:"claude-sonnet-4-5"}]},handler:async e=>{const{xmlStructure:t,elementConfig:n,stylesConfig:s}=e;let a="";const c=[],l=[],u=(0,r.getContainer)("document");try{const e=o.CompositionBuilder.fromXMLString(t,{createElement:r.createElement,getWidgetsCache:r.getWidgetsCache});e.setElementConfig(n),e.setStylesConfig(s);const{configErrors:d,invalidStyles:f,rootContainers:p}=e.build(u);if(a=(new XMLSerializer).serializeToString(e.getXML()),d.length)throw c.push(...d.map(e=>new Error(e))),new Error("Configuration errors occurred during composition building.");l.push(...p),Object.entries(f).forEach(([e,t])=>{const n={value:t.join(";\n")};(0,i.doUpdateElementProperty)({elementId:e,propertyName:"_styles",propertyValue:{_styles:{custom_css:n}},elementType:"widget"})})}catch(e){c.push(e)}if(c.length){l.forEach(e=>{(0,r.deleteElement)({elementId:e.id,options:{useHistory:!1}})});const e=c.map(e=>"string"==typeof e?e:e instanceof Error?e.message||String(e):"object"==typeof e&&null!==e?JSON.stringify(e):String(e)).filter(e=>e&&""!==e.trim()&&"{}"!==e&&"null"!==e&&"undefined"!==e);if(0===e.length)throw new Error("Failed to build composition: Unknown error occurred. No error details available.");const t=`Failed to build composition with the following errors:\n\n${e.join("\n\n")}\n\n"Missing $$type" errors indicate that the configuration objects are invalid. Try again and apply **ALL** object entries with correct $$type.\nNow that you have these errors, fix them and try again. Errors regarding configuration objects, please check against the PropType schemas`;throw new Error(t)}return{xmlStructure:a,errors:c?.length?c.map(e=>"string"==typeof e?e:e.message).join("\n\n"):void 0,llm_instructions:'The composition was built successfully with element IDs embedded in the XML.\n\n**CRITICAL NEXT STEPS** (Follow in order):\n1. **Apply Global Classes**: Use "apply-global-class" tool to apply the global classes you created BEFORE building this composition\n - Check the created element IDs in the returned XML\n - Apply semantic classes (heading-primary, button-cta, etc.) to appropriate elements\n\n2. **Fine-tune if needed**: Use "configure-element" tool only for element-specific adjustments that don\'t warrant global classes\n\nRemember: Global classes ensure design consistency and reusability. Don\'t skip applying them!\n'}}})}},"./packages/packages/core/editor-canvas/src/mcp/tools/configure-element/prompt.ts":function(e,t,n){n.r(t),n.d(t,{configureElementToolPrompt:function(){return o}});var r=n("./packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts");const o=`Configure an existing element on the page.\n\n# **CRITICAL - REQUIRED INFORMATION (Must read before using this tool)**\n1. [${r.WIDGET_SCHEMA_URI}]\n Required to understand which widgets are available, and what are their configuration schemas.\n Every widgetType (i.e. e-heading, e-button) that is supported has it's own property schema, that you must follow in order to apply parameter values correctly.\n2. [${r.STYLE_SCHEMA_URI}]\n Required to understand the styles schema for the widgets. All widgets share the same styles schema, grouped by categories.\n Use this resource to understand which style properties are available for each element, and how to structure the "stylePropertiesToChange" parameter.\n3. If not sure about the PropValues schema, you can use the "get-element-configuration-values" tool to retreive the current PropValues configuration of the element.\n\nBefore using this tool, check the definitions of the elements PropTypes at the resource "widget-schema-by-type" at editor-canvas__elementor://widgets/schema/{widgetType}\nAll widgets share a common _style property for styling, which uses the common styles schema.\nRetreive and check the common styles schema at the resource list "styles-schema" at editor-canvas__elementor://styles/schema/{category}\n\n# Parameters\n- propertiesToChange: An object containing the properties to change, with their new values. MANDATORY. When updating a style only, provide an empty object.\n- stylePropertiesToChange: An object containing the style properties to change, with their new values. OPTIONAL\n- elementId: The ID of the element to configure. MANDATORY\n- elementType: The type of the element to configure (i.e. e-heading, e-button). MANDATORY\n\n# When to use this tool\nWhen a user requires to change anything in an element, such as updating text, colors, sizes, or other configurable properties.\nThis tool handles elements of type "widget".\nThis tool handles styling elements, using the "stylePropertiesToChange" parameter.\n\nTo CLEAR a property (i.e., set it to default or none), provide null as a value.\n\nThe element's schema must be known before using this tool.\nThe style schema must be known before using this tool.\n\nAttached resource link describing how PropType schema should be parsed as PropValue for this tool.\n\nRead carefully the PropType Schema of the element and it's styles, then apply correct PropValue according to the schema.\n\nPropValue structure:\n{\n "$$type": string, // MANDATORY as defined in the PropType schema under the "key" property\n value: unknown // The value according to the PropType schema for kinds of "array", use array with PropValues items inside. For "object", read the shape property of the PropType schema. For "plain", use strings.\n}\n\n<IMPORTANT>\nALWAYS MAKE SURE you have the PropType schemas for the element you are configuring, and the common-styles schema for styling. If you are not sure, retreive the schema from the resources mentioned above.\n</IMPORTANT>\n\nYou can use multiple property changes at once by providing multiple entries in the propertiesToChange object, including _style alongside non-style props.\nSome properties are nested, use the root property name, then objects with nested values inside, as the complete schema suggests.\n\nMake sure you have the "widget-schema-by-type" resource available to retreive the PropType schema for the element type you are configuring.\nMake sure you have to "styles-schema" resources available to retreive the common styles schema.\n\n# How to configure elements\nWe use a dedicated PropType Schema for configuring elements, including styles. When you configure an element, you must use the EXACT PropType Value as defined in the schema.\nFor styleProperties, use the style schema provided, as it also uses the PropType format.\nFor all non-primitive types, provide the key property as defined in the schema as $$type in the generated objecct, as it is MANDATORY for parsing.\n\nUse the EXACT "PROP-TYPE" Schema given, and ALWAYS include the "key" property from the original configuration for every property you are changing.\n\n# Example\n\`\`\`json\n{\n propertiesToChange: {\n // List of properties TO CHANGE, following the PropType schema for the element as defined in the resource [${r.WIDGET_SCHEMA_URI}]\n title: {\n $$type: 'string',\n value: 'New Title Text'\n },\n border: {\n $$type: 'boolean',\n value: false\n },\n },\n stylePropertiesToChange: {\n 'line-height': {\n $$type: 'size', // MANDATORY do not forget to include the correct $$type for every property\n value: {\n size: {\n $$type: 'number',\n value: 20\n },\n unit: {\n $$type: 'string',\n value: 'px'\n }\n }\n }\n },\n elementId: 'element-id',\n elementType: 'element-type'\n};\n\`\`\`\n\n<IMPORTANT>\nThe $$type property is MANDATORY for every value, it is required to parse the value and apply application-level effects.\n</IMPORTANT>\n`},"./packages/packages/core/editor-canvas/src/mcp/tools/configure-element/schema.ts":function(e,t,n){n.r(t),n.d(t,{inputSchema:function(){return s},outputSchema:function(){return i}});var r=n("@elementor/schema"),o=n("./packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts");const s={propertiesToChange:r.z.record(r.z.string().describe("The property name."),r.z.any().describe(`PropValue, refer to [${o.WIDGET_SCHEMA_URI}] by correct type, as appears in elementType`),r.z.any()).describe("An object record containing property names and their new values to be set on the element"),stylePropertiesToChange:r.z.record(r.z.string().describe("The style property name"),r.z.any().describe(`The style PropValue, refer to [${o.STYLE_SCHEMA_URI}] how to generate values`),r.z.any()).describe("An object record containing style property names and their new values to be set on the element").default({}),elementType:r.z.string().describe("The type of the element to retreive the schema"),elementId:r.z.string().describe("The unique id of the element to configure")},i={success:r.z.boolean().describe("Whether the configuration change was successful, only if propertyName and propertyValue are provided")}},"./packages/packages/core/editor-canvas/src/mcp/tools/configure-element/tool.ts":function(e,t,n){n.r(t),n.d(t,{initConfigureElementTool:function(){return initConfigureElementTool}});var r=n("./packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts"),o=n("./packages/packages/core/editor-canvas/src/mcp/utils/do-update-element-property.ts"),s=n("./packages/packages/core/editor-canvas/src/mcp/utils/validate-input.ts"),i=n("./packages/packages/core/editor-canvas/src/mcp/tools/configure-element/prompt.ts"),a=n("./packages/packages/core/editor-canvas/src/mcp/tools/configure-element/schema.ts");const initConfigureElementTool=e=>{const{addTool:t}=e;t({name:"configure-element",description:i.configureElementToolPrompt,schema:a.inputSchema,outputSchema:a.outputSchema,requiredResources:[{description:"Widgets schema",uri:r.WIDGET_SCHEMA_URI},{description:"Styles schema",uri:r.STYLE_SCHEMA_URI}],modelPreferences:{hints:[{name:"claude-sonnet-4-5"}],intelligencePriority:.8,speedPriority:.7},handler:({elementId:e,propertiesToChange:t,elementType:n,stylePropertiesToChange:r})=>{const i=Object.entries(t),{valid:a,errors:c}=s.validateInput.validatePropSchema(n,t),{valid:l,errors:u}=s.validateInput.validateStyles(r||{});if(!a){const t=`Failed to configure element "${e}" due to invalid properties: ${c?.join("\n- ")}`;throw new Error(t)}if(!l){const t=`Failed to configure element "${e}" due to invalid style properties: ${u?.join("\n- ")}`;throw new Error(t)}for(const[t,r]of i)try{(0,o.doUpdateElementProperty)({elementId:e,elementType:n,propertyName:t,propertyValue:r})}catch(r){const o=createUpdateErrorMessage({propertyName:t,elementId:e,elementType:n,error:r,propertyType:"prop"});throw new Error(o)}for(const[t,s]of Object.entries(r||{}))try{(0,o.doUpdateElementProperty)({elementId:e,elementType:n,propertyName:"_styles",propertyValue:{[t]:s}})}catch(r){const o=createUpdateErrorMessage({propertyName:`(style) ${t}`,elementId:e,elementType:n,propertyType:"style",error:r});throw new Error(o)}return{success:!0}}})};function createUpdateErrorMessage(e){const{propertyName:t,elementId:n,elementType:o,error:s,propertyType:i}=e;return`Failed to update property "${t}" on element "${n}": ${s.message}.\n${"prop"===i?`\nCheck the element's PropType schema at the resource [${r.WIDGET_SCHEMA_URI.replace("{widgetType}",o)}] for type "${o}" to ensure the property exists and the value matches the expected PropType.\nNow that you have this information, ensure you have the schema and try again.`:`\nCheck the styles schema at the resource [${r.STYLE_SCHEMA_URI.replace("{category}",t)}] at editor-canvas__elementor://styles/schema/{category} to ensure the style property exists and the value matches the expected PropType.\n`};\n}`}},"./packages/packages/core/editor-canvas/src/mcp/tools/get-element-config/tool.ts":function(e,t,n){n.r(t),n.d(t,{initGetElementConfigTool:function(){return initGetElementConfigTool}});var r=n("@elementor/editor-elements"),o=n("@elementor/editor-props"),s=n("@elementor/schema");const i={elementId:s.z.string()},a={properties:s.z.record(s.z.string(),s.z.any()).describe("A record mapping PropTypes to their corresponding PropValues"),style:s.z.record(s.z.string(),s.z.any()).describe("A record mapping StyleSchema properties to their corresponding PropValues"),childElements:s.z.array(s.z.object({id:s.z.string(),elementType:s.z.string(),childElements:s.z.array(s.z.any()).describe("An array of child element IDs, when applicable, same structure recursively")})).describe("An array of child element IDs, when applicable, with recursive structure")},structuredElements=e=>(e.children||[]).map(e=>({id:e.id,elementType:e.model.get("elType")||e.model.get("widgetType")||"unknown",childElements:structuredElements(e)})),initGetElementConfigTool=e=>{const{addTool:t}=e;t({name:"get-element-configuration-values",description:"Retrieve the element's configuration PropValues for a specific element by unique ID.",schema:i,outputSchema:a,modelPreferences:{intelligencePriority:.6,speedPriority:.9},handler:async({elementId:e})=>{const t=(0,r.getContainer)(e);if(!t)throw new Error(`Element with ID ${e} not found.`);const n=t.settings,s=(0,r.getWidgetsCache)()?.[t.model.get("widgetType")||t.model.get("elType")||""]?.atomic_props_schema;if(!n||!s)throw new Error(`No settings or prop schema found for element ID: ${e}`);const i={},a={};o.Schema.configurableKeys(s).forEach(e=>{i[e]=structuredClone(n.get(e))});const c=(0,r.getElementStyles)(e)||{},l=Object.values(c).find(e=>"local"===e.label);if(l){const e=l.variants.find(e=>"desktop"===e.meta.breakpoint&&!e.meta.state);if(e){const t=e.props||{};Object.keys(t).forEach(e=>{void 0!==t[e]&&(a[e]=structuredClone(t[e]))}),e.custom_css&&(a.custom_css=atob(e.custom_css.raw))}}return{properties:{...i},style:{...a},childElements:structuredElements(t)}}})}},"./packages/packages/core/editor-canvas/src/mcp/utils/do-update-element-property.ts":function(e,t,n){n.r(t),n.d(t,{doUpdateElementProperty:function(){return doUpdateElementProperty},resolvePropValue:function(){return resolvePropValue}});var r=n("@elementor/editor-elements"),o=n("@elementor/editor-props"),s=n("@elementor/editor-styles");function resolvePropValue(e,t){const n=window.elementorV2.editorVariables.Utils;return o.Schema.adjustLlmPropValueSchema(e,{forceKey:t,transformers:n.globalVariablesLLMResolvers})}const doUpdateElementProperty=e=>{const{elementId:t,propertyName:n,propertyValue:i,elementType:a}=e;if("_styles"===n){const e=(0,r.getElementStyles)(t)||{},n=i,a=(0,s.getStylesSchema)(),c=Object.fromEntries(Object.entries(n).map(([e,t])=>{if("custom_css"===e)return[e,t];const{key:n,kind:r}=a?.[e]||{};if(!n&&"union"!==r)throw new Error(`_styles property ${e} is not supported.`);return[e,resolvePropValue(t,n)]}));let l;Object.keys(n).forEach(e=>{const t=a[e];if("custom_css"===e){let t=n[e];return"object"==typeof t&&t&&t.value&&(t=String(t.value)),t||(t=""),void(l={raw:btoa(t)})}if(!!!t)throw new Error(`Style property ${e} is not supported.`);if("plain"===t.kind&&"object"!=typeof n[e]){const r=(0,o.getPropSchemaFromCache)(t.key);if(r){const t=r.create(n[e]);n[e]=t}}}),delete c.custom_css;const u=Object.values(e).find(e=>"local"===e.label);return void(u?(0,r.updateElementStyle)({elementId:t,styleId:u.id,meta:{breakpoint:"desktop",state:null},...void 0!==l?{custom_css:l}:{},props:{...c}}):(0,r.createElementStyle)({elementId:t,...void 0!==l?{custom_css:l}:{},classesProp:"classes",label:"local",meta:{breakpoint:"desktop",state:null},props:{...c}}))}const c=(0,r.getWidgetsCache)()?.[a]?.atomic_props_schema;if(!c)throw new Error(`No prop schema found for element type: ${a}`);if(!c[n]){const e=Object.keys(c);throw new Error(`Property "${n}" does not exist on element type "${a}". Available properties are: ${e.join(", ")}`)}const l=resolvePropValue(i,c[n].key);(0,r.updateElementSettings)({id:t,props:{[n]:l},withHistory:!1})}},"./packages/packages/core/editor-canvas/src/mcp/utils/validate-input.ts":function(e,t,n){n.r(t),n.d(t,{validateInput:function(){return c}});var r=n("@elementor/editor-elements"),o=n("@elementor/editor-props"),s=n("@elementor/editor-styles"),i=n("./packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts");let a=null;const c={get widgetsSchema(){if(!a){const e={},t=(0,r.getWidgetsCache)();if(!t)return{};Object.entries(t).forEach(([t,n])=>{n.atomic_props_schema&&(e[t]=structuredClone(n.atomic_props_schema))}),a=e}return a},validateProps(e,t,n=[]){if(!e)throw new Error("No schema provided for validation.");const r=[];let s=!1;return Object.entries(t).forEach(([t,a])=>{if(n.includes(t))return;const c=e[t];if(c)if(o.Schema.isPropKeyConfigurable(t)){const{valid:e}=o.Schema.validatePropValue(c,a);e||r.push(`Invalid property "${t}". Validate input with resource [${i.STYLE_SCHEMA_URI.replace("{category}",t)}]`)}else r.push(`Property "${t}" is not configurable.`);else r.push(`Property "${t}" is not defined in the schema.`),s=!0}),s&&r.push("Available properties: "+Object.keys(e).join(", ")),{errors:r,valid:0===r.length}},validateStyles(e){const t=(0,s.getStylesSchema)(),n=e.custom_css,r=this.validateProps(t,e,["custom_css","$intention"]),appendInvalidCustomCssErr=()=>{r.valid=!1,r.errors=r.errors||[],r.errors.push('Invalid property "custom_css". Expected a string value.')};return n&&"object"==typeof n?"string"!=typeof n.value&&appendInvalidCustomCssErr():"string"!=typeof n&&null!=n&&appendInvalidCustomCssErr(),r},validatePropSchema(e,t,n=[]){const r=this.widgetsSchema[e];return r?this.validateProps(r,t,n):{valid:!1,errors:[`No schema found for widget type "${e}".`]}}}},"./packages/packages/core/editor-canvas/src/prevent-link-in-link-commands.ts":function(e,t,n){n.r(t),n.d(t,{initLinkInLinkPrevention:function(){return initLinkInLinkPrevention}});var r=n("@elementor/editor-elements"),o=n("@elementor/editor-notifications"),s=n("@elementor/editor-v1-adapters"),i=n("@wordpress/i18n");function initLinkInLinkPrevention(){(0,s.blockCommand)({command:"document/elements/paste",condition:blockLinkInLinkPaste}),(0,s.blockCommand)({command:"document/elements/move",condition:blockLinkInLinkMove})}const a={href:"https://go.elementor.com/element-link-inside-link-infotip",target:"_blank",color:"inherit",variant:"text",sx:{marginInlineStart:"20px"},children:"Learn more"};function blockLinkInLinkPaste(e){const{containers:t=[e.container],storageType:n}=e,r=t;if("localstorage"!==n)return!1;const s=window?.elementorCommon?.storage?.get();if(!s?.clipboard?.elements)return!1;const c=s.clipboard.elements,l={type:"default",message:(0,i.__)("To paste a link to this element, first remove the link from it's parent container.","elementor"),id:"paste-in-link-blocked",additionalActionProps:[a]},u=shouldBlock(c,r);return u&&(0,o.notify)(l),u}function blockLinkInLinkMove(e){const{containers:t=[e.container],target:n}=e,r=t,s=n,c={type:"default",message:(0,i.__)("To drag a link to this element, first remove the link from it's parent container.","elementor"),id:"move-in-link-blocked",additionalActionProps:[a]},l=shouldBlock(r,[s]);return l&&(0,o.notify)(c),l}function shouldBlock(e,t){if(!e?.length||!t?.length)return!1;if(!e.some(e=>!!e?.id&&((0,r.isElementAnchored)(e.id)||!!(0,r.getAnchoredDescendantId)(e.id))))return!1;return t.some(e=>!!e?.id&&((0,r.isElementAnchored)(e.id)||!!(0,r.getAnchoredAncestorId)(e.id)))}},"./packages/packages/core/editor-canvas/src/renderers/create-dom-renderer.ts":function(e,t,n){n.r(t),n.d(t,{createDomRenderer:function(){return createDomRenderer}});var r=n("@elementor/twing");function createDomRenderer(){const e=(0,r.createArrayLoader)({}),t=(0,r.createEnvironment)(e);return t.registerEscapingStrategy(escapeHtmlTag,"html_tag"),t.registerEscapingStrategy(escapeURL,"full_url"),{register:e.setTemplate,render:t.render}}function escapeHtmlTag(e){return["a","article","aside","button","div","footer","h1","h2","h3","h4","h5","h6","header","main","nav","p","section","span"].includes(e)?e:"div"}function escapeURL(e){const t=["http:","https:","mailto:","tel:"];try{const n=new URL(e);return t.includes(n.protocol)?e:""}catch{return""}}},"./packages/packages/core/editor-canvas/src/renderers/create-props-resolver.ts":function(e,t,n){n.r(t),n.d(t,{createPropsResolver:function(){return createPropsResolver}});var r=n("@elementor/editor-props"),o=n("./packages/packages/core/editor-canvas/src/renderers/multi-props.ts");const s=3;function createPropsResolver({transformers:e,schema:t,onPropResolve:n}){async function resolve({props:e,schema:r,signal:s,renderContext:i}){r=r??t;const a=Promise.all(Object.entries(r).map(async([t,r])=>{const a=e[t]??r.default,c=await transform({value:a,key:t,type:r,signal:s,renderContext:i});return n?.({key:t,value:c}),(0,o.isMultiProps)(c)?(0,o.getMultiPropsValue)(c):{[t]:c}}));return Object.assign({},...(await a).filter(Boolean))}async function transform({value:t,key:n,type:o,signal:i,depth:a=0,renderContext:c}){if(null==t)return null;if(!(0,r.isTransformable)(t))return t;if(a>s)return null;if(!0===t.disabled)return null;let l=o;if("union"===o.kind&&(l=o.prop_types[t.$$type],!l))return null;if(t.$$type!==l.key)return null;let u=t.value;"object"===l.kind&&(u=await resolve({props:u,schema:l.shape,signal:i,renderContext:c})),"array"===l.kind&&(u=await Promise.all(u.map(e=>transform({value:e,key:n,type:l.item_prop_type,depth:a,signal:i,renderContext:c}))));const d=e.get(t.$$type);if(!d)return null;try{return transform({value:await d(u,{key:n,signal:i,renderContext:c,propType:o}),key:n,type:o,signal:i,depth:a+1,renderContext:c})}catch{return null}}return resolve}},"./packages/packages/core/editor-canvas/src/renderers/create-styles-renderer.ts":function(e,t,n){n.r(t),n.d(t,{createStylesRenderer:function(){return createStylesRenderer}});var r=n("@elementor/editor-styles"),o=n("@elementor/utils"),s=n("./packages/packages/core/editor-canvas/src/renderers/errors.ts");const i={class:"."};function createStylesRenderer({resolve:e,breakpoints:t,selectorPrefix:n=""}){return async({styles:r,signal:s})=>{const i=r.map(async r=>{const i=Object.values(r.variants).map(async i=>{const a=await async function propsToCss({props:e,resolve:t,signal:n}){const r=await t({props:e,signal:n});return Object.entries(r).reduce((e,[t,n])=>(null===n||e.push(t+":"+n+";"),e),[]).join("")}({props:i.props,resolve:e,signal:s}),c=function customCssToString(e){const t=(0,o.decodeString)(e?.raw||"");if(!t.trim())return"";return t+"\n"}(i.custom_css);return createStyleWrapper().for(r.cssName,r.type).withPrefix(n).withState(i.meta.state).withMediaQuery(i.meta.breakpoint?t[i.meta.breakpoint]:null).wrap(a+c)}),a=await Promise.all(i);return{id:r.id,breakpoint:r?.variants[0]?.meta?.breakpoint||"desktop",value:a.join(""),state:r?.variants[0]?.meta?.state||null}});return await Promise.all(i)}}function createStyleWrapper(e="",t){return{for:(n,r)=>{const o=i[r];if(!o)throw new s.UnknownStyleTypeError({context:{type:r}});return createStyleWrapper(`${e}${o}${n}`,t)},withPrefix:n=>createStyleWrapper([n,e].filter(Boolean).join(" "),t),withState:n=>createStyleWrapper((0,r.getSelectorWithState)(e,n),t),withMediaQuery:n=>{if(!n?.type)return createStyleWrapper(e,t);const r=`${n.type}:${n.width}px`;return createStyleWrapper(e,e=>`@media(${r}){${e}}`)},wrap:n=>{const r=`${e}{${n}}`;return t?t(r):r}}}},"./packages/packages/core/editor-canvas/src/renderers/errors.ts":function(e,t,n){n.r(t),n.d(t,{UnknownStyleStateError:function(){return s},UnknownStyleTypeError:function(){return o}});var r=n("@elementor/utils");const o=(0,r.createError)({code:"unknown_style_type",message:"Unknown style type"}),s=(0,r.createError)({code:"unknown_style_state",message:"Unknown style state"})},"./packages/packages/core/editor-canvas/src/renderers/multi-props.ts":function(e,t,n){n.r(t),n.d(t,{createMultiPropsValue:function(){return createMultiPropsValue},getMultiPropsValue:function(){return getMultiPropsValue},isMultiProps:function(){return isMultiProps}});const isMultiProps=e=>!!e&&"object"==typeof e&&"$$multi-props"in e&&!0===e["$$multi-props"],createMultiPropsValue=e=>({"$$multi-props":!0,value:e}),getMultiPropsValue=e=>e.value},"./packages/packages/core/editor-canvas/src/settings-transformers-registry.ts":function(e,t,n){n.r(t),n.d(t,{settingsTransformersRegistry:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformers-registry.ts").createTransformersRegistry)()},"./packages/packages/core/editor-canvas/src/style-commands/init-style-commands.ts":function(e,t,n){n.r(t),n.d(t,{initStyleCommands:function(){return initStyleCommands}});var r=n("./packages/packages/core/editor-canvas/src/style-commands/paste-style.ts"),o=n("./packages/packages/core/editor-canvas/src/style-commands/reset-style.ts");function initStyleCommands(){(0,r.initPasteStyleCommand)(),(0,o.initResetStyleCommand)()}},"./packages/packages/core/editor-canvas/src/style-commands/paste-style.ts":function(e,t,n){n.r(t),n.d(t,{initPasteStyleCommand:function(){return initPasteStyleCommand}});var r=n("@elementor/editor-elements"),o=n("@elementor/editor-props"),s=n("@elementor/editor-v1-adapters"),i=n("./packages/packages/core/editor-canvas/src/style-commands/undoable-actions/paste-element-style.ts"),a=n("./packages/packages/core/editor-canvas/src/style-commands/utils.ts");function initPasteStyleCommand(){const e=(0,i.undoablePasteElementStyle)();(0,s.blockCommand)({command:"document/elements/paste-style",condition:a.hasAtomicWidgets}),(0,s.__privateListenTo)((0,s.commandStartEvent)("document/elements/paste-style"),t=>function pasteStyles(e,t){const{containers:n=[e.container],storageKey:s}=e,i=n.filter(a.isAtomicWidget);if(!i.length)return;const c=(0,a.getClipboardElements)(s),[l]=c??[],u=(0,r.getContainer)(l.id);if(!l||!u||!(0,a.isAtomicWidget)(u))return;const d=l.styles,f=Object.values(d??{})[0],p=function getClassesWithoutLocalStyle(e,t){const n=(0,a.getClassesProp)(e);if(!n)return[];const o=(0,r.getElementSetting)(e.id,n);return o?.value.filter(e=>e!==t?.id)??[]}(u,f);p.length&&function pasteClasses(e,t){e.forEach(e=>{const n=(0,a.getClassesProp)(e);if(!n)return;const s=(0,r.getElementSetting)(e.id,n),i=o.classesPropTypeUtil.extract(s)??[],c=o.classesPropTypeUtil.create(Array.from(new Set([...t,...i])));(0,r.updateElementSettings)({id:e.id,props:{[n]:c}})})}(i,p);f&&t({containers:i,newStyle:f})}(t.args,e))}},"./packages/packages/core/editor-canvas/src/style-commands/reset-style.ts":function(e,t,n){n.r(t),n.d(t,{initResetStyleCommand:function(){return initResetStyleCommand}});var r=n("@elementor/editor-v1-adapters"),o=n("./packages/packages/core/editor-canvas/src/style-commands/undoable-actions/reset-element-style.ts"),s=n("./packages/packages/core/editor-canvas/src/style-commands/utils.ts");function initResetStyleCommand(){const e=(0,o.undoableResetElementStyle)();(0,r.blockCommand)({command:"document/elements/reset-style",condition:s.hasAtomicWidgets}),(0,r.__privateListenTo)((0,r.commandStartEvent)("document/elements/reset-style"),t=>function resetStyles(e,t){const{containers:n=[e.container]}=e,r=n.filter(s.isAtomicWidget);if(!r.length)return;t({containers:r})}(t.args,e))}},"./packages/packages/core/editor-canvas/src/style-commands/undoable-actions/paste-element-style.ts":function(e,t,n){n.r(t),n.d(t,{undoablePasteElementStyle:function(){return undoablePasteElementStyle}});var r=n("@elementor/editor-elements"),o=n("@elementor/editor-styles-repository"),s=n("@elementor/editor-v1-adapters"),i=n("@wordpress/i18n"),a=n("./packages/packages/core/editor-canvas/src/style-commands/utils.ts");const undoablePasteElementStyle=()=>(0,s.undoable)({do:({containers:e,newStyle:t})=>e.map(e=>{const n=e.id,s=(0,a.getClassesProp)(e);if(!s)return null;const i=(0,r.getElementStyles)(e.id),[c,l]=Object.entries(i??{})[0]??[],u=Object.keys(l??{}).length?l:null,d={styleId:c,originalStyle:u};if(c)t.variants.forEach(({meta:e,props:t,custom_css:o})=>{(0,r.updateElementStyle)({elementId:n,styleId:c,meta:e,props:t,custom_css:o})});else{const[e]=t.variants,i=t.variants.slice(1);d.styleId=(0,r.createElementStyle)({elementId:n,classesProp:s,label:o.ELEMENTS_STYLES_RESERVED_LABEL,...e,additionalVariants:i})}return d}),undo:({containers:e},t)=>{e.forEach((e,n)=>{const s=t[n];if(!s)return;if(!s.originalStyle)return void(0,r.deleteElementStyle)(e.id,s.styleId);const i=(0,a.getClassesProp)(e);if(!i)return;const[c]=s.originalStyle.variants,l=s.originalStyle.variants.slice(1);(0,r.createElementStyle)({elementId:e.id,classesProp:i,label:o.ELEMENTS_STYLES_RESERVED_LABEL,styleId:s.styleId,...c,additionalVariants:l})})}},{title:({containers:e})=>(0,a.getTitleForContainers)(e),subtitle:(0,i.__)("Style Pasted","elementor")})},"./packages/packages/core/editor-canvas/src/style-commands/undoable-actions/reset-element-style.ts":function(e,t,n){n.r(t),n.d(t,{undoableResetElementStyle:function(){return undoableResetElementStyle}});var r=n("@elementor/editor-elements"),o=n("@elementor/editor-styles-repository"),s=n("@elementor/editor-v1-adapters"),i=n("@wordpress/i18n"),a=n("./packages/packages/core/editor-canvas/src/style-commands/utils.ts");const undoableResetElementStyle=()=>(0,s.undoable)({do:({containers:e})=>e.map(e=>{const t=e.model.get("id"),n=(0,r.getElementStyles)(t);return Object.keys(n??{}).forEach(e=>(0,r.deleteElementStyle)(t,e)),n}),undo:({containers:e},t)=>{e.forEach((e,n)=>{const s=(0,a.getClassesProp)(e);if(!s)return;const i=e.model.get("id"),c=t[n];Object.entries(c??{}).forEach(([e,t])=>{const[n]=t.variants,a=t.variants.slice(1);(0,r.createElementStyle)({elementId:i,classesProp:s,styleId:e,label:o.ELEMENTS_STYLES_RESERVED_LABEL,...n,additionalVariants:a})})})}},{title:({containers:e})=>(0,a.getTitleForContainers)(e),subtitle:(0,i.__)("Style Reset","elementor")})},"./packages/packages/core/editor-canvas/src/style-commands/utils.ts":function(e,t,n){n.r(t),n.d(t,{getClassesProp:function(){return getClassesProp},getClipboardElements:function(){return getClipboardElements},getTitleForContainers:function(){return getTitleForContainers},hasAtomicWidgets:function(){return hasAtomicWidgets},isAtomicWidget:function(){return isAtomicWidget}});var r=n("@elementor/editor-elements"),o=n("@elementor/editor-props"),s=n("@wordpress/i18n");function hasAtomicWidgets(e){const{containers:t=[e.container]}=e;return t.some(isAtomicWidget)}function isAtomicWidget(e){return!!e&&Boolean(getContainerSchema(e))}function getClassesProp(e){const t=getContainerSchema(e);if(!t)return null;const[n]=Object.entries(t).find(([,e])=>"plain"===e.kind&&e.key===o.CLASSES_PROP_KEY)??[];return n??null}function getContainerSchema(e){const t=e?.model.get("widgetType")||e?.model.get("elType"),n=(0,r.getWidgetsCache)(),o=n?.[t];return o?.atomic_props_schema??null}function getClipboardElements(e="clipboard"){try{const t=JSON.parse(localStorage.getItem("elementor")??"{}");return t[e]?.elements}catch{return}}function getTitleForContainers(e){return e.length>1?(0,s.__)("Elements","elementor"):(0,r.getElementLabel)(e[0].id)}},"./packages/packages/core/editor-canvas/src/style-transformers-registry.ts":function(e,t,n){n.r(t),n.d(t,{styleTransformersRegistry:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformers-registry.ts").createTransformersRegistry)()},"./packages/packages/core/editor-canvas/src/sync/drag-element-from-panel.ts":function(e,t,n){n.r(t),n.d(t,{endDragElementFromPanel:function(){return endDragElementFromPanel},startDragElementFromPanel:function(){return startDragElementFromPanel}});const r=["elementor-element"],endDragElementFromPanel=()=>{getElementorChannels()?.panelElements?.trigger("element:drag:end")},startDragElementFromPanel=(e,t)=>{setDragGroups(t);const n=getElementorChannels();n?.editor.reply("element:dragged",null),n?.panelElements.reply("element:selected",getLegacyPanelElementView(e)).trigger("element:drag:start")},setDragGroups=e=>{const t={groups:getDragGroups(e)};e.dataTransfer?.setData(JSON.stringify(t),"true")},getDragGroups=e=>{const t=e.dataTransfer?.getData("text/plain");return t?JSON.parse(t).groups:r},getElementorChannels=()=>{const e=window,t=e.elementor?.channels;if(!t)throw new Error("Elementor channels not found: Elementor editor is not initialized or channels are unavailable.");return t},getLegacyPanelElementView=({settings:e,...t})=>{const n=window,r=n.elementor?.modules?.elements?.models?.Element;if(!r)throw new Error("Elementor legacy Element model not found in editor modules");return{model:new r({...t,custom:{isPreset:!!e,preset_settings:e}})}}},"./packages/packages/core/editor-canvas/src/sync/enqueue-font.ts":function(e,t,n){n.r(t),n.d(t,{enqueueFont:function(){return enqueueFont}});const enqueueFont=(e,t="preview")=>{const n=window;return n.elementor?.helpers?.enqueueFont?.(e,t)??null}},"./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts":function(e,t,n){function createTransformer(e){return e}n.r(t),n.d(t,{createTransformer:function(){return createTransformer}})},"./packages/packages/core/editor-canvas/src/transformers/create-transformers-registry.ts":function(e,t,n){function createTransformersRegistry(){const e={};let t=null;return{register(t,n){return e[t]=n,this},registerFallback(e){return t=e,this},get(n){return e[n]??t},all(){return{...e}}}}n.r(t),n.d(t,{createTransformersRegistry:function(){return createTransformersRegistry}})},"./packages/packages/core/editor-canvas/src/transformers/settings/attributes-transformer.ts":function(e,t,n){n.r(t),n.d(t,{attributesTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(()=>"")},"./packages/packages/core/editor-canvas/src/transformers/settings/classes-transformer.ts":function(e,t,n){n.r(t),n.d(t,{createClassesTransformer:function(){return createClassesTransformer}});var r=n("@elementor/editor-styles-repository"),o=n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts");function createClassesTransformer(){const e=new Map;return(0,o.createTransformer)(t=>t.map(t=>function transformClassId(e,t){if(!t.has(e)){const n=r.stylesRepository.getProviders().find(t=>t.actions.all().find(t=>t.id===e));if(!n)return e;t.set(e,n.getKey())}const n=t.get(e),o=r.stylesRepository.getProviderByKey(n);return o?.actions.resolveCssName(e)??e}(t,e)).filter(Boolean))}},"./packages/packages/core/editor-canvas/src/transformers/settings/date-time-transformer.ts":function(e,t,n){n.r(t),n.d(t,{dateTimeTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>e.map(e=>{const t=(e.date||"").trim(),n=(e.time||"").trim();return t||n?`${t} ${n}`.trim():""}).join(" "))},"./packages/packages/core/editor-canvas/src/transformers/settings/link-transformer.ts":function(e,t,n){n.r(t),n.d(t,{linkTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(({destination:e,isTargetBlank:t,tag:n})=>({href:"number"==typeof e?"#post-id-"+e:e,target:t?"_blank":"_self",tag:n??"a"}))},"./packages/packages/core/editor-canvas/src/transformers/settings/query-transformer.ts":function(e,t,n){n.r(t),n.d(t,{queryTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(({id:e})=>e??null)},"./packages/packages/core/editor-canvas/src/transformers/shared/image-src-transformer.ts":function(e,t,n){n.r(t),n.d(t,{imageSrcTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>({id:e.id??null,url:e.url??null}))},"./packages/packages/core/editor-canvas/src/transformers/shared/image-transformer.ts":function(e,t,n){n.r(t),n.d(t,{imageTransformer:function(){return o}});var r=n("@elementor/wp-media");const o=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(async e=>{const{src:t,size:n}=e;if(!t?.id)return t?.url?{src:t.url}:null;const o=await(0,r.getMediaAttachment)({id:t.id}),s=o?.sizes?.[n??""];return s?{src:s.url,height:s.height,width:s.width}:o?{src:o.url,height:o.height,width:o.width}:null})},"./packages/packages/core/editor-canvas/src/transformers/shared/plain-transformer.ts":function(e,t,n){n.r(t),n.d(t,{plainTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>e)},"./packages/packages/core/editor-canvas/src/transformers/styles/background-color-overlay-transformer.ts":function(e,t,n){n.r(t),n.d(t,{backgroundColorOverlayTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>{const{color:t=null}=e;return t?`linear-gradient(${t}, ${t})`:null})},"./packages/packages/core/editor-canvas/src/transformers/styles/background-gradient-overlay-transformer.ts":function(e,t,n){n.r(t),n.d(t,{backgroundGradientOverlayTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>"radial"===e.type?`radial-gradient(circle at ${e.positions}, ${e.stops})`:`linear-gradient(${e.angle}deg, ${e.stops})`)},"./packages/packages/core/editor-canvas/src/transformers/styles/background-image-overlay-transformer.ts":function(e,t,n){n.r(t),n.d(t,{backgroundImageOverlayTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>{const{image:t,size:n=null,position:r=null,repeat:o=null,attachment:s=null}=e;if(!t)return null;return{src:t.src?`url(${t.src})`:null,repeat:o,attachment:s,size:n,position:r}})},"./packages/packages/core/editor-canvas/src/transformers/styles/background-image-size-scale-transformer.ts":function(e,t,n){n.r(t),n.d(t,{backgroundImageSizeScaleTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(({width:e,height:t})=>`${e??"auto"} ${t??"auto"}`)},"./packages/packages/core/editor-canvas/src/transformers/styles/background-overlay-transformer.ts":function(e,t,n){n.r(t),n.d(t,{backgroundOverlayTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>{if(!e||0===e.length)return null;const t=function normalizeOverlayValues(e){return e.map(e=>"string"==typeof e?{src:e,repeat:null,attachment:null,size:null,position:null}:e).filter(e=>e&&!!e.src)}(e);if(0===t.length)return null;return{"background-image":getValuesString(t,"src","none",!0),"background-repeat":getValuesString(t,"repeat","repeat"),"background-attachment":getValuesString(t,"attachment","scroll"),"background-size":getValuesString(t,"size","auto auto"),"background-position":getValuesString(t,"position","0% 0%")}});function getValuesString(e,t,n,r=!1){if(0===e.filter(e=>e?.[t]).length)return n;const o=e.map(e=>e[t]??n);if(!r){if(o.every(e=>e===o[0]))return o[0]}return o.join(",")}},"./packages/packages/core/editor-canvas/src/transformers/styles/background-transformer.ts":function(e,t,n){n.r(t),n.d(t,{backgroundTransformer:function(){return o}});var r=n("./packages/packages/core/editor-canvas/src/renderers/multi-props.ts");const o=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>{const{color:t=null,"background-overlay":n=null,clip:o=null}=e;return(0,r.createMultiPropsValue)({...n,"background-color":t,"background-clip":o})})},"./packages/packages/core/editor-canvas/src/transformers/styles/color-stop-transformer.ts":function(e,t,n){n.r(t),n.d(t,{colorStopTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>`${e?.color} ${e?.offset??0}%`)},"./packages/packages/core/editor-canvas/src/transformers/styles/create-combine-array-transformer.ts":function(e,t,n){n.r(t),n.d(t,{createCombineArrayTransformer:function(){return createCombineArrayTransformer}});var r=n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts");const createCombineArrayTransformer=e=>(0,r.createTransformer)(t=>t?.length?t.filter(Boolean).join(e):null)},"./packages/packages/core/editor-canvas/src/transformers/styles/create-multi-props-transformer.ts":function(e,t,n){n.r(t),n.d(t,{createMultiPropsTransformer:function(){return createMultiPropsTransformer}});var r=n("./packages/packages/core/editor-canvas/src/renderers/multi-props.ts"),o=n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts");const createMultiPropsTransformer=(e,t)=>(0,o.createTransformer)((n,{key:o})=>{const s=e.filter(e=>n[e]).map(e=>[t({propKey:o,key:e}),n[e]]);return(0,r.createMultiPropsValue)(Object.fromEntries(s))})},"./packages/packages/core/editor-canvas/src/transformers/styles/filter-transformer.ts":function(e,t,n){n.r(t),n.d(t,{filterTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>e?.length<1?null:e.filter(Boolean).map(mapToFilterFunctionString).join(" ")),mapToFilterFunctionString=e=>{if("drop-shadow"===e.func){const{xAxis:t,yAxis:n,blur:r,color:o}=e.args;return`drop-shadow(${t||"0px"} ${n||"0px"} ${r||"10px"} ${o||"transparent"})`}const t=e.args?.size;return e.func&&t?`${e.func}(${t})`:""}},"./packages/packages/core/editor-canvas/src/transformers/styles/flex-transformer.ts":function(e,t,n){n.r(t),n.d(t,{flexTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>{const t=e.flexGrow,n=e.flexShrink,r=e.flexBasis,o=null!=t,s=null!=n,i=null!=r;return o||s||i?o&&s&&i?`${t} ${n} ${"object"==typeof r&&void 0!==r.size?`${r.size}${r.unit||""}`:r}`:o&&s&&!i?`${t} ${n}`:o&&!s&&i?`${t} 1 ${"object"==typeof r&&void 0!==r.size?`${r.size}${r.unit||""}`:r}`:!o&&s&&i?`0 ${n} ${"object"==typeof r&&void 0!==r.size?`${r.size}${r.unit||""}`:r}`:!o||s||i?o||!s||i?o||s||!i?null:`0 1 ${"object"==typeof r&&void 0!==r.size?`${r.size}${r.unit||""}`:r}`:`0 ${n}`:`${t}`:null})},"./packages/packages/core/editor-canvas/src/transformers/styles/perspective-origin-transformer.ts":function(e,t,n){n.r(t),n.d(t,{perspectiveOriginTransformer:function(){return o}});var r=n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts");function getVal(e){return`${e??"0px"}`}const o=(0,r.createTransformer)(e=>`${getVal(e?.x)} ${getVal(e?.y)}`)},"./packages/packages/core/editor-canvas/src/transformers/styles/position-transformer.ts":function(e,t,n){n.r(t),n.d(t,{positionTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(({x:e,y:t})=>`${e??"0px"} ${t??"0px"}`)},"./packages/packages/core/editor-canvas/src/transformers/styles/shadow-transformer.ts":function(e,t,n){n.r(t),n.d(t,{shadowTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>[e.hOffset,e.vOffset,e.blur,e.spread,e.color,e.position].filter(Boolean).join(" "))},"./packages/packages/core/editor-canvas/src/transformers/styles/size-transformer.ts":function(e,t,n){n.r(t),n.d(t,{sizeTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>"custom"===e.unit?e.size:`${e.size}${e.unit}`)},"./packages/packages/core/editor-canvas/src/transformers/styles/stroke-transformer.ts":function(e,t,n){n.r(t),n.d(t,{strokeTransformer:function(){return o}});var r=n("./packages/packages/core/editor-canvas/src/renderers/multi-props.ts");const o=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>{const t={"-webkit-text-stroke":`${e.width} ${e.color}`,stroke:`${e.color}`,"stroke-width":`${e.width}`};return(0,r.createMultiPropsValue)(t)})},"./packages/packages/core/editor-canvas/src/transformers/styles/transform-functions-transformer.ts":function(e,t,n){n.r(t),n.d(t,{transformFunctionsTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>e?.length<1?null:e.join(" "))},"./packages/packages/core/editor-canvas/src/transformers/styles/transform-move-transformer.ts":function(e,t,n){n.r(t),n.d(t,{transformMoveTransformer:function(){return s}});var r=n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts");const o="0px",s=(0,r.createTransformer)(e=>`translate3d(${e.x??o}, ${e.y??o}, ${e.z??o})`)},"./packages/packages/core/editor-canvas/src/transformers/styles/transform-origin-transformer.ts":function(e,t,n){n.r(t),n.d(t,{transformOriginTransformer:function(){return o}});var r=n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts");function getVal(e){return`${e??"0px"}`}const o=(0,r.createTransformer)(e=>{const t=getVal(e.x),n=getVal(e.y),r=getVal(e.z);return"50%"===t&&"50%"===n&&"0px"===r?null:`${t} ${n} ${r}`})},"./packages/packages/core/editor-canvas/src/transformers/styles/transform-rotate-transformer.ts":function(e,t,n){n.r(t),n.d(t,{transformRotateTransformer:function(){return s}});var r=n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts");const o="0deg",s=(0,r.createTransformer)(e=>[`rotateX(${e?.x??o})`,`rotateY(${e?.y??o})`,`rotateZ(${e?.z??o})`].join(" "))},"./packages/packages/core/editor-canvas/src/transformers/styles/transform-scale-transformer.ts":function(e,t,n){n.r(t),n.d(t,{transformScaleTransformer:function(){return r}});const r=(0,n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts").createTransformer)(e=>`scale3d(${e.x??1}, ${e.y??1}, ${e.z??1})`)},"./packages/packages/core/editor-canvas/src/transformers/styles/transform-skew-transformer.ts":function(e,t,n){n.r(t),n.d(t,{transformSkewTransformer:function(){return s}});var r=n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts");const o="0deg",s=(0,r.createTransformer)(e=>`skew(${e?.x??o}, ${e?.y??o})`)},"./packages/packages/core/editor-canvas/src/transformers/styles/transition-transformer.ts":function(e,t,n){n.r(t),n.d(t,{transitionTransformer:function(){return s}});var r=n("@elementor/editor-controls"),o=n("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts");const s=(0,o.createTransformer)(e=>{if(e?.length<1)return null;const t=(()=>{const e=new Set;return r.transitionProperties.forEach(t=>{t.properties.forEach(t=>{e.add(t.value)})}),e})(),n=e.map(e=>mapToTransitionString(e,t)).filter(Boolean);return 0===n.length?null:n.join(", ")}),mapToTransitionString=(e,t)=>{if(!e.selection||!e.size)return"";const n=e.selection.value;return t.has(n)?`${n} ${e.size}`:""}},"./packages/packages/core/editor-canvas/src/utils/abort-previous-runs.ts":function(e,t,n){function abortPreviousRuns(e){let t=null;return(...n)=>(t&&t.abort(),t=new AbortController,e(t,...n))}n.r(t),n.d(t,{abortPreviousRuns:function(){return abortPreviousRuns}})},"./packages/packages/core/editor-canvas/src/utils/signalized-process.ts":function(e,t,n){function signalizedProcess(e,t=[]){return{then:n=>(t.push(n),signalizedProcess(e,t)),execute:async()=>{let n;for(const r of t){if(e.aborted)break;n=await r(n,e)}}}}n.r(t),n.d(t,{signalizedProcess:function(){return signalizedProcess}})},"@elementor/editor":function(e){e.exports=window.elementorV2.editor},"@elementor/editor-controls":function(e){e.exports=window.elementorV2.editorControls},"@elementor/editor-documents":function(e){e.exports=window.elementorV2.editorDocuments},"@elementor/editor-elements":function(e){e.exports=window.elementorV2.editorElements},"@elementor/editor-interactions":function(e){e.exports=window.elementorV2.editorInteractions},"@elementor/editor-mcp":function(e){e.exports=window.elementorV2.editorMcp},"@elementor/editor-notifications":function(e){e.exports=window.elementorV2.editorNotifications},"@elementor/editor-props":function(e){e.exports=window.elementorV2.editorProps},"@elementor/editor-responsive":function(e){e.exports=window.elementorV2.editorResponsive},"@elementor/editor-styles":function(e){e.exports=window.elementorV2.editorStyles},"@elementor/editor-styles-repository":function(e){e.exports=window.elementorV2.editorStylesRepository},"@elementor/editor-v1-adapters":function(e){e.exports=window.elementorV2.editorV1Adapters},"@elementor/schema":function(e){e.exports=window.elementorV2.schema},"@elementor/twing":function(e){e.exports=window.elementorV2.twing},"@elementor/ui":function(e){e.exports=window.elementorV2.ui},"@elementor/utils":function(e){e.exports=window.elementorV2.utils},"@elementor/wp-media":function(e){e.exports=window.elementorV2.wpMedia},"@wordpress/i18n":function(e){e.exports=window.wp.i18n},react:function(e){e.exports=window.React},"react-dom":function(e){e.exports=window.ReactDOM}},r={};function __webpack_require__(e){var t=r[e];if(void 0!==t)return t.exports;var o=r[e]={exports:{}};return n[e](o,o.exports,__webpack_require__),o.exports}__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,{a:t}),t},t=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},__webpack_require__.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var o=Object.create(null);__webpack_require__.r(o);var s={};e=e||[null,t({}),t([]),t(t)];for(var i=2&r&&n;("object"==typeof i||"function"==typeof i)&&!~e.indexOf(i);i=t(i))Object.getOwnPropertyNames(i).forEach(function(e){s[e]=function(){return n[e]}});return s.default=function(){return n},__webpack_require__.d(o,s),o},__webpack_require__.d=function(e,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};!function(){__webpack_require__.r(o),__webpack_require__.d(o,{BREAKPOINTS_SCHEMA_URI:function(){return e.BREAKPOINTS_SCHEMA_URI},DOCUMENT_STRUCTURE_URI:function(){return d.DOCUMENT_STRUCTURE_URI},STYLE_SCHEMA_URI:function(){return t.STYLE_SCHEMA_URI},UnknownStyleStateError:function(){return m.UnknownStyleStateError},UnknownStyleTypeError:function(){return m.UnknownStyleTypeError},WIDGET_SCHEMA_URI:function(){return t.WIDGET_SCHEMA_URI},createPropsResolver:function(){return a.createPropsResolver},createTemplatedElementView:function(){return s.createTemplatedElementView},createTransformer:function(){return f.createTransformer},createTransformersRegistry:function(){return p.createTransformersRegistry},endDragElementFromPanel:function(){return u.endDragElementFromPanel},init:function(){return n.init},isAtomicWidget:function(){return r.isAtomicWidget},registerElementType:function(){return i.registerElementType},settingsTransformersRegistry:function(){return c.settingsTransformersRegistry},startDragElementFromPanel:function(){return u.startDragElementFromPanel},styleTransformersRegistry:function(){return l.styleTransformersRegistry}});var e=__webpack_require__("./packages/packages/core/editor-canvas/src/mcp/resources/breakpoints-resource.ts"),t=__webpack_require__("./packages/packages/core/editor-canvas/src/mcp/resources/widgets-schema-resource.ts"),n=__webpack_require__("./packages/packages/core/editor-canvas/src/init.tsx"),r=__webpack_require__("./packages/packages/core/editor-canvas/src/style-commands/utils.ts"),s=__webpack_require__("./packages/packages/core/editor-canvas/src/legacy/create-templated-element-type.ts"),i=__webpack_require__("./packages/packages/core/editor-canvas/src/legacy/init-legacy-views.ts"),a=(__webpack_require__("./packages/packages/core/editor-canvas/src/legacy/types.ts"),__webpack_require__("./packages/packages/core/editor-canvas/src/renderers/create-props-resolver.ts")),c=__webpack_require__("./packages/packages/core/editor-canvas/src/settings-transformers-registry.ts"),l=__webpack_require__("./packages/packages/core/editor-canvas/src/style-transformers-registry.ts"),u=__webpack_require__("./packages/packages/core/editor-canvas/src/sync/drag-element-from-panel.ts"),d=__webpack_require__("./packages/packages/core/editor-canvas/src/mcp/resources/document-structure-resource.ts"),f=__webpack_require__("./packages/packages/core/editor-canvas/src/transformers/create-transformer.ts"),p=__webpack_require__("./packages/packages/core/editor-canvas/src/transformers/create-transformers-registry.ts"),m=__webpack_require__("./packages/packages/core/editor-canvas/src/renderers/errors.ts")}(),(window.elementorV2=window.elementorV2||{}).editorCanvas=o}(),window.elementorV2.editorCanvas?.init?.();
9900 3 //# sourceMappingURL=editor-canvas.js.map