PluginProbe
Elementor Website Builder – more than just a page builder / 4.3.1
Elementor Website Builder – more than just a page builder v4.3.1
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-global-classes/editor-global-classes.js +3441 -6376 4.2.2 → 4.3.1 View file →
@@ -1,1418 +1,2354 @@
1 -/******/ (function() { // webpackBootstrap
2 -/******/ "use strict";
3 -/******/ var __webpack_modules__ = ({
1 +(function(react, _elementor_editor_current_user, _elementor_editor_documents, _elementor_editor_panels, _elementor_editor_ui, _elementor_query, _elementor_store, _elementor_ui, _wordpress_i18n, _elementor_editor_styles, _elementor_utils, _elementor_http_client, _elementor_icons, _elementor_events, react_dom, _elementor_editor_styles_repository, _elementor_editor, _elementor_editor_editing_panel, _elementor_editor_embedded_documents_manager, _elementor_editor_mcp, _elementor_editor_canvas, _elementor_editor_v1_adapters, _elementor_schema) {
4 2
5 -/***/ "./packages/node_modules/@tanstack/react-virtual/dist/esm/index.js":
6 -/*!*************************************************************************!*\
7 - !*** ./packages/node_modules/@tanstack/react-virtual/dist/esm/index.js ***!
8 - \*************************************************************************/
9 -/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
3 +//#region \0rolldown/runtime.js
4 + var __create = Object.create;
5 + var __defProp$1 = Object.defineProperty;
6 + var __name = (target, value) => __defProp$1(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 __exportAll = (all, no_symbols) => {
15 + let target = {};
16 + for (var name in all) {
17 + __defProp$1(target, name, {
18 + get: all[name],
19 + enumerable: true
20 + });
21 + }
22 + if (!no_symbols) {
23 + __defProp$1(target, Symbol.toStringTag, { value: "Module" });
24 + }
25 + return target;
26 + };
27 + var __copyProps = (to, from, except, desc) => {
28 + if (from && typeof from === "object" || typeof from === "function") {
29 + for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
30 + key = keys[i];
31 + if (!__hasOwnProp.call(to, key) && key !== except) {
32 + __defProp$1(to, key, {
33 + get: ((k) => from[k]).bind(null, key),
34 + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
35 + });
36 + }
37 + }
38 + }
39 + return to;
40 + };
41 + var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp$1(target, "default", {
42 + value: mod,
43 + enumerable: true
44 + }) : target, mod));
10 45
11 -__webpack_require__.r(__webpack_exports__);
12 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13 -/* harmony export */ Virtualizer: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.Virtualizer; },
14 -/* harmony export */ approxEqual: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.approxEqual; },
15 -/* harmony export */ debounce: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.debounce; },
16 -/* harmony export */ defaultKeyExtractor: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.defaultKeyExtractor; },
17 -/* harmony export */ defaultRangeExtractor: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.defaultRangeExtractor; },
18 -/* harmony export */ elementScroll: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.elementScroll; },
19 -/* harmony export */ measureElement: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.measureElement; },
20 -/* harmony export */ memo: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.memo; },
21 -/* harmony export */ notUndefined: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.notUndefined; },
22 -/* harmony export */ observeElementOffset: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.observeElementOffset; },
23 -/* harmony export */ observeElementRect: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.observeElementRect; },
24 -/* harmony export */ observeWindowOffset: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.observeWindowOffset; },
25 -/* harmony export */ observeWindowRect: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.observeWindowRect; },
26 -/* harmony export */ useVirtualizer: function() { return /* binding */ useVirtualizer; },
27 -/* harmony export */ useWindowVirtualizer: function() { return /* binding */ useWindowVirtualizer; },
28 -/* harmony export */ windowScroll: function() { return /* reexport safe */ _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.windowScroll; }
29 -/* harmony export */ });
30 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
31 -/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom");
32 -/* harmony import */ var _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @tanstack/virtual-core */ "./packages/node_modules/@tanstack/virtual-core/dist/esm/index.js");
46 +//#endregion
47 +let react$1 = __toESM(react, 1);
48 +react = __toESM(react);
33 49
50 +//#region packages/packages/core/editor-global-classes/src/errors.ts
51 + var GlobalClassNotFoundError = (0, _elementor_utils.createError)({
52 + code: "global_class_not_found",
53 + message: "Global class not found."
54 + });
55 + var GlobalClassLabelAlreadyExistsError = (0, _elementor_utils.createError)({
56 + code: "global_class_label_already_exists",
57 + message: "Class with this name already exists."
58 + });
59 + var GlobalClassTrackingError = (0, _elementor_utils.createError)({
60 + code: "global_class_tracking_error",
61 + message: "Error tracking global classes event."
62 + });
34 63
64 +//#endregion
65 +//#region packages/packages/core/editor-global-classes/src/utils/snapshot-history.ts
66 + var __defProp = Object.defineProperty;
67 + var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
68 + enumerable: true,
69 + configurable: true,
70 + writable: true,
71 + value
72 + }) : obj[key] = value;
73 + var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
74 + function createLink({ value, next, prev }) {
75 + return {
76 + value,
77 + prev: prev || null,
78 + next: next || null
79 + };
80 + }
81 + var _SnapshotHistory = class _SnapshotHistory {
82 + constructor(namespace) {
83 + __publicField(this, "namespace", namespace);
84 + __publicField(this, "first", null);
85 + __publicField(this, "current", null);
86 + }
87 + static get(namespace) {
88 + if (!_SnapshotHistory.registry[namespace]) _SnapshotHistory.registry[namespace] = new _SnapshotHistory(namespace);
89 + return _SnapshotHistory.registry[namespace];
90 + }
91 + transform(item) {
92 + return JSON.parse(JSON.stringify(item));
93 + }
94 + reset() {
95 + this.first = this.current = null;
96 + }
97 + prev() {
98 + if (!this.current || this.current === this.first) return null;
99 + this.current = this.current.prev;
100 + return this.current?.value || null;
101 + }
102 + isLast() {
103 + return !this.current || !this.current.next;
104 + }
105 + next(value) {
106 + if (value) {
107 + if (!this.current) {
108 + this.first = createLink({ value: this.transform(value) });
109 + this.current = this.first;
110 + return this.current.value;
111 + }
112 + const nextLink = createLink({
113 + value: this.transform(value),
114 + prev: this.current
115 + });
116 + this.current.next = nextLink;
117 + this.current = nextLink;
118 + return this.current.value;
119 + }
120 + if (!this.current || !this.current.next) return null;
121 + this.current = this.current.next;
122 + return this.current.value;
123 + }
124 + };
125 + __publicField(_SnapshotHistory, "registry", {});
126 + var SnapshotHistory = _SnapshotHistory;
35 127
128 +//#endregion
129 +//#region packages/packages/core/editor-global-classes/src/store.ts
130 + var localHistory = SnapshotHistory.get("global-classes");
131 + var initialState = {
132 + data: {
133 + items: {},
134 + order: []
135 + },
136 + classLabels: {},
137 + initialData: {
138 + frontend: {
139 + items: {},
140 + order: []
141 + },
142 + preview: {
143 + items: {},
144 + order: []
145 + }
146 + },
147 + isDirty: false
148 + };
149 + var SLICE_NAME = "globalClasses";
150 + var slice = (0, _elementor_store.__createSlice)({
151 + name: SLICE_NAME,
152 + initialState,
153 + reducers: {
154 + load(state, { payload: { frontend, preview, classLabels } }) {
155 + state.initialData.frontend = frontend;
156 + state.initialData.preview = preview;
157 + state.data = preview;
158 + state.classLabels = classLabels;
159 + state.isDirty = false;
160 + },
161 + add(state, { payload }) {
162 + localHistory.next(state.data);
163 + state.data.items[payload.id] = payload;
164 + state.data.order.unshift(payload.id);
165 + state.classLabels[payload.id] = payload.label;
166 + state.isDirty = true;
167 + },
168 + delete(state, { payload }) {
169 + localHistory.next(state.data);
170 + state.data.items = Object.fromEntries(Object.entries(state.data.items).filter(([id]) => id !== payload));
171 + state.data.order = state.data.order.filter((id) => id !== payload);
172 + delete state.classLabels[payload];
173 + state.isDirty = true;
174 + },
175 + setOrder(state, { payload }) {
176 + localHistory.next(state.data);
177 + state.data.order = payload;
178 + state.isDirty = true;
179 + },
180 + update(state, { payload }) {
181 + const oldLabel = state.classLabels[payload.style.id];
182 + localHistory.next(state.data);
183 + const mergedData = {
184 + ...state.data.items[payload.style.id],
185 + ...payload.style
186 + };
187 + if (oldLabel && payload.style.label && payload.style.label !== oldLabel) state.classLabels[payload.style.id] = payload.style.label;
188 + state.data.items[payload.style.id] = mergedData;
189 + state.isDirty = true;
190 + },
191 + updateMultiple(state, { payload }) {
192 + localHistory.next(state.data);
193 + Object.entries(payload).forEach(([id, { modified }]) => {
194 + state.data.items[id].label = modified;
195 + state.classLabels[id] = modified;
196 + });
197 + state.isDirty = false;
198 + },
199 + updateProps(state, { payload }) {
200 + const style = state.data.items[payload.id];
201 + if (!style) throw new GlobalClassNotFoundError({ context: { styleId: payload.id } });
202 + localHistory.next(state.data);
203 + const variant = (0, _elementor_editor_styles.getVariantByMeta)(style, payload.meta);
204 + let customCss = ("custom_css" in payload ? payload.custom_css : variant?.custom_css) ?? null;
205 + customCss = customCss?.raw ? customCss : null;
206 + if (variant) {
207 + const payloadProps = JSON.parse(JSON.stringify(payload.props));
208 + if ((payload.mode ?? "merge") === "replace") variant.props = payloadProps;
209 + else {
210 + const variantProps = JSON.parse(JSON.stringify(variant.props));
211 + variant.props = mergeProps(variantProps, payloadProps);
212 + }
213 + variant.custom_css = customCss;
214 + style.variants = getNonEmptyVariants(style);
215 + } else style.variants.push({
216 + meta: payload.meta,
217 + props: payload.props,
218 + custom_css: customCss
219 + });
220 + state.isDirty = true;
221 + },
222 + reset(state, { payload: { context } }) {
223 + if (context === "frontend") {
224 + localHistory.reset();
225 + state.initialData.frontend = state.data;
226 + state.isDirty = false;
227 + }
228 + state.initialData.preview = state.data;
229 + },
230 + undo(state) {
231 + if (localHistory.isLast()) localHistory.next(state.data);
232 + const data = localHistory.prev();
233 + if (data) {
234 + state.data = data;
235 + state.isDirty = true;
236 + } else state.data = state.initialData.preview;
237 + },
238 + resetToInitialState(state, { payload: { context } }) {
239 + localHistory.reset();
240 + state.data = state.initialData[context];
241 + state.isDirty = false;
242 + },
243 + redo(state) {
244 + const data = localHistory.next();
245 + if (localHistory.isLast()) localHistory.prev();
246 + if (data) {
247 + state.data = data;
248 + state.isDirty = true;
249 + }
250 + },
251 + mergeExistingClasses(state, { payload: { preview, frontend } }) {
252 + Object.entries(preview).forEach(([id, previewClassData]) => {
253 + const frontendClassData = frontend[id];
254 + if (previewClassData === null || previewClassData === void 0) return;
255 + if (!(id in state.data.items)) state.data.items[id] = previewClassData;
256 + if (frontendClassData && !(id in state.initialData.frontend.items)) state.initialData.frontend.items[id] = frontendClassData;
257 + if (!(id in state.initialData.preview.items)) state.initialData.preview.items[id] = previewClassData;
258 + if (!(id in state.classLabels)) state.classLabels[id] = previewClassData.label;
259 + });
260 + },
261 + setOrderWithoutHistory(state, { payload }) {
262 + state.data.order = payload;
263 + },
264 + updateAfterTemplateImport(state, { payload }) {
265 + state.initialData.frontend.items = {
266 + ...state.initialData.frontend.items,
267 + ...payload.addedItems
268 + };
269 + state.initialData.frontend.order = [...state.initialData.frontend.order, ...payload.addedIdsOrder];
270 + state.initialData.preview.items = {
271 + ...state.initialData.preview.items,
272 + ...payload.addedItems
273 + };
274 + state.initialData.preview.order = [...state.initialData.preview.order, ...payload.addedIdsOrder];
275 + state.data.items = {
276 + ...state.data.items,
277 + ...payload.addedItems
278 + };
279 + state.data.order = [...state.data.order, ...payload.addedIdsOrder];
280 + state.classLabels = {
281 + ...state.classLabels,
282 + ...payload.addedClassLabels
283 + };
284 + }
285 + }
286 + });
287 + var mergeProps = (current, updates) => {
288 + const props = Array.isArray(current) ? {} : current;
289 + Object.entries(updates).forEach(([key, value]) => {
290 + if (value === null || value === void 0) delete props[key];
291 + else props[key] = value;
292 + });
293 + return props;
294 + };
295 + var getNonEmptyVariants = (style) => {
296 + return style.variants.filter(({ props, custom_css: customCss }) => Object.keys(props).length || customCss?.raw);
297 + };
298 + var placeholderDefinition = (id, label) => ({
299 + id,
300 + type: "class",
301 + label,
302 + variants: []
303 + });
304 + var selectData = (state) => state[SLICE_NAME].data;
305 + var selectClassLabels = (state) => state[SLICE_NAME].classLabels;
306 + var selectFrontendInitialData = (state) => state[SLICE_NAME].initialData.frontend;
307 + var selectPreviewInitialData = (state) => state[SLICE_NAME].initialData.preview;
308 + var selectOrder = (0, _elementor_store.__createSelector)(selectData, ({ order }) => order);
309 + var selectGlobalClasses = (0, _elementor_store.__createSelector)(selectData, ({ items }) => items);
310 + var selectIsDirty = (state) => state[SLICE_NAME].isDirty;
311 + var selectOrderedClasses = (0, _elementor_store.__createSelector)(selectData, selectClassLabels, ({ items, order }, classLabels) => order.map((id) => {
312 + const loaded = items[id];
313 + if (loaded) return loaded;
314 + const label = classLabels[id];
315 + return label !== void 0 ? placeholderDefinition(id, label) : null;
316 + }).filter((s) => s !== null));
317 + var selectClass = (state, id) => state[SLICE_NAME].data.items[id] ?? null;
318 + var selectEmptyCssClass = (0, _elementor_store.__createSelector)(selectData, ({ items }) => Object.values(items).filter((cssClass) => (cssClass.variants?.length ?? 0) === 0));
319 + var selectIsClassFetched = (state, id) => !!state[SLICE_NAME].initialData.preview.items[id] || !!state[SLICE_NAME].initialData.frontend.items[id] || false;
36 320
37 -const useIsomorphicLayoutEffect = typeof document !== "undefined" ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;
38 -function useVirtualizerBase({
39 - useFlushSync = true,
40 - ...options
41 -}) {
42 - const rerender = react__WEBPACK_IMPORTED_MODULE_0__.useReducer(() => ({}), {})[1];
43 - const resolvedOptions = {
44 - ...options,
45 - onChange: (instance2, sync) => {
46 - var _a;
47 - if (useFlushSync && sync) {
48 - (0,react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync)(rerender);
49 - } else {
50 - rerender();
51 - }
52 - (_a = options.onChange) == null ? void 0 : _a.call(options, instance2, sync);
53 - }
54 - };
55 - const [instance] = react__WEBPACK_IMPORTED_MODULE_0__.useState(
56 - () => new _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.Virtualizer(resolvedOptions)
57 - );
58 - instance.setOptions(resolvedOptions);
59 - useIsomorphicLayoutEffect(() => {
60 - return instance._didMount();
61 - }, []);
62 - useIsomorphicLayoutEffect(() => {
63 - return instance._willUpdate();
64 - });
65 - return instance;
66 -}
67 -function useVirtualizer(options) {
68 - return useVirtualizerBase({
69 - observeElementRect: _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.observeElementRect,
70 - observeElementOffset: _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.observeElementOffset,
71 - scrollToFn: _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.elementScroll,
72 - ...options
73 - });
74 -}
75 -function useWindowVirtualizer(options) {
76 - return useVirtualizerBase({
77 - getScrollElement: () => typeof document !== "undefined" ? window : null,
78 - observeElementRect: _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.observeWindowRect,
79 - observeElementOffset: _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.observeWindowOffset,
80 - scrollToFn: _tanstack_virtual_core__WEBPACK_IMPORTED_MODULE_2__.windowScroll,
81 - initialOffset: () => typeof document !== "undefined" ? window.scrollY : 0,
82 - ...options
83 - });
84 -}
321 +//#endregion
322 +//#region packages/packages/core/editor-global-classes/src/hooks/use-classes-order.ts
323 + var useClassesOrder = () => {
324 + return (0, _elementor_store.__useSelector)(selectOrder);
325 + };
85 326
86 -//# sourceMappingURL=index.js.map
327 +//#endregion
328 +//#region packages/packages/core/editor-global-classes/src/hooks/use-dirty-state.ts
329 + var useDirtyState = () => {
330 + return (0, _elementor_store.__useSelector)(selectIsDirty);
331 + };
87 332
333 +//#endregion
334 +//#region packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx
335 + var SearchAndFilterContext = (0, react.createContext)(void 0);
336 + var INIT_CHECKED_FILTERS = {
337 + empty: false,
338 + onThisPage: false,
339 + unused: false
340 + };
341 + var SearchAndFilterProvider = ({ children }) => {
342 + const [filters, setFilters] = (0, react.useState)(INIT_CHECKED_FILTERS);
343 + const getInitialSearchValue = () => {
344 + const storedValue = localStorage.getItem("elementor-global-classes-search");
345 + if (storedValue) {
346 + localStorage.removeItem("elementor-global-classes-search");
347 + return storedValue;
348 + }
349 + return "";
350 + };
351 + const { debouncedValue, inputValue, handleChange } = (0, _elementor_utils.useDebounceState)({
352 + delay: 300,
353 + initialValue: getInitialSearchValue()
354 + });
355 + const onClearSearch = () => {
356 + handleChange("");
357 + };
358 + const onClearFilter = () => {
359 + setFilters(INIT_CHECKED_FILTERS);
360 + };
361 + return /* @__PURE__ */ react.createElement(SearchAndFilterContext.Provider, { value: {
362 + search: {
363 + debouncedValue,
364 + inputValue,
365 + handleChange,
366 + onClearSearch
367 + },
368 + filters: {
369 + filters,
370 + setFilters,
371 + onClearFilter
372 + }
373 + } }, children);
374 + };
375 + var useSearchAndFilters = () => {
376 + const context = (0, react.useContext)(SearchAndFilterContext);
377 + if (!context) throw new Error("useSearchContext must be used within a SearchContextProvider");
378 + return context;
379 + };
88 380
89 -/***/ }),
381 +//#endregion
382 +//#region packages/packages/core/editor-global-classes/src/api.ts
383 + var RESOURCE_URL = "/global-classes";
384 + var BASE_URL = "elementor/v1";
385 + var RESOURCE_USAGE_URL = `${RESOURCE_URL}/usage`;
386 + var RESOURCE_POST_URL = `${RESOURCE_URL}/post`;
387 + var RESOURCE_STYLES_URL = `${RESOURCE_URL}/styles`;
388 + function saveGlobalClasses$1(context, payload) {
389 + return (0, _elementor_http_client.httpService)().put(`${BASE_URL}${RESOURCE_URL}`, payload, { params: { context } });
390 + }
391 + __name(saveGlobalClasses$1, "saveGlobalClasses");
392 + var apiClient = {
393 + usage: () => (0, _elementor_http_client.httpService)().get(`${BASE_URL}${RESOURCE_USAGE_URL}`),
394 + all: (context = "preview") => (0, _elementor_http_client.httpService)().get(`${BASE_URL}${RESOURCE_URL}`, { params: { context } }),
395 + getStylesForPost: (postId, context = "preview") => (0, _elementor_http_client.httpService)().get(`${BASE_URL}${RESOURCE_POST_URL}`, { params: {
396 + context,
397 + post_id: postId
398 + } }),
399 + getStylesByIds: (ids, context = "preview") => (0, _elementor_http_client.httpService)().get(`${BASE_URL}${RESOURCE_STYLES_URL}`, { params: {
400 + context,
401 + ids: ids.join(",")
402 + } }),
403 + publish: (payload) => saveGlobalClasses$1("frontend", payload),
404 + saveDraft: (payload) => saveGlobalClasses$1("preview", payload)
405 + };
406 + var API_ERROR_CODES = { DUPLICATED_LABEL: "DUPLICATED_LABEL" };
90 407
91 -/***/ "./packages/node_modules/@tanstack/virtual-core/dist/esm/index.js":
92 -/*!************************************************************************!*\
93 - !*** ./packages/node_modules/@tanstack/virtual-core/dist/esm/index.js ***!
94 - \************************************************************************/
95 -/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
408 +//#endregion
409 +//#region packages/packages/core/editor-global-classes/src/components/css-class-usage/utils.ts
410 + var transformData = (data) => Object.entries(data).reduce((acc, [key, value]) => {
411 + acc[key] = {
412 + content: value || [],
413 + total: value.reduce((total, val) => total + (val?.total || 0), 0)
414 + };
415 + return acc;
416 + }, {});
96 417
97 -__webpack_require__.r(__webpack_exports__);
98 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
99 -/* harmony export */ Virtualizer: function() { return /* binding */ Virtualizer; },
100 -/* harmony export */ approxEqual: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_0__.approxEqual; },
101 -/* harmony export */ debounce: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_0__.debounce; },
102 -/* harmony export */ defaultKeyExtractor: function() { return /* binding */ defaultKeyExtractor; },
103 -/* harmony export */ defaultRangeExtractor: function() { return /* binding */ defaultRangeExtractor; },
104 -/* harmony export */ elementScroll: function() { return /* binding */ elementScroll; },
105 -/* harmony export */ measureElement: function() { return /* binding */ measureElement; },
106 -/* harmony export */ memo: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_0__.memo; },
107 -/* harmony export */ notUndefined: function() { return /* reexport safe */ _utils_js__WEBPACK_IMPORTED_MODULE_0__.notUndefined; },
108 -/* harmony export */ observeElementOffset: function() { return /* binding */ observeElementOffset; },
109 -/* harmony export */ observeElementRect: function() { return /* binding */ observeElementRect; },
110 -/* harmony export */ observeWindowOffset: function() { return /* binding */ observeWindowOffset; },
111 -/* harmony export */ observeWindowRect: function() { return /* binding */ observeWindowRect; },
112 -/* harmony export */ windowScroll: function() { return /* binding */ windowScroll; }
113 -/* harmony export */ });
114 -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ "./packages/node_modules/@tanstack/virtual-core/dist/esm/utils.js");
418 +//#endregion
419 +//#region packages/packages/core/editor-global-classes/service/css-class-usage-service.ts
420 + var fetchCssClassUsage = async () => {
421 + return transformData((await apiClient.usage())?.data?.data || {});
422 + };
115 423
116 -const getRect = (element) => {
117 - const { offsetWidth, offsetHeight } = element;
118 - return { width: offsetWidth, height: offsetHeight };
119 -};
120 -const defaultKeyExtractor = (index) => index;
121 -const defaultRangeExtractor = (range) => {
122 - const start = Math.max(range.startIndex - range.overscan, 0);
123 - const end = Math.min(range.endIndex + range.overscan, range.count - 1);
124 - const arr = [];
125 - for (let i = start; i <= end; i++) {
126 - arr.push(i);
127 - }
128 - return arr;
129 -};
130 -const observeElementRect = (instance, cb) => {
131 - const element = instance.scrollElement;
132 - if (!element) {
133 - return;
134 - }
135 - const targetWindow = instance.targetWindow;
136 - if (!targetWindow) {
137 - return;
138 - }
139 - const handler = (rect) => {
140 - const { width, height } = rect;
141 - cb({ width: Math.round(width), height: Math.round(height) });
142 - };
143 - handler(getRect(element));
144 - if (!targetWindow.ResizeObserver) {
145 - return () => {
146 - };
147 - }
148 - const observer = new targetWindow.ResizeObserver((entries) => {
149 - const run = () => {
150 - const entry = entries[0];
151 - if (entry == null ? void 0 : entry.borderBoxSize) {
152 - const box = entry.borderBoxSize[0];
153 - if (box) {
154 - handler({ width: box.inlineSize, height: box.blockSize });
155 - return;
156 - }
157 - }
158 - handler(getRect(element));
159 - };
160 - instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();
161 - });
162 - observer.observe(element, { box: "border-box" });
163 - return () => {
164 - observer.unobserve(element);
165 - };
166 -};
167 -const addEventListenerOptions = {
168 - passive: true
169 -};
170 -const observeWindowRect = (instance, cb) => {
171 - const element = instance.scrollElement;
172 - if (!element) {
173 - return;
174 - }
175 - const handler = () => {
176 - cb({ width: element.innerWidth, height: element.innerHeight });
177 - };
178 - handler();
179 - element.addEventListener("resize", handler, addEventListenerOptions);
180 - return () => {
181 - element.removeEventListener("resize", handler);
182 - };
183 -};
184 -const supportsScrollend = typeof window == "undefined" ? true : "onscrollend" in window;
185 -const observeElementOffset = (instance, cb) => {
186 - const element = instance.scrollElement;
187 - if (!element) {
188 - return;
189 - }
190 - const targetWindow = instance.targetWindow;
191 - if (!targetWindow) {
192 - return;
193 - }
194 - let offset = 0;
195 - const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.debounce)(
196 - targetWindow,
197 - () => {
198 - cb(offset, false);
199 - },
200 - instance.options.isScrollingResetDelay
201 - );
202 - const createHandler = (isScrolling) => () => {
203 - const { horizontal, isRtl } = instance.options;
204 - offset = horizontal ? element["scrollLeft"] * (isRtl && -1 || 1) : element["scrollTop"];
205 - fallback();
206 - cb(offset, isScrolling);
207 - };
208 - const handler = createHandler(true);
209 - const endHandler = createHandler(false);
210 - element.addEventListener("scroll", handler, addEventListenerOptions);
211 - const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;
212 - if (registerScrollendEvent) {
213 - element.addEventListener("scrollend", endHandler, addEventListenerOptions);
214 - }
215 - return () => {
216 - element.removeEventListener("scroll", handler);
217 - if (registerScrollendEvent) {
218 - element.removeEventListener("scrollend", endHandler);
219 - }
220 - };
221 -};
222 -const observeWindowOffset = (instance, cb) => {
223 - const element = instance.scrollElement;
224 - if (!element) {
225 - return;
226 - }
227 - const targetWindow = instance.targetWindow;
228 - if (!targetWindow) {
229 - return;
230 - }
231 - let offset = 0;
232 - const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.debounce)(
233 - targetWindow,
234 - () => {
235 - cb(offset, false);
236 - },
237 - instance.options.isScrollingResetDelay
238 - );
239 - const createHandler = (isScrolling) => () => {
240 - offset = element[instance.options.horizontal ? "scrollX" : "scrollY"];
241 - fallback();
242 - cb(offset, isScrolling);
243 - };
244 - const handler = createHandler(true);
245 - const endHandler = createHandler(false);
246 - element.addEventListener("scroll", handler, addEventListenerOptions);
247 - const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;
248 - if (registerScrollendEvent) {
249 - element.addEventListener("scrollend", endHandler, addEventListenerOptions);
250 - }
251 - return () => {
252 - element.removeEventListener("scroll", handler);
253 - if (registerScrollendEvent) {
254 - element.removeEventListener("scrollend", endHandler);
255 - }
256 - };
257 -};
258 -const measureElement = (element, entry, instance) => {
259 - if (entry == null ? void 0 : entry.borderBoxSize) {
260 - const box = entry.borderBoxSize[0];
261 - if (box) {
262 - const size = Math.round(
263 - box[instance.options.horizontal ? "inlineSize" : "blockSize"]
264 - );
265 - return size;
266 - }
267 - }
268 - return element[instance.options.horizontal ? "offsetWidth" : "offsetHeight"];
269 -};
270 -const windowScroll = (offset, {
271 - adjustments = 0,
272 - behavior
273 -}, instance) => {
274 - var _a, _b;
275 - const toOffset = offset + adjustments;
276 - (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {
277 - [instance.options.horizontal ? "left" : "top"]: toOffset,
278 - behavior
279 - });
280 -};
281 -const elementScroll = (offset, {
282 - adjustments = 0,
283 - behavior
284 -}, instance) => {
285 - var _a, _b;
286 - const toOffset = offset + adjustments;
287 - (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {
288 - [instance.options.horizontal ? "left" : "top"]: toOffset,
289 - behavior
290 - });
291 -};
292 -class Virtualizer {
293 - constructor(opts) {
294 - this.unsubs = [];
295 - this.scrollElement = null;
296 - this.targetWindow = null;
297 - this.isScrolling = false;
298 - this.scrollState = null;
299 - this.measurementsCache = [];
300 - this.itemSizeCache = /* @__PURE__ */ new Map();
301 - this.laneAssignments = /* @__PURE__ */ new Map();
302 - this.pendingMeasuredCacheIndexes = [];
303 - this.prevLanes = void 0;
304 - this.lanesChangedFlag = false;
305 - this.lanesSettling = false;
306 - this.scrollRect = null;
307 - this.scrollOffset = null;
308 - this.scrollDirection = null;
309 - this.scrollAdjustments = 0;
310 - this.elementsCache = /* @__PURE__ */ new Map();
311 - this.now = () => {
312 - var _a, _b, _c;
313 - return ((_c = (_b = (_a = this.targetWindow) == null ? void 0 : _a.performance) == null ? void 0 : _b.now) == null ? void 0 : _c.call(_b)) ?? Date.now();
314 - };
315 - this.observer = /* @__PURE__ */ (() => {
316 - let _ro = null;
317 - const get = () => {
318 - if (_ro) {
319 - return _ro;
320 - }
321 - if (!this.targetWindow || !this.targetWindow.ResizeObserver) {
322 - return null;
323 - }
324 - return _ro = new this.targetWindow.ResizeObserver((entries) => {
325 - entries.forEach((entry) => {
326 - const run = () => {
327 - const node = entry.target;
328 - const index = this.indexFromElement(node);
329 - if (!node.isConnected) {
330 - this.observer.unobserve(node);
331 - return;
332 - }
333 - if (this.shouldMeasureDuringScroll(index)) {
334 - this.resizeItem(
335 - index,
336 - this.options.measureElement(node, entry, this)
337 - );
338 - }
339 - };
340 - this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();
341 - });
342 - });
343 - };
344 - return {
345 - disconnect: () => {
346 - var _a;
347 - (_a = get()) == null ? void 0 : _a.disconnect();
348 - _ro = null;
349 - },
350 - observe: (target) => {
351 - var _a;
352 - return (_a = get()) == null ? void 0 : _a.observe(target, { box: "border-box" });
353 - },
354 - unobserve: (target) => {
355 - var _a;
356 - return (_a = get()) == null ? void 0 : _a.unobserve(target);
357 - }
358 - };
359 - })();
360 - this.range = null;
361 - this.setOptions = (opts2) => {
362 - Object.entries(opts2).forEach(([key, value]) => {
363 - if (typeof value === "undefined") delete opts2[key];
364 - });
365 - this.options = {
366 - debug: false,
367 - initialOffset: 0,
368 - overscan: 1,
369 - paddingStart: 0,
370 - paddingEnd: 0,
371 - scrollPaddingStart: 0,
372 - scrollPaddingEnd: 0,
373 - horizontal: false,
374 - getItemKey: defaultKeyExtractor,
375 - rangeExtractor: defaultRangeExtractor,
376 - onChange: () => {
377 - },
378 - measureElement,
379 - initialRect: { width: 0, height: 0 },
380 - scrollMargin: 0,
381 - gap: 0,
382 - indexAttribute: "data-index",
383 - initialMeasurementsCache: [],
384 - lanes: 1,
385 - isScrollingResetDelay: 150,
386 - enabled: true,
387 - isRtl: false,
388 - useScrollendEvent: false,
389 - useAnimationFrameWithResizeObserver: false,
390 - laneAssignmentMode: "estimate",
391 - ...opts2
392 - };
393 - };
394 - this.notify = (sync) => {
395 - var _a, _b;
396 - (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);
397 - };
398 - this.maybeNotify = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.memo)(
399 - () => {
400 - this.calculateRange();
401 - return [
402 - this.isScrolling,
403 - this.range ? this.range.startIndex : null,
404 - this.range ? this.range.endIndex : null
405 - ];
406 - },
407 - (isScrolling) => {
408 - this.notify(isScrolling);
409 - },
410 - {
411 - key: true && "maybeNotify",
412 - debug: () => this.options.debug,
413 - initialDeps: [
414 - this.isScrolling,
415 - this.range ? this.range.startIndex : null,
416 - this.range ? this.range.endIndex : null
417 - ]
418 - }
419 - );
420 - this.cleanup = () => {
421 - this.unsubs.filter(Boolean).forEach((d) => d());
422 - this.unsubs = [];
423 - this.observer.disconnect();
424 - if (this.rafId != null && this.targetWindow) {
425 - this.targetWindow.cancelAnimationFrame(this.rafId);
426 - this.rafId = null;
427 - }
428 - this.scrollState = null;
429 - this.scrollElement = null;
430 - this.targetWindow = null;
431 - };
432 - this._didMount = () => {
433 - return () => {
434 - this.cleanup();
435 - };
436 - };
437 - this._willUpdate = () => {
438 - var _a;
439 - const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;
440 - if (this.scrollElement !== scrollElement) {
441 - this.cleanup();
442 - if (!scrollElement) {
443 - this.maybeNotify();
444 - return;
445 - }
446 - this.scrollElement = scrollElement;
447 - if (this.scrollElement && "ownerDocument" in this.scrollElement) {
448 - this.targetWindow = this.scrollElement.ownerDocument.defaultView;
449 - } else {
450 - this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;
451 - }
452 - this.elementsCache.forEach((cached) => {
453 - this.observer.observe(cached);
454 - });
455 - this.unsubs.push(
456 - this.options.observeElementRect(this, (rect) => {
457 - this.scrollRect = rect;
458 - this.maybeNotify();
459 - })
460 - );
461 - this.unsubs.push(
462 - this.options.observeElementOffset(this, (offset, isScrolling) => {
463 - this.scrollAdjustments = 0;
464 - this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? "forward" : "backward" : null;
465 - this.scrollOffset = offset;
466 - this.isScrolling = isScrolling;
467 - if (this.scrollState) {
468 - this.scheduleScrollReconcile();
469 - }
470 - this.maybeNotify();
471 - })
472 - );
473 - this._scrollToOffset(this.getScrollOffset(), {
474 - adjustments: void 0,
475 - behavior: void 0
476 - });
477 - }
478 - };
479 - this.rafId = null;
480 - this.getSize = () => {
481 - if (!this.options.enabled) {
482 - this.scrollRect = null;
483 - return 0;
484 - }
485 - this.scrollRect = this.scrollRect ?? this.options.initialRect;
486 - return this.scrollRect[this.options.horizontal ? "width" : "height"];
487 - };
488 - this.getScrollOffset = () => {
489 - if (!this.options.enabled) {
490 - this.scrollOffset = null;
491 - return 0;
492 - }
493 - this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === "function" ? this.options.initialOffset() : this.options.initialOffset);
494 - return this.scrollOffset;
495 - };
496 - this.getFurthestMeasurement = (measurements, index) => {
497 - const furthestMeasurementsFound = /* @__PURE__ */ new Map();
498 - const furthestMeasurements = /* @__PURE__ */ new Map();
499 - for (let m = index - 1; m >= 0; m--) {
500 - const measurement = measurements[m];
501 - if (furthestMeasurementsFound.has(measurement.lane)) {
502 - continue;
503 - }
504 - const previousFurthestMeasurement = furthestMeasurements.get(
505 - measurement.lane
506 - );
507 - if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {
508 - furthestMeasurements.set(measurement.lane, measurement);
509 - } else if (measurement.end < previousFurthestMeasurement.end) {
510 - furthestMeasurementsFound.set(measurement.lane, true);
511 - }
512 - if (furthestMeasurementsFound.size === this.options.lanes) {
513 - break;
514 - }
515 - }
516 - return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {
517 - if (a.end === b.end) {
518 - return a.index - b.index;
519 - }
520 - return a.end - b.end;
521 - })[0] : void 0;
522 - };
523 - this.getMeasurementOptions = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.memo)(
524 - () => [
525 - this.options.count,
526 - this.options.paddingStart,
527 - this.options.scrollMargin,
528 - this.options.getItemKey,
529 - this.options.enabled,
530 - this.options.lanes,
531 - this.options.laneAssignmentMode
532 - ],
533 - (count, paddingStart, scrollMargin, getItemKey, enabled, lanes, laneAssignmentMode) => {
534 - const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;
535 - if (lanesChanged) {
536 - this.lanesChangedFlag = true;
537 - }
538 - this.prevLanes = lanes;
539 - this.pendingMeasuredCacheIndexes = [];
540 - return {
541 - count,
542 - paddingStart,
543 - scrollMargin,
544 - getItemKey,
545 - enabled,
546 - lanes,
547 - laneAssignmentMode
548 - };
549 - },
550 - {
551 - key: false
552 - }
553 - );
554 - this.getMeasurements = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.memo)(
555 - () => [this.getMeasurementOptions(), this.itemSizeCache],
556 - ({
557 - count,
558 - paddingStart,
559 - scrollMargin,
560 - getItemKey,
561 - enabled,
562 - lanes,
563 - laneAssignmentMode
564 - }, itemSizeCache) => {
565 - if (!enabled) {
566 - this.measurementsCache = [];
567 - this.itemSizeCache.clear();
568 - this.laneAssignments.clear();
569 - return [];
570 - }
571 - if (this.laneAssignments.size > count) {
572 - for (const index of this.laneAssignments.keys()) {
573 - if (index >= count) {
574 - this.laneAssignments.delete(index);
575 - }
576 - }
577 - }
578 - if (this.lanesChangedFlag) {
579 - this.lanesChangedFlag = false;
580 - this.lanesSettling = true;
581 - this.measurementsCache = [];
582 - this.itemSizeCache.clear();
583 - this.laneAssignments.clear();
584 - this.pendingMeasuredCacheIndexes = [];
585 - }
586 - if (this.measurementsCache.length === 0 && !this.lanesSettling) {
587 - this.measurementsCache = this.options.initialMeasurementsCache;
588 - this.measurementsCache.forEach((item) => {
589 - this.itemSizeCache.set(item.key, item.size);
590 - });
591 - }
592 - const min = this.lanesSettling ? 0 : this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;
593 - this.pendingMeasuredCacheIndexes = [];
594 - if (this.lanesSettling && this.measurementsCache.length === count) {
595 - this.lanesSettling = false;
596 - }
597 - const measurements = this.measurementsCache.slice(0, min);
598 - const laneLastIndex = new Array(lanes).fill(
599 - void 0
600 - );
601 - for (let m = 0; m < min; m++) {
602 - const item = measurements[m];
603 - if (item) {
604 - laneLastIndex[item.lane] = m;
605 - }
606 - }
607 - for (let i = min; i < count; i++) {
608 - const key = getItemKey(i);
609 - const cachedLane = this.laneAssignments.get(i);
610 - let lane;
611 - let start;
612 - const shouldCacheLane = laneAssignmentMode === "estimate" || itemSizeCache.has(key);
613 - if (cachedLane !== void 0 && this.options.lanes > 1) {
614 - lane = cachedLane;
615 - const prevIndex = laneLastIndex[lane];
616 - const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;
617 - start = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;
618 - } else {
619 - const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);
620 - start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;
621 - lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;
622 - if (this.options.lanes > 1 && shouldCacheLane) {
623 - this.laneAssignments.set(i, lane);
624 - }
625 - }
626 - const measuredSize = itemSizeCache.get(key);
627 - const size = typeof measuredSize === "number" ? measuredSize : this.options.estimateSize(i);
628 - const end = start + size;
629 - measurements[i] = {
630 - index: i,
631 - start,
632 - size,
633 - end,
634 - key,
635 - lane
636 - };
637 - laneLastIndex[lane] = i;
638 - }
639 - this.measurementsCache = measurements;
640 - return measurements;
641 - },
642 - {
643 - key: true && "getMeasurements",
644 - debug: () => this.options.debug
645 - }
646 - );
647 - this.calculateRange = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.memo)(
648 - () => [
649 - this.getMeasurements(),
650 - this.getSize(),
651 - this.getScrollOffset(),
652 - this.options.lanes
653 - ],
654 - (measurements, outerSize, scrollOffset, lanes) => {
655 - return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({
656 - measurements,
657 - outerSize,
658 - scrollOffset,
659 - lanes
660 - }) : null;
661 - },
662 - {
663 - key: true && "calculateRange",
664 - debug: () => this.options.debug
665 - }
666 - );
667 - this.getVirtualIndexes = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.memo)(
668 - () => {
669 - let startIndex = null;
670 - let endIndex = null;
671 - const range = this.calculateRange();
672 - if (range) {
673 - startIndex = range.startIndex;
674 - endIndex = range.endIndex;
675 - }
676 - this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);
677 - return [
678 - this.options.rangeExtractor,
679 - this.options.overscan,
680 - this.options.count,
681 - startIndex,
682 - endIndex
683 - ];
684 - },
685 - (rangeExtractor, overscan, count, startIndex, endIndex) => {
686 - return startIndex === null || endIndex === null ? [] : rangeExtractor({
687 - startIndex,
688 - endIndex,
689 - overscan,
690 - count
691 - });
692 - },
693 - {
694 - key: true && "getVirtualIndexes",
695 - debug: () => this.options.debug
696 - }
697 - );
698 - this.indexFromElement = (node) => {
699 - const attributeName = this.options.indexAttribute;
700 - const indexStr = node.getAttribute(attributeName);
701 - if (!indexStr) {
702 - console.warn(
703 - `Missing attribute name '${attributeName}={index}' on measured element.`
704 - );
705 - return -1;
706 - }
707 - return parseInt(indexStr, 10);
708 - };
709 - this.shouldMeasureDuringScroll = (index) => {
710 - var _a;
711 - if (!this.scrollState || this.scrollState.behavior !== "smooth") {
712 - return true;
713 - }
714 - const scrollIndex = this.scrollState.index ?? ((_a = this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)) == null ? void 0 : _a.index);
715 - if (scrollIndex !== void 0 && this.range) {
716 - const bufferSize = Math.max(
717 - this.options.overscan,
718 - Math.ceil((this.range.endIndex - this.range.startIndex) / 2)
719 - );
720 - const minIndex = Math.max(0, scrollIndex - bufferSize);
721 - const maxIndex = Math.min(
722 - this.options.count - 1,
723 - scrollIndex + bufferSize
724 - );
725 - return index >= minIndex && index <= maxIndex;
726 - }
727 - return true;
728 - };
729 - this.measureElement = (node) => {
730 - if (!node) {
731 - this.elementsCache.forEach((cached, key2) => {
732 - if (!cached.isConnected) {
733 - this.observer.unobserve(cached);
734 - this.elementsCache.delete(key2);
735 - }
736 - });
737 - return;
738 - }
739 - const index = this.indexFromElement(node);
740 - const key = this.options.getItemKey(index);
741 - const prevNode = this.elementsCache.get(key);
742 - if (prevNode !== node) {
743 - if (prevNode) {
744 - this.observer.unobserve(prevNode);
745 - }
746 - this.observer.observe(node);
747 - this.elementsCache.set(key, node);
748 - }
749 - if ((!this.isScrolling || this.scrollState) && this.shouldMeasureDuringScroll(index)) {
750 - this.resizeItem(index, this.options.measureElement(node, void 0, this));
751 - }
752 - };
753 - this.resizeItem = (index, size) => {
754 - var _a;
755 - const item = this.measurementsCache[index];
756 - if (!item) return;
757 - const itemSize = this.itemSizeCache.get(item.key) ?? item.size;
758 - const delta = size - itemSize;
759 - if (delta !== 0) {
760 - if (((_a = this.scrollState) == null ? void 0 : _a.behavior) !== "smooth" && (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments)) {
761 - if ( true && this.options.debug) {
762 - console.info("correction", delta);
763 - }
764 - this._scrollToOffset(this.getScrollOffset(), {
765 - adjustments: this.scrollAdjustments += delta,
766 - behavior: void 0
767 - });
768 - }
769 - this.pendingMeasuredCacheIndexes.push(item.index);
770 - this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));
771 - this.notify(false);
772 - }
773 - };
774 - this.getVirtualItems = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.memo)(
775 - () => [this.getVirtualIndexes(), this.getMeasurements()],
776 - (indexes, measurements) => {
777 - const virtualItems = [];
778 - for (let k = 0, len = indexes.length; k < len; k++) {
779 - const i = indexes[k];
780 - const measurement = measurements[i];
781 - virtualItems.push(measurement);
782 - }
783 - return virtualItems;
784 - },
785 - {
786 - key: true && "getVirtualItems",
787 - debug: () => this.options.debug
788 - }
789 - );
790 - this.getVirtualItemForOffset = (offset) => {
791 - const measurements = this.getMeasurements();
792 - if (measurements.length === 0) {
793 - return void 0;
794 - }
795 - return (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.notUndefined)(
796 - measurements[findNearestBinarySearch(
797 - 0,
798 - measurements.length - 1,
799 - (index) => (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.notUndefined)(measurements[index]).start,
800 - offset
801 - )]
802 - );
803 - };
804 - this.getMaxScrollOffset = () => {
805 - if (!this.scrollElement) return 0;
806 - if ("scrollHeight" in this.scrollElement) {
807 - return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;
808 - } else {
809 - const doc = this.scrollElement.document.documentElement;
810 - return this.options.horizontal ? doc.scrollWidth - this.scrollElement.innerWidth : doc.scrollHeight - this.scrollElement.innerHeight;
811 - }
812 - };
813 - this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {
814 - if (!this.scrollElement) return 0;
815 - const size = this.getSize();
816 - const scrollOffset = this.getScrollOffset();
817 - if (align === "auto") {
818 - align = toOffset >= scrollOffset + size ? "end" : "start";
819 - }
820 - if (align === "center") {
821 - toOffset += (itemSize - size) / 2;
822 - } else if (align === "end") {
823 - toOffset -= size;
824 - }
825 - const maxOffset = this.getMaxScrollOffset();
826 - return Math.max(Math.min(maxOffset, toOffset), 0);
827 - };
828 - this.getOffsetForIndex = (index, align = "auto") => {
829 - index = Math.max(0, Math.min(index, this.options.count - 1));
830 - const size = this.getSize();
831 - const scrollOffset = this.getScrollOffset();
832 - const item = this.measurementsCache[index];
833 - if (!item) return;
834 - if (align === "auto") {
835 - if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {
836 - align = "end";
837 - } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {
838 - align = "start";
839 - } else {
840 - return [scrollOffset, align];
841 - }
842 - }
843 - if (align === "end" && index === this.options.count - 1) {
844 - return [this.getMaxScrollOffset(), align];
845 - }
846 - const toOffset = align === "end" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;
847 - return [
848 - this.getOffsetForAlignment(toOffset, align, item.size),
849 - align
850 - ];
851 - };
852 - this.scrollToOffset = (toOffset, { align = "start", behavior = "auto" } = {}) => {
853 - const offset = this.getOffsetForAlignment(toOffset, align);
854 - const now = this.now();
855 - this.scrollState = {
856 - index: null,
857 - align,
858 - behavior,
859 - startedAt: now,
860 - lastTargetOffset: offset,
861 - stableFrames: 0
862 - };
863 - this._scrollToOffset(offset, { adjustments: void 0, behavior });
864 - this.scheduleScrollReconcile();
865 - };
866 - this.scrollToIndex = (index, {
867 - align: initialAlign = "auto",
868 - behavior = "auto"
869 - } = {}) => {
870 - index = Math.max(0, Math.min(index, this.options.count - 1));
871 - const offsetInfo = this.getOffsetForIndex(index, initialAlign);
872 - if (!offsetInfo) {
873 - return;
874 - }
875 - const [offset, align] = offsetInfo;
876 - const now = this.now();
877 - this.scrollState = {
878 - index,
879 - align,
880 - behavior,
881 - startedAt: now,
882 - lastTargetOffset: offset,
883 - stableFrames: 0
884 - };
885 - this._scrollToOffset(offset, { adjustments: void 0, behavior });
886 - this.scheduleScrollReconcile();
887 - };
888 - this.scrollBy = (delta, { behavior = "auto" } = {}) => {
889 - const offset = this.getScrollOffset() + delta;
890 - const now = this.now();
891 - this.scrollState = {
892 - index: null,
893 - align: "start",
894 - behavior,
895 - startedAt: now,
896 - lastTargetOffset: offset,
897 - stableFrames: 0
898 - };
899 - this._scrollToOffset(offset, { adjustments: void 0, behavior });
900 - this.scheduleScrollReconcile();
901 - };
902 - this.getTotalSize = () => {
903 - var _a;
904 - const measurements = this.getMeasurements();
905 - let end;
906 - if (measurements.length === 0) {
907 - end = this.options.paddingStart;
908 - } else if (this.options.lanes === 1) {
909 - end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;
910 - } else {
911 - const endByLane = Array(this.options.lanes).fill(null);
912 - let endIndex = measurements.length - 1;
913 - while (endIndex >= 0 && endByLane.some((val) => val === null)) {
914 - const item = measurements[endIndex];
915 - if (endByLane[item.lane] === null) {
916 - endByLane[item.lane] = item.end;
917 - }
918 - endIndex--;
919 - }
920 - end = Math.max(...endByLane.filter((val) => val !== null));
921 - }
922 - return Math.max(
923 - end - this.options.scrollMargin + this.options.paddingEnd,
924 - 0
925 - );
926 - };
927 - this._scrollToOffset = (offset, {
928 - adjustments,
929 - behavior
930 - }) => {
931 - this.options.scrollToFn(offset, { behavior, adjustments }, this);
932 - };
933 - this.measure = () => {
934 - this.itemSizeCache = /* @__PURE__ */ new Map();
935 - this.laneAssignments = /* @__PURE__ */ new Map();
936 - this.notify(false);
937 - };
938 - this.setOptions(opts);
939 - }
940 - scheduleScrollReconcile() {
941 - if (!this.targetWindow) {
942 - this.scrollState = null;
943 - return;
944 - }
945 - if (this.rafId != null) return;
946 - this.rafId = this.targetWindow.requestAnimationFrame(() => {
947 - this.rafId = null;
948 - this.reconcileScroll();
949 - });
950 - }
951 - reconcileScroll() {
952 - if (!this.scrollState) return;
953 - const el = this.scrollElement;
954 - if (!el) return;
955 - const MAX_RECONCILE_MS = 5e3;
956 - if (this.now() - this.scrollState.startedAt > MAX_RECONCILE_MS) {
957 - this.scrollState = null;
958 - return;
959 - }
960 - const offsetInfo = this.scrollState.index != null ? this.getOffsetForIndex(this.scrollState.index, this.scrollState.align) : void 0;
961 - const targetOffset = offsetInfo ? offsetInfo[0] : this.scrollState.lastTargetOffset;
962 - const STABLE_FRAMES = 1;
963 - const targetChanged = targetOffset !== this.scrollState.lastTargetOffset;
964 - if (!targetChanged && (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.approxEqual)(targetOffset, this.getScrollOffset())) {
965 - this.scrollState.stableFrames++;
966 - if (this.scrollState.stableFrames >= STABLE_FRAMES) {
967 - this.scrollState = null;
968 - return;
969 - }
970 - } else {
971 - this.scrollState.stableFrames = 0;
972 - if (targetChanged) {
973 - this.scrollState.lastTargetOffset = targetOffset;
974 - this.scrollState.behavior = "auto";
975 - this._scrollToOffset(targetOffset, {
976 - adjustments: void 0,
977 - behavior: "auto"
978 - });
979 - }
980 - }
981 - this.scheduleScrollReconcile();
982 - }
983 -}
984 -const findNearestBinarySearch = (low, high, getCurrentValue, value) => {
985 - while (low <= high) {
986 - const middle = (low + high) / 2 | 0;
987 - const currentValue = getCurrentValue(middle);
988 - if (currentValue < value) {
989 - low = middle + 1;
990 - } else if (currentValue > value) {
991 - high = middle - 1;
992 - } else {
993 - return middle;
994 - }
995 - }
996 - if (low > 0) {
997 - return low - 1;
998 - } else {
999 - return 0;
1000 - }
1001 -};
1002 -function calculateRange({
1003 - measurements,
1004 - outerSize,
1005 - scrollOffset,
1006 - lanes
1007 -}) {
1008 - const lastIndex = measurements.length - 1;
1009 - const getOffset = (index) => measurements[index].start;
1010 - if (measurements.length <= lanes) {
1011 - return {
1012 - startIndex: 0,
1013 - endIndex: lastIndex
1014 - };
1015 - }
1016 - let startIndex = findNearestBinarySearch(
1017 - 0,
1018 - lastIndex,
1019 - getOffset,
1020 - scrollOffset
1021 - );
1022 - let endIndex = startIndex;
1023 - if (lanes === 1) {
1024 - while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {
1025 - endIndex++;
1026 - }
1027 - } else if (lanes > 1) {
1028 - const endPerLane = Array(lanes).fill(0);
1029 - while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {
1030 - const item = measurements[endIndex];
1031 - endPerLane[item.lane] = item.end;
1032 - endIndex++;
1033 - }
1034 - const startPerLane = Array(lanes).fill(scrollOffset + outerSize);
1035 - while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {
1036 - const item = measurements[startIndex];
1037 - startPerLane[item.lane] = item.start;
1038 - startIndex--;
1039 - }
1040 - startIndex = Math.max(0, startIndex - startIndex % lanes);
1041 - endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));
1042 - }
1043 - return { startIndex, endIndex };
1044 -}
424 +//#endregion
425 +//#region packages/packages/core/editor-global-classes/src/components/css-class-usage/types.ts
426 + var QUERY_KEY = "css-classes-usage";
1045 427
1046 -//# sourceMappingURL=index.js.map
428 +//#endregion
429 +//#region packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage.ts
430 + var useCssClassUsage = () => {
431 + return (0, _elementor_query.useQuery)({
432 + queryKey: [QUERY_KEY],
433 + queryFn: fetchCssClassUsage,
434 + refetchOnMount: false,
435 + refetchOnWindowFocus: true
436 + });
437 + };
1047 438
439 +//#endregion
440 +//#region packages/packages/core/editor-global-classes/src/hooks/use-empty-css-class.ts
441 + var useEmptyCssClass = () => {
442 + return (0, _elementor_store.__useSelector)(selectEmptyCssClass);
443 + };
444 + var useAllCssClassesIDs = () => {
445 + const cssClasses = (0, _elementor_store.__useSelector)(selectGlobalClasses);
446 + return Object.keys(cssClasses);
447 + };
1048 448
1049 -/***/ }),
449 +//#endregion
450 +//#region packages/packages/core/editor-global-classes/src/hooks/use-filtered-css-class-usage.tsx
451 + var findCssClassKeysByPageID = (data, pageId) => {
452 + const result = [];
453 + for (const key in data) data[key].content.forEach((content) => {
454 + if (+content.pageId === pageId) result.push(key);
455 + });
456 + return result;
457 + };
458 + var getUnusedClasses = (usedCssClass, potentialUnused) => {
459 + const set = new Set(usedCssClass);
460 + return potentialUnused.filter((cssClass) => !set.has(cssClass));
461 + };
462 + var EMPTY_FILTERED_CSS_CLASS_RESPONSE = {
463 + empty: [],
464 + onThisPage: [],
465 + unused: []
466 + };
467 + var useFilteredCssClassUsage = () => {
468 + const document = (0, _elementor_editor_documents.__useActiveDocument)();
469 + const emptyCssClasses = useEmptyCssClass();
470 + const { data, isLoading } = useCssClassUsage();
471 + const listOfCssClasses = useAllCssClassesIDs();
472 + const emptyCssClassesIDs = (0, react.useMemo)(() => emptyCssClasses.map(({ id }) => id), [emptyCssClasses]);
473 + const onThisPage = (0, react.useMemo)(() => {
474 + if (!data || !document) return [];
475 + return findCssClassKeysByPageID(data, document.id);
476 + }, [data, document]);
477 + const unused = (0, react.useMemo)(() => {
478 + if (!data) return [];
479 + return getUnusedClasses(Object.keys(data), listOfCssClasses);
480 + }, [data, listOfCssClasses]);
481 + if (isLoading || !data || !document) return EMPTY_FILTERED_CSS_CLASS_RESPONSE;
482 + return {
483 + onThisPage,
484 + unused,
485 + empty: emptyCssClassesIDs
486 + };
487 + };
1050 488
1051 -/***/ "./packages/node_modules/@tanstack/virtual-core/dist/esm/utils.js":
1052 -/*!************************************************************************!*\
1053 - !*** ./packages/node_modules/@tanstack/virtual-core/dist/esm/utils.js ***!
1054 - \************************************************************************/
1055 -/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
489 +//#endregion
490 +//#region packages/packages/core/editor-global-classes/src/hooks/use-filters.ts
491 + var useFilters = () => {
492 + const { filters: { filters } } = useSearchAndFilters();
493 + const allFilters = useFilteredCssClassUsage();
494 + return (0, react.useMemo)(() => {
495 + const activeEntries = Object.entries(filters).filter(([, isActive]) => isActive);
496 + if (activeEntries.length === 0) return null;
497 + return activeEntries.reduce((acc, [key], index) => {
498 + const current = allFilters[key] || [];
499 + if (index === 0) return current;
500 + return acc.filter((val) => current.includes(val));
501 + }, []);
502 + }, [filters, allFilters]);
503 + };
1056 504
1057 -__webpack_require__.r(__webpack_exports__);
1058 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1059 -/* harmony export */ approxEqual: function() { return /* binding */ approxEqual; },
1060 -/* harmony export */ debounce: function() { return /* binding */ debounce; },
1061 -/* harmony export */ memo: function() { return /* binding */ memo; },
1062 -/* harmony export */ notUndefined: function() { return /* binding */ notUndefined; }
1063 -/* harmony export */ });
1064 -function memo(getDeps, fn, opts) {
1065 - let deps = opts.initialDeps ?? [];
1066 - let result;
1067 - let isInitial = true;
1068 - function memoizedFunction() {
1069 - var _a, _b, _c;
1070 - let depTime;
1071 - if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();
1072 - const newDeps = getDeps();
1073 - const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);
1074 - if (!depsChanged) {
1075 - return result;
1076 - }
1077 - deps = newDeps;
1078 - let resultTime;
1079 - if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();
1080 - result = fn(...newDeps);
1081 - if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {
1082 - const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
1083 - const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
1084 - const resultFpsPercentage = resultEndTime / 16;
1085 - const pad = (str, num) => {
1086 - str = String(str);
1087 - while (str.length < num) {
1088 - str = " " + str;
1089 - }
1090 - return str;
1091 - };
1092 - console.info(
1093 - `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,
1094 - `
1095 - font-size: .6rem;
1096 - font-weight: bold;
1097 - color: hsl(${Math.max(
1098 - 0,
1099 - Math.min(120 - 120 * resultFpsPercentage, 120)
1100 - )}deg 100% 31%);`,
1101 - opts == null ? void 0 : opts.key
1102 - );
1103 - }
1104 - if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {
1105 - opts.onChange(result);
1106 - }
1107 - isInitial = false;
1108 - return result;
1109 - }
1110 - memoizedFunction.updateDeps = (newDeps) => {
1111 - deps = newDeps;
1112 - };
1113 - return memoizedFunction;
1114 -}
1115 -function notUndefined(value, msg) {
1116 - if (value === void 0) {
1117 - throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ""}`);
1118 - } else {
1119 - return value;
1120 - }
1121 -}
1122 -const approxEqual = (a, b) => Math.abs(a - b) < 1.01;
1123 -const debounce = (targetWindow, fn, ms) => {
1124 - let timeoutId;
1125 - return function(...args) {
1126 - targetWindow.clearTimeout(timeoutId);
1127 - timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);
1128 - };
1129 -};
505 +//#endregion
506 +//#region packages/packages/core/editor-global-classes/src/utils/create-labels-for-classes.ts
507 + function createLabelsForClasses(entries) {
508 + return Object.fromEntries(entries.map((e) => [e.id, e.label]));
509 + }
1130 510
1131 -//# sourceMappingURL=utils.js.map
511 +//#endregion
512 +//#region packages/packages/core/editor-global-classes/src/load-document-classes.ts
513 + function styleDefinitionsMapWithoutNull(map) {
514 + return Object.fromEntries(Object.entries(map).filter((entry) => entry[1] !== null));
515 + }
516 + function resetGlobalClassesState(globalOrder, classLabels) {
517 + (0, _elementor_store.__dispatch)(slice.actions.load({
518 + preview: {
519 + items: {},
520 + order: globalOrder
521 + },
522 + frontend: {
523 + items: {},
524 + order: globalOrder
525 + },
526 + classLabels
527 + }));
528 + }
529 + async function loadCurrentDocumentClasses() {
530 + const [previewIndexRes, frontendIndexRes] = await Promise.all([apiClient.all("preview"), apiClient.all("frontend")]);
531 + const previewIndex = previewIndexRes.data.data;
532 + const frontendIndex = frontendIndexRes.data.data;
533 + const classLabels = createLabelsForClasses(previewIndex);
534 + const previewOrder = previewIndex.map((e) => e.id);
535 + const frontendOrder = frontendIndex.map((e) => e.id);
536 + resetGlobalClassesState(previewOrder, classLabels);
537 + const postId = (0, _elementor_editor_documents.getCurrentDocument)()?.id;
538 + if (!postId) return;
539 + const [previewPostRes, frontendPostRes] = await Promise.all([apiClient.getStylesForPost(postId, "preview"), apiClient.getStylesForPost(postId, "frontend")]);
540 + const previewItems = styleDefinitionsMapWithoutNull(previewPostRes.data.data);
541 + const frontendItems = styleDefinitionsMapWithoutNull(frontendPostRes.data.data);
542 + (0, _elementor_store.__dispatch)(slice.actions.load({
543 + preview: {
544 + items: previewItems,
545 + order: previewOrder
546 + },
547 + frontend: {
548 + items: frontendItems,
549 + order: frontendOrder
550 + },
551 + classLabels
552 + }));
553 + }
554 + async function addDocumentClasses(documentId) {
555 + const [previewPostRes, frontendPostRes] = await Promise.all([apiClient.getStylesForPost(documentId, "preview"), apiClient.getStylesForPost(documentId, "frontend")]);
556 + const previewItems = styleDefinitionsMapWithoutNull(previewPostRes.data.data);
557 + const frontendItems = styleDefinitionsMapWithoutNull(frontendPostRes.data.data);
558 + (0, _elementor_store.__dispatch)(slice.actions.mergeExistingClasses({
559 + preview: previewItems,
560 + frontend: frontendItems
561 + }));
562 + }
1132 563
564 +//#endregion
565 +//#region packages/packages/core/editor-global-classes/src/load-existing-classes.ts
566 + var pendingLoad = null;
567 + var pendingIds = /* @__PURE__ */ new Set();
568 + async function loadExistingClasses(classIds) {
569 + const existingClasses = selectGlobalClasses((0, _elementor_store.__getState)());
570 + const missingIds = classIds.filter((id) => !(id in existingClasses));
571 + if (missingIds.length === 0) return;
572 + missingIds.forEach((id) => pendingIds.add(id));
573 + if (pendingLoad) {
574 + await pendingLoad;
575 + return loadExistingClasses(classIds);
576 + }
577 + pendingLoad = fetchAndMergeClasses();
578 + try {
579 + await pendingLoad;
580 + } finally {
581 + pendingLoad = null;
582 + }
583 + }
584 + async function fetchAndMergeClasses() {
585 + const idsToFetch = Array.from(pendingIds);
586 + pendingIds.clear();
587 + if (idsToFetch.length === 0) return;
588 + const [previewResponse, frontendResponse] = await Promise.all([apiClient.getStylesByIds(idsToFetch, "preview"), apiClient.getStylesByIds(idsToFetch, "frontend")]);
589 + const previewItems = styleDefinitionsMapWithoutNull(previewResponse.data.data);
590 + const frontendItems = styleDefinitionsMapWithoutNull(frontendResponse.data.data);
591 + (0, _elementor_store.__dispatch)(slice.actions.mergeExistingClasses({
592 + preview: previewItems,
593 + frontend: frontendItems
594 + }));
595 + }
1133 596
1134 -/***/ }),
597 +//#endregion
598 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/duplicate-label-dialog.tsx
599 + var DUP_PREFIX = "DUP_";
600 + var DuplicateLabelDialog = ({ modifiedLabels, onApprove }) => {
601 + const handleButtonClick = () => {
602 + localStorage.setItem("elementor-global-classes-search", DUP_PREFIX);
603 + onApprove?.();
604 + (0, _elementor_editor_ui.closeDialog)();
605 + };
606 + return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_ui.DialogHeader, { logo: false }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
607 + display: "flex",
608 + alignItems: "center",
609 + gap: 1
610 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Icon, { color: "secondary" }, /* @__PURE__ */ react.createElement(_elementor_icons.InfoCircleFilledIcon, { fontSize: "medium" })), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "subtitle1" }, (0, _wordpress_i18n.__)("We've published your page and updated class names.", "elementor")))), /* @__PURE__ */ react.createElement(_elementor_ui.DialogContent, null, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
611 + spacing: 2,
612 + direction: "column"
613 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "body2" }, (0, _wordpress_i18n.__)("Some new classes used the same names as existing ones. To prevent conflicts, we added the prefix", "elementor"), /* @__PURE__ */ react.createElement("strong", null, " ", DUP_PREFIX)), /* @__PURE__ */ react.createElement(_elementor_ui.Box, null, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: {
614 + width: "100%",
615 + display: "flex",
616 + gap: 2,
617 + alignItems: "flex-start"
618 + } }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
619 + variant: "subtitle2",
620 + sx: {
621 + fontWeight: "bold",
622 + flex: 1,
623 + flexShrink: 1,
624 + flexGrow: 1,
625 + minWidth: 0
626 + }
627 + }, (0, _wordpress_i18n.__)("Before", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
628 + variant: "subtitle2",
629 + sx: {
630 + minWidth: "200px",
631 + fontWeight: "bold",
632 + flexShrink: 0,
633 + flexGrow: 0,
634 + width: "200px",
635 + maxWidth: "200px"
636 + }
637 + }, (0, _wordpress_i18n.__)("After", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_ui.Divider, { sx: {
638 + mt: .5,
639 + mb: .5
640 + } }), /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
641 + direction: "column",
642 + gap: .5,
643 + sx: { pb: 2 }
644 + }, Object.values(modifiedLabels).map(({ original, modified }, index) => /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
645 + key: index,
646 + sx: {
647 + width: "100%",
648 + display: "flex",
649 + gap: 2,
650 + alignItems: "flex-start"
651 + }
652 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: {
653 + flex: 1,
654 + flexShrink: 1,
655 + flexGrow: 1,
656 + minWidth: 0
657 + } }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.EllipsisWithTooltip, { title: original }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
658 + variant: "body2",
659 + sx: { color: "text.secondary" }
660 + }, original))), /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: {
661 + minWidth: "200px",
662 + flexShrink: 0,
663 + flexGrow: 0,
664 + width: "200px",
665 + maxWidth: "200px"
666 + } }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.EllipsisWithTooltip, { title: modified }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
667 + variant: "body2",
668 + sx: { color: "text.primary" }
669 + }, modified)))))), /* @__PURE__ */ react.createElement(_elementor_ui.Box, null, /* @__PURE__ */ react.createElement(_elementor_ui.Alert, {
670 + severity: "info",
671 + size: "small",
672 + color: "secondary"
673 + }, /* @__PURE__ */ react.createElement("strong", null, (0, _wordpress_i18n.__)("Your designs and classes are safe.", "elementor")), (0, _wordpress_i18n.__)("Only the prefixes were added. Find them in Class Manager by searching", "elementor"), /* @__PURE__ */ react.createElement("strong", null, DUP_PREFIX)))))), /* @__PURE__ */ react.createElement(_elementor_ui.DialogActions, null, /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
674 + color: "secondary",
675 + variant: "text",
676 + onClick: handleButtonClick
677 + }, (0, _wordpress_i18n.__)("Go to Class Manager", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
678 + color: "secondary",
679 + variant: "contained",
680 + onClick: _elementor_editor_ui.closeDialog
681 + }, (0, _wordpress_i18n.__)("Done", "elementor"))));
682 + };
1135 683
1136 -/***/ "./packages/packages/core/editor-global-classes/service/css-class-usage-service.ts":
1137 -/*!*****************************************************************************************!*\
1138 - !*** ./packages/packages/core/editor-global-classes/service/css-class-usage-service.ts ***!
1139 - \*****************************************************************************************/
1140 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
684 +//#endregion
685 +//#region packages/packages/core/editor-global-classes/src/utils/tracking.ts
686 + var trackGlobalClasses = async (payload) => {
687 + const { runAction } = payload;
688 + const data = await getSanitizedData(payload);
689 + if (data) {
690 + track(data);
691 + if (data.event === "classCreated" && "classId" in data) fireClassApplied(data.classId);
692 + }
693 + runAction?.();
694 + };
695 + var fireClassApplied = async (classId) => {
696 + const appliedInfo = await getAppliedInfo(classId);
697 + track({
698 + event: "classApplied",
699 + classId,
700 + ...appliedInfo,
701 + totalInstancesAfterApply: 1
702 + });
703 + };
704 + var getSanitizedData = async (payload) => {
705 + switch (payload.event) {
706 + case "classApplied":
707 + if ("classId" in payload && payload.classId) {
708 + const appliedInfo = await getAppliedInfo(payload.classId);
709 + return {
710 + ...payload,
711 + ...appliedInfo
712 + };
713 + }
714 + break;
715 + case "classRemoved":
716 + if ("classId" in payload && payload.classId) {
717 + const deleteInfo = getRemovedInfo(payload.classId);
718 + return {
719 + ...payload,
720 + ...deleteInfo
721 + };
722 + }
723 + break;
724 + case "classDeleted":
725 + if ("classId" in payload && payload.classId) {
726 + const deleteInfo = await trackDeleteClass(payload.classId);
727 + return {
728 + ...payload,
729 + ...deleteInfo
730 + };
731 + }
732 + break;
733 + case "classCreated":
734 + if ("source" in payload && payload.source !== "created") {
735 + if ("classId" in payload && payload.classId) return {
736 + ...payload,
737 + classTitle: getCssClass(payload.classId).label
738 + };
739 + }
740 + return payload;
741 + case "classStateClicked":
742 + if ("classId" in payload && payload.classId) return {
743 + ...payload,
744 + classTitle: getCssClass(payload.classId).label
745 + };
746 + break;
747 + case "classSyncToV3PopupShown": return {
748 + ...payload,
749 + interaction_type: "popup_shown",
750 + target_type: "popup",
751 + target_name: "sync_to_v3_popup",
752 + interaction_result: "popup_viewed",
753 + target_location: "widget_panel",
754 + location_l1: "class_manager"
755 + };
756 + case "classSyncToV3": {
757 + const classLabel = getCssClass(payload.classId).label;
758 + const isSync = payload.action === "sync";
759 + return {
760 + ...payload,
761 + interaction_type: "click",
762 + target_type: classLabel,
763 + target_name: isSync ? "sync_to_v3" : "unsync_to_v3",
764 + interaction_result: isSync ? "class_is_synced_to_V3" : "class_is_unsynced_from_V3",
765 + target_location: "widget_panel",
766 + location_l1: "class_manager",
767 + interaction_description: isSync ? `user_synced_${classLabel}_to_v3` : `user_unsync_${classLabel}_from_v3`
768 + };
769 + }
770 + case "classSyncToV3PopupClick": {
771 + const isSyncAction = payload.action === "sync";
772 + return {
773 + ...payload,
774 + interaction_type: "click",
775 + target_type: "button",
776 + target_name: isSyncAction ? "sync_to_v3" : "cancel",
777 + interaction_result: isSyncAction ? "class_is_synced" : "cancel",
778 + target_location: "sync_to_v3_popup"
779 + };
780 + }
781 + default: return payload;
782 + }
783 + };
784 + var track = (data) => {
785 + const { dispatchEvent, config } = (0, _elementor_events.getMixpanel)();
786 + if (!config?.names?.global_classes?.[data.event]) {
787 + console.error("Global class tracking event not found", { event: data.event });
788 + return;
789 + }
790 + const name = config.names.global_classes[data.event];
791 + const { event, ...eventData } = data;
792 + try {
793 + dispatchEvent?.(name, {
794 + event,
795 + ...eventData
796 + });
797 + } catch (error) {
798 + throw new GlobalClassTrackingError({ cause: error });
799 + }
800 + };
801 + var extractCssClassData = (classId) => {
802 + return { classTitle: getCssClass(classId).label };
803 + };
804 + var getCssClass = (classId) => {
805 + const state = (0, _elementor_store.__getState)();
806 + const cssClass = selectClass(state, classId);
807 + if (cssClass) return cssClass;
808 + const label = selectClassLabels(state)[classId];
809 + if (label !== void 0) return placeholderDefinition(classId, label);
810 + throw new Error(`CSS class with ID ${classId} not found`);
811 + };
812 + var trackDeleteClass = async (classId) => {
813 + const classTitle = getCssClass(classId).label;
814 + return {
815 + totalInstances: await getTotalInstancesByCssClassID(classId),
816 + classTitle
817 + };
818 + };
819 + var getTotalInstancesByCssClassID = async (classId) => {
820 + return (await fetchCssClassUsage())[classId]?.total ?? 1;
821 + };
822 + var getAppliedInfo = async (classId) => {
823 + const { classTitle } = extractCssClassData(classId);
824 + return {
825 + classTitle,
826 + totalInstancesAfterApply: await getTotalInstancesByCssClassID(classId) + 1
827 + };
828 + };
829 + var getRemovedInfo = (classId) => {
830 + const { classTitle } = extractCssClassData(classId);
831 + return { classTitle };
832 + };
1141 833
1142 -__webpack_require__.r(__webpack_exports__);
1143 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1144 -/* harmony export */ fetchCssClassUsage: function() { return /* binding */ fetchCssClassUsage; }
1145 -/* harmony export */ });
1146 -/* harmony import */ var _src_api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/api */ "./packages/packages/core/editor-global-classes/src/api.ts");
1147 -/* harmony import */ var _src_components_css_class_usage_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/components/css-class-usage/utils */ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/utils.ts");
834 +//#endregion
835 +//#region packages/packages/core/editor-global-classes/src/save-global-classes.tsx
836 + async function saveGlobalClasses({ context, onApprove }) {
837 + const state = selectData((0, _elementor_store.__getState)());
838 + const apiAction = context === "preview" ? apiClient.saveDraft : apiClient.publish;
839 + const changes = calculateChanges(state, (context === "preview" ? selectPreviewInitialData : selectFrontendInitialData)((0, _elementor_store.__getState)()));
840 + const touchedIds = [...changes.added, ...changes.modified];
841 + const response = await apiAction({
842 + items: Object.fromEntries(touchedIds.map((id) => [id, state.items[id]]).filter(([, v]) => v)),
843 + order: state.order,
844 + changes
845 + });
846 + (0, _elementor_store.__dispatch)(slice.actions.reset({ context }));
847 + window.dispatchEvent(new CustomEvent("classes:updated", { detail: { context } }));
848 + if (response?.data?.data?.code === API_ERROR_CODES.DUPLICATED_LABEL) {
849 + (0, _elementor_store.__dispatch)(slice.actions.updateMultiple(response.data.data.modifiedLabels));
850 + trackGlobalClasses({
851 + event: "classPublishConflict",
852 + numOfConflicts: Object.keys(response.data.data.modifiedLabels).length
853 + });
854 + (0, _elementor_editor_ui.openDialog)({ component: /* @__PURE__ */ react.createElement(DuplicateLabelDialog, {
855 + modifiedLabels: response.data.data.modifiedLabels || [],
856 + onApprove
857 + }) });
858 + }
859 + }
860 + function calculateChanges(state, initialData) {
861 + const stateIds = Object.keys(state.items);
862 + const initialDataIds = Object.keys(initialData.items);
863 + const { order: stateOrder } = state;
864 + const { order: initialDataOrder } = initialData;
865 + const stateOrderIdSet = new Set(stateOrder);
866 + const deleted = initialDataOrder.filter((id) => !stateOrderIdSet.has(id));
867 + const order = stateOrder.join(";") !== initialDataOrder.join(";");
868 + return {
869 + added: stateIds.filter((id) => !initialDataIds.includes(id)),
870 + deleted,
871 + modified: stateIds.filter((id) => {
872 + return id in initialData.items && (0, _elementor_utils.hash)(state.items[id]) !== (0, _elementor_utils.hash)(initialData.items[id]);
873 + }),
874 + order
875 + };
876 + }
1148 877
878 +//#endregion
879 +//#region packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/clear-icon-button.tsx
880 + var ClearIconButton = ({ tooltipText, sx, trigger }) => {
881 + const { filters: { onClearFilter } } = useSearchAndFilters();
882 + const handleClearFilters = () => {
883 + onClearFilter(trigger);
884 + trackGlobalClasses({
885 + event: "classManagerFilterCleared",
886 + trigger
887 + });
888 + };
889 + return /* @__PURE__ */ react.createElement(_elementor_ui.Tooltip, {
890 + title: tooltipText,
891 + placement: "top",
892 + disableInteractive: true
893 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, null, /* @__PURE__ */ react.createElement(CustomIconButton$1, {
894 + "aria-label": tooltipText,
895 + size: "tiny",
896 + onClick: handleClearFilters,
897 + sx
898 + }, /* @__PURE__ */ react.createElement(_elementor_icons.BrushBigIcon, { fontSize: "tiny" }))));
899 + };
900 + var CustomIconButton$1 = (0, _elementor_ui.styled)(_elementor_ui.IconButton)(({ theme }) => ({ "&.Mui-disabled": {
901 + pointerEvents: "auto",
902 + "&:hover": { color: theme.palette.action.disabled }
903 + } }));
1149 904
1150 -const fetchCssClassUsage = async () => {
1151 - const response = await _src_api__WEBPACK_IMPORTED_MODULE_0__.apiClient.usage();
1152 - return (0,_src_components_css_class_usage_utils__WEBPACK_IMPORTED_MODULE_1__.transformData)(response?.data?.data || {});
1153 -};
905 +//#endregion
906 +//#region packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/filter-list.tsx
907 + var filterConfig = {
908 + unused: (0, _wordpress_i18n.__)("Unused", "elementor"),
909 + empty: (0, _wordpress_i18n.__)("Empty", "elementor"),
910 + onThisPage: (0, _wordpress_i18n.__)("On this page", "elementor")
911 + };
912 + var FilterList = () => {
913 + const { filters: { filters, setFilters } } = useSearchAndFilters();
914 + const filteredCssClass = useFilteredCssClassUsage();
915 + const handleOnClick = (value) => {
916 + setFilters((prev) => ({
917 + ...prev,
918 + [value]: !prev[value]
919 + }));
920 + trackGlobalClasses({
921 + event: "classManagerFilterUsed",
922 + action: filters[value] ? "remove" : "apply",
923 + type: value,
924 + trigger: "menu"
925 + });
926 + };
927 + return /* @__PURE__ */ react.createElement(_elementor_ui.MenuList, null, /* @__PURE__ */ react.createElement(_elementor_ui.MenuItem, { onClick: () => handleOnClick("unused") }, /* @__PURE__ */ react.createElement(LabeledCheckbox, {
928 + label: filterConfig.unused,
929 + checked: filters.unused,
930 + suffix: /* @__PURE__ */ react.createElement(_elementor_ui.Chip, {
931 + size: "tiny",
932 + sx: { ml: "auto" },
933 + label: filteredCssClass.unused.length
934 + })
935 + })), /* @__PURE__ */ react.createElement(_elementor_ui.MenuItem, { onClick: () => handleOnClick("empty") }, /* @__PURE__ */ react.createElement(LabeledCheckbox, {
936 + label: filterConfig.empty,
937 + checked: filters.empty,
938 + suffix: /* @__PURE__ */ react.createElement(_elementor_ui.Chip, {
939 + size: "tiny",
940 + sx: { ml: "auto" },
941 + label: filteredCssClass.empty.length
942 + })
943 + })), /* @__PURE__ */ react.createElement(_elementor_ui.MenuItem, { onClick: () => handleOnClick("onThisPage") }, /* @__PURE__ */ react.createElement(LabeledCheckbox, {
944 + label: filterConfig.onThisPage,
945 + checked: filters.onThisPage,
946 + suffix: /* @__PURE__ */ react.createElement(_elementor_ui.Chip, {
947 + size: "tiny",
948 + sx: { ml: "auto" },
949 + label: filteredCssClass.onThisPage.length
950 + })
951 + })));
952 + };
953 + var LabeledCheckbox = ({ label, suffix, checked }) => /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
954 + direction: "row",
955 + alignItems: "center",
956 + gap: .5,
957 + flex: 1
958 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Checkbox, {
959 + size: "small",
960 + checked,
961 + sx: {
962 + padding: 0,
963 + color: "text.tertiary",
964 + "&.Mui-checked": { color: "text.tertiary" }
965 + }
966 + }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
967 + variant: "caption",
968 + sx: { color: "text.secondary" }
969 + }, label), suffix);
1154 970
1155 -/***/ }),
971 +//#endregion
972 +//#region packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/active-filters.tsx
973 + var ActiveFilters = () => {
974 + const { filters: { filters, setFilters } } = useSearchAndFilters();
975 + const handleRemove = (key) => {
976 + setFilters((prev) => ({
977 + ...prev,
978 + [key]: false
979 + }));
980 + trackGlobalClasses({
981 + event: "classManagerFilterUsed",
982 + action: "remove",
983 + type: key,
984 + trigger: "header"
985 + });
986 + };
987 + const activeKeys = Object.keys(filters).filter((key) => filters[key]);
988 + const showClearIcon = activeKeys.length > 0;
989 + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
990 + direction: "row",
991 + alignItems: "center",
992 + justifyContent: "space-between"
993 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
994 + direction: "row",
995 + gap: .5,
996 + alignItems: "center",
997 + flexWrap: "wrap"
998 + }, activeKeys.map((key) => /* @__PURE__ */ react.createElement(_elementor_ui.Chip, {
999 + key,
1000 + label: filterConfig[key],
1001 + onDelete: () => handleRemove(key),
1002 + sx: chipSx,
1003 + size: "tiny"
1004 + }))), showClearIcon && /* @__PURE__ */ react.createElement(ClearIconButton, {
1005 + trigger: "header",
1006 + tooltipText: (0, _wordpress_i18n.__)("Clear Filters", "elementor"),
1007 + sx: { margin: "0 0 auto auto" }
1008 + }));
1009 + };
1010 + var chipSx = {
1011 + "& .MuiChip-deleteIcon": {
1012 + display: "none",
1013 + transition: "opacity 0.2s"
1014 + },
1015 + "&:hover .MuiChip-deleteIcon": { display: "block" }
1016 + };
1156 1017
1157 -/***/ "./packages/packages/core/editor-global-classes/src/api.ts":
1158 -/*!*****************************************************************!*\
1159 - !*** ./packages/packages/core/editor-global-classes/src/api.ts ***!
1160 - \*****************************************************************/
1161 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1018 +//#endregion
1019 +//#region packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/css-class-filter.tsx
1020 + var CssClassFilter = () => {
1021 + const { filters: { filters } } = useSearchAndFilters();
1022 + const popupState = (0, _elementor_ui.usePopupState)({
1023 + variant: "popover",
1024 + disableAutoFocus: true
1025 + });
1026 + (0, react.useEffect)(() => {
1027 + if (popupState.isOpen) trackGlobalClasses({ event: "classManagerFiltersOpened" });
1028 + }, [popupState.isOpen]);
1029 + const showCleanIcon = Object.values(filters).some((value) => value);
1030 + return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_ui.Tooltip, {
1031 + title: (0, _wordpress_i18n.__)("Filters", "elementor"),
1032 + placement: "top"
1033 + }, /* @__PURE__ */ react.createElement(_elementor_ui.ToggleButton, {
1034 + value: "filter",
1035 + size: "tiny",
1036 + selected: popupState.isOpen,
1037 + ...(0, _elementor_ui.bindToggle)(popupState)
1038 + }, /* @__PURE__ */ react.createElement(_elementor_icons.FilterIcon, { fontSize: "tiny" }))), /* @__PURE__ */ react.createElement(_elementor_ui.Popover, {
1039 + sx: { maxWidth: "344px" },
1040 + anchorOrigin: {
1041 + vertical: "top",
1042 + horizontal: "right"
1043 + },
1044 + transformOrigin: {
1045 + vertical: "top",
1046 + horizontal: -21
1047 + },
1048 + ...(0, _elementor_ui.bindPopover)(popupState)
1049 + }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.PopoverHeader, {
1050 + actions: showCleanIcon ? [/* @__PURE__ */ react.createElement(ClearIconButton, {
1051 + trigger: "menu",
1052 + key: "clear-all-button",
1053 + tooltipText: (0, _wordpress_i18n.__)("Clear all", "elementor")
1054 + })] : [],
1055 + onClose: popupState.close,
1056 + title: (0, _wordpress_i18n.__)("Filters", "elementor"),
1057 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.FilterIcon, { fontSize: "tiny" })
1058 + }), /* @__PURE__ */ react.createElement(_elementor_ui.Divider, { sx: { borderWidth: "1px 0 0 0" } }), /* @__PURE__ */ react.createElement(_elementor_editor_ui.PopoverBody, {
1059 + width: 344,
1060 + height: 125
1061 + }, /* @__PURE__ */ react.createElement(FilterList, null))));
1062 + };
1162 1063
1163 -__webpack_require__.r(__webpack_exports__);
1164 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1165 -/* harmony export */ API_ERROR_CODES: function() { return /* binding */ API_ERROR_CODES; },
1166 -/* harmony export */ apiClient: function() { return /* binding */ apiClient; }
1167 -/* harmony export */ });
1168 -/* harmony import */ var _elementor_http_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/http-client */ "@elementor/http-client");
1169 -/* harmony import */ var _elementor_http_client__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_http_client__WEBPACK_IMPORTED_MODULE_0__);
1064 +//#endregion
1065 +//#region packages/packages/core/editor-global-classes/src/components/search-and-filter/components/search/class-manager-search.tsx
1066 + var ClassManagerSearch = () => {
1067 + const { search: { inputValue, handleChange } } = useSearchAndFilters();
1068 + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
1069 + direction: "row",
1070 + gap: .5,
1071 + sx: { width: "100%" }
1072 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: { flexGrow: 1 } }, /* @__PURE__ */ react.createElement(_elementor_ui.TextField, {
1073 + role: "search",
1074 + fullWidth: true,
1075 + size: "tiny",
1076 + value: inputValue,
1077 + onFocus: () => {
1078 + trackGlobalClasses({ event: "classManagerSearched" });
1079 + },
1080 + placeholder: (0, _wordpress_i18n.__)("Search", "elementor"),
1081 + onChange: (e) => handleChange(e.target.value),
1082 + InputProps: { startAdornment: /* @__PURE__ */ react.createElement(_elementor_ui.InputAdornment, { position: "start" }, /* @__PURE__ */ react.createElement(_elementor_icons.SearchIcon, { fontSize: "tiny" })) }
1083 + })));
1084 + };
1170 1085
1171 -const RESOURCE_URL = '/global-classes';
1172 -const BASE_URL = 'elementor/v1';
1173 -const RESOURCE_USAGE_URL = `${RESOURCE_URL}/usage`;
1174 -const RESOURCE_POST_URL = `${RESOURCE_URL}/post`;
1175 -const RESOURCE_STYLES_URL = `${RESOURCE_URL}/styles`;
1176 -function saveGlobalClasses(context, payload) {
1177 - return (0,_elementor_http_client__WEBPACK_IMPORTED_MODULE_0__.httpService)().put(`${BASE_URL}${RESOURCE_URL}`, payload, {
1178 - params: {
1179 - context
1180 - }
1181 - });
1182 -}
1183 -const apiClient = {
1184 - usage: () => (0,_elementor_http_client__WEBPACK_IMPORTED_MODULE_0__.httpService)().get(`${BASE_URL}${RESOURCE_USAGE_URL}`),
1185 - all: (context = 'preview') => (0,_elementor_http_client__WEBPACK_IMPORTED_MODULE_0__.httpService)().get(`${BASE_URL}${RESOURCE_URL}`, {
1186 - params: {
1187 - context
1188 - }
1189 - }),
1190 - getStylesForPost: (postId, context = 'preview') => (0,_elementor_http_client__WEBPACK_IMPORTED_MODULE_0__.httpService)().get(`${BASE_URL}${RESOURCE_POST_URL}`, {
1191 - params: {
1192 - context,
1193 - post_id: postId
1194 - }
1195 - }),
1196 - getStylesByIds: (ids, context = 'preview') => (0,_elementor_http_client__WEBPACK_IMPORTED_MODULE_0__.httpService)().get(`${BASE_URL}${RESOURCE_STYLES_URL}`, {
1197 - params: {
1198 - context,
1199 - ids: ids.join(',')
1200 - }
1201 - }),
1202 - publish: payload => saveGlobalClasses('frontend', payload),
1203 - saveDraft: payload => saveGlobalClasses('preview', payload)
1204 -};
1205 -const API_ERROR_CODES = {
1206 - DUPLICATED_LABEL: 'DUPLICATED_LABEL'
1207 -};
1086 +//#endregion
1087 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-introduction.tsx
1088 + var MESSAGE_KEY = "global-class-manager";
1089 + var ClassManagerIntroduction = () => {
1090 + const [isMessageSuppressed, suppressMessage] = (0, _elementor_editor_current_user.useSuppressedMessage)(MESSAGE_KEY);
1091 + const [shouldShowIntroduction, setShouldShowIntroduction] = (0, react.useState)(!isMessageSuppressed);
1092 + return /* @__PURE__ */ react.createElement(_elementor_editor_ui.IntroductionModal, {
1093 + open: shouldShowIntroduction,
1094 + title: (0, _wordpress_i18n.__)("Class Manager", "elementor"),
1095 + handleClose: (shouldShowAgain) => {
1096 + if (!shouldShowAgain) suppressMessage();
1097 + setShouldShowIntroduction(false);
1098 + }
1099 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Image, {
1100 + sx: {
1101 + width: "100%",
1102 + aspectRatio: "16 / 9"
1103 + },
1104 + src: "https://assets.elementor.com/packages/v1/images/class-manager-intro.svg",
1105 + alt: ""
1106 + }), /* @__PURE__ */ react.createElement(IntroductionContent, null));
1107 + };
1108 + var IntroductionContent = () => {
1109 + return /* @__PURE__ */ react.createElement(_elementor_ui.Box, { p: 3 }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "body2" }, (0, _wordpress_i18n.__)("The Class Manager lets you see all the classes you've created, plus adjust their priority, rename them, and delete unused classes to keep your CSS structured.", "elementor")), /* @__PURE__ */ react.createElement("br", null), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "body2" }, (0, _wordpress_i18n.__)("Remember, when editing an item within a specific class, any changes you make will apply across all elements in that class.", "elementor")));
1110 + };
1208 1111
1209 -/***/ }),
1112 +//#endregion
1113 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/delete-class.ts
1114 + var isDeleted = false;
1115 + var deleteClass = (id) => {
1116 + trackGlobalClasses({
1117 + event: "classDeleted",
1118 + classId: id,
1119 + runAction: () => {
1120 + (0, _elementor_store.__dispatch)(slice.actions.delete(id));
1121 + isDeleted = true;
1122 + }
1123 + });
1124 + };
1125 + var onDelete = async () => {
1126 + isDeleted = false;
1127 + };
1128 + var hasDeletedItems = () => isDeleted;
1210 1129
1211 -/***/ "./packages/packages/core/editor-global-classes/src/capabilities.ts":
1212 -/*!**************************************************************************!*\
1213 - !*** ./packages/packages/core/editor-global-classes/src/capabilities.ts ***!
1214 - \**************************************************************************/
1215 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1130 +//#endregion
1131 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/flipped-color-swatch-icon.tsx
1132 + var FlippedColorSwatchIcon = ({ sx, ...props }) => /* @__PURE__ */ react.createElement(_elementor_icons.ColorSwatchIcon, {
1133 + sx: {
1134 + transform: "rotate(90deg)",
1135 + ...sx
1136 + },
1137 + ...props
1138 + });
1216 1139
1217 -__webpack_require__.r(__webpack_exports__);
1218 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1219 -/* harmony export */ UPDATE_CLASS_CAPABILITY_KEY: function() { return /* binding */ UPDATE_CLASS_CAPABILITY_KEY; },
1220 -/* harmony export */ getCapabilities: function() { return /* binding */ getCapabilities; }
1221 -/* harmony export */ });
1222 -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters");
1223 -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__);
1140 +//#endregion
1141 +//#region packages/node_modules/@tanstack/virtual-core/dist/esm/utils.js
1142 + function memo(getDeps, fn, opts) {
1143 + let deps = opts.initialDeps ?? [];
1144 + let result;
1145 + let isInitial = true;
1146 + function memoizedFunction() {
1147 + var _a;
1148 + var _b;
1149 + var _c;
1150 + let depTime;
1151 + if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();
1152 + const newDeps = getDeps();
1153 + if (!(newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep))) return result;
1154 + deps = newDeps;
1155 + let resultTime;
1156 + if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();
1157 + result = fn(...newDeps);
1158 + if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {
1159 + const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
1160 + const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
1161 + const resultFpsPercentage = resultEndTime / 16;
1162 + const pad = (str, num) => {
1163 + str = String(str);
1164 + while (str.length < num) str = " " + str;
1165 + return str;
1166 + };
1167 + console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `
1168 + font-size: .6rem;
1169 + font-weight: bold;
1170 + color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);
1171 + }
1172 + if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) opts.onChange(result);
1173 + isInitial = false;
1174 + return result;
1175 + }
1176 + memoizedFunction.updateDeps = (newDeps) => {
1177 + deps = newDeps;
1178 + };
1179 + return memoizedFunction;
1180 + }
1181 + function notUndefined(value, msg) {
1182 + if (value === void 0) throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ""}`);
1183 + else return value;
1184 + }
1185 + var approxEqual = (a, b) => Math.abs(a - b) < 1.01;
1186 + var debounce = (targetWindow, fn, ms) => {
1187 + let timeoutId;
1188 + return function(...args) {
1189 + targetWindow.clearTimeout(timeoutId);
1190 + timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);
1191 + };
1192 + };
1224 1193
1225 -const EXPERIMENT_KEY = 'global_classes_should_enforce_capabilities';
1226 -const UPDATE_CLASS_CAPABILITY_KEY = 'elementor_global_classes_update_class';
1227 -const getCapabilities = () => {
1228 - const shouldEnforceCapabilities = (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__.isExperimentActive)(EXPERIMENT_KEY);
1229 - if (shouldEnforceCapabilities) {
1230 - return {
1231 - update: UPDATE_CLASS_CAPABILITY_KEY,
1232 - create: UPDATE_CLASS_CAPABILITY_KEY,
1233 - delete: UPDATE_CLASS_CAPABILITY_KEY,
1234 - updateProps: UPDATE_CLASS_CAPABILITY_KEY
1235 - };
1236 - }
1237 -};
1194 +//#endregion
1195 +//#region packages/node_modules/@tanstack/virtual-core/dist/esm/index.js
1196 + var getRect = (element) => {
1197 + const { offsetWidth, offsetHeight } = element;
1198 + return {
1199 + width: offsetWidth,
1200 + height: offsetHeight
1201 + };
1202 + };
1203 + var defaultKeyExtractor = (index) => index;
1204 + var defaultRangeExtractor = (range) => {
1205 + const start = Math.max(range.startIndex - range.overscan, 0);
1206 + const end = Math.min(range.endIndex + range.overscan, range.count - 1);
1207 + const arr = [];
1208 + for (let i = start; i <= end; i++) arr.push(i);
1209 + return arr;
1210 + };
1211 + var observeElementRect = (instance, cb) => {
1212 + const element = instance.scrollElement;
1213 + if (!element) return;
1214 + const targetWindow = instance.targetWindow;
1215 + if (!targetWindow) return;
1216 + const handler = (rect) => {
1217 + const { width, height } = rect;
1218 + cb({
1219 + width: Math.round(width),
1220 + height: Math.round(height)
1221 + });
1222 + };
1223 + handler(getRect(element));
1224 + if (!targetWindow.ResizeObserver) return () => {};
1225 + const observer = new targetWindow.ResizeObserver((entries) => {
1226 + const run = () => {
1227 + const entry = entries[0];
1228 + if (entry == null ? void 0 : entry.borderBoxSize) {
1229 + const box = entry.borderBoxSize[0];
1230 + if (box) {
1231 + handler({
1232 + width: box.inlineSize,
1233 + height: box.blockSize
1234 + });
1235 + return;
1236 + }
1237 + }
1238 + handler(getRect(element));
1239 + };
1240 + instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();
1241 + });
1242 + observer.observe(element, { box: "border-box" });
1243 + return () => {
1244 + observer.unobserve(element);
1245 + };
1246 + };
1247 + var addEventListenerOptions = { passive: true };
1248 + var supportsScrollend = typeof window == "undefined" ? true : "onscrollend" in window;
1249 + var observeElementOffset = (instance, cb) => {
1250 + const element = instance.scrollElement;
1251 + if (!element) return;
1252 + const targetWindow = instance.targetWindow;
1253 + if (!targetWindow) return;
1254 + let offset = 0;
1255 + const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(targetWindow, () => {
1256 + cb(offset, false);
1257 + }, instance.options.isScrollingResetDelay);
1258 + const createHandler = (isScrolling) => () => {
1259 + const { horizontal, isRtl } = instance.options;
1260 + offset = horizontal ? element["scrollLeft"] * (isRtl && -1 || 1) : element["scrollTop"];
1261 + fallback();
1262 + cb(offset, isScrolling);
1263 + };
1264 + const handler = createHandler(true);
1265 + const endHandler = createHandler(false);
1266 + element.addEventListener("scroll", handler, addEventListenerOptions);
1267 + const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;
1268 + if (registerScrollendEvent) element.addEventListener("scrollend", endHandler, addEventListenerOptions);
1269 + return () => {
1270 + element.removeEventListener("scroll", handler);
1271 + if (registerScrollendEvent) element.removeEventListener("scrollend", endHandler);
1272 + };
1273 + };
1274 + var measureElement = (element, entry, instance) => {
1275 + if (entry == null ? void 0 : entry.borderBoxSize) {
1276 + const box = entry.borderBoxSize[0];
1277 + if (box) return Math.round(box[instance.options.horizontal ? "inlineSize" : "blockSize"]);
1278 + }
1279 + return element[instance.options.horizontal ? "offsetWidth" : "offsetHeight"];
1280 + };
1281 + var elementScroll = (offset, { adjustments = 0, behavior }, instance) => {
1282 + var _a;
1283 + var _b;
1284 + const toOffset = offset + adjustments;
1285 + (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null || _b.call(_a, {
1286 + [instance.options.horizontal ? "left" : "top"]: toOffset,
1287 + behavior
1288 + });
1289 + };
1290 + var Virtualizer = class {
1291 + constructor(opts) {
1292 + this.unsubs = [];
1293 + this.scrollElement = null;
1294 + this.targetWindow = null;
1295 + this.isScrolling = false;
1296 + this.scrollState = null;
1297 + this.measurementsCache = [];
1298 + this.itemSizeCache = /* @__PURE__ */ new Map();
1299 + this.laneAssignments = /* @__PURE__ */ new Map();
1300 + this.pendingMeasuredCacheIndexes = [];
1301 + this.prevLanes = void 0;
1302 + this.lanesChangedFlag = false;
1303 + this.lanesSettling = false;
1304 + this.scrollRect = null;
1305 + this.scrollOffset = null;
1306 + this.scrollDirection = null;
1307 + this.scrollAdjustments = 0;
1308 + this.elementsCache = /* @__PURE__ */ new Map();
1309 + this.now = () => {
1310 + var _a;
1311 + var _b;
1312 + var _c;
1313 + return ((_c = (_b = (_a = this.targetWindow) == null ? void 0 : _a.performance) == null ? void 0 : _b.now) == null ? void 0 : _c.call(_b)) ?? Date.now();
1314 + };
1315 + this.observer = /* @__PURE__ */ (() => {
1316 + let _ro = null;
1317 + const get = () => {
1318 + if (_ro) return _ro;
1319 + if (!this.targetWindow || !this.targetWindow.ResizeObserver) return null;
1320 + return _ro = new this.targetWindow.ResizeObserver((entries) => {
1321 + entries.forEach((entry) => {
1322 + const run = () => {
1323 + const node = entry.target;
1324 + const index = this.indexFromElement(node);
1325 + if (!node.isConnected) {
1326 + this.observer.unobserve(node);
1327 + return;
1328 + }
1329 + if (this.shouldMeasureDuringScroll(index)) this.resizeItem(index, this.options.measureElement(node, entry, this));
1330 + };
1331 + this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();
1332 + });
1333 + });
1334 + };
1335 + return {
1336 + disconnect: () => {
1337 + var _a;
1338 + (_a = get()) == null || _a.disconnect();
1339 + _ro = null;
1340 + },
1341 + observe: (target) => {
1342 + var _a;
1343 + return (_a = get()) == null ? void 0 : _a.observe(target, { box: "border-box" });
1344 + },
1345 + unobserve: (target) => {
1346 + var _a;
1347 + return (_a = get()) == null ? void 0 : _a.unobserve(target);
1348 + }
1349 + };
1350 + })();
1351 + this.range = null;
1352 + this.setOptions = (opts2) => {
1353 + Object.entries(opts2).forEach(([key, value]) => {
1354 + if (typeof value === "undefined") delete opts2[key];
1355 + });
1356 + this.options = {
1357 + debug: false,
1358 + initialOffset: 0,
1359 + overscan: 1,
1360 + paddingStart: 0,
1361 + paddingEnd: 0,
1362 + scrollPaddingStart: 0,
1363 + scrollPaddingEnd: 0,
1364 + horizontal: false,
1365 + getItemKey: defaultKeyExtractor,
1366 + rangeExtractor: defaultRangeExtractor,
1367 + onChange: () => {},
1368 + measureElement,
1369 + initialRect: {
1370 + width: 0,
1371 + height: 0
1372 + },
1373 + scrollMargin: 0,
1374 + gap: 0,
1375 + indexAttribute: "data-index",
1376 + initialMeasurementsCache: [],
1377 + lanes: 1,
1378 + isScrollingResetDelay: 150,
1379 + enabled: true,
1380 + isRtl: false,
1381 + useScrollendEvent: false,
1382 + useAnimationFrameWithResizeObserver: false,
1383 + laneAssignmentMode: "estimate",
1384 + ...opts2
1385 + };
1386 + };
1387 + this.notify = (sync) => {
1388 + var _a;
1389 + var _b;
1390 + (_b = (_a = this.options).onChange) == null || _b.call(_a, this, sync);
1391 + };
1392 + this.maybeNotify = memo(() => {
1393 + this.calculateRange();
1394 + return [
1395 + this.isScrolling,
1396 + this.range ? this.range.startIndex : null,
1397 + this.range ? this.range.endIndex : null
1398 + ];
1399 + }, (isScrolling) => {
1400 + this.notify(isScrolling);
1401 + }, {
1402 + key: "maybeNotify",
1403 + debug: () => this.options.debug,
1404 + initialDeps: [
1405 + this.isScrolling,
1406 + this.range ? this.range.startIndex : null,
1407 + this.range ? this.range.endIndex : null
1408 + ]
1409 + });
1410 + this.cleanup = () => {
1411 + this.unsubs.filter(Boolean).forEach((d) => d());
1412 + this.unsubs = [];
1413 + this.observer.disconnect();
1414 + if (this.rafId != null && this.targetWindow) {
1415 + this.targetWindow.cancelAnimationFrame(this.rafId);
1416 + this.rafId = null;
1417 + }
1418 + this.scrollState = null;
1419 + this.scrollElement = null;
1420 + this.targetWindow = null;
1421 + };
1422 + this._didMount = () => {
1423 + return () => {
1424 + this.cleanup();
1425 + };
1426 + };
1427 + this._willUpdate = () => {
1428 + var _a;
1429 + const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;
1430 + if (this.scrollElement !== scrollElement) {
1431 + this.cleanup();
1432 + if (!scrollElement) {
1433 + this.maybeNotify();
1434 + return;
1435 + }
1436 + this.scrollElement = scrollElement;
1437 + if (this.scrollElement && "ownerDocument" in this.scrollElement) this.targetWindow = this.scrollElement.ownerDocument.defaultView;
1438 + else this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;
1439 + this.elementsCache.forEach((cached) => {
1440 + this.observer.observe(cached);
1441 + });
1442 + this.unsubs.push(this.options.observeElementRect(this, (rect) => {
1443 + this.scrollRect = rect;
1444 + this.maybeNotify();
1445 + }));
1446 + this.unsubs.push(this.options.observeElementOffset(this, (offset, isScrolling) => {
1447 + this.scrollAdjustments = 0;
1448 + this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? "forward" : "backward" : null;
1449 + this.scrollOffset = offset;
1450 + this.isScrolling = isScrolling;
1451 + if (this.scrollState) this.scheduleScrollReconcile();
1452 + this.maybeNotify();
1453 + }));
1454 + this._scrollToOffset(this.getScrollOffset(), {
1455 + adjustments: void 0,
1456 + behavior: void 0
1457 + });
1458 + }
1459 + };
1460 + this.rafId = null;
1461 + this.getSize = () => {
1462 + if (!this.options.enabled) {
1463 + this.scrollRect = null;
1464 + return 0;
1465 + }
1466 + this.scrollRect = this.scrollRect ?? this.options.initialRect;
1467 + return this.scrollRect[this.options.horizontal ? "width" : "height"];
1468 + };
1469 + this.getScrollOffset = () => {
1470 + if (!this.options.enabled) {
1471 + this.scrollOffset = null;
1472 + return 0;
1473 + }
1474 + this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === "function" ? this.options.initialOffset() : this.options.initialOffset);
1475 + return this.scrollOffset;
1476 + };
1477 + this.getFurthestMeasurement = (measurements, index) => {
1478 + const furthestMeasurementsFound = /* @__PURE__ */ new Map();
1479 + const furthestMeasurements = /* @__PURE__ */ new Map();
1480 + for (let m = index - 1; m >= 0; m--) {
1481 + const measurement = measurements[m];
1482 + if (furthestMeasurementsFound.has(measurement.lane)) continue;
1483 + const previousFurthestMeasurement = furthestMeasurements.get(measurement.lane);
1484 + if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) furthestMeasurements.set(measurement.lane, measurement);
1485 + else if (measurement.end < previousFurthestMeasurement.end) furthestMeasurementsFound.set(measurement.lane, true);
1486 + if (furthestMeasurementsFound.size === this.options.lanes) break;
1487 + }
1488 + return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {
1489 + if (a.end === b.end) return a.index - b.index;
1490 + return a.end - b.end;
1491 + })[0] : void 0;
1492 + };
1493 + this.getMeasurementOptions = memo(() => [
1494 + this.options.count,
1495 + this.options.paddingStart,
1496 + this.options.scrollMargin,
1497 + this.options.getItemKey,
1498 + this.options.enabled,
1499 + this.options.lanes,
1500 + this.options.laneAssignmentMode
1501 + ], (count, paddingStart, scrollMargin, getItemKey, enabled, lanes, laneAssignmentMode) => {
1502 + if (this.prevLanes !== void 0 && this.prevLanes !== lanes) this.lanesChangedFlag = true;
1503 + this.prevLanes = lanes;
1504 + this.pendingMeasuredCacheIndexes = [];
1505 + return {
1506 + count,
1507 + paddingStart,
1508 + scrollMargin,
1509 + getItemKey,
1510 + enabled,
1511 + lanes,
1512 + laneAssignmentMode
1513 + };
1514 + }, { key: false });
1515 + this.getMeasurements = memo(() => [this.getMeasurementOptions(), this.itemSizeCache], ({ count, paddingStart, scrollMargin, getItemKey, enabled, lanes, laneAssignmentMode }, itemSizeCache) => {
1516 + if (!enabled) {
1517 + this.measurementsCache = [];
1518 + this.itemSizeCache.clear();
1519 + this.laneAssignments.clear();
1520 + return [];
1521 + }
1522 + if (this.laneAssignments.size > count) {
1523 + for (const index of this.laneAssignments.keys()) if (index >= count) this.laneAssignments.delete(index);
1524 + }
1525 + if (this.lanesChangedFlag) {
1526 + this.lanesChangedFlag = false;
1527 + this.lanesSettling = true;
1528 + this.measurementsCache = [];
1529 + this.itemSizeCache.clear();
1530 + this.laneAssignments.clear();
1531 + this.pendingMeasuredCacheIndexes = [];
1532 + }
1533 + if (this.measurementsCache.length === 0 && !this.lanesSettling) {
1534 + this.measurementsCache = this.options.initialMeasurementsCache;
1535 + this.measurementsCache.forEach((item) => {
1536 + this.itemSizeCache.set(item.key, item.size);
1537 + });
1538 + }
1539 + const min = this.lanesSettling ? 0 : this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;
1540 + this.pendingMeasuredCacheIndexes = [];
1541 + if (this.lanesSettling && this.measurementsCache.length === count) this.lanesSettling = false;
1542 + const measurements = this.measurementsCache.slice(0, min);
1543 + const laneLastIndex = new Array(lanes).fill(void 0);
1544 + for (let m = 0; m < min; m++) {
1545 + const item = measurements[m];
1546 + if (item) laneLastIndex[item.lane] = m;
1547 + }
1548 + for (let i = min; i < count; i++) {
1549 + const key = getItemKey(i);
1550 + const cachedLane = this.laneAssignments.get(i);
1551 + let lane;
1552 + let start;
1553 + const shouldCacheLane = laneAssignmentMode === "estimate" || itemSizeCache.has(key);
1554 + if (cachedLane !== void 0 && this.options.lanes > 1) {
1555 + lane = cachedLane;
1556 + const prevIndex = laneLastIndex[lane];
1557 + const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;
1558 + start = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;
1559 + } else {
1560 + const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);
1561 + start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;
1562 + lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;
1563 + if (this.options.lanes > 1 && shouldCacheLane) this.laneAssignments.set(i, lane);
1564 + }
1565 + const measuredSize = itemSizeCache.get(key);
1566 + const size = typeof measuredSize === "number" ? measuredSize : this.options.estimateSize(i);
1567 + const end = start + size;
1568 + measurements[i] = {
1569 + index: i,
1570 + start,
1571 + size,
1572 + end,
1573 + key,
1574 + lane
1575 + };
1576 + laneLastIndex[lane] = i;
1577 + }
1578 + this.measurementsCache = measurements;
1579 + return measurements;
1580 + }, {
1581 + key: "getMeasurements",
1582 + debug: () => this.options.debug
1583 + });
1584 + this.calculateRange = memo(() => [
1585 + this.getMeasurements(),
1586 + this.getSize(),
1587 + this.getScrollOffset(),
1588 + this.options.lanes
1589 + ], (measurements, outerSize, scrollOffset, lanes) => {
1590 + return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({
1591 + measurements,
1592 + outerSize,
1593 + scrollOffset,
1594 + lanes
1595 + }) : null;
1596 + }, {
1597 + key: "calculateRange",
1598 + debug: () => this.options.debug
1599 + });
1600 + this.getVirtualIndexes = memo(() => {
1601 + let startIndex = null;
1602 + let endIndex = null;
1603 + const range = this.calculateRange();
1604 + if (range) {
1605 + startIndex = range.startIndex;
1606 + endIndex = range.endIndex;
1607 + }
1608 + this.maybeNotify.updateDeps([
1609 + this.isScrolling,
1610 + startIndex,
1611 + endIndex
1612 + ]);
1613 + return [
1614 + this.options.rangeExtractor,
1615 + this.options.overscan,
1616 + this.options.count,
1617 + startIndex,
1618 + endIndex
1619 + ];
1620 + }, (rangeExtractor, overscan, count, startIndex, endIndex) => {
1621 + return startIndex === null || endIndex === null ? [] : rangeExtractor({
1622 + startIndex,
1623 + endIndex,
1624 + overscan,
1625 + count
1626 + });
1627 + }, {
1628 + key: "getVirtualIndexes",
1629 + debug: () => this.options.debug
1630 + });
1631 + this.indexFromElement = (node) => {
1632 + const attributeName = this.options.indexAttribute;
1633 + const indexStr = node.getAttribute(attributeName);
1634 + if (!indexStr) {
1635 + console.warn(`Missing attribute name '${attributeName}={index}' on measured element.`);
1636 + return -1;
1637 + }
1638 + return parseInt(indexStr, 10);
1639 + };
1640 + this.shouldMeasureDuringScroll = (index) => {
1641 + var _a;
1642 + if (!this.scrollState || this.scrollState.behavior !== "smooth") return true;
1643 + const scrollIndex = this.scrollState.index ?? ((_a = this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)) == null ? void 0 : _a.index);
1644 + if (scrollIndex !== void 0 && this.range) {
1645 + const bufferSize = Math.max(this.options.overscan, Math.ceil((this.range.endIndex - this.range.startIndex) / 2));
1646 + const minIndex = Math.max(0, scrollIndex - bufferSize);
1647 + const maxIndex = Math.min(this.options.count - 1, scrollIndex + bufferSize);
1648 + return index >= minIndex && index <= maxIndex;
1649 + }
1650 + return true;
1651 + };
1652 + this.measureElement = (node) => {
1653 + if (!node) {
1654 + this.elementsCache.forEach((cached, key2) => {
1655 + if (!cached.isConnected) {
1656 + this.observer.unobserve(cached);
1657 + this.elementsCache.delete(key2);
1658 + }
1659 + });
1660 + return;
1661 + }
1662 + const index = this.indexFromElement(node);
1663 + const key = this.options.getItemKey(index);
1664 + const prevNode = this.elementsCache.get(key);
1665 + if (prevNode !== node) {
1666 + if (prevNode) this.observer.unobserve(prevNode);
1667 + this.observer.observe(node);
1668 + this.elementsCache.set(key, node);
1669 + }
1670 + if ((!this.isScrolling || this.scrollState) && this.shouldMeasureDuringScroll(index)) this.resizeItem(index, this.options.measureElement(node, void 0, this));
1671 + };
1672 + this.resizeItem = (index, size) => {
1673 + var _a;
1674 + const item = this.measurementsCache[index];
1675 + if (!item) return;
1676 + const delta = size - (this.itemSizeCache.get(item.key) ?? item.size);
1677 + if (delta !== 0) {
1678 + if (((_a = this.scrollState) == null ? void 0 : _a.behavior) !== "smooth" && (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments)) {
1679 + if (this.options.debug) console.info("correction", delta);
1680 + this._scrollToOffset(this.getScrollOffset(), {
1681 + adjustments: this.scrollAdjustments += delta,
1682 + behavior: void 0
1683 + });
1684 + }
1685 + this.pendingMeasuredCacheIndexes.push(item.index);
1686 + this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));
1687 + this.notify(false);
1688 + }
1689 + };
1690 + this.getVirtualItems = memo(() => [this.getVirtualIndexes(), this.getMeasurements()], (indexes, measurements) => {
1691 + const virtualItems = [];
1692 + for (let k = 0, len = indexes.length; k < len; k++) {
1693 + const measurement = measurements[indexes[k]];
1694 + virtualItems.push(measurement);
1695 + }
1696 + return virtualItems;
1697 + }, {
1698 + key: "getVirtualItems",
1699 + debug: () => this.options.debug
1700 + });
1701 + this.getVirtualItemForOffset = (offset) => {
1702 + const measurements = this.getMeasurements();
1703 + if (measurements.length === 0) return;
1704 + return notUndefined(measurements[findNearestBinarySearch(0, measurements.length - 1, (index) => notUndefined(measurements[index]).start, offset)]);
1705 + };
1706 + this.getMaxScrollOffset = () => {
1707 + if (!this.scrollElement) return 0;
1708 + if ("scrollHeight" in this.scrollElement) return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;
1709 + else {
1710 + const doc = this.scrollElement.document.documentElement;
1711 + return this.options.horizontal ? doc.scrollWidth - this.scrollElement.innerWidth : doc.scrollHeight - this.scrollElement.innerHeight;
1712 + }
1713 + };
1714 + this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {
1715 + if (!this.scrollElement) return 0;
1716 + const size = this.getSize();
1717 + const scrollOffset = this.getScrollOffset();
1718 + if (align === "auto") align = toOffset >= scrollOffset + size ? "end" : "start";
1719 + if (align === "center") toOffset += (itemSize - size) / 2;
1720 + else if (align === "end") toOffset -= size;
1721 + const maxOffset = this.getMaxScrollOffset();
1722 + return Math.max(Math.min(maxOffset, toOffset), 0);
1723 + };
1724 + this.getOffsetForIndex = (index, align = "auto") => {
1725 + index = Math.max(0, Math.min(index, this.options.count - 1));
1726 + const size = this.getSize();
1727 + const scrollOffset = this.getScrollOffset();
1728 + const item = this.measurementsCache[index];
1729 + if (!item) return;
1730 + if (align === "auto") if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) align = "end";
1731 + else if (item.start <= scrollOffset + this.options.scrollPaddingStart) align = "start";
1732 + else return [scrollOffset, align];
1733 + if (align === "end" && index === this.options.count - 1) return [this.getMaxScrollOffset(), align];
1734 + const toOffset = align === "end" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;
1735 + return [this.getOffsetForAlignment(toOffset, align, item.size), align];
1736 + };
1737 + this.scrollToOffset = (toOffset, { align = "start", behavior = "auto" } = {}) => {
1738 + const offset = this.getOffsetForAlignment(toOffset, align);
1739 + const now = this.now();
1740 + this.scrollState = {
1741 + index: null,
1742 + align,
1743 + behavior,
1744 + startedAt: now,
1745 + lastTargetOffset: offset,
1746 + stableFrames: 0
1747 + };
1748 + this._scrollToOffset(offset, {
1749 + adjustments: void 0,
1750 + behavior
1751 + });
1752 + this.scheduleScrollReconcile();
1753 + };
1754 + this.scrollToIndex = (index, { align: initialAlign = "auto", behavior = "auto" } = {}) => {
1755 + index = Math.max(0, Math.min(index, this.options.count - 1));
1756 + const offsetInfo = this.getOffsetForIndex(index, initialAlign);
1757 + if (!offsetInfo) return;
1758 + const [offset, align] = offsetInfo;
1759 + const now = this.now();
1760 + this.scrollState = {
1761 + index,
1762 + align,
1763 + behavior,
1764 + startedAt: now,
1765 + lastTargetOffset: offset,
1766 + stableFrames: 0
1767 + };
1768 + this._scrollToOffset(offset, {
1769 + adjustments: void 0,
1770 + behavior
1771 + });
1772 + this.scheduleScrollReconcile();
1773 + };
1774 + this.scrollBy = (delta, { behavior = "auto" } = {}) => {
1775 + const offset = this.getScrollOffset() + delta;
1776 + const now = this.now();
1777 + this.scrollState = {
1778 + index: null,
1779 + align: "start",
1780 + behavior,
1781 + startedAt: now,
1782 + lastTargetOffset: offset,
1783 + stableFrames: 0
1784 + };
1785 + this._scrollToOffset(offset, {
1786 + adjustments: void 0,
1787 + behavior
1788 + });
1789 + this.scheduleScrollReconcile();
1790 + };
1791 + this.getTotalSize = () => {
1792 + var _a;
1793 + const measurements = this.getMeasurements();
1794 + let end;
1795 + if (measurements.length === 0) end = this.options.paddingStart;
1796 + else if (this.options.lanes === 1) end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;
1797 + else {
1798 + const endByLane = Array(this.options.lanes).fill(null);
1799 + let endIndex = measurements.length - 1;
1800 + while (endIndex >= 0 && endByLane.some((val) => val === null)) {
1801 + const item = measurements[endIndex];
1802 + if (endByLane[item.lane] === null) endByLane[item.lane] = item.end;
1803 + endIndex--;
1804 + }
1805 + end = Math.max(...endByLane.filter((val) => val !== null));
1806 + }
1807 + return Math.max(end - this.options.scrollMargin + this.options.paddingEnd, 0);
1808 + };
1809 + this._scrollToOffset = (offset, { adjustments, behavior }) => {
1810 + this.options.scrollToFn(offset, {
1811 + behavior,
1812 + adjustments
1813 + }, this);
1814 + };
1815 + this.measure = () => {
1816 + this.itemSizeCache = /* @__PURE__ */ new Map();
1817 + this.laneAssignments = /* @__PURE__ */ new Map();
1818 + this.notify(false);
1819 + };
1820 + this.setOptions(opts);
1821 + }
1822 + scheduleScrollReconcile() {
1823 + if (!this.targetWindow) {
1824 + this.scrollState = null;
1825 + return;
1826 + }
1827 + if (this.rafId != null) return;
1828 + this.rafId = this.targetWindow.requestAnimationFrame(() => {
1829 + this.rafId = null;
1830 + this.reconcileScroll();
1831 + });
1832 + }
1833 + reconcileScroll() {
1834 + if (!this.scrollState) return;
1835 + if (!this.scrollElement) return;
1836 + if (this.now() - this.scrollState.startedAt > 5e3) {
1837 + this.scrollState = null;
1838 + return;
1839 + }
1840 + const offsetInfo = this.scrollState.index != null ? this.getOffsetForIndex(this.scrollState.index, this.scrollState.align) : void 0;
1841 + const targetOffset = offsetInfo ? offsetInfo[0] : this.scrollState.lastTargetOffset;
1842 + const STABLE_FRAMES = 1;
1843 + const targetChanged = targetOffset !== this.scrollState.lastTargetOffset;
1844 + if (!targetChanged && approxEqual(targetOffset, this.getScrollOffset())) {
1845 + this.scrollState.stableFrames++;
1846 + if (this.scrollState.stableFrames >= STABLE_FRAMES) {
1847 + this.scrollState = null;
1848 + return;
1849 + }
1850 + } else {
1851 + this.scrollState.stableFrames = 0;
1852 + if (targetChanged) {
1853 + this.scrollState.lastTargetOffset = targetOffset;
1854 + this.scrollState.behavior = "auto";
1855 + this._scrollToOffset(targetOffset, {
1856 + adjustments: void 0,
1857 + behavior: "auto"
1858 + });
1859 + }
1860 + }
1861 + this.scheduleScrollReconcile();
1862 + }
1863 + };
1864 + var findNearestBinarySearch = (low, high, getCurrentValue, value) => {
1865 + while (low <= high) {
1866 + const middle = (low + high) / 2 | 0;
1867 + const currentValue = getCurrentValue(middle);
1868 + if (currentValue < value) low = middle + 1;
1869 + else if (currentValue > value) high = middle - 1;
1870 + else return middle;
1871 + }
1872 + if (low > 0) return low - 1;
1873 + else return 0;
1874 + };
1875 + function calculateRange({ measurements, outerSize, scrollOffset, lanes }) {
1876 + const lastIndex = measurements.length - 1;
1877 + const getOffset = (index) => measurements[index].start;
1878 + if (measurements.length <= lanes) return {
1879 + startIndex: 0,
1880 + endIndex: lastIndex
1881 + };
1882 + let startIndex = findNearestBinarySearch(0, lastIndex, getOffset, scrollOffset);
1883 + let endIndex = startIndex;
1884 + if (lanes === 1) while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) endIndex++;
1885 + else if (lanes > 1) {
1886 + const endPerLane = Array(lanes).fill(0);
1887 + while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {
1888 + const item = measurements[endIndex];
1889 + endPerLane[item.lane] = item.end;
1890 + endIndex++;
1891 + }
1892 + const startPerLane = Array(lanes).fill(scrollOffset + outerSize);
1893 + while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {
1894 + const item = measurements[startIndex];
1895 + startPerLane[item.lane] = item.start;
1896 + startIndex--;
1897 + }
1898 + startIndex = Math.max(0, startIndex - startIndex % lanes);
1899 + endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));
1900 + }
1901 + return {
1902 + startIndex,
1903 + endIndex
1904 + };
1905 + }
1238 1906
1239 -/***/ }),
1907 +//#endregion
1908 +//#region packages/node_modules/@tanstack/react-virtual/dist/esm/index.js
1909 + var useIsomorphicLayoutEffect = typeof document !== "undefined" ? react$1.useLayoutEffect : react$1.useEffect;
1910 + function useVirtualizerBase({ useFlushSync = true, ...options }) {
1911 + const rerender = react$1.useReducer(() => ({}), {})[1];
1912 + const resolvedOptions = {
1913 + ...options,
1914 + onChange: (instance2, sync) => {
1915 + var _a;
1916 + if (useFlushSync && sync) (0, react_dom.flushSync)(rerender);
1917 + else rerender();
1918 + (_a = options.onChange) == null || _a.call(options, instance2, sync);
1919 + }
1920 + };
1921 + const [instance] = react$1.useState(() => new Virtualizer(resolvedOptions));
1922 + instance.setOptions(resolvedOptions);
1923 + useIsomorphicLayoutEffect(() => {
1924 + return instance._didMount();
1925 + }, []);
1926 + useIsomorphicLayoutEffect(() => {
1927 + return instance._willUpdate();
1928 + });
1929 + return instance;
1930 + }
1931 + function useVirtualizer(options) {
1932 + return useVirtualizerBase({
1933 + observeElementRect,
1934 + observeElementOffset,
1935 + scrollToFn: elementScroll,
1936 + ...options
1937 + });
1938 + }
1240 1939
1241 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/class-item.tsx":
1242 -/*!**************************************************************************************************!*\
1243 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/class-item.tsx ***!
1244 - \**************************************************************************************************/
1245 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1940 +//#endregion
1941 +//#region packages/packages/core/editor-global-classes/src/hooks/use-ordered-classes.ts
1942 + var useOrderedClasses = () => {
1943 + return (0, _elementor_store.__useSelector)(selectOrderedClasses);
1944 + };
1246 1945
1247 -__webpack_require__.r(__webpack_exports__);
1248 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1249 -/* harmony export */ ClassItem: function() { return /* binding */ ClassItem; }
1250 -/* harmony export */ });
1251 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
1252 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1253 -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository");
1254 -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__);
1255 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui");
1256 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__);
1257 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
1258 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__);
1259 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
1260 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__);
1261 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
1262 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__);
1263 -/* harmony import */ var _css_class_usage_components__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../css-class-usage/components */ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/index.ts");
1264 -/* harmony import */ var _delete_confirmation_dialog__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./delete-confirmation-dialog */ "./packages/packages/core/editor-global-classes/src/components/class-manager/delete-confirmation-dialog.tsx");
1265 -/* harmony import */ var _sortable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./sortable */ "./packages/packages/core/editor-global-classes/src/components/class-manager/sortable.tsx");
1266 -function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
1946 +//#endregion
1947 +//#region packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage-by-id.ts
1948 + var EMPTY_CLASS_USAGE = {
1949 + total: 0,
1950 + content: []
1951 + };
1952 + var useCssClassUsageByID = (id) => {
1953 + const { data, ...rest } = useCssClassUsage();
1954 + const classData = data?.[id] ?? EMPTY_CLASS_USAGE;
1955 + return {
1956 + ...rest,
1957 + data: classData
1958 + };
1959 + };
1267 1960
1961 +//#endregion
1962 +//#region packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-popover.tsx
1963 + var iconMapper = {
1964 + "wp-post": {
1965 + label: (0, _wordpress_i18n.__)("Post", "elementor"),
1966 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.PostTypeIcon, { fontSize: "inherit" })
1967 + },
1968 + "wp-page": {
1969 + label: (0, _wordpress_i18n.__)("Page", "elementor"),
1970 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.PagesIcon, { fontSize: "inherit" })
1971 + },
1972 + popup: {
1973 + label: (0, _wordpress_i18n.__)("Popup", "elementor"),
1974 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.PopupTemplateIcon, { fontSize: "inherit" })
1975 + },
1976 + header: {
1977 + label: (0, _wordpress_i18n.__)("Header", "elementor"),
1978 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.HeaderTemplateIcon, { fontSize: "inherit" })
1979 + },
1980 + footer: {
1981 + label: (0, _wordpress_i18n.__)("Footer", "elementor"),
1982 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.FooterTemplateIcon, { fontSize: "inherit" })
1983 + }
1984 + };
1985 + var CssClassUsagePopover = ({ cssClassID, onClose }) => {
1986 + const { data: classUsage } = useCssClassUsageByID(cssClassID);
1987 + const onNavigate = (0, _elementor_editor_documents.__useOpenDocumentInNewTab)();
1988 + const cssClassUsageRecords = classUsage?.content.map(({ title, elements, pageId, type }) => ({
1989 + type: "item",
1990 + value: pageId,
1991 + label: title,
1992 + secondaryText: elements.length.toString(),
1993 + docType: type
1994 + })) ?? [];
1995 + const handleSelect = (value) => {
1996 + onNavigate(+value);
1997 + trackGlobalClasses({
1998 + event: "classUsageLocate",
1999 + classId: cssClassID
2000 + });
2001 + };
2002 + return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_editor_ui.PopoverHeader, {
2003 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.CurrentLocationIcon, { fontSize: "tiny" }),
2004 + title: /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2005 + flexDirection: "row",
2006 + gap: 1,
2007 + alignItems: "center"
2008 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { "aria-label": "header-title" }, (0, _wordpress_i18n.__)("Locator", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Box, null, /* @__PURE__ */ react.createElement(_elementor_ui.Chip, {
2009 + sx: { lineHeight: 1 },
2010 + size: "tiny",
2011 + label: classUsage.total
2012 + }))),
2013 + onClose
2014 + }), /* @__PURE__ */ react.createElement(_elementor_ui.Divider, null), /* @__PURE__ */ react.createElement(_elementor_editor_ui.PopoverBody, { width: 300 }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.PopoverMenuList, {
2015 + onSelect: handleSelect,
2016 + items: cssClassUsageRecords,
2017 + onClose: () => {},
2018 + menuListTemplate: StyledCssClassUsageItem,
2019 + menuItemContentTemplate: (cssClassUsageRecord) => /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2020 + flexDirection: "row",
2021 + flex: 1,
2022 + alignItems: "center"
2023 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
2024 + display: "flex",
2025 + sx: { pr: 1 }
2026 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Tooltip, {
2027 + disableInteractive: true,
2028 + title: iconMapper?.[cssClassUsageRecord.docType]?.label ?? cssClassUsageRecord.docType,
2029 + placement: "top"
2030 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Icon, { fontSize: "small" }, iconMapper?.[cssClassUsageRecord.docType]?.icon || /* @__PURE__ */ react.createElement(_elementor_icons.PagesIcon, { fontSize: "inherit" })))), /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
2031 + sx: {
2032 + pr: .5,
2033 + maxWidth: "173px"
2034 + },
2035 + display: "flex"
2036 + }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.EllipsisWithTooltip, {
2037 + title: cssClassUsageRecord.label,
2038 + as: _elementor_ui.Typography,
2039 + variant: "caption",
2040 + maxWidth: "173px",
2041 + sx: { lineHeight: 1 }
2042 + })), /* @__PURE__ */ react.createElement(_elementor_icons.ExternalLinkIcon, {
2043 + className: "hover-only-icon",
2044 + fontSize: "tiny"
2045 + }), /* @__PURE__ */ react.createElement(_elementor_ui.Chip, {
2046 + sx: { ml: "auto" },
2047 + size: "tiny",
2048 + label: cssClassUsageRecord.secondaryText
2049 + }))
2050 + })));
2051 + };
2052 + var StyledCssClassUsageItem = (0, _elementor_ui.styled)(_elementor_ui.MenuList)(({ theme }) => ({
2053 + "& > li": {
2054 + display: "flex",
2055 + cursor: "pointer",
2056 + height: 32,
2057 + width: "100%"
2058 + },
2059 + "& > [role=\"option\"]": {
2060 + ...theme.typography.caption,
2061 + lineHeight: "inherit",
2062 + padding: theme.spacing(.5, 1, .5, 2),
2063 + textOverflow: "ellipsis",
2064 + position: "absolute",
2065 + top: 0,
2066 + left: 0,
2067 + opacity: 1,
2068 + ".hover-only-icon": {
2069 + color: theme.palette.text.disabled,
2070 + opacity: 0
2071 + },
2072 + "&:hover": {
2073 + borderRadius: theme.spacing(.5),
2074 + backgroundColor: theme.palette.action.hover,
2075 + ".hover-only-icon": {
2076 + color: theme.palette.text.disabled,
2077 + opacity: 1
2078 + }
2079 + }
2080 + },
2081 + width: "100%",
2082 + position: "relative"
2083 + }));
1268 2084
2085 +//#endregion
2086 +//#region packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-trigger.tsx
2087 + var CssClassUsageTrigger = ({ id, onClick }) => {
2088 + const { data: { total }, isLoading } = useCssClassUsageByID(id);
2089 + const cssClassUsagePopover = (0, _elementor_ui.usePopupState)({
2090 + variant: "popover",
2091 + popupId: "css-class-usage-popover"
2092 + });
2093 + if (isLoading) return null;
2094 + const WrapperComponent = total !== 0 ? TooltipWrapper : InfoAlertMessage;
2095 + const handleMouseEnter = () => {
2096 + trackGlobalClasses({
2097 + event: "classUsageHovered",
2098 + classId: id,
2099 + usage: total
2100 + });
2101 + };
2102 + const handleClick = (e) => {
2103 + if (total !== 0) {
2104 + (0, _elementor_ui.bindTrigger)(cssClassUsagePopover).onClick(e);
2105 + onClick(id);
2106 + trackGlobalClasses({
2107 + event: "classUsageClicked",
2108 + classId: id
2109 + });
2110 + }
2111 + };
2112 + return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
2113 + position: "relative",
2114 + onMouseEnter: handleMouseEnter
2115 + }, /* @__PURE__ */ react.createElement(WrapperComponent, { total }, /* @__PURE__ */ react.createElement(CustomIconButton, {
2116 + disabled: total === 0,
2117 + size: "tiny",
2118 + ...(0, _elementor_ui.bindTrigger)(cssClassUsagePopover),
2119 + onClick: handleClick
2120 + }, /* @__PURE__ */ react.createElement(_elementor_icons.CurrentLocationIcon, { fontSize: "tiny" })))), /* @__PURE__ */ react.createElement(_elementor_ui.Box, null, /* @__PURE__ */ react.createElement(_elementor_ui.Popover, {
2121 + anchorOrigin: {
2122 + vertical: "center",
2123 + horizontal: "right"
2124 + },
2125 + transformOrigin: {
2126 + vertical: 15,
2127 + horizontal: -50
2128 + },
2129 + ...(0, _elementor_ui.bindPopover)(cssClassUsagePopover),
2130 + onClose: () => {
2131 + (0, _elementor_ui.bindPopover)(cssClassUsagePopover).onClose();
2132 + onClick("");
2133 + }
2134 + }, /* @__PURE__ */ react.createElement(CssClassUsagePopover, {
2135 + onClose: cssClassUsagePopover.close,
2136 + "aria-label": "css-class-usage-popover",
2137 + cssClassID: id
2138 + }))));
2139 + };
2140 + var CustomIconButton = (0, _elementor_ui.styled)(_elementor_ui.IconButton)(({ theme }) => ({
2141 + "&.Mui-disabled": {
2142 + pointerEvents: "auto",
2143 + "&:hover": { color: theme.palette.action.disabled }
2144 + },
2145 + height: "22px",
2146 + width: "22px"
2147 + }));
2148 + var TooltipWrapper = ({ children, total }) => /* @__PURE__ */ react.createElement(_elementor_ui.Tooltip, {
2149 + disableInteractive: true,
2150 + placement: "top",
2151 + title: `${(0, _wordpress_i18n.__)("Show {{number}} {{locations}}", "elementor").replace("{{number}}", total.toString()).replace("{{locations}}", total === 1 ? (0, _wordpress_i18n.__)("location", "elementor") : (0, _wordpress_i18n.__)("locations", "elementor"))}`
2152 + }, /* @__PURE__ */ react.createElement("span", null, children));
2153 + var InfoAlertMessage = ({ children }) => /* @__PURE__ */ react.createElement(_elementor_ui.Infotip, {
2154 + disableInteractive: true,
2155 + placement: "top",
2156 + color: "secondary",
2157 + content: /* @__PURE__ */ react.createElement(_elementor_editor_ui.InfoAlert, { sx: { mt: 1 } }, (0, _wordpress_i18n.__)("This class isn’t being used yet.", "elementor"))
2158 + }, /* @__PURE__ */ react.createElement("span", null, children));
1269 2159
2160 +//#endregion
2161 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/delete-confirmation-dialog.tsx
2162 + var context = (0, react.createContext)(null);
2163 + var DeleteConfirmationProvider = ({ children }) => {
2164 + const [dialogProps, setDialogProps] = (0, react.useState)(null);
2165 + const openDialog = (props) => {
2166 + setDialogProps(props);
2167 + };
2168 + const closeDialog = () => {
2169 + setDialogProps(null);
2170 + };
2171 + return /* @__PURE__ */ react.createElement(context.Provider, { value: {
2172 + openDialog,
2173 + closeDialog,
2174 + dialogProps
2175 + } }, children, !!dialogProps && /* @__PURE__ */ react.createElement(DeleteClassDialog, { ...dialogProps }));
2176 + };
2177 + var DeleteClassDialog = ({ label, id }) => {
2178 + const { closeDialog } = useDeleteConfirmation();
2179 + const { data: { total, content } } = useCssClassUsageByID(id);
2180 + const handleConfirm = () => {
2181 + closeDialog();
2182 + deleteClass(id);
2183 + };
2184 + const text = total && content.length ? (0, _wordpress_i18n.__)("Will permanently remove it from your project and may affect the design across all elements using it. Used %1 times across %2 pages. This action cannot be undone.", "elementor").replace("%1", total.toString()).replace("%2", content.length.toString()) : (0, _wordpress_i18n.__)("Will permanently remove it from your project and may affect the design across all elements using it. This action cannot be undone.", "elementor");
2185 + return /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog, {
2186 + open: true,
2187 + onClose: closeDialog
2188 + }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Title, null, (0, _wordpress_i18n.__)("Delete this class?", "elementor")), /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Content, null, /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.ContentText, null, (0, _wordpress_i18n.__)("Deleting", "elementor"), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
2189 + variant: "subtitle2",
2190 + component: "span"
2191 + }, "\xA0", label, "\xA0"), text)), /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Actions, {
2192 + onClose: closeDialog,
2193 + onConfirm: handleConfirm
2194 + }));
2195 + };
2196 + var useDeleteConfirmation = () => {
2197 + const contextValue = (0, react.useContext)(context);
2198 + if (!contextValue) throw new Error("useDeleteConfirmation must be used within a DeleteConfirmationProvider");
2199 + return contextValue;
2200 + };
1270 2201
2202 +//#endregion
2203 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/sortable.tsx
2204 + var SortableProvider = (props) => /* @__PURE__ */ react.createElement(_elementor_ui.UnstableSortableProvider, {
2205 + restrictAxis: true,
2206 + variant: "static",
2207 + dragPlaceholderStyle: { visibility: "hidden" },
2208 + ...props
2209 + });
2210 + var SortableTrigger = (props) => /* @__PURE__ */ react.createElement(StyledSortableTrigger, {
2211 + ...props,
2212 + role: "button",
2213 + className: "class-item-sortable-trigger",
2214 + "aria-label": "sort"
2215 + }, /* @__PURE__ */ react.createElement(_elementor_icons.GripVerticalIcon, { fontSize: "tiny" }));
2216 + var SortableItem = ({ children, id, style, ...props }) => {
2217 + return /* @__PURE__ */ react.createElement(_elementor_ui.UnstableSortableItem, {
2218 + ...props,
2219 + id,
2220 + render: ({ itemProps, isDragged, triggerProps, itemStyle, triggerStyle, dropIndicationStyle, showDropIndication, isDragOverlay, isDragPlaceholder }) => {
2221 + return /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
2222 + ...itemProps,
2223 + style: {
2224 + ...itemStyle,
2225 + ...!isDragOverlay ? style : null
2226 + },
2227 + component: "li",
2228 + role: "listitem",
2229 + sx: { backgroundColor: isDragOverlay ? "background.paper" : void 0 }
2230 + }, children({
2231 + itemProps,
2232 + isDragged,
2233 + triggerProps,
2234 + itemStyle,
2235 + triggerStyle,
2236 + isDragPlaceholder
2237 + }), showDropIndication && /* @__PURE__ */ react.createElement(SortableItemIndicator, { style: dropIndicationStyle }));
2238 + }
2239 + });
2240 + };
2241 + var StyledSortableTrigger = (0, _elementor_ui.styled)("div")(({ theme }) => ({
2242 + position: "absolute",
2243 + left: 0,
2244 + top: "50%",
2245 + transform: `translate( -${theme.spacing(1.5)}, -50% )`,
2246 + color: theme.palette.action.active
2247 + }));
2248 + var SortableItemIndicator = (0, _elementor_ui.styled)(_elementor_ui.Box)`
2249 + width: 100%;
2250 + height: 1px;
2251 + background-color: ${({ theme }) => theme.palette.text.primary};
2252 +`;
1271 2253
1272 -
1273 -
1274 -
1275 -
1276 -
1277 -const ClassItem = ({
1278 - id,
1279 - label,
1280 - renameClass,
1281 - selected,
1282 - disabled,
1283 - sortableTriggerProps,
1284 - showSortIndicator,
1285 - syncToV3,
1286 - onToggleSync
1287 -}) => {
1288 - const itemRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
1289 - const {
1290 - ref: editableRef,
1291 - openEditMode,
1292 - isEditing,
1293 - error,
1294 - getProps: getEditableProps
1295 - } = (0,_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.useEditable)({
1296 - value: label,
1297 - onSubmit: renameClass,
1298 - validation: validateLabel
1299 - });
1300 - const [selectedCssUsage, setSelectedCssUsage] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
1301 - const {
1302 - openDialog
1303 - } = (0,_delete_confirmation_dialog__WEBPACK_IMPORTED_MODULE_7__.useDeleteConfirmation)();
1304 - const popupState = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.usePopupState)({
1305 - variant: 'popover',
1306 - disableAutoFocus: true
1307 - });
1308 - const isSelected = (selectedCssUsage === id || selected || popupState.isOpen) && !disabled;
1309 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Stack, {
1310 - p: 0
1311 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.WarningInfotip, {
1312 - open: Boolean(error),
1313 - text: error ?? '',
1314 - placement: "bottom",
1315 - width: itemRef.current?.getBoundingClientRect().width,
1316 - offset: [0, -15]
1317 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StyledListItemButton, {
1318 - ref: itemRef,
1319 - dense: true,
1320 - disableGutters: true,
1321 - showSortIndicator: showSortIndicator,
1322 - showActions: isSelected || isEditing,
1323 - shape: "rounded",
1324 - onDoubleClick: openEditMode,
1325 - selected: isSelected,
1326 - disabled: disabled,
1327 - focusVisibleClassName: "visible-class-item"
1328 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_8__.SortableTrigger, sortableTriggerProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Indicator, {
1329 - isActive: isEditing,
1330 - isError: !!error
1331 - }, isEditing ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.EditableField, _extends({
1332 - ref: editableRef,
1333 - as: _elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Typography,
1334 - variant: "caption"
1335 - }, getEditableProps())) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.EllipsisWithTooltip, {
1336 - title: label,
1337 - as: _elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Typography,
1338 - variant: "caption"
1339 - })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Box, {
1340 - className: 'class-item-locator'
1341 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_css_class_usage_components__WEBPACK_IMPORTED_MODULE_6__.CssClassUsageTrigger, {
1342 - id: id,
1343 - onClick: setSelectedCssUsage
1344 - })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Tooltip, {
1345 - placement: "top",
1346 - className: 'class-item-more-actions',
1347 - title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('More actions', 'elementor')
1348 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.IconButton, _extends({
1349 - size: "tiny"
1350 - }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.bindTrigger)(popupState), {
1351 - "aria-label": "More actions"
1352 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.DotsVerticalIcon, {
1353 - fontSize: "tiny"
1354 - })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Menu, _extends({}, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.bindMenu)(popupState), {
1355 - anchorOrigin: {
1356 - vertical: 'bottom',
1357 - horizontal: 'right'
1358 - },
1359 - transformOrigin: {
1360 - vertical: 'top',
1361 - horizontal: 'right'
1362 - }
1363 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.MenuListItem, {
1364 - sx: {
1365 - minWidth: '160px'
1366 - },
1367 - onClick: () => {
1368 - popupState.close();
1369 - openEditMode();
1370 - }
1371 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Typography, {
1372 - variant: "caption",
1373 - sx: {
1374 - color: 'text.primary'
1375 - }
1376 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Rename', 'elementor'))), onToggleSync && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.MenuListItem, {
1377 - onClick: () => {
1378 - popupState.close();
1379 - onToggleSync(id, !syncToV3);
1380 - }
1381 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Stack, {
1382 - direction: "row",
1383 - alignItems: "center",
1384 - gap: 1
1385 - }, syncToV3 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.RefreshOffIcon, {
1386 - fontSize: "tiny"
1387 - }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.RefreshIcon, {
1388 - fontSize: "tiny"
1389 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Typography, {
1390 - variant: "caption",
1391 - sx: {
1392 - color: 'text.primary'
1393 - }
1394 - }, syncToV3 ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Stop syncing to Global Fonts', 'elementor') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Sync to Global Fonts', 'elementor')))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.MenuListItem, {
1395 - onClick: () => {
1396 - popupState.close();
1397 - openDialog({
1398 - id,
1399 - label
1400 - });
1401 - }
1402 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Typography, {
1403 - variant: "caption",
1404 - sx: {
1405 - color: 'error.light'
1406 - }
1407 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Delete', 'elementor')))));
1408 -};
1409 -const StyledListItemButton = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.styled)(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.ListItemButton, {
1410 - shouldForwardProp: prop => !['showActions', 'showSortIndicator'].includes(prop)
1411 -})(({
1412 - showActions,
1413 - showSortIndicator
1414 -}) => `
2254 +//#endregion
2255 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/class-item.tsx
2256 + var ClassItem = ({ id, label, renameClass, selected, disabled, sortableTriggerProps, showSortIndicator, syncToV3, onToggleSync }) => {
2257 + const itemRef = (0, react.useRef)(null);
2258 + const { ref: editableRef, openEditMode, isEditing, error, getProps: getEditableProps } = (0, _elementor_editor_ui.useEditable)({
2259 + value: label,
2260 + onSubmit: renameClass,
2261 + validation: validateLabel
2262 + });
2263 + const [selectedCssUsage, setSelectedCssUsage] = (0, react.useState)("");
2264 + const { openDialog } = useDeleteConfirmation();
2265 + const popupState = (0, _elementor_ui.usePopupState)({
2266 + variant: "popover",
2267 + disableAutoFocus: true
2268 + });
2269 + const isSelected = (selectedCssUsage === id || selected || popupState.isOpen) && !disabled;
2270 + return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { p: 0 }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.WarningInfotip, {
2271 + open: Boolean(error),
2272 + text: error ?? "",
2273 + placement: "bottom",
2274 + width: itemRef.current?.getBoundingClientRect().width,
2275 + offset: [0, -15]
2276 + }, /* @__PURE__ */ react.createElement(StyledListItemButton, {
2277 + ref: itemRef,
2278 + dense: true,
2279 + disableGutters: true,
2280 + showSortIndicator,
2281 + showActions: isSelected || isEditing,
2282 + shape: "rounded",
2283 + onDoubleClick: openEditMode,
2284 + selected: isSelected,
2285 + disabled,
2286 + focusVisibleClassName: "visible-class-item"
2287 + }, /* @__PURE__ */ react.createElement(SortableTrigger, { ...sortableTriggerProps }), /* @__PURE__ */ react.createElement(Indicator, {
2288 + isActive: isEditing,
2289 + isError: !!error
2290 + }, isEditing ? /* @__PURE__ */ react.createElement(_elementor_editor_ui.EditableField, {
2291 + ref: editableRef,
2292 + as: _elementor_ui.Typography,
2293 + variant: "caption",
2294 + ...getEditableProps()
2295 + }) : /* @__PURE__ */ react.createElement(_elementor_editor_ui.EllipsisWithTooltip, {
2296 + title: label,
2297 + as: _elementor_ui.Typography,
2298 + variant: "caption"
2299 + })), /* @__PURE__ */ react.createElement(_elementor_ui.Box, { className: "class-item-locator" }, /* @__PURE__ */ react.createElement(CssClassUsageTrigger, {
2300 + id,
2301 + onClick: setSelectedCssUsage
2302 + })), /* @__PURE__ */ react.createElement(_elementor_ui.Tooltip, {
2303 + placement: "top",
2304 + className: "class-item-more-actions",
2305 + title: (0, _wordpress_i18n.__)("More actions", "elementor")
2306 + }, /* @__PURE__ */ react.createElement(_elementor_ui.IconButton, {
2307 + size: "tiny",
2308 + ...(0, _elementor_ui.bindTrigger)(popupState),
2309 + "aria-label": "More actions"
2310 + }, /* @__PURE__ */ react.createElement(_elementor_icons.DotsVerticalIcon, { fontSize: "tiny" })))))), /* @__PURE__ */ react.createElement(_elementor_ui.Menu, {
2311 + ...(0, _elementor_ui.bindMenu)(popupState),
2312 + anchorOrigin: {
2313 + vertical: "bottom",
2314 + horizontal: "right"
2315 + },
2316 + transformOrigin: {
2317 + vertical: "top",
2318 + horizontal: "right"
2319 + }
2320 + }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.MenuListItem, {
2321 + sx: { minWidth: "160px" },
2322 + onClick: () => {
2323 + popupState.close();
2324 + openEditMode();
2325 + }
2326 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
2327 + variant: "caption",
2328 + sx: { color: "text.primary" }
2329 + }, (0, _wordpress_i18n.__)("Rename", "elementor"))), onToggleSync && /* @__PURE__ */ react.createElement(_elementor_editor_ui.MenuListItem, { onClick: () => {
2330 + popupState.close();
2331 + onToggleSync(id, !syncToV3);
2332 + } }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2333 + direction: "row",
2334 + alignItems: "center",
2335 + gap: 1
2336 + }, syncToV3 ? /* @__PURE__ */ react.createElement(_elementor_icons.RefreshOffIcon, { fontSize: "tiny" }) : /* @__PURE__ */ react.createElement(_elementor_icons.RefreshIcon, { fontSize: "tiny" }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
2337 + variant: "caption",
2338 + sx: { color: "text.primary" }
2339 + }, syncToV3 ? (0, _wordpress_i18n.__)("Stop syncing to Global Fonts", "elementor") : (0, _wordpress_i18n.__)("Sync to Global Fonts", "elementor")))), /* @__PURE__ */ react.createElement(_elementor_editor_ui.MenuListItem, { onClick: () => {
2340 + popupState.close();
2341 + openDialog({
2342 + id,
2343 + label
2344 + });
2345 + } }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
2346 + variant: "caption",
2347 + sx: { color: "error.light" }
2348 + }, (0, _wordpress_i18n.__)("Delete", "elementor")))));
2349 + };
2350 + var StyledListItemButton = (0, _elementor_ui.styled)(_elementor_ui.ListItemButton, { shouldForwardProp: (prop) => !["showActions", "showSortIndicator"].includes(prop) })(({ showActions, showSortIndicator }) => `
1415 2351 min-height: 36px;
1416 2352
1417 2353 &.visible-class-item {
1418 2354 box-shadow: none !important;
@@ -1422,9 +2358,9 @@
1422 2358 visibility: hidden;
1423 2359 }
1424 2360
1425 2361 .class-item-sortable-trigger {
1426 - visibility: ${showSortIndicator && showActions ? 'visible' : 'hidden'};
2362 + visibility: ${showSortIndicator && showActions ? "visible" : "hidden"};
1427 2363 }
1428 2364
1429 2365 &:hover:not(:disabled) {
1430 2366 .class-item-locator {
@@ -1431,3258 +2367,912 @@
1431 2367 visibility: visible;
1432 2368 }
1433 2369
1434 2370 .class-item-sortable-trigger {
1435 - visibility: ${showSortIndicator ? 'visible' : 'hidden'};
2371 + visibility: ${showSortIndicator ? "visible" : "hidden"};
1436 2372 }
1437 2373 }
1438 2374 `);
1439 -const Indicator = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.styled)(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Box, {
1440 - shouldForwardProp: prop => !['isActive', 'isError'].includes(prop)
1441 -})(({
1442 - theme,
1443 - isActive,
1444 - isError
1445 -}) => ({
1446 - display: 'flex',
1447 - width: '100%',
1448 - flexGrow: 1,
1449 - borderRadius: theme.spacing(0.5),
1450 - border: getIndicatorBorder({
1451 - isActive,
1452 - isError,
1453 - theme
1454 - }),
1455 - padding: `0 ${theme.spacing(1)}`,
1456 - marginLeft: isActive ? theme.spacing(1) : 0,
1457 - minWidth: 0
1458 -}));
1459 -const getIndicatorBorder = ({
1460 - isActive,
1461 - isError,
1462 - theme
1463 -}) => {
1464 - if (isError) {
1465 - return `2px solid ${theme.palette.error.main}`;
1466 - }
1467 - if (isActive) {
1468 - return `2px solid ${theme.palette.secondary.main}`;
1469 - }
1470 - return 'none';
1471 -};
1472 -const validateLabel = newLabel => {
1473 - const result = (0,_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__.validateStyleLabel)(newLabel, 'rename');
1474 - if (result.isValid) {
1475 - return null;
1476 - }
1477 - return result.errorMessage;
1478 -};
2375 + var Indicator = (0, _elementor_ui.styled)(_elementor_ui.Box, { shouldForwardProp: (prop) => !["isActive", "isError"].includes(prop) })(({ theme, isActive, isError }) => ({
2376 + display: "flex",
2377 + width: "100%",
2378 + flexGrow: 1,
2379 + borderRadius: theme.spacing(.5),
2380 + border: getIndicatorBorder({
2381 + isActive,
2382 + isError,
2383 + theme
2384 + }),
2385 + padding: `0 ${theme.spacing(1)}`,
2386 + marginLeft: isActive ? theme.spacing(1) : 0,
2387 + minWidth: 0
2388 + }));
2389 + var getIndicatorBorder = ({ isActive, isError, theme }) => {
2390 + if (isError) return `2px solid ${theme.palette.error.main}`;
2391 + if (isActive) return `2px solid ${theme.palette.secondary.main}`;
2392 + return "none";
2393 + };
2394 + var validateLabel = (newLabel) => {
2395 + const result = (0, _elementor_editor_styles_repository.validateStyleLabel)(newLabel, "rename");
2396 + if (result.isValid) return null;
2397 + return result.errorMessage;
2398 + };
1479 2399
1480 -/***/ }),
2400 +//#endregion
2401 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/not-found.tsx
2402 + var getNotFoundType = (searchValue, filters, filteredClasses) => {
2403 + const searchNotFound = filteredClasses.length <= 0 && searchValue.length > 1;
2404 + const filterNotFound = filters && filters.length === 0;
2405 + if (searchNotFound && filterNotFound) return "filterAndSearch";
2406 + if (searchNotFound) return "search";
2407 + if (filterNotFound) return "filter";
2408 + };
2409 + var notFound = {
2410 + filterAndSearch: {
2411 + mainText: (0, _wordpress_i18n.__)("Sorry, nothing matched.", "elementor"),
2412 + sceneryText: (0, _wordpress_i18n.__)("Try something else.", "elementor"),
2413 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.PhotoIcon, {
2414 + color: "inherit",
2415 + fontSize: "large"
2416 + })
2417 + },
2418 + search: {
2419 + mainText: (0, _wordpress_i18n.__)("Sorry, nothing matched", "elementor"),
2420 + sceneryText: (0, _wordpress_i18n.__)("Clear your input and try something else.", "elementor"),
2421 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.PhotoIcon, {
2422 + color: "inherit",
2423 + fontSize: "large"
2424 + })
2425 + },
2426 + filter: {
2427 + mainText: (0, _wordpress_i18n.__)("Sorry, nothing matched that search.", "elementor"),
2428 + sceneryText: (0, _wordpress_i18n.__)("Clear the filters and try something else.", "elementor"),
2429 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.ColorSwatchIcon, {
2430 + color: "inherit",
2431 + fontSize: "large"
2432 + })
2433 + }
2434 + };
2435 + var NotFound = ({ notFoundType }) => {
2436 + const { search: { onClearSearch, inputValue }, filters: { onClearFilter } } = useSearchAndFilters();
2437 + switch (notFoundType) {
2438 + case "filter": return /* @__PURE__ */ react.createElement(NotFoundLayout, {
2439 + ...notFound.filter,
2440 + onClear: onClearFilter
2441 + });
2442 + case "search": return /* @__PURE__ */ react.createElement(NotFoundLayout, {
2443 + ...notFound.search,
2444 + searchValue: inputValue,
2445 + onClear: onClearSearch
2446 + });
2447 + case "filterAndSearch": return /* @__PURE__ */ react.createElement(NotFoundLayout, {
2448 + ...notFound.filterAndSearch,
2449 + onClear: () => {
2450 + onClearFilter();
2451 + onClearSearch();
2452 + }
2453 + });
2454 + }
2455 + };
2456 + var NotFoundLayout = ({ onClear, searchValue, mainText, sceneryText, icon }) => /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2457 + color: "text.secondary",
2458 + pt: 5,
2459 + alignItems: "center",
2460 + gap: 1,
2461 + overflow: "hidden",
2462 + justifySelf: "center"
2463 + }, icon, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: { width: "100%" } }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
2464 + align: "center",
2465 + variant: "subtitle2",
2466 + color: "inherit"
2467 + }, mainText), searchValue && /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
2468 + variant: "subtitle2",
2469 + color: "inherit",
2470 + sx: {
2471 + display: "flex",
2472 + width: "100%",
2473 + justifyContent: "center"
2474 + }
2475 + }, /* @__PURE__ */ react.createElement("span", null, "“"), /* @__PURE__ */ react.createElement("span", { style: {
2476 + maxWidth: "80%",
2477 + overflow: "hidden",
2478 + textOverflow: "ellipsis"
2479 + } }, searchValue), /* @__PURE__ */ react.createElement("span", null, "”."))), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
2480 + align: "center",
2481 + variant: "caption",
2482 + color: "inherit"
2483 + }, sceneryText), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
2484 + align: "center",
2485 + variant: "caption",
2486 + color: "inherit"
2487 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Link, {
2488 + color: "secondary",
2489 + variant: "caption",
2490 + component: "button",
2491 + onClick: onClear
2492 + }, (0, _wordpress_i18n.__)("Clear & try again", "elementor"))));
1481 2493
1482 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-button.tsx":
1483 -/*!************************************************************************************************************!*\
1484 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-button.tsx ***!
1485 - \************************************************************************************************************/
1486 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2494 +//#endregion
2495 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/global-classes-list.tsx
2496 + var ROW_HEIGHT = 40;
2497 + var OVERSCAN = 6;
2498 + var GlobalClassesList = ({ disabled, scrollElement, onStopSyncRequest, onStartSyncRequest }) => {
2499 + const { search: { debouncedValue: searchValue } } = useSearchAndFilters();
2500 + const cssClasses = useOrderedClasses();
2501 + const dispatch = (0, _elementor_store.__useDispatch)();
2502 + const filters = useFilters();
2503 + const [draggedItemId, setDraggedItemId] = (0, react.useState)(null);
2504 + const [loading, setLoading] = (0, react.useState)({});
2505 + const addLoadingClass = (classId) => setLoading((prev) => ({
2506 + ...prev,
2507 + [classId]: true
2508 + }));
2509 + const removeLoadingClass = (classId) => setLoading((prev) => {
2510 + const { [classId]: _, ...rest } = prev;
2511 + return rest;
2512 + });
2513 + const draggedItemLabel = cssClasses.find((cssClass) => cssClass.id === draggedItemId)?.label ?? "";
2514 + const [classesOrder, reorderClasses] = useReorder(draggedItemId, setDraggedItemId, draggedItemLabel ?? "");
2515 + const filteredCssClasses = useFilteredCssClasses();
2516 + const virtualizer = useVirtualizer({
2517 + count: filteredCssClasses.length,
2518 + getScrollElement: () => scrollElement ?? null,
2519 + estimateSize: () => ROW_HEIGHT,
2520 + overscan: OVERSCAN,
2521 + getItemKey: (index) => filteredCssClasses[index].id,
2522 + rangeExtractor: (range) => {
2523 + const indices = new Set(defaultRangeExtractor(range));
2524 + if (draggedItemId) {
2525 + const draggedItemIndex = filteredCssClasses.findIndex((cssClass) => cssClass.id === draggedItemId);
2526 + if (draggedItemIndex >= 0) indices.add(draggedItemIndex);
2527 + }
2528 + return [...indices].sort((a, b) => a - b);
2529 + }
2530 + });
2531 + (0, react.useEffect)(() => {
2532 + const handler = (event) => {
2533 + if (event.key === "z" && (event.ctrlKey || event.metaKey)) {
2534 + event.stopImmediatePropagation();
2535 + event.preventDefault();
2536 + if (event.shiftKey) {
2537 + dispatch(slice.actions.redo());
2538 + return;
2539 + }
2540 + dispatch(slice.actions.undo());
2541 + }
2542 + };
2543 + window.addEventListener("keydown", handler, { capture: true });
2544 + return () => window.removeEventListener("keydown", handler);
2545 + }, [dispatch]);
2546 + if (!cssClasses?.length) return /* @__PURE__ */ react.createElement(EmptyState, null);
2547 + const notFoundType = getNotFoundType(searchValue, filters, filteredCssClasses);
2548 + if (notFoundType) return /* @__PURE__ */ react.createElement(NotFound, { notFoundType });
2549 + const isFiltersApplied = filters?.length || searchValue;
2550 + const allowSorting = filteredCssClasses.length > 1 && !isFiltersApplied;
2551 + return /* @__PURE__ */ react.createElement(DeleteConfirmationProvider, null, /* @__PURE__ */ react.createElement(_elementor_ui.List, { sx: {
2552 + position: "relative",
2553 + display: "block",
2554 + height: virtualizer.getTotalSize(),
2555 + padding: 0
2556 + } }, /* @__PURE__ */ react.createElement(SortableProvider, {
2557 + value: classesOrder,
2558 + onChange: reorderClasses,
2559 + onDragStart: (event) => setDraggedItemId(event.active.id),
2560 + onDragEnd: () => setDraggedItemId(null),
2561 + onDragCancel: () => setDraggedItemId(null),
2562 + disableDragOverlay: !allowSorting
2563 + }, virtualizer.getVirtualItems().map((virtualRow) => {
2564 + const cssClass = filteredCssClasses[virtualRow.index];
2565 + return /* @__PURE__ */ react.createElement(SortableItem, {
2566 + key: virtualRow.key,
2567 + id: cssClass.id,
2568 + style: {
2569 + position: "absolute",
2570 + top: virtualRow.start,
2571 + left: 0,
2572 + width: "100%"
2573 + }
2574 + }, ({ isDragged, isDragPlaceholder, triggerProps, triggerStyle }) => /* @__PURE__ */ react.createElement(ClassItem, {
2575 + id: cssClass.id,
2576 + label: cssClass.label,
2577 + renameClass: async (newLabel) => {
2578 + addLoadingClass(cssClass.id);
2579 + try {
2580 + trackGlobalClasses({
2581 + event: "classRenamed",
2582 + classId: cssClass.id,
2583 + oldValue: cssClass.label,
2584 + newValue: newLabel,
2585 + source: "class-manager"
2586 + });
2587 + await loadExistingClasses([cssClass.id]);
2588 + dispatch(slice.actions.update({ style: {
2589 + id: cssClass.id,
2590 + label: newLabel
2591 + } }));
2592 + } finally {
2593 + removeLoadingClass(cssClass.id);
2594 + }
2595 + },
2596 + selected: isDragged,
2597 + disabled: disabled || isDragPlaceholder || loading[cssClass.id],
2598 + sortableTriggerProps: {
2599 + ...triggerProps,
2600 + style: triggerStyle
2601 + },
2602 + showSortIndicator: allowSorting,
2603 + syncToV3: cssClass.sync_to_v3,
2604 + onToggleSync: (id, newValue) => {
2605 + if (!newValue && onStopSyncRequest) onStopSyncRequest(id);
2606 + else if (newValue && onStartSyncRequest) onStartSyncRequest(id);
2607 + else dispatch(slice.actions.update({ style: {
2608 + id,
2609 + sync_to_v3: newValue
2610 + } }));
2611 + }
2612 + }));
2613 + }))));
2614 + };
2615 + var EmptyState = () => /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2616 + alignItems: "center",
2617 + gap: 1.5,
2618 + pt: 10,
2619 + px: .5,
2620 + maxWidth: "260px",
2621 + margin: "auto"
2622 + }, /* @__PURE__ */ react.createElement(FlippedColorSwatchIcon, { fontSize: "large" }), /* @__PURE__ */ react.createElement(StyledHeader, {
2623 + variant: "subtitle2",
2624 + component: "h2",
2625 + color: "text.secondary"
2626 + }, (0, _wordpress_i18n.__)("There are no global classes yet.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
2627 + align: "center",
2628 + variant: "caption",
2629 + color: "text.secondary"
2630 + }, (0, _wordpress_i18n.__)("CSS classes created in the editor panel will appear here. Once they are available, you can arrange their hierarchy, rename them, or delete them as needed.", "elementor")));
2631 + var StyledHeader = (0, _elementor_ui.styled)(_elementor_ui.Typography)(({ theme, variant }) => ({ "&.MuiTypography-root": { ...theme.typography[variant] } }));
2632 + var useReorder = (draggedItemId, setDraggedItemId, draggedItemLabel) => {
2633 + const dispatch = (0, _elementor_store.__useDispatch)();
2634 + const order = useClassesOrder();
2635 + const reorder = (newIds) => {
2636 + dispatch(slice.actions.setOrder(newIds));
2637 + if (draggedItemId) {
2638 + trackGlobalClasses({
2639 + event: "classManagerReorder",
2640 + classId: draggedItemId,
2641 + classTitle: draggedItemLabel
2642 + });
2643 + setDraggedItemId(null);
2644 + }
2645 + };
2646 + return [order, reorder];
2647 + };
2648 + var useFilteredCssClasses = () => {
2649 + const cssClasses = useOrderedClasses();
2650 + const { search: { debouncedValue: searchValue } } = useSearchAndFilters();
2651 + const filters = useFilters();
2652 + const lowercaseLabels = (0, react.useMemo)(() => cssClasses.map((cssClass) => ({
2653 + ...cssClass,
2654 + lowerLabel: cssClass.label.toLowerCase()
2655 + })), [cssClasses]);
2656 + const filteredClasses = (0, react.useMemo)(() => {
2657 + const normalizedSearch = searchValue.replace(/[^a-zA-Z0-9_-]/g, "").toLowerCase();
2658 + if (normalizedSearch.length > 1) return lowercaseLabels.filter((cssClass) => cssClass.lowerLabel.includes(normalizedSearch));
2659 + return cssClasses;
2660 + }, [
2661 + searchValue,
2662 + cssClasses,
2663 + lowercaseLabels
2664 + ]);
2665 + return (0, react.useMemo)(() => {
2666 + if (filters && filters.length > 0) return filteredClasses.filter((cssClass) => filters.includes(cssClass.id));
2667 + return filteredClasses;
2668 + }, [filteredClasses, filters]);
2669 + };
1487 2670
1488 -__webpack_require__.r(__webpack_exports__);
1489 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1490 -/* harmony export */ ClassManagerButton: function() { return /* binding */ ClassManagerButton; }
1491 -/* harmony export */ });
1492 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
1493 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1494 -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository");
1495 -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__);
1496 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
1497 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__);
1498 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
1499 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
1500 -/* harmony import */ var _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../global-classes-styles-provider */ "./packages/packages/core/editor-global-classes/src/global-classes-styles-provider.ts");
1501 -/* harmony import */ var _hooks_use_prefetch_css_class_usage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks/use-prefetch-css-class-usage */ "./packages/packages/core/editor-global-classes/src/hooks/use-prefetch-css-class-usage.ts");
1502 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
1503 -/* harmony import */ var _flipped_color_swatch_icon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./flipped-color-swatch-icon */ "./packages/packages/core/editor-global-classes/src/components/class-manager/flipped-color-swatch-icon.tsx");
2671 +//#endregion
2672 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/panel-interactions.ts
2673 + function blockPanelInteractions() {
2674 + window.$e?.components?.get?.("panel")?.blockUserInteractions?.();
2675 + }
2676 + function unblockPanelInteractions() {
2677 + window.$e?.components?.get?.("panel")?.unblockUserInteractions?.();
2678 + }
1504 2679
2680 +//#endregion
2681 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/start-sync-to-v3-modal.tsx
2682 + var IMAGE_URL = "https://assets.elementor.com/packages/v1/images/class-manager-sync-modal.png";
2683 + var StartSyncToV3Modal = ({ externalOpen, classId, onExternalClose, onConfirm } = {}) => {
2684 + const [shouldShowAgain, setShouldShowAgain] = (0, react.useState)(true);
2685 + const hasTrackedExposure = (0, react.useRef)(false);
2686 + (0, react.useEffect)(() => {
2687 + if (externalOpen && classId && !hasTrackedExposure.current) {
2688 + hasTrackedExposure.current = true;
2689 + trackGlobalClasses({
2690 + event: "classSyncToV3PopupShown",
2691 + classId
2692 + });
2693 + }
2694 + if (!externalOpen) hasTrackedExposure.current = false;
2695 + }, [externalOpen, classId]);
2696 + const handleClose = () => {
2697 + if (classId) trackGlobalClasses({
2698 + event: "classSyncToV3PopupClick",
2699 + classId,
2700 + action: "cancel"
2701 + });
2702 + onExternalClose?.();
2703 + };
2704 + const handleConfirm = () => {
2705 + if (classId) trackGlobalClasses({
2706 + event: "classSyncToV3PopupClick",
2707 + classId,
2708 + action: "sync"
2709 + });
2710 + onConfirm?.();
2711 + onExternalClose?.();
2712 + };
2713 + return /* @__PURE__ */ react.createElement(_elementor_ui.Dialog, {
2714 + open: !!externalOpen,
2715 + onClose: handleClose,
2716 + maxWidth: "sm",
2717 + fullWidth: true
2718 + }, /* @__PURE__ */ react.createElement(_elementor_ui.DialogContent, { sx: { p: 0 } }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
2719 + component: "img",
2720 + src: IMAGE_URL,
2721 + alt: "",
2722 + sx: {
2723 + width: "100%",
2724 + display: "block"
2725 + }
2726 + }), /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: {
2727 + px: 3,
2728 + pt: 4,
2729 + pb: 1
2730 + } }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "h6" }, (0, _wordpress_i18n.__)("Sync class to Global Fonts", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
2731 + variant: "body2",
2732 + color: "secondary",
2733 + sx: {
2734 + mb: 2,
2735 + pt: 1
2736 + }
2737 + }, (0, _wordpress_i18n.__)("Only typography settings supported in Global Fonts will be applied, including: font family, responsive font sizes, weight, text transform, decoration, line height, letter spacing, and word spacing. Changes made in the class will automatically apply to Global Fonts.", "elementor")))), /* @__PURE__ */ react.createElement(_elementor_ui.DialogActions, { sx: {
2738 + justifyContent: "space-between",
2739 + px: 3,
2740 + pb: 2
2741 + } }, /* @__PURE__ */ react.createElement(_elementor_ui.FormControlLabel, {
2742 + control: /* @__PURE__ */ react.createElement(_elementor_ui.Checkbox, {
2743 + checked: !shouldShowAgain,
2744 + onChange: (e) => setShouldShowAgain(!e.target.checked)
2745 + }),
2746 + label: /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
2747 + variant: "body2",
2748 + color: "secondary"
2749 + }, (0, _wordpress_i18n.__)("Don't show again", "elementor"))
2750 + }), /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: {
2751 + display: "flex",
2752 + gap: 1
2753 + } }, /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
2754 + onClick: handleClose,
2755 + color: "secondary",
2756 + size: "small"
2757 + }, (0, _wordpress_i18n.__)("Cancel", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
2758 + onClick: handleConfirm,
2759 + variant: "contained",
2760 + size: "small"
2761 + }, (0, _wordpress_i18n.__)("Sync to Global Fonts", "elementor")))));
2762 + };
1505 2763
2764 +//#endregion
2765 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-panel.tsx
2766 + var STOP_SYNC_MESSAGE_KEY = "stop-sync-class";
2767 + function ClassManagerPanelEmbedded({ onRequestClose, onExposeCloseAttempt, isActive }) {
2768 + return /* @__PURE__ */ react.createElement(ClassManagerPanelContent, {
2769 + onRequestClose,
2770 + onExposeCloseAttempt,
2771 + isActive
2772 + });
2773 + }
2774 + function ClassManagerPanelContent({ onRequestClose, onExposeCloseAttempt, isActive = true }) {
2775 + const isDirty = useDirtyState();
2776 + const { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = (0, _elementor_editor_ui.useDialog)();
2777 + const [stopSyncConfirmation, setStopSyncConfirmation] = (0, react.useState)(null);
2778 + const [startSyncConfirmation, setStartSyncConfirmation] = (0, react.useState)(null);
2779 + const [isStopSyncSuppressed] = (0, _elementor_editor_current_user.useSuppressedMessage)(STOP_SYNC_MESSAGE_KEY);
2780 + const [scrollElement, setScrollElement] = (0, react.useState)(null);
2781 + const { mutateAsync: publish, isPending: isPublishing } = usePublish();
2782 + const resetAndClosePanel = () => {
2783 + (0, _elementor_store.__dispatch)(slice.actions.resetToInitialState({ context: "frontend" }));
2784 + closeSaveChangesDialog();
2785 + };
2786 + const handleClosePanel = (0, react.useCallback)(() => {
2787 + if (isDirty) {
2788 + openSaveChangesDialog();
2789 + return;
2790 + }
2791 + onRequestClose();
2792 + }, [
2793 + isDirty,
2794 + openSaveChangesDialog,
2795 + onRequestClose
2796 + ]);
2797 + (0, react.useEffect)(() => {
2798 + if (!onExposeCloseAttempt) return;
2799 + onExposeCloseAttempt(() => handleClosePanel());
2800 + return () => onExposeCloseAttempt(null);
2801 + }, [onExposeCloseAttempt, handleClosePanel]);
2802 + (0, react.useEffect)(() => {
2803 + blockPanelInteractions();
2804 + return () => {
2805 + unblockPanelInteractions();
2806 + };
2807 + }, []);
2808 + const handleStopSync = (0, react.useCallback)(async (classId) => {
2809 + await loadExistingClasses([classId]);
2810 + (0, _elementor_store.__dispatch)(slice.actions.update({ style: {
2811 + id: classId,
2812 + sync_to_v3: false
2813 + } }));
2814 + trackGlobalClasses({
2815 + event: "classSyncToV3",
2816 + classId,
2817 + action: "unsync"
2818 + });
2819 + setStopSyncConfirmation(null);
2820 + }, []);
2821 + const handleStartSync = (0, react.useCallback)(async (classId) => {
2822 + await loadExistingClasses([classId]);
2823 + (0, _elementor_store.__dispatch)(slice.actions.update({ style: {
2824 + id: classId,
2825 + sync_to_v3: true
2826 + } }));
2827 + trackGlobalClasses({
2828 + event: "classSyncToV3",
2829 + classId,
2830 + action: "sync"
2831 + });
2832 + setStartSyncConfirmation(null);
2833 + }, []);
2834 + const handleStopSyncRequest = (0, react.useCallback)((classId) => {
2835 + if (!isStopSyncSuppressed) setStopSyncConfirmation(classId);
2836 + else handleStopSync(classId);
2837 + }, [isStopSyncSuppressed, handleStopSync]);
2838 + usePreventUnload();
2839 + return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_ui.ErrorBoundary, { fallback: /* @__PURE__ */ react.createElement(ErrorBoundaryFallback, null) }, /* @__PURE__ */ react.createElement(SearchAndFilterProvider, null, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2840 + direction: "column",
2841 + sx: {
2842 + height: "100%",
2843 + width: "100%",
2844 + flex: 1,
2845 + minHeight: 0,
2846 + overflow: "hidden"
2847 + }
2848 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
2849 + px: 2,
2850 + pb: 1
2851 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2852 + direction: "row",
2853 + alignItems: "center",
2854 + justifyContent: "space-between",
2855 + gap: .5,
2856 + sx: { pb: .5 }
2857 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: {
2858 + flexGrow: 1,
2859 + minWidth: 0
2860 + } }, /* @__PURE__ */ react.createElement(ClassManagerSearch, null)), /* @__PURE__ */ react.createElement(CssClassFilter, null), /* @__PURE__ */ react.createElement(TotalCssClassCounter, null)), /* @__PURE__ */ react.createElement(ActiveFilters, null)), /* @__PURE__ */ react.createElement(_elementor_ui.Divider, null), /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
2861 + ref: setScrollElement,
2862 + px: 2,
2863 + sx: {
2864 + flexGrow: 1,
2865 + overflowY: "auto",
2866 + minHeight: 0
2867 + }
2868 + }, /* @__PURE__ */ react.createElement(GlobalClassesList, {
2869 + disabled: isPublishing,
2870 + scrollElement,
2871 + onStopSyncRequest: handleStopSyncRequest,
2872 + onStartSyncRequest: (classId) => setStartSyncConfirmation(classId)
2873 + })), /* @__PURE__ */ react.createElement(_elementor_editor_panels.PanelFooter, null, /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
2874 + fullWidth: true,
2875 + size: "small",
2876 + color: "global",
2877 + variant: "contained",
2878 + onClick: publish,
2879 + disabled: !isDirty,
2880 + loading: isPublishing
2881 + }, (0, _wordpress_i18n.__)("Save changes", "elementor")))))), isActive && /* @__PURE__ */ react.createElement(ClassManagerIntroduction, null), startSyncConfirmation && /* @__PURE__ */ react.createElement(StartSyncToV3Modal, {
2882 + externalOpen: true,
2883 + classId: startSyncConfirmation,
2884 + onExternalClose: () => setStartSyncConfirmation(null),
2885 + onConfirm: () => handleStartSync(startSyncConfirmation)
2886 + }), stopSyncConfirmation && /* @__PURE__ */ react.createElement(StopSyncConfirmationDialog, {
2887 + open: true,
2888 + onClose: () => setStopSyncConfirmation(null),
2889 + onConfirm: () => handleStopSync(stopSyncConfirmation)
2890 + }), isSaveChangesDialogOpen && /* @__PURE__ */ react.createElement(_elementor_editor_ui.SaveChangesDialog, null, /* @__PURE__ */ react.createElement(_elementor_ui.DialogHeader, {
2891 + onClose: closeSaveChangesDialog,
2892 + logo: false
2893 + }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.SaveChangesDialog.Title, null, (0, _wordpress_i18n.__)("You have unsaved changes", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_editor_ui.SaveChangesDialog.Content, null, /* @__PURE__ */ react.createElement(_elementor_editor_ui.SaveChangesDialog.ContentText, null, (0, _wordpress_i18n.__)("You have unsaved changes in the Class Manager.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_editor_ui.SaveChangesDialog.ContentText, null, (0, _wordpress_i18n.__)("To avoid losing your updates, save your changes before leaving.", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_editor_ui.SaveChangesDialog.Actions, { actions: {
2894 + discard: {
2895 + label: (0, _wordpress_i18n.__)("Discard", "elementor"),
2896 + action: () => {
2897 + resetAndClosePanel();
2898 + }
2899 + },
2900 + confirm: {
2901 + label: (0, _wordpress_i18n.__)("Save & Continue", "elementor"),
2902 + action: async () => {
2903 + await publish();
2904 + closeSaveChangesDialog();
2905 + onRequestClose();
2906 + }
2907 + }
2908 + } })));
2909 + }
2910 + var ErrorBoundaryFallback = () => /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
2911 + role: "alert",
2912 + sx: {
2913 + minHeight: "100%",
2914 + p: 2
2915 + }
2916 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Alert, {
2917 + severity: "error",
2918 + sx: {
2919 + mb: 2,
2920 + maxWidth: 400,
2921 + textAlign: "center"
2922 + }
2923 + }, /* @__PURE__ */ react.createElement("strong", null, (0, _wordpress_i18n.__)("Something went wrong", "elementor"))));
2924 + var usePreventUnload = () => {
2925 + const isDirty = useDirtyState();
2926 + (0, react.useEffect)(() => {
2927 + const handleBeforeUnload = (event) => {
2928 + if (isDirty) event.preventDefault();
2929 + };
2930 + window.addEventListener("beforeunload", handleBeforeUnload);
2931 + return () => {
2932 + window.removeEventListener("beforeunload", handleBeforeUnload);
2933 + };
2934 + }, [isDirty]);
2935 + };
2936 + var usePublish = () => {
2937 + return (0, _elementor_query.useMutation)({
2938 + mutationFn: () => saveGlobalClasses({ context: "frontend" }),
2939 + onSuccess: async () => {
2940 + (0, _elementor_editor_documents.setDocumentModifiedStatus)(false);
2941 + if (hasDeletedItems()) await onDelete();
2942 + }
2943 + });
2944 + };
2945 + var TotalCssClassCounter = () => {
2946 + const filters = useFilters();
2947 + const cssClasses = useClassesOrder();
2948 + return /* @__PURE__ */ react.createElement(_elementor_ui.Chip, {
2949 + size: "small",
2950 + label: filters ? `${filters.length} / ${cssClasses?.length}` : cssClasses?.length
2951 + });
2952 + };
2953 + var StopSyncConfirmationDialog = ({ open, onClose, onConfirm }) => {
2954 + const [, suppressStopSyncMessage] = (0, _elementor_editor_current_user.useSuppressedMessage)(STOP_SYNC_MESSAGE_KEY);
2955 + return /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog, {
2956 + open,
2957 + onClose
2958 + }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Title, {
2959 + icon: FlippedColorSwatchIcon,
2960 + iconColor: "primary"
2961 + }, (0, _wordpress_i18n.__)("Un-sync typography class", "elementor")), /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Content, null, /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.ContentText, null, (0, _wordpress_i18n.__)("You're about to stop syncing a typography class to Global Fonts.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.ContentText, { sx: { mt: 1 } }, (0, _wordpress_i18n.__)("Note that if it's being used anywhere, the affected elements will inherit the default typography.", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Actions, {
2962 + onClose,
2963 + onConfirm,
2964 + cancelLabel: (0, _wordpress_i18n.__)("Cancel", "elementor"),
2965 + confirmLabel: (0, _wordpress_i18n.__)("Got it", "elementor"),
2966 + color: "primary",
2967 + onSuppressMessage: suppressStopSyncMessage,
2968 + suppressLabel: (0, _wordpress_i18n.__)("Don't show again", "elementor")
2969 + }));
2970 + };
1506 2971
2972 +//#endregion
2973 +//#region packages/packages/core/editor-global-classes/src/capabilities.ts
2974 + var UPDATE_CLASS_CAPABILITY_KEY = "elementor_global_classes_update_class";
2975 + var getCapabilities = () => {
2976 + return {
2977 + update: UPDATE_CLASS_CAPABILITY_KEY,
2978 + create: UPDATE_CLASS_CAPABILITY_KEY,
2979 + delete: UPDATE_CLASS_CAPABILITY_KEY,
2980 + updateProps: UPDATE_CLASS_CAPABILITY_KEY
2981 + };
2982 + };
1507 2983
2984 +//#endregion
2985 +//#region packages/packages/core/editor-global-classes/src/global-classes-styles-provider.ts
2986 + var MAX_CLASSES = 1e3;
2987 + var GLOBAL_CLASSES_PROVIDER_KEY = "global-classes";
2988 + var PREGENERATED_LINK_PATTERN = /^global-([0-9]+-)?(preview|frontend)-[a-zA-Z_-]+-css$/;
2989 + var globalClassesStylesProvider = (0, _elementor_editor_styles_repository.createStylesProvider)({
2990 + key: GLOBAL_CLASSES_PROVIDER_KEY,
2991 + priority: 30,
2992 + limit: MAX_CLASSES,
2993 + isPregeneratedLink: ({ id }) => PREGENERATED_LINK_PATTERN.test(id),
2994 + labels: {
2995 + singular: (0, _wordpress_i18n.__)("class", "elementor"),
2996 + plural: (0, _wordpress_i18n.__)("classes", "elementor")
2997 + },
2998 + subscribe: (cb) => subscribeWithStates(cb),
2999 + capabilities: getCapabilities(),
3000 + actions: {
3001 + all: () => selectOrderedClasses((0, _elementor_store.__getState)()),
3002 + get: (id) => {
3003 + const state = (0, _elementor_store.__getState)();
3004 + const isFetched = selectIsClassFetched(state, id);
3005 + const style = selectClass(state, id);
3006 + if (isFetched || style) return style;
3007 + loadExistingClasses([id]);
3008 + return placeholderDefinition(id, selectClassLabels(state)[id] ?? id);
3009 + },
3010 + resolveCssName: (id) => {
3011 + const state = (0, _elementor_store.__getState)();
3012 + const loaded = selectClass(state, id);
3013 + if (loaded) return loaded.label;
3014 + return selectClassLabels(state)[id] ?? id;
3015 + },
3016 + create: (label, variants = [], id) => {
3017 + const existingClasses = Object.entries(selectClassLabels((0, _elementor_store.__getState)()));
3018 + if (existingClasses.map(([, classLabel]) => classLabel).includes(label)) throw new GlobalClassLabelAlreadyExistsError({ context: { label } });
3019 + const existingIds = existingClasses.map(([existingId]) => existingId);
3020 + if (!id) id = (0, _elementor_editor_styles.generateId)("g-", existingIds);
3021 + (0, _elementor_store.__dispatch)(slice.actions.add({
3022 + id,
3023 + type: "class",
3024 + label,
3025 + variants
3026 + }));
3027 + return id;
3028 + },
3029 + update: (payload) => {
3030 + (0, _elementor_store.__dispatch)(slice.actions.update({ style: payload }));
3031 + },
3032 + delete: (id) => {
3033 + (0, _elementor_store.__dispatch)(slice.actions.delete(id));
3034 + },
3035 + updateProps: (args) => {
3036 + (0, _elementor_store.__dispatch)(slice.actions.updateProps({
3037 + id: args.id,
3038 + meta: args.meta,
3039 + props: args.props,
3040 + mode: args.mode
3041 + }));
3042 + },
3043 + updateCustomCss: (args) => {
3044 + (0, _elementor_store.__dispatch)(slice.actions.updateProps({
3045 + id: args.id,
3046 + meta: args.meta,
3047 + custom_css: args.custom_css,
3048 + props: {}
3049 + }));
3050 + },
3051 + tracking: (data) => {
3052 + trackGlobalClasses(data).catch((error) => {
3053 + throw new GlobalClassTrackingError({ cause: error });
3054 + });
3055 + }
3056 + }
3057 + });
3058 + var subscribeWithStates = (cb) => {
3059 + let previousState = selectData((0, _elementor_store.__getState)());
3060 + return (0, _elementor_store.__subscribeWithSelector)((state) => selectData(state), (currentState) => {
3061 + cb(previousState.items, currentState.items);
3062 + previousState = currentState;
3063 + });
3064 + };
1508 3065
3066 +//#endregion
3067 +//#region packages/packages/core/editor-global-classes/src/mcp-integration/classes-resource.ts
3068 + var GLOBAL_CLASSES_URI = "elementor://global-classes";
3069 + var STORAGE_KEY = "elementor-global-classes";
3070 + var updateLocalStorageCache = () => {
3071 + const classes = selectOrderedClasses((0, _elementor_store.__getState)());
3072 + localStorage.setItem(STORAGE_KEY, JSON.stringify(classes));
3073 + };
3074 + var initClassesResource = (classesMcpEntry, canvasMcpEntry) => {
3075 + [canvasMcpEntry, classesMcpEntry].forEach((entry) => {
3076 + const { sendResourceUpdated, resource, waitForReady } = entry;
3077 + resource("global-classes", GLOBAL_CLASSES_URI, { description: "Global classes list." }, async () => {
3078 + return { contents: [{
3079 + uri: GLOBAL_CLASSES_URI,
3080 + text: localStorage[STORAGE_KEY] ?? "[]"
3081 + }] };
3082 + });
3083 + waitForReady().then(() => {
3084 + updateLocalStorageCache();
3085 + globalClassesStylesProvider.subscribe(() => {
3086 + updateLocalStorageCache();
3087 + sendResourceUpdated({ uri: GLOBAL_CLASSES_URI });
3088 + });
3089 + });
3090 + });
3091 + };
1509 3092
3093 +//#endregion
3094 +//#region packages/packages/core/editor-global-classes/src/hooks/use-prefetch-css-class-usage.ts
3095 + function usePrefetchCssClassUsage() {
3096 + const queryClient = (0, _elementor_query.useQueryClient)();
3097 + const prefetchClassesUsage = () => queryClient.prefetchQuery({
3098 + queryKey: [QUERY_KEY],
3099 + queryFn: fetchCssClassUsage
3100 + });
3101 + return { prefetchClassesUsage };
3102 + }
3103 + var PrefetchCssClassUsage = () => {
3104 + const { prefetchClassesUsage } = usePrefetchCssClassUsage();
3105 + prefetchClassesUsage();
3106 + return null;
3107 + };
1510 3108
3109 +//#endregion
3110 +//#region packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-button.tsx
3111 + var EVENT_TOGGLE_DESIGN_SYSTEM = "elementor/toggle-design-system";
3112 + var ClassManagerButton = () => {
3113 + const { prefetchClassesUsage } = usePrefetchCssClassUsage();
3114 + const { userCan } = (0, _elementor_editor_styles_repository.useUserStylesCapability)();
3115 + if (!userCan(globalClassesStylesProvider.getKey()).update) return null;
3116 + const handleOpenPanel = () => {
3117 + window.dispatchEvent(new CustomEvent(EVENT_TOGGLE_DESIGN_SYSTEM, { detail: { tab: "classes" } }));
3118 + trackGlobalClasses({
3119 + event: "classManagerOpened",
3120 + source: "style-panel"
3121 + });
3122 + prefetchClassesUsage();
3123 + };
3124 + return /* @__PURE__ */ react.createElement(_elementor_ui.Tooltip, {
3125 + title: (0, _wordpress_i18n.__)("Class Manager", "elementor"),
3126 + placement: "top"
3127 + }, /* @__PURE__ */ react.createElement(_elementor_ui.IconButton, {
3128 + size: "tiny",
3129 + onClick: handleOpenPanel,
3130 + sx: { marginInlineEnd: -.75 }
3131 + }, /* @__PURE__ */ react.createElement(FlippedColorSwatchIcon, { fontSize: "tiny" })));
3132 + };
1511 3133
1512 -const EVENT_TOGGLE_DESIGN_SYSTEM = 'elementor/toggle-design-system';
1513 -const ClassManagerButton = () => {
1514 - const {
1515 - prefetchClassesUsage
1516 - } = (0,_hooks_use_prefetch_css_class_usage__WEBPACK_IMPORTED_MODULE_5__.usePrefetchCssClassUsage)();
1517 - const {
1518 - userCan
1519 - } = (0,_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__.useUserStylesCapability)();
1520 - const isUserAllowedToUpdateClass = userCan(_global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_4__.globalClassesStylesProvider.getKey()).update;
1521 - if (!isUserAllowedToUpdateClass) {
1522 - return null;
1523 - }
1524 - const handleOpenPanel = () => {
1525 - window.dispatchEvent(new CustomEvent(EVENT_TOGGLE_DESIGN_SYSTEM, {
1526 - detail: {
1527 - tab: 'classes'
1528 - }
1529 - }));
1530 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_6__.trackGlobalClasses)({
1531 - event: 'classManagerOpened',
1532 - source: 'style-panel'
1533 - });
1534 - prefetchClassesUsage();
1535 - };
1536 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Tooltip, {
1537 - title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Class Manager', 'elementor'),
1538 - placement: "top"
1539 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.IconButton, {
1540 - size: "tiny",
1541 - onClick: handleOpenPanel,
1542 - sx: {
1543 - marginInlineEnd: -0.75
1544 - }
1545 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_flipped_color_swatch_icon__WEBPACK_IMPORTED_MODULE_7__.FlippedColorSwatchIcon, {
1546 - fontSize: "tiny"
1547 - })));
1548 -};
3134 +//#endregion
3135 +//#region packages/packages/core/editor-global-classes/src/components/convert-local-class-to-global-class.tsx
3136 + var ConvertLocalClassToGlobalClass = (props) => {
3137 + const localStyleData = props.styleDef;
3138 + const handleConversion = () => {
3139 + const newClassName = createClassName(`converted-class-`);
3140 + if (!localStyleData) throw new Error("Style definition is required for converting local class to global class.");
3141 + const newId = globalClassesStylesProvider.actions.create?.(newClassName, localStyleData.variants);
3142 + if (newId) {
3143 + props.successCallback(newId);
3144 + trackGlobalClasses({
3145 + classId: newId,
3146 + event: "classCreated",
3147 + source: "converted",
3148 + classTitle: newClassName
3149 + });
3150 + }
3151 + };
3152 + return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_editor_ui.MenuListItem, {
3153 + disabled: !props.canConvert,
3154 + onClick: handleConversion,
3155 + dense: true,
3156 + sx: { "&.Mui-focusVisible": {
3157 + border: "none",
3158 + boxShadow: "none !important",
3159 + backgroundColor: "transparent"
3160 + } }
3161 + }, (0, _wordpress_i18n.__)("Convert to global class", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Divider, null));
3162 + };
3163 + function createClassName(prefix) {
3164 + let i = 1;
3165 + let newClassName = `${prefix}${i}`;
3166 + while (!(0, _elementor_editor_styles_repository.validateStyleLabel)(newClassName, "create").isValid) newClassName = `${prefix}${++i}`;
3167 + return newClassName;
3168 + }
1549 3169
1550 -/***/ }),
3170 +//#endregion
3171 +//#region packages/packages/core/editor-global-classes/src/components/global-styles-import-listener.tsx
3172 + function GlobalStylesImportListener() {
3173 + const dispatch = (0, _elementor_store.__useDispatch)();
3174 + (0, react.useEffect)(() => {
3175 + const handleGlobalStylesImported = async (event) => {
3176 + const globalClasses = event.detail?.global_classes;
3177 + if (!globalClasses?.added_items_order || !globalClasses?.added_items || globalClasses?.added_items_order?.length === 0) {
3178 + loadCurrentDocumentClasses();
3179 + return;
3180 + }
3181 + dispatch(slice.actions.updateAfterTemplateImport({
3182 + addedItems: globalClasses.added_items,
3183 + addedIdsOrder: globalClasses.added_items_order,
3184 + addedClassLabels: createLabelsForClasses(Object.values(globalClasses.added_items))
3185 + }));
3186 + };
3187 + window.addEventListener(_elementor_editor_canvas.GLOBAL_STYLES_IMPORTED_EVENT, handleGlobalStylesImported);
3188 + return () => {
3189 + window.removeEventListener(_elementor_editor_canvas.GLOBAL_STYLES_IMPORTED_EVENT, handleGlobalStylesImported);
3190 + };
3191 + }, [dispatch]);
3192 + return null;
3193 + }
1551 3194
1552 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-introduction.tsx":
1553 -/*!******************************************************************************************************************!*\
1554 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-introduction.tsx ***!
1555 - \******************************************************************************************************************/
1556 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3195 +//#endregion
3196 +//#region packages/packages/core/editor-global-classes/src/components/populate-store.tsx
3197 + function PopulateStore() {
3198 + (0, react.useEffect)(() => {
3199 + loadCurrentDocumentClasses();
3200 + (0, _elementor_editor_v1_adapters.registerDataHook)("after", "editor/documents/attach-preview", async () => {
3201 + await loadCurrentDocumentClasses();
3202 + });
3203 + }, []);
3204 + return null;
3205 + }
1557 3206
1558 -__webpack_require__.r(__webpack_exports__);
1559 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1560 -/* harmony export */ ClassManagerIntroduction: function() { return /* binding */ ClassManagerIntroduction; }
1561 -/* harmony export */ });
1562 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
1563 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1564 -/* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-current-user */ "@elementor/editor-current-user");
1565 -/* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__);
1566 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui");
1567 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__);
1568 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
1569 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__);
1570 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
1571 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__);
3207 +//#endregion
3208 +//#region packages/packages/core/editor-global-classes/src/mcp-integration/manage-classes-tool.ts
3209 + var MCP_PROXY_URL = "elementor/v1/mcp-proxy";
3210 + var TOOL_NAME = "manage-classes";
3211 + var initManageClassesTool = (reg) => {
3212 + const { addTool } = reg;
3213 + addTool({
3214 + name: TOOL_NAME,
3215 + description: "Manage V4 global CSS classes on the active kit. Bulk create, update, or delete using raw CSS declarations (up to 50 operations). Duplicate labels are auto-renamed with a DUP_ prefix.",
3216 + schema: {
3217 + action: _elementor_schema.z.enum([
3218 + "create",
3219 + "update",
3220 + "delete"
3221 + ]),
3222 + id: _elementor_schema.z.string().optional().describe("Class id — required for update/delete. Get from the global-classes resource."),
3223 + label: _elementor_schema.z.string().optional().describe("Class label (lowercase, dash-separated) — required for create/update."),
3224 + css: _elementor_schema.z.string().optional().describe("Plain CSS string. Supports &:hover/&:focus/&:active nesting and @media(--breakpoint) blocks. font-family must be a single Google Font name (no fallback stacks). In patch mode: \"prop: null\" removes that prop; \"all: null\" wipes the variant."),
3225 + mode: _elementor_schema.z.enum(["patch", "replace"]).optional().describe("Merge strategy for update — patch (default): merge incoming props with existing; replace: discard all existing variants for the affected breakpoints.")
3226 + },
3227 + outputSchema: {
3228 + status: _elementor_schema.z.enum(["ok"]).describe("Operation status"),
3229 + id: _elementor_schema.z.string().optional().describe("ID of the affected class — use for subsequent update/delete calls."),
3230 + label: _elementor_schema.z.string().optional().describe("Final label of the class after any auto-rename.")
3231 + },
3232 + requiredResources: [{
3233 + uri: GLOBAL_CLASSES_URI,
3234 + description: "Current global classes — check before creating to avoid duplicates"
3235 + }],
3236 + isDestructive: true,
3237 + handler: async (params) => {
3238 + const { data } = await (0, _elementor_http_client.httpService)().post(MCP_PROXY_URL, {
3239 + tool: TOOL_NAME,
3240 + input: { operations: [params] }
3241 + });
3242 + const result = data.data.results?.[0];
3243 + const { create, update, delete: del } = globalClassesStylesProvider.actions;
3244 + switch (params.action) {
3245 + case "create":
3246 + if (result && create) create(result.label, result.variants, result.id);
3247 + break;
3248 + case "update":
3249 + if (result && update) update(result);
3250 + break;
3251 + case "delete":
3252 + if (params.id && del) del(params.id);
3253 + break;
3254 + }
3255 + (0, _elementor_store.__dispatch)(slice.actions.reset({ context: "frontend" }));
3256 + window.dispatchEvent(new CustomEvent("classes:updated", { detail: { context: "frontend" } }));
3257 + return {
3258 + status: "ok",
3259 + id: result?.id,
3260 + label: result?.label
3261 + };
3262 + }
3263 + });
3264 + };
1572 3265
1573 -
1574 -
1575 -
1576 -
1577 -
1578 -const MESSAGE_KEY = 'global-class-manager';
1579 -const ClassManagerIntroduction = () => {
1580 - const [isMessageSuppressed, suppressMessage] = (0,_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__.useSuppressedMessage)(MESSAGE_KEY);
1581 - const [shouldShowIntroduction, setShouldShowIntroduction] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(!isMessageSuppressed);
1582 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.IntroductionModal, {
1583 - open: shouldShowIntroduction,
1584 - title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Class Manager', 'elementor'),
1585 - handleClose: shouldShowAgain => {
1586 - if (!shouldShowAgain) {
1587 - suppressMessage();
1588 - }
1589 - setShouldShowIntroduction(false);
1590 - }
1591 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Image, {
1592 - sx: {
1593 - width: '100%',
1594 - aspectRatio: '16 / 9'
1595 - },
1596 - src: 'https://assets.elementor.com/packages/v1/images/class-manager-intro.svg',
1597 - alt: ''
1598 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(IntroductionContent, null));
1599 -};
1600 -const IntroductionContent = () => {
1601 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, {
1602 - p: 3
1603 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, {
1604 - variant: 'body2'
1605 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)("The Class Manager lets you see all the classes you've created, plus adjust their priority, rename them, and delete unused classes to keep your CSS structured.", 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("br", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, {
1606 - variant: 'body2'
1607 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Remember, when editing an item within a specific class, any changes you make will apply across all elements in that class.', 'elementor')));
1608 -};
1609 -
1610 -/***/ }),
1611 -
1612 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-panel.tsx":
1613 -/*!***********************************************************************************************************!*\
1614 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-panel.tsx ***!
1615 - \***********************************************************************************************************/
1616 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1617 -
1618 -__webpack_require__.r(__webpack_exports__);
1619 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1620 -/* harmony export */ ClassManagerPanelEmbedded: function() { return /* binding */ ClassManagerPanelEmbedded; }
1621 -/* harmony export */ });
1622 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
1623 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1624 -/* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-current-user */ "@elementor/editor-current-user");
1625 -/* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__);
1626 -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents");
1627 -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__);
1628 -/* harmony import */ var _elementor_editor_panels__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-panels */ "@elementor/editor-panels");
1629 -/* harmony import */ var _elementor_editor_panels__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_3__);
1630 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui");
1631 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__);
1632 -/* harmony import */ var _elementor_query__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/query */ "@elementor/query");
1633 -/* harmony import */ var _elementor_query__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_query__WEBPACK_IMPORTED_MODULE_5__);
1634 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
1635 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_6__);
1636 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
1637 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__);
1638 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
1639 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__);
1640 -/* harmony import */ var _hooks_use_classes_order__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../hooks/use-classes-order */ "./packages/packages/core/editor-global-classes/src/hooks/use-classes-order.ts");
1641 -/* harmony import */ var _hooks_use_dirty_state__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../hooks/use-dirty-state */ "./packages/packages/core/editor-global-classes/src/hooks/use-dirty-state.ts");
1642 -/* harmony import */ var _hooks_use_filters__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../hooks/use-filters */ "./packages/packages/core/editor-global-classes/src/hooks/use-filters.ts");
1643 -/* harmony import */ var _load_existing_classes__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../load-existing-classes */ "./packages/packages/core/editor-global-classes/src/load-existing-classes.ts");
1644 -/* harmony import */ var _save_global_classes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../save-global-classes */ "./packages/packages/core/editor-global-classes/src/save-global-classes.tsx");
1645 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../store */ "./packages/packages/core/editor-global-classes/src/store.ts");
1646 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
1647 -/* harmony import */ var _search_and_filter_components_filter_active_filters__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../search-and-filter/components/filter/active-filters */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/active-filters.tsx");
1648 -/* harmony import */ var _search_and_filter_components_filter_css_class_filter__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../search-and-filter/components/filter/css-class-filter */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/css-class-filter.tsx");
1649 -/* harmony import */ var _search_and_filter_components_search_class_manager_search__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../search-and-filter/components/search/class-manager-search */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/search/class-manager-search.tsx");
1650 -/* harmony import */ var _search_and_filter_context__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../search-and-filter/context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx");
1651 -/* harmony import */ var _class_manager_introduction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./class-manager-introduction */ "./packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-introduction.tsx");
1652 -/* harmony import */ var _delete_class__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./delete-class */ "./packages/packages/core/editor-global-classes/src/components/class-manager/delete-class.ts");
1653 -/* harmony import */ var _flipped_color_swatch_icon__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./flipped-color-swatch-icon */ "./packages/packages/core/editor-global-classes/src/components/class-manager/flipped-color-swatch-icon.tsx");
1654 -/* harmony import */ var _global_classes_list__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./global-classes-list */ "./packages/packages/core/editor-global-classes/src/components/class-manager/global-classes-list.tsx");
1655 -/* harmony import */ var _panel_interactions__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./panel-interactions */ "./packages/packages/core/editor-global-classes/src/components/class-manager/panel-interactions.ts");
1656 -/* harmony import */ var _start_sync_to_v3_modal__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./start-sync-to-v3-modal */ "./packages/packages/core/editor-global-classes/src/components/class-manager/start-sync-to-v3-modal.tsx");
1657 -
1658 -
1659 -
1660 -
1661 -
1662 -
1663 -
1664 -
1665 -
1666 -
1667 -
1668 -
1669 -
1670 -
1671 -
1672 -
1673 -
1674 -
1675 -
1676 -
1677 -
1678 -
1679 -
1680 -
1681 -
1682 -
1683 -
1684 -const STOP_SYNC_MESSAGE_KEY = 'stop-sync-class';
1685 -function ClassManagerPanelEmbedded({
1686 - onRequestClose,
1687 - onExposeCloseAttempt,
1688 - isActive
1689 -}) {
1690 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ClassManagerPanelContent, {
1691 - onRequestClose: onRequestClose,
1692 - onExposeCloseAttempt: onExposeCloseAttempt,
1693 - isActive: isActive
1694 - });
1695 -}
1696 -function ClassManagerPanelContent({
1697 - onRequestClose,
1698 - onExposeCloseAttempt,
1699 - isActive = true
1700 -}) {
1701 - const isDirty = (0,_hooks_use_dirty_state__WEBPACK_IMPORTED_MODULE_10__.useDirtyState)();
1702 - const {
1703 - open: openSaveChangesDialog,
1704 - close: closeSaveChangesDialog,
1705 - isOpen: isSaveChangesDialogOpen
1706 - } = (0,_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.useDialog)();
1707 - const [stopSyncConfirmation, setStopSyncConfirmation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
1708 - const [startSyncConfirmation, setStartSyncConfirmation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
1709 - const [isStopSyncSuppressed] = (0,_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__.useSuppressedMessage)(STOP_SYNC_MESSAGE_KEY);
1710 - const [scrollElement, setScrollElement] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
1711 - const {
1712 - mutateAsync: publish,
1713 - isPending: isPublishing
1714 - } = usePublish();
1715 - const resetAndClosePanel = () => {
1716 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_6__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_14__.slice.actions.resetToInitialState({
1717 - context: 'frontend'
1718 - }));
1719 - closeSaveChangesDialog();
1720 - };
1721 - const handleClosePanel = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
1722 - if (isDirty) {
1723 - openSaveChangesDialog();
1724 - return;
1725 - }
1726 - void onRequestClose();
1727 - }, [isDirty, openSaveChangesDialog, onRequestClose]);
1728 - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
1729 - if (!onExposeCloseAttempt) {
1730 - return;
1731 - }
1732 - onExposeCloseAttempt(() => handleClosePanel());
1733 - return () => onExposeCloseAttempt(null);
1734 - }, [onExposeCloseAttempt, handleClosePanel]);
1735 - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
1736 - (0,_panel_interactions__WEBPACK_IMPORTED_MODULE_24__.blockPanelInteractions)();
1737 - return () => {
1738 - (0,_panel_interactions__WEBPACK_IMPORTED_MODULE_24__.unblockPanelInteractions)();
1739 - };
1740 - }, []);
1741 - const handleStopSync = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async classId => {
1742 - await (0,_load_existing_classes__WEBPACK_IMPORTED_MODULE_12__.loadExistingClasses)([classId]);
1743 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_6__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_14__.slice.actions.update({
1744 - style: {
1745 - id: classId,
1746 - sync_to_v3: false
1747 - }
1748 - }));
1749 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_15__.trackGlobalClasses)({
1750 - event: 'classSyncToV3',
1751 - classId,
1752 - action: 'unsync'
1753 - });
1754 - setStopSyncConfirmation(null);
1755 - }, []);
1756 - const handleStartSync = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async classId => {
1757 - await (0,_load_existing_classes__WEBPACK_IMPORTED_MODULE_12__.loadExistingClasses)([classId]);
1758 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_6__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_14__.slice.actions.update({
1759 - style: {
1760 - id: classId,
1761 - sync_to_v3: true
1762 - }
1763 - }));
1764 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_15__.trackGlobalClasses)({
1765 - event: 'classSyncToV3',
1766 - classId,
1767 - action: 'sync'
1768 - });
1769 - setStartSyncConfirmation(null);
1770 - }, []);
1771 - const handleStopSyncRequest = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(classId => {
1772 - if (!isStopSyncSuppressed) {
1773 - setStopSyncConfirmation(classId);
1774 - } else {
1775 - handleStopSync(classId);
1776 - }
1777 - }, [isStopSyncSuppressed, handleStopSync]);
1778 - usePreventUnload();
1779 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.ErrorBoundary, {
1780 - fallback: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ErrorBoundaryFallback, null)
1781 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_search_and_filter_context__WEBPACK_IMPORTED_MODULE_19__.SearchAndFilterProvider, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Stack, {
1782 - direction: "column",
1783 - sx: {
1784 - height: '100%',
1785 - width: '100%',
1786 - flex: 1,
1787 - minHeight: 0,
1788 - overflow: 'hidden'
1789 - }
1790 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Box, {
1791 - px: 2,
1792 - pb: 1
1793 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Stack, {
1794 - direction: "row",
1795 - alignItems: "center",
1796 - justifyContent: "space-between",
1797 - gap: 0.5,
1798 - sx: {
1799 - pb: 0.5
1800 - }
1801 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Box, {
1802 - sx: {
1803 - flexGrow: 1,
1804 - minWidth: 0
1805 - }
1806 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_search_and_filter_components_search_class_manager_search__WEBPACK_IMPORTED_MODULE_18__.ClassManagerSearch, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_search_and_filter_components_filter_css_class_filter__WEBPACK_IMPORTED_MODULE_17__.CssClassFilter, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(TotalCssClassCounter, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_search_and_filter_components_filter_active_filters__WEBPACK_IMPORTED_MODULE_16__.ActiveFilters, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Divider, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Box, {
1807 - ref: setScrollElement,
1808 - px: 2,
1809 - sx: {
1810 - flexGrow: 1,
1811 - overflowY: 'auto',
1812 - minHeight: 0
1813 - }
1814 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_global_classes_list__WEBPACK_IMPORTED_MODULE_23__.GlobalClassesList, {
1815 - disabled: isPublishing,
1816 - scrollElement: scrollElement,
1817 - onStopSyncRequest: handleStopSyncRequest,
1818 - onStartSyncRequest: classId => setStartSyncConfirmation(classId)
1819 - })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_3__.PanelFooter, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Button, {
1820 - fullWidth: true,
1821 - size: "small",
1822 - color: "global",
1823 - variant: "contained",
1824 - onClick: publish,
1825 - disabled: !isDirty,
1826 - loading: isPublishing
1827 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Save changes', 'elementor')))))), isActive && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_class_manager_introduction__WEBPACK_IMPORTED_MODULE_20__.ClassManagerIntroduction, null), startSyncConfirmation && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_start_sync_to_v3_modal__WEBPACK_IMPORTED_MODULE_25__.StartSyncToV3Modal, {
1828 - externalOpen: true,
1829 - classId: startSyncConfirmation,
1830 - onExternalClose: () => setStartSyncConfirmation(null),
1831 - onConfirm: () => handleStartSync(startSyncConfirmation)
1832 - }), stopSyncConfirmation && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StopSyncConfirmationDialog, {
1833 - open: true,
1834 - onClose: () => setStopSyncConfirmation(null),
1835 - onConfirm: () => handleStopSync(stopSyncConfirmation)
1836 - }), isSaveChangesDialogOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.SaveChangesDialog, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.DialogHeader, {
1837 - onClose: closeSaveChangesDialog,
1838 - logo: false
1839 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.SaveChangesDialog.Title, null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('You have unsaved changes', 'elementor'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.SaveChangesDialog.Content, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.SaveChangesDialog.ContentText, null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('You have unsaved changes in the Class Manager.', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.SaveChangesDialog.ContentText, null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('To avoid losing your updates, save your changes before leaving.', 'elementor'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.SaveChangesDialog.Actions, {
1840 - actions: {
1841 - discard: {
1842 - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Discard', 'elementor'),
1843 - action: () => {
1844 - resetAndClosePanel();
1845 - }
1846 - },
1847 - confirm: {
1848 - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Save & Continue', 'elementor'),
1849 - action: async () => {
1850 - await publish();
1851 - closeSaveChangesDialog();
1852 - void onRequestClose();
1853 - }
1854 - }
1855 - }
1856 - })));
1857 -}
1858 -const ErrorBoundaryFallback = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Box, {
1859 - role: "alert",
1860 - sx: {
1861 - minHeight: '100%',
1862 - p: 2
1863 - }
1864 -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Alert, {
1865 - severity: "error",
1866 - sx: {
1867 - mb: 2,
1868 - maxWidth: 400,
1869 - textAlign: 'center'
1870 - }
1871 -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("strong", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Something went wrong', 'elementor'))));
1872 -const usePreventUnload = () => {
1873 - const isDirty = (0,_hooks_use_dirty_state__WEBPACK_IMPORTED_MODULE_10__.useDirtyState)();
1874 - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
1875 - const handleBeforeUnload = event => {
1876 - if (isDirty) {
1877 - event.preventDefault();
1878 - }
1879 - };
1880 - window.addEventListener('beforeunload', handleBeforeUnload);
1881 - return () => {
1882 - window.removeEventListener('beforeunload', handleBeforeUnload);
1883 - };
1884 - }, [isDirty]);
1885 -};
1886 -const usePublish = () => {
1887 - return (0,_elementor_query__WEBPACK_IMPORTED_MODULE_5__.useMutation)({
1888 - mutationFn: () => (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_13__.saveGlobalClasses)({
1889 - context: 'frontend'
1890 - }),
1891 - onSuccess: async () => {
1892 - (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.setDocumentModifiedStatus)(false);
1893 - if ((0,_delete_class__WEBPACK_IMPORTED_MODULE_21__.hasDeletedItems)()) {
1894 - await (0,_delete_class__WEBPACK_IMPORTED_MODULE_21__.onDelete)();
1895 - }
1896 - }
1897 - });
1898 -};
1899 -const TotalCssClassCounter = () => {
1900 - const filters = (0,_hooks_use_filters__WEBPACK_IMPORTED_MODULE_11__.useFilters)();
1901 - const cssClasses = (0,_hooks_use_classes_order__WEBPACK_IMPORTED_MODULE_9__.useClassesOrder)();
1902 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Chip, {
1903 - size: 'small',
1904 - label: filters ? `${filters.length} / ${cssClasses?.length}` : cssClasses?.length
1905 - });
1906 -};
1907 -const StopSyncConfirmationDialog = ({
1908 - open,
1909 - onClose,
1910 - onConfirm
1911 -}) => {
1912 - const [, suppressStopSyncMessage] = (0,_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__.useSuppressedMessage)(STOP_SYNC_MESSAGE_KEY);
1913 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.ConfirmationDialog, {
1914 - open: open,
1915 - onClose: onClose
1916 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.ConfirmationDialog.Title, {
1917 - icon: _flipped_color_swatch_icon__WEBPACK_IMPORTED_MODULE_22__.FlippedColorSwatchIcon,
1918 - iconColor: "primary"
1919 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Un-sync typography class', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.ConfirmationDialog.Content, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.ConfirmationDialog.ContentText, null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)("You're about to stop syncing a typography class to Global Fonts.", 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.ConfirmationDialog.ContentText, {
1920 - sx: {
1921 - mt: 1
1922 - }
1923 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)("Note that if it's being used anywhere, the affected elements will inherit the default typography.", 'elementor'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.ConfirmationDialog.Actions, {
1924 - onClose: onClose,
1925 - onConfirm: onConfirm,
1926 - cancelLabel: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Cancel', 'elementor'),
1927 - confirmLabel: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Got it', 'elementor'),
1928 - color: "primary",
1929 - onSuppressMessage: suppressStopSyncMessage,
1930 - suppressLabel: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)("Don't show again", 'elementor')
1931 - }));
1932 -};
1933 -
1934 -/***/ }),
1935 -
1936 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/delete-class.ts":
1937 -/*!***************************************************************************************************!*\
1938 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/delete-class.ts ***!
1939 - \***************************************************************************************************/
1940 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1941 -
1942 -__webpack_require__.r(__webpack_exports__);
1943 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1944 -/* harmony export */ deleteClass: function() { return /* binding */ deleteClass; },
1945 -/* harmony export */ hasDeletedItems: function() { return /* binding */ hasDeletedItems; },
1946 -/* harmony export */ onDelete: function() { return /* binding */ onDelete; }
1947 -/* harmony export */ });
1948 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
1949 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__);
1950 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../store */ "./packages/packages/core/editor-global-classes/src/store.ts");
1951 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
1952 -
1953 -
1954 -
1955 -let isDeleted = false;
1956 -const deleteClass = id => {
1957 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_2__.trackGlobalClasses)({
1958 - event: 'classDeleted',
1959 - classId: id,
1960 - runAction: () => {
1961 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_1__.slice.actions.delete(id));
1962 - isDeleted = true;
1963 - }
1964 - });
1965 -};
1966 -const onDelete = async () => {
1967 - isDeleted = false;
1968 -};
1969 -const hasDeletedItems = () => isDeleted;
1970 -
1971 -/***/ }),
1972 -
1973 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/delete-confirmation-dialog.tsx":
1974 -/*!******************************************************************************************************************!*\
1975 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/delete-confirmation-dialog.tsx ***!
1976 - \******************************************************************************************************************/
1977 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1978 -
1979 -__webpack_require__.r(__webpack_exports__);
1980 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1981 -/* harmony export */ DeleteConfirmationProvider: function() { return /* binding */ DeleteConfirmationProvider; },
1982 -/* harmony export */ useDeleteConfirmation: function() { return /* binding */ useDeleteConfirmation; }
1983 -/* harmony export */ });
1984 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
1985 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1986 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui");
1987 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__);
1988 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
1989 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__);
1990 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
1991 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
1992 -/* harmony import */ var _hooks_use_css_class_usage_by_id__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks/use-css-class-usage-by-id */ "./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage-by-id.ts");
1993 -/* harmony import */ var _delete_class__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./delete-class */ "./packages/packages/core/editor-global-classes/src/components/class-manager/delete-class.ts");
1994 -
1995 -
1996 -
1997 -
1998 -
1999 -
2000 -
2001 -const context = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null);
2002 -const DeleteConfirmationProvider = ({
2003 - children
2004 -}) => {
2005 - const [dialogProps, setDialogProps] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
2006 - const openDialog = props => {
2007 - setDialogProps(props);
2008 - };
2009 - const closeDialog = () => {
2010 - setDialogProps(null);
2011 - };
2012 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(context.Provider, {
2013 - value: {
2014 - openDialog,
2015 - closeDialog,
2016 - dialogProps
2017 - }
2018 - }, children, !!dialogProps && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DeleteClassDialog, dialogProps));
2019 -};
2020 -const DeleteClassDialog = ({
2021 - label,
2022 - id
2023 -}) => {
2024 - const {
2025 - closeDialog
2026 - } = useDeleteConfirmation();
2027 - const {
2028 - data: {
2029 - total,
2030 - content
2031 - }
2032 - } = (0,_hooks_use_css_class_usage_by_id__WEBPACK_IMPORTED_MODULE_4__.useCssClassUsageByID)(id);
2033 - const handleConfirm = () => {
2034 - closeDialog();
2035 - (0,_delete_class__WEBPACK_IMPORTED_MODULE_5__.deleteClass)(id);
2036 - };
2037 -
2038 - // translators: %1: total usage count, %2: number of pages
2039 - const text = total && content.length ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Will permanently remove it from your project and may affect the design across all elements using it. Used %1 times across %2 pages. This action cannot be undone.', 'elementor').replace('%1', total.toString()).replace('%2', content.length.toString()) : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Will permanently remove it from your project and may affect the design across all elements using it. This action cannot be undone.', 'elementor');
2040 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog, {
2041 - open: true,
2042 - onClose: closeDialog
2043 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog.Title, null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Delete this class?', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog.Content, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog.ContentText, null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Deleting', 'elementor'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, {
2044 - variant: "subtitle2",
2045 - component: "span"
2046 - }, "\xA0", label, "\xA0"), text)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog.Actions, {
2047 - onClose: closeDialog,
2048 - onConfirm: handleConfirm
2049 - }));
2050 -};
2051 -const useDeleteConfirmation = () => {
2052 - const contextValue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(context);
2053 - if (!contextValue) {
2054 - throw new Error('useDeleteConfirmation must be used within a DeleteConfirmationProvider');
2055 - }
2056 - return contextValue;
2057 -};
2058 -
2059 -/***/ }),
2060 -
2061 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/duplicate-label-dialog.tsx":
2062 -/*!**************************************************************************************************************!*\
2063 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/duplicate-label-dialog.tsx ***!
2064 - \**************************************************************************************************************/
2065 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2066 -
2067 -__webpack_require__.r(__webpack_exports__);
2068 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2069 -/* harmony export */ DuplicateLabelDialog: function() { return /* binding */ DuplicateLabelDialog; }
2070 -/* harmony export */ });
2071 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
2072 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2073 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui");
2074 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__);
2075 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
2076 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__);
2077 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
2078 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__);
2079 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
2080 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__);
2081 -
2082 -
2083 -
2084 -
2085 -
2086 -const DUP_PREFIX = 'DUP_';
2087 -const DuplicateLabelDialog = ({
2088 - modifiedLabels,
2089 - onApprove
2090 -}) => {
2091 - const handleButtonClick = () => {
2092 - localStorage.setItem('elementor-global-classes-search', DUP_PREFIX);
2093 - onApprove?.();
2094 - (0,_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.closeDialog)();
2095 - };
2096 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.DialogHeader, {
2097 - logo: false
2098 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, {
2099 - display: "flex",
2100 - alignItems: "center",
2101 - gap: 1
2102 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Icon, {
2103 - color: "secondary"
2104 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.InfoCircleFilledIcon, {
2105 - fontSize: "medium"
2106 - })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, {
2107 - variant: "subtitle1"
2108 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)("We've published your page and updated class names.", 'elementor')))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.DialogContent, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Stack, {
2109 - spacing: 2,
2110 - direction: "column"
2111 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, {
2112 - variant: "body2"
2113 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Some new classes used the same names as existing ones. To prevent conflicts, we added the prefix', 'elementor'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("strong", null, " ", DUP_PREFIX)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, {
2114 - sx: {
2115 - width: '100%',
2116 - display: 'flex',
2117 - gap: 2,
2118 - alignItems: 'flex-start'
2119 - }
2120 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, {
2121 - variant: "subtitle2",
2122 - sx: {
2123 - fontWeight: 'bold',
2124 - flex: 1,
2125 - flexShrink: 1,
2126 - flexGrow: 1,
2127 - minWidth: 0
2128 - }
2129 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Before', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, {
2130 - variant: "subtitle2",
2131 - sx: {
2132 - minWidth: '200px',
2133 - fontWeight: 'bold',
2134 - flexShrink: 0,
2135 - flexGrow: 0,
2136 - width: '200px',
2137 - maxWidth: '200px'
2138 - }
2139 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('After', 'elementor'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Divider, {
2140 - sx: {
2141 - mt: 0.5,
2142 - mb: 0.5
2143 - }
2144 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Stack, {
2145 - direction: "column",
2146 - gap: 0.5,
2147 - sx: {
2148 - pb: 2
2149 - }
2150 - }, Object.values(modifiedLabels).map(({
2151 - original,
2152 - modified
2153 - }, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, {
2154 - key: index,
2155 - sx: {
2156 - width: '100%',
2157 - display: 'flex',
2158 - gap: 2,
2159 - alignItems: 'flex-start'
2160 - }
2161 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, {
2162 - sx: {
2163 - flex: 1,
2164 - flexShrink: 1,
2165 - flexGrow: 1,
2166 - minWidth: 0
2167 - }
2168 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.EllipsisWithTooltip, {
2169 - title: original
2170 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, {
2171 - variant: "body2",
2172 - sx: {
2173 - color: 'text.secondary'
2174 - }
2175 - }, original))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, {
2176 - sx: {
2177 - minWidth: '200px',
2178 - flexShrink: 0,
2179 - flexGrow: 0,
2180 - width: '200px',
2181 - maxWidth: '200px'
2182 - }
2183 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.EllipsisWithTooltip, {
2184 - title: modified
2185 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, {
2186 - variant: "body2",
2187 - sx: {
2188 - color: 'text.primary'
2189 - }
2190 - }, modified)))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Alert, {
2191 - severity: "info",
2192 - size: "small",
2193 - color: "secondary"
2194 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("strong", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Your designs and classes are safe.', 'elementor')), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Only the prefixes were added. Find them in Class Manager by searching', 'elementor'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("strong", null, DUP_PREFIX)))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.DialogActions, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Button, {
2195 - color: "secondary",
2196 - variant: "text",
2197 - onClick: handleButtonClick
2198 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Go to Class Manager', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Button, {
2199 - color: "secondary",
2200 - variant: "contained",
2201 - onClick: _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.closeDialog
2202 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Done', 'elementor'))));
2203 -};
2204 -
2205 -/***/ }),
2206 -
2207 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/flipped-color-swatch-icon.tsx":
2208 -/*!*****************************************************************************************************************!*\
2209 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/flipped-color-swatch-icon.tsx ***!
2210 - \*****************************************************************************************************************/
2211 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2212 -
2213 -__webpack_require__.r(__webpack_exports__);
2214 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2215 -/* harmony export */ FlippedColorSwatchIcon: function() { return /* binding */ FlippedColorSwatchIcon; }
2216 -/* harmony export */ });
2217 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
2218 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2219 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
2220 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__);
2221 -function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2222 -
2223 -
2224 -const FlippedColorSwatchIcon = ({
2225 - sx,
2226 - ...props
2227 -}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.ColorSwatchIcon, _extends({
2228 - sx: {
2229 - transform: 'rotate(90deg)',
2230 - ...sx
2231 - }
2232 -}, props));
2233 -
2234 -/***/ }),
2235 -
2236 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/global-classes-list.tsx":
2237 -/*!***********************************************************************************************************!*\
2238 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/global-classes-list.tsx ***!
2239 - \***********************************************************************************************************/
2240 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2241 -
2242 -__webpack_require__.r(__webpack_exports__);
2243 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2244 -/* harmony export */ GlobalClassesList: function() { return /* binding */ GlobalClassesList; }
2245 -/* harmony export */ });
2246 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
2247 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2248 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
2249 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_1__);
2250 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
2251 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__);
2252 -/* harmony import */ var _tanstack_react_virtual__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @tanstack/react-virtual */ "./packages/node_modules/@tanstack/react-virtual/dist/esm/index.js");
2253 -/* harmony import */ var _tanstack_react_virtual__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @tanstack/react-virtual */ "./packages/node_modules/@tanstack/virtual-core/dist/esm/index.js");
2254 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
2255 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__);
2256 -/* harmony import */ var _hooks_use_classes_order__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../hooks/use-classes-order */ "./packages/packages/core/editor-global-classes/src/hooks/use-classes-order.ts");
2257 -/* harmony import */ var _hooks_use_filters__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks/use-filters */ "./packages/packages/core/editor-global-classes/src/hooks/use-filters.ts");
2258 -/* harmony import */ var _hooks_use_ordered_classes__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../hooks/use-ordered-classes */ "./packages/packages/core/editor-global-classes/src/hooks/use-ordered-classes.ts");
2259 -/* harmony import */ var _load_existing_classes__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../load-existing-classes */ "./packages/packages/core/editor-global-classes/src/load-existing-classes.ts");
2260 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store */ "./packages/packages/core/editor-global-classes/src/store.ts");
2261 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
2262 -/* harmony import */ var _search_and_filter_context__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../search-and-filter/context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx");
2263 -/* harmony import */ var _class_item__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./class-item */ "./packages/packages/core/editor-global-classes/src/components/class-manager/class-item.tsx");
2264 -/* harmony import */ var _delete_confirmation_dialog__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./delete-confirmation-dialog */ "./packages/packages/core/editor-global-classes/src/components/class-manager/delete-confirmation-dialog.tsx");
2265 -/* harmony import */ var _flipped_color_swatch_icon__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./flipped-color-swatch-icon */ "./packages/packages/core/editor-global-classes/src/components/class-manager/flipped-color-swatch-icon.tsx");
2266 -/* harmony import */ var _not_found__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./not-found */ "./packages/packages/core/editor-global-classes/src/components/class-manager/not-found.tsx");
2267 -/* harmony import */ var _sortable__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./sortable */ "./packages/packages/core/editor-global-classes/src/components/class-manager/sortable.tsx");
2268 -
2269 -
2270 -
2271 -
2272 -
2273 -
2274 -
2275 -
2276 -
2277 -
2278 -
2279 -
2280 -
2281 -
2282 -
2283 -
2284 -
2285 -
2286 -const ROW_HEIGHT = 40;
2287 -const OVERSCAN = 6;
2288 -const GlobalClassesList = ({
2289 - disabled,
2290 - scrollElement,
2291 - onStopSyncRequest,
2292 - onStartSyncRequest
2293 -}) => {
2294 - const {
2295 - search: {
2296 - debouncedValue: searchValue
2297 - }
2298 - } = (0,_search_and_filter_context__WEBPACK_IMPORTED_MODULE_12__.useSearchAndFilters)();
2299 - const cssClasses = (0,_hooks_use_ordered_classes__WEBPACK_IMPORTED_MODULE_8__.useOrderedClasses)();
2300 - const dispatch = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__useDispatch)();
2301 - const filters = (0,_hooks_use_filters__WEBPACK_IMPORTED_MODULE_7__.useFilters)();
2302 - const [draggedItemId, setDraggedItemId] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
2303 - const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});
2304 - const addLoadingClass = classId => setLoading(prev => ({
2305 - ...prev,
2306 - [classId]: true
2307 - }));
2308 - const removeLoadingClass = classId => setLoading(prev => {
2309 - const {
2310 - [classId]: _,
2311 - ...rest
2312 - } = prev;
2313 - return rest;
2314 - });
2315 - const draggedItemLabel = cssClasses.find(cssClass => cssClass.id === draggedItemId)?.label ?? '';
2316 - const [classesOrder, reorderClasses] = useReorder(draggedItemId, setDraggedItemId, draggedItemLabel ?? '');
2317 - const filteredCssClasses = useFilteredCssClasses();
2318 - const virtualizer = (0,_tanstack_react_virtual__WEBPACK_IMPORTED_MODULE_3__.useVirtualizer)({
2319 - count: filteredCssClasses.length,
2320 - getScrollElement: () => scrollElement ?? null,
2321 - estimateSize: () => ROW_HEIGHT,
2322 - overscan: OVERSCAN,
2323 - getItemKey: index => filteredCssClasses[index].id,
2324 - // Keep the actively dragged row mounted even when scrolled out of view.
2325 - // SortableItem unregisters its render on unmount, which would make the
2326 - // DragOverlay clone disappear mid-drag.
2327 - rangeExtractor: range => {
2328 - const indices = new Set((0,_tanstack_react_virtual__WEBPACK_IMPORTED_MODULE_4__.defaultRangeExtractor)(range));
2329 - if (draggedItemId) {
2330 - const draggedItemIndex = filteredCssClasses.findIndex(cssClass => cssClass.id === draggedItemId);
2331 - if (draggedItemIndex >= 0) {
2332 - indices.add(draggedItemIndex);
2333 - }
2334 - }
2335 - return [...indices].sort((a, b) => a - b);
2336 - }
2337 - });
2338 - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
2339 - const handler = event => {
2340 - if (event.key === 'z' && (event.ctrlKey || event.metaKey)) {
2341 - event.stopImmediatePropagation();
2342 - event.preventDefault();
2343 - if (event.shiftKey) {
2344 - dispatch(_store__WEBPACK_IMPORTED_MODULE_10__.slice.actions.redo());
2345 - return;
2346 - }
2347 - dispatch(_store__WEBPACK_IMPORTED_MODULE_10__.slice.actions.undo());
2348 - }
2349 - };
2350 - window.addEventListener('keydown', handler, {
2351 - capture: true
2352 - });
2353 - return () => window.removeEventListener('keydown', handler);
2354 - }, [dispatch]);
2355 - if (!cssClasses?.length) {
2356 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(EmptyState, null);
2357 - }
2358 - const notFoundType = (0,_not_found__WEBPACK_IMPORTED_MODULE_16__.getNotFoundType)(searchValue, filters, filteredCssClasses);
2359 - if (notFoundType) {
2360 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_not_found__WEBPACK_IMPORTED_MODULE_16__.NotFound, {
2361 - notFoundType: notFoundType
2362 - });
2363 - }
2364 - const isFiltersApplied = filters?.length || searchValue;
2365 - const allowSorting = filteredCssClasses.length > 1 && !isFiltersApplied;
2366 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_delete_confirmation_dialog__WEBPACK_IMPORTED_MODULE_14__.DeleteConfirmationProvider, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.List, {
2367 - sx: {
2368 - position: 'relative',
2369 - display: 'block',
2370 - height: virtualizer.getTotalSize(),
2371 - padding: 0
2372 - }
2373 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_17__.SortableProvider, {
2374 - value: classesOrder,
2375 - onChange: reorderClasses,
2376 - onDragStart: event => setDraggedItemId(event.active.id),
2377 - onDragEnd: () => setDraggedItemId(null),
2378 - onDragCancel: () => setDraggedItemId(null),
2379 - disableDragOverlay: !allowSorting
2380 - }, virtualizer.getVirtualItems().map(virtualRow => {
2381 - const cssClass = filteredCssClasses[virtualRow.index];
2382 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_17__.SortableItem, {
2383 - key: virtualRow.key,
2384 - id: cssClass.id,
2385 - style: {
2386 - position: 'absolute',
2387 - top: virtualRow.start,
2388 - left: 0,
2389 - width: '100%'
2390 - }
2391 - }, ({
2392 - isDragged,
2393 - isDragPlaceholder,
2394 - triggerProps,
2395 - triggerStyle
2396 - }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_class_item__WEBPACK_IMPORTED_MODULE_13__.ClassItem, {
2397 - id: cssClass.id,
2398 - label: cssClass.label,
2399 - renameClass: async newLabel => {
2400 - addLoadingClass(cssClass.id);
2401 - try {
2402 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_11__.trackGlobalClasses)({
2403 - event: 'classRenamed',
2404 - classId: cssClass.id,
2405 - oldValue: cssClass.label,
2406 - newValue: newLabel,
2407 - source: 'class-manager'
2408 - });
2409 - void (await (0,_load_existing_classes__WEBPACK_IMPORTED_MODULE_9__.loadExistingClasses)([cssClass.id]));
2410 - dispatch(_store__WEBPACK_IMPORTED_MODULE_10__.slice.actions.update({
2411 - style: {
2412 - id: cssClass.id,
2413 - label: newLabel
2414 - }
2415 - }));
2416 - } finally {
2417 - removeLoadingClass(cssClass.id);
2418 - }
2419 - },
2420 - selected: isDragged,
2421 - disabled: disabled || isDragPlaceholder || loading[cssClass.id],
2422 - sortableTriggerProps: {
2423 - ...triggerProps,
2424 - style: triggerStyle
2425 - },
2426 - showSortIndicator: allowSorting,
2427 - syncToV3: cssClass.sync_to_v3,
2428 - onToggleSync: (id, newValue) => {
2429 - if (!newValue && onStopSyncRequest) {
2430 - onStopSyncRequest(id);
2431 - } else if (newValue && onStartSyncRequest) {
2432 - onStartSyncRequest(id);
2433 - } else {
2434 - dispatch(_store__WEBPACK_IMPORTED_MODULE_10__.slice.actions.update({
2435 - style: {
2436 - id,
2437 - sync_to_v3: newValue
2438 - }
2439 - }));
2440 - }
2441 - }
2442 - }));
2443 - }))));
2444 -};
2445 -const EmptyState = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Stack, {
2446 - alignItems: "center",
2447 - gap: 1.5,
2448 - pt: 10,
2449 - px: 0.5,
2450 - maxWidth: "260px",
2451 - margin: "auto"
2452 -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_flipped_color_swatch_icon__WEBPACK_IMPORTED_MODULE_15__.FlippedColorSwatchIcon, {
2453 - fontSize: "large"
2454 -}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StyledHeader, {
2455 - variant: "subtitle2",
2456 - component: "h2",
2457 - color: "text.secondary"
2458 -}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('There are no global classes yet.', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, {
2459 - align: "center",
2460 - variant: "caption",
2461 - color: "text.secondary"
2462 -}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('CSS classes created in the editor panel will appear here. Once they are available, you can arrange their hierarchy, rename them, or delete them as needed.', 'elementor')));
2463 -
2464 -// Override panel reset styles.
2465 -const StyledHeader = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.styled)(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography)(({
2466 - theme,
2467 - variant
2468 -}) => ({
2469 - '&.MuiTypography-root': {
2470 - ...theme.typography[variant]
2471 - }
2472 -}));
2473 -const useReorder = (draggedItemId, setDraggedItemId, draggedItemLabel) => {
2474 - const dispatch = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__useDispatch)();
2475 - const order = (0,_hooks_use_classes_order__WEBPACK_IMPORTED_MODULE_6__.useClassesOrder)();
2476 - const reorder = newIds => {
2477 - dispatch(_store__WEBPACK_IMPORTED_MODULE_10__.slice.actions.setOrder(newIds));
2478 - if (draggedItemId) {
2479 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_11__.trackGlobalClasses)({
2480 - event: 'classManagerReorder',
2481 - classId: draggedItemId,
2482 - classTitle: draggedItemLabel
2483 - });
2484 - setDraggedItemId(null);
2485 - }
2486 - };
2487 - return [order, reorder];
2488 -};
2489 -const useFilteredCssClasses = () => {
2490 - const cssClasses = (0,_hooks_use_ordered_classes__WEBPACK_IMPORTED_MODULE_8__.useOrderedClasses)();
2491 - const {
2492 - search: {
2493 - debouncedValue: searchValue
2494 - }
2495 - } = (0,_search_and_filter_context__WEBPACK_IMPORTED_MODULE_12__.useSearchAndFilters)();
2496 - const filters = (0,_hooks_use_filters__WEBPACK_IMPORTED_MODULE_7__.useFilters)();
2497 - const lowercaseLabels = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => cssClasses.map(cssClass => ({
2498 - ...cssClass,
2499 - lowerLabel: cssClass.label.toLowerCase()
2500 - })), [cssClasses]);
2501 - const filteredClasses = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
2502 - const normalizedSearch = searchValue.replace(/[^a-zA-Z0-9_-]/g, '').toLowerCase();
2503 - if (normalizedSearch.length > 1) {
2504 - return lowercaseLabels.filter(cssClass => cssClass.lowerLabel.includes(normalizedSearch));
2505 - }
2506 - return cssClasses;
2507 - }, [searchValue, cssClasses, lowercaseLabels]);
2508 - return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
2509 - if (filters && filters.length > 0) {
2510 - return filteredClasses.filter(cssClass => filters.includes(cssClass.id));
2511 - }
2512 - return filteredClasses;
2513 - }, [filteredClasses, filters]);
2514 -};
2515 -
2516 -/***/ }),
2517 -
2518 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/not-found.tsx":
2519 -/*!*************************************************************************************************!*\
2520 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/not-found.tsx ***!
2521 - \*************************************************************************************************/
2522 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2523 -
2524 -__webpack_require__.r(__webpack_exports__);
2525 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2526 -/* harmony export */ NotFound: function() { return /* binding */ NotFound; },
2527 -/* harmony export */ NotFoundLayout: function() { return /* binding */ NotFoundLayout; },
2528 -/* harmony export */ getNotFoundType: function() { return /* binding */ getNotFoundType; }
2529 -/* harmony export */ });
2530 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
2531 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2532 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
2533 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__);
2534 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
2535 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__);
2536 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
2537 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
2538 -/* harmony import */ var _search_and_filter_context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../search-and-filter/context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx");
2539 -function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2540 -
2541 -
2542 -
2543 -
2544 -
2545 -const getNotFoundType = (searchValue, filters, filteredClasses) => {
2546 - const searchNotFound = filteredClasses.length <= 0 && searchValue.length > 1;
2547 - const filterNotFound = filters && filters.length === 0;
2548 - const filterAndSearchNotFound = searchNotFound && filterNotFound;
2549 - if (filterAndSearchNotFound) {
2550 - return 'filterAndSearch';
2551 - }
2552 - if (searchNotFound) {
2553 - return 'search';
2554 - }
2555 - if (filterNotFound) {
2556 - return 'filter';
2557 - }
2558 - return undefined;
2559 -};
2560 -const notFound = {
2561 - filterAndSearch: {
2562 - mainText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Sorry, nothing matched.', 'elementor'),
2563 - sceneryText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Try something else.', 'elementor'),
2564 - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.PhotoIcon, {
2565 - color: "inherit",
2566 - fontSize: "large"
2567 - })
2568 - },
2569 - search: {
2570 - mainText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Sorry, nothing matched', 'elementor'),
2571 - sceneryText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Clear your input and try something else.', 'elementor'),
2572 - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.PhotoIcon, {
2573 - color: "inherit",
2574 - fontSize: "large"
2575 - })
2576 - },
2577 - filter: {
2578 - mainText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Sorry, nothing matched that search.', 'elementor'),
2579 - sceneryText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Clear the filters and try something else.', 'elementor'),
2580 - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.ColorSwatchIcon, {
2581 - color: "inherit",
2582 - fontSize: "large"
2583 - })
2584 - }
2585 -};
2586 -const NotFound = ({
2587 - notFoundType
2588 -}) => {
2589 - const {
2590 - search: {
2591 - onClearSearch,
2592 - inputValue
2593 - },
2594 - filters: {
2595 - onClearFilter
2596 - }
2597 - } = (0,_search_and_filter_context__WEBPACK_IMPORTED_MODULE_4__.useSearchAndFilters)();
2598 - switch (notFoundType) {
2599 - case 'filter':
2600 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(NotFoundLayout, _extends({}, notFound.filter, {
2601 - onClear: onClearFilter
2602 - }));
2603 - case 'search':
2604 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(NotFoundLayout, _extends({}, notFound.search, {
2605 - searchValue: inputValue,
2606 - onClear: onClearSearch
2607 - }));
2608 - case 'filterAndSearch':
2609 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(NotFoundLayout, _extends({}, notFound.filterAndSearch, {
2610 - onClear: () => {
2611 - onClearFilter();
2612 - onClearSearch();
2613 - }
2614 - }));
2615 - }
2616 -};
2617 -const NotFoundLayout = ({
2618 - onClear,
2619 - searchValue,
2620 - mainText,
2621 - sceneryText,
2622 - icon
2623 -}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Stack, {
2624 - color: 'text.secondary',
2625 - pt: 5,
2626 - alignItems: "center",
2627 - gap: 1,
2628 - overflow: 'hidden',
2629 - justifySelf: 'center'
2630 -}, icon, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, {
2631 - sx: {
2632 - width: '100%'
2633 - }
2634 -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, {
2635 - align: "center",
2636 - variant: "subtitle2",
2637 - color: "inherit"
2638 -}, mainText), searchValue && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, {
2639 - variant: "subtitle2",
2640 - color: "inherit",
2641 - sx: {
2642 - display: 'flex',
2643 - width: '100%',
2644 - justifyContent: 'center'
2645 - }
2646 -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", null, "\u201C"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", {
2647 - style: {
2648 - maxWidth: '80%',
2649 - overflow: 'hidden',
2650 - textOverflow: 'ellipsis'
2651 - }
2652 -}, searchValue), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", null, "\u201D."))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, {
2653 - align: "center",
2654 - variant: "caption",
2655 - color: "inherit"
2656 -}, sceneryText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, {
2657 - align: "center",
2658 - variant: "caption",
2659 - color: "inherit"
2660 -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Link, {
2661 - color: "secondary",
2662 - variant: "caption",
2663 - component: "button",
2664 - onClick: onClear
2665 -}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Clear & try again', 'elementor'))));
2666 -
2667 -/***/ }),
2668 -
2669 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/panel-interactions.ts":
2670 -/*!*********************************************************************************************************!*\
2671 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/panel-interactions.ts ***!
2672 - \*********************************************************************************************************/
2673 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2674 -
2675 -__webpack_require__.r(__webpack_exports__);
2676 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2677 -/* harmony export */ blockPanelInteractions: function() { return /* binding */ blockPanelInteractions; },
2678 -/* harmony export */ unblockPanelInteractions: function() { return /* binding */ unblockPanelInteractions; }
2679 -/* harmony export */ });
2680 -function blockPanelInteractions() {
2681 - const extendedWindow = window;
2682 - extendedWindow.$e?.components?.get?.('panel')?.blockUserInteractions?.();
2683 -}
2684 -function unblockPanelInteractions() {
2685 - const extendedWindow = window;
2686 - extendedWindow.$e?.components?.get?.('panel')?.unblockUserInteractions?.();
2687 -}
2688 -
2689 -/***/ }),
2690 -
2691 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/sortable.tsx":
2692 -/*!************************************************************************************************!*\
2693 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/sortable.tsx ***!
2694 - \************************************************************************************************/
2695 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2696 -
2697 -__webpack_require__.r(__webpack_exports__);
2698 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2699 -/* harmony export */ SortableItem: function() { return /* binding */ SortableItem; },
2700 -/* harmony export */ SortableProvider: function() { return /* binding */ SortableProvider; },
2701 -/* harmony export */ SortableTrigger: function() { return /* binding */ SortableTrigger; }
2702 -/* harmony export */ });
2703 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
2704 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2705 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
2706 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__);
2707 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
2708 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__);
2709 -function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2710 -
2711 -
2712 -
2713 -const SortableProvider = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.UnstableSortableProvider, _extends({
2714 - restrictAxis: true,
2715 - variant: "static",
2716 - dragPlaceholderStyle: {
2717 - visibility: 'hidden'
2718 - }
2719 -}, props));
2720 -const SortableTrigger = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StyledSortableTrigger, _extends({}, props, {
2721 - role: "button",
2722 - className: "class-item-sortable-trigger",
2723 - "aria-label": "sort"
2724 -}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.GripVerticalIcon, {
2725 - fontSize: "tiny"
2726 -}));
2727 -const SortableItem = ({
2728 - children,
2729 - id,
2730 - style,
2731 - ...props
2732 -}) => {
2733 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.UnstableSortableItem, _extends({}, props, {
2734 - id: id,
2735 - render: ({
2736 - itemProps,
2737 - isDragged,
2738 - triggerProps,
2739 - itemStyle,
2740 - triggerStyle,
2741 - dropIndicationStyle,
2742 - showDropIndication,
2743 - isDragOverlay,
2744 - isDragPlaceholder
2745 - }) => {
2746 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, _extends({}, itemProps, {
2747 - style: {
2748 - ...itemStyle,
2749 - ...(!isDragOverlay ? style : null)
2750 - },
2751 - component: 'li',
2752 - role: "listitem",
2753 - sx: {
2754 - backgroundColor: isDragOverlay ? 'background.paper' : undefined
2755 - }
2756 - }), children({
2757 - itemProps,
2758 - isDragged,
2759 - triggerProps,
2760 - itemStyle,
2761 - triggerStyle,
2762 - isDragPlaceholder
2763 - }), showDropIndication && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(SortableItemIndicator, {
2764 - style: dropIndicationStyle
2765 - }));
2766 - }
2767 - }));
2768 -};
2769 -const StyledSortableTrigger = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.styled)('div')(({
2770 - theme
2771 -}) => ({
2772 - position: 'absolute',
2773 - left: 0,
2774 - top: '50%',
2775 - transform: `translate( -${theme.spacing(1.5)}, -50% )`,
2776 - color: theme.palette.action.active
2777 -}));
2778 -const SortableItemIndicator = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.styled)((0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box))`
2779 - width: 100%;
2780 - height: 1px;
2781 - background-color: ${({
2782 - theme
2783 -}) => theme.palette.text.primary};
2784 -`;
2785 -
2786 -/***/ }),
2787 -
2788 -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/start-sync-to-v3-modal.tsx":
2789 -/*!**************************************************************************************************************!*\
2790 - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/start-sync-to-v3-modal.tsx ***!
2791 - \**************************************************************************************************************/
2792 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2793 -
2794 -__webpack_require__.r(__webpack_exports__);
2795 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2796 -/* harmony export */ StartSyncToV3Modal: function() { return /* binding */ StartSyncToV3Modal; }
2797 -/* harmony export */ });
2798 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
2799 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2800 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
2801 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__);
2802 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
2803 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
2804 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
2805 -
2806 -
2807 -
2808 -
2809 -
2810 -const IMAGE_URL = 'https://assets.elementor.com/packages/v1/images/class-manager-sync-modal.png';
2811 -const StartSyncToV3Modal = ({
2812 - externalOpen,
2813 - classId,
2814 - onExternalClose,
2815 - onConfirm
2816 -} = {}) => {
2817 - const [shouldShowAgain, setShouldShowAgain] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);
2818 - const hasTrackedExposure = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);
2819 - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
2820 - if (externalOpen && classId && !hasTrackedExposure.current) {
2821 - hasTrackedExposure.current = true;
2822 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_3__.trackGlobalClasses)({
2823 - event: 'classSyncToV3PopupShown',
2824 - classId
2825 - });
2826 - }
2827 - if (!externalOpen) {
2828 - hasTrackedExposure.current = false;
2829 - }
2830 - }, [externalOpen, classId]);
2831 - const handleClose = () => {
2832 - if (classId) {
2833 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_3__.trackGlobalClasses)({
2834 - event: 'classSyncToV3PopupClick',
2835 - classId,
2836 - action: 'cancel'
2837 - });
2838 - }
2839 - onExternalClose?.();
2840 - };
2841 - const handleConfirm = () => {
2842 - if (classId) {
2843 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_3__.trackGlobalClasses)({
2844 - event: 'classSyncToV3PopupClick',
2845 - classId,
2846 - action: 'sync'
2847 - });
2848 - }
2849 - onConfirm?.();
2850 - onExternalClose?.();
2851 - };
2852 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Dialog, {
2853 - open: !!externalOpen,
2854 - onClose: handleClose,
2855 - maxWidth: "sm",
2856 - fullWidth: true
2857 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.DialogContent, {
2858 - sx: {
2859 - p: 0
2860 - }
2861 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Box, {
2862 - component: "img",
2863 - src: IMAGE_URL,
2864 - alt: "",
2865 - sx: {
2866 - width: '100%',
2867 - display: 'block'
2868 - }
2869 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Box, {
2870 - sx: {
2871 - px: 3,
2872 - pt: 4,
2873 - pb: 1
2874 - }
2875 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Typography, {
2876 - variant: "h6"
2877 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Sync class to Global Fonts', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Typography, {
2878 - variant: "body2",
2879 - color: "secondary",
2880 - sx: {
2881 - mb: 2,
2882 - pt: 1
2883 - }
2884 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Only typography settings supported in Global Fonts will be applied, including: font family, responsive font sizes, weight, text transform, decoration, line height, letter spacing, and word spacing. Changes made in the class will automatically apply to Global Fonts.', 'elementor')))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.DialogActions, {
2885 - sx: {
2886 - justifyContent: 'space-between',
2887 - px: 3,
2888 - pb: 2
2889 - }
2890 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.FormControlLabel, {
2891 - control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Checkbox, {
2892 - checked: !shouldShowAgain,
2893 - onChange: e => setShouldShowAgain(!e.target.checked)
2894 - }),
2895 - label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Typography, {
2896 - variant: "body2",
2897 - color: "secondary"
2898 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Don't show again", 'elementor'))
2899 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Box, {
2900 - sx: {
2901 - display: 'flex',
2902 - gap: 1
2903 - }
2904 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Button, {
2905 - onClick: handleClose,
2906 - color: "secondary",
2907 - size: "small"
2908 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Cancel', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Button, {
2909 - onClick: handleConfirm,
2910 - variant: "contained",
2911 - size: "small"
2912 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Sync to Global Fonts', 'elementor')))));
2913 -};
2914 -
2915 -/***/ }),
2916 -
2917 -/***/ "./packages/packages/core/editor-global-classes/src/components/convert-local-class-to-global-class.tsx":
2918 -/*!*************************************************************************************************************!*\
2919 - !*** ./packages/packages/core/editor-global-classes/src/components/convert-local-class-to-global-class.tsx ***!
2920 - \*************************************************************************************************************/
2921 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2922 -
2923 -__webpack_require__.r(__webpack_exports__);
2924 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2925 -/* harmony export */ ConvertLocalClassToGlobalClass: function() { return /* binding */ ConvertLocalClassToGlobalClass; }
2926 -/* harmony export */ });
2927 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
2928 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2929 -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository");
2930 -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__);
2931 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui");
2932 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__);
2933 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
2934 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__);
2935 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
2936 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__);
2937 -/* harmony import */ var _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../global-classes-styles-provider */ "./packages/packages/core/editor-global-classes/src/global-classes-styles-provider.ts");
2938 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
2939 -
2940 -
2941 -
2942 -
2943 -
2944 -
2945 -
2946 -const ConvertLocalClassToGlobalClass = props => {
2947 - const localStyleData = props.styleDef;
2948 - const handleConversion = () => {
2949 - const newClassName = createClassName(`converted-class-`);
2950 - if (!localStyleData) {
2951 - throw new Error('Style definition is required for converting local class to global class.');
2952 - }
2953 - const newId = _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_5__.globalClassesStylesProvider.actions.create?.(newClassName, localStyleData.variants);
2954 - if (newId) {
2955 - props.successCallback(newId);
2956 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_6__.trackGlobalClasses)({
2957 - classId: newId,
2958 - event: 'classCreated',
2959 - source: 'converted',
2960 - classTitle: newClassName
2961 - });
2962 - }
2963 - };
2964 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.MenuListItem, {
2965 - disabled: !props.canConvert,
2966 - onClick: handleConversion,
2967 - dense: true,
2968 - sx: {
2969 - '&.Mui-focusVisible': {
2970 - border: 'none',
2971 - boxShadow: 'none !important',
2972 - backgroundColor: 'transparent'
2973 - }
2974 - }
2975 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Convert to global class', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Divider, null));
2976 -};
2977 -function createClassName(prefix) {
2978 - let i = 1;
2979 - let newClassName = `${prefix}${i}`;
2980 - while (!(0,_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__.validateStyleLabel)(newClassName, 'create').isValid) {
2981 - newClassName = `${prefix}${++i}`;
2982 - }
2983 - return newClassName;
2984 -}
2985 -
2986 -/***/ }),
2987 -
2988 -/***/ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-popover.tsx":
2989 -/*!****************************************************************************************************************************!*\
2990 - !*** ./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-popover.tsx ***!
2991 - \****************************************************************************************************************************/
2992 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
2993 -
2994 -__webpack_require__.r(__webpack_exports__);
2995 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2996 -/* harmony export */ CssClassUsagePopover: function() { return /* binding */ CssClassUsagePopover; }
2997 -/* harmony export */ });
2998 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
2999 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3000 -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents");
3001 -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__);
3002 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui");
3003 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__);
3004 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
3005 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__);
3006 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
3007 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__);
3008 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
3009 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__);
3010 -/* harmony import */ var _hooks_use_css_class_usage_by_id__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../hooks/use-css-class-usage-by-id */ "./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage-by-id.ts");
3011 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
3012 -
3013 -
3014 -
3015 -
3016 -
3017 -
3018 -
3019 -
3020 -const iconMapper = {
3021 - 'wp-post': {
3022 - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Post', 'elementor'),
3023 - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.PostTypeIcon, {
3024 - fontSize: 'inherit'
3025 - })
3026 - },
3027 - 'wp-page': {
3028 - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Page', 'elementor'),
3029 - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.PagesIcon, {
3030 - fontSize: 'inherit'
3031 - })
3032 - },
3033 - popup: {
3034 - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Popup', 'elementor'),
3035 - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.PopupTemplateIcon, {
3036 - fontSize: 'inherit'
3037 - })
3038 - },
3039 - header: {
3040 - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Header', 'elementor'),
3041 - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.HeaderTemplateIcon, {
3042 - fontSize: 'inherit'
3043 - })
3044 - },
3045 - footer: {
3046 - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Footer', 'elementor'),
3047 - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.FooterTemplateIcon, {
3048 - fontSize: 'inherit'
3049 - })
3050 - }
3051 -};
3052 -const CssClassUsagePopover = ({
3053 - cssClassID,
3054 - onClose
3055 -}) => {
3056 - const {
3057 - data: classUsage
3058 - } = (0,_hooks_use_css_class_usage_by_id__WEBPACK_IMPORTED_MODULE_6__.useCssClassUsageByID)(cssClassID);
3059 - const onNavigate = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__.__useOpenDocumentInNewTab)();
3060 - const cssClassUsageRecords = classUsage?.content.map(({
3061 - title,
3062 - elements,
3063 - pageId,
3064 - type
3065 - }) => ({
3066 - type: 'item',
3067 - value: pageId,
3068 - label: title,
3069 - secondaryText: elements.length.toString(),
3070 - docType: type
3071 - })) ?? [];
3072 - const handleSelect = value => {
3073 - onNavigate(+value);
3074 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_7__.trackGlobalClasses)({
3075 - event: 'classUsageLocate',
3076 - classId: cssClassID
3077 - });
3078 - };
3079 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.PopoverHeader, {
3080 - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.CurrentLocationIcon, {
3081 - fontSize: 'tiny'
3082 - }),
3083 - title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Stack, {
3084 - flexDirection: 'row',
3085 - gap: 1,
3086 - alignItems: 'center'
3087 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Box, {
3088 - "aria-label": 'header-title'
3089 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Locator', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Box, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Chip, {
3090 - sx: {
3091 - lineHeight: 1
3092 - },
3093 - size: 'tiny',
3094 - label: classUsage.total
3095 - }))),
3096 - onClose: onClose
3097 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Divider, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.PopoverBody, {
3098 - width: 300
3099 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.PopoverMenuList, {
3100 - onSelect: handleSelect,
3101 - items: cssClassUsageRecords,
3102 - onClose: () => {},
3103 - menuListTemplate: StyledCssClassUsageItem,
3104 - menuItemContentTemplate: cssClassUsageRecord => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Stack, {
3105 - flexDirection: 'row',
3106 - flex: 1,
3107 - alignItems: 'center'
3108 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Box, {
3109 - display: 'flex',
3110 - sx: {
3111 - pr: 1
3112 - }
3113 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Tooltip, {
3114 - disableInteractive: true,
3115 - title: iconMapper?.[cssClassUsageRecord.docType]?.label ?? cssClassUsageRecord.docType,
3116 - placement: "top"
3117 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Icon, {
3118 - fontSize: 'small'
3119 - }, iconMapper?.[cssClassUsageRecord.docType]?.icon || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.PagesIcon, {
3120 - fontSize: 'inherit'
3121 - })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Box, {
3122 - sx: {
3123 - pr: 0.5,
3124 - maxWidth: '173px'
3125 - },
3126 - display: 'flex'
3127 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.EllipsisWithTooltip, {
3128 - title: cssClassUsageRecord.label,
3129 - as: _elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Typography,
3130 - variant: "caption",
3131 - maxWidth: "173px",
3132 - sx: {
3133 - lineHeight: 1
3134 - }
3135 - })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.ExternalLinkIcon, {
3136 - className: 'hover-only-icon',
3137 - fontSize: 'tiny'
3138 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Chip, {
3139 - sx: {
3140 - ml: 'auto'
3141 - },
3142 - size: 'tiny',
3143 - label: cssClassUsageRecord.secondaryText
3144 - }))
3145 - })));
3146 -};
3147 -const StyledCssClassUsageItem = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.styled)(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.MenuList)(({
3148 - theme
3149 -}) => ({
3150 - '& > li': {
3151 - display: 'flex',
3152 - cursor: 'pointer',
3153 - height: 32,
3154 - width: '100%'
3155 - },
3156 - '& > [role="option"]': {
3157 - ...theme.typography.caption,
3158 - lineHeight: 'inherit',
3159 - padding: theme.spacing(0.5, 1, 0.5, 2),
3160 - textOverflow: 'ellipsis',
3161 - position: 'absolute',
3162 - top: 0,
3163 - left: 0,
3164 - opacity: 1,
3165 - '.hover-only-icon': {
3166 - color: theme.palette.text.disabled,
3167 - opacity: 0
3168 - },
3169 - '&:hover': {
3170 - borderRadius: theme.spacing(0.5),
3171 - backgroundColor: theme.palette.action.hover,
3172 - '.hover-only-icon': {
3173 - color: theme.palette.text.disabled,
3174 - opacity: 1
3175 - }
3176 - }
3177 - },
3178 - width: '100%',
3179 - position: 'relative'
3180 -}));
3181 -
3182 -/***/ }),
3183 -
3184 -/***/ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-trigger.tsx":
3185 -/*!****************************************************************************************************************************!*\
3186 - !*** ./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-trigger.tsx ***!
3187 - \****************************************************************************************************************************/
3188 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3189 -
3190 -__webpack_require__.r(__webpack_exports__);
3191 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3192 -/* harmony export */ CssClassUsageTrigger: function() { return /* binding */ CssClassUsageTrigger; }
3193 -/* harmony export */ });
3194 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3195 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3196 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui");
3197 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__);
3198 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
3199 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__);
3200 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
3201 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__);
3202 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
3203 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__);
3204 -/* harmony import */ var _hooks_use_css_class_usage_by_id__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../hooks/use-css-class-usage-by-id */ "./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage-by-id.ts");
3205 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
3206 -/* harmony import */ var _css_class_usage_popover__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./css-class-usage-popover */ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-popover.tsx");
3207 -function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3208 -
3209 -
3210 -
3211 -
3212 -
3213 -
3214 -
3215 -
3216 -const CssClassUsageTrigger = ({
3217 - id,
3218 - onClick
3219 -}) => {
3220 - const {
3221 - data: {
3222 - total
3223 - },
3224 - isLoading
3225 - } = (0,_hooks_use_css_class_usage_by_id__WEBPACK_IMPORTED_MODULE_5__.useCssClassUsageByID)(id);
3226 - const cssClassUsagePopover = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.usePopupState)({
3227 - variant: 'popover',
3228 - popupId: 'css-class-usage-popover'
3229 - });
3230 - if (isLoading) {
3231 - return null;
3232 - }
3233 - const WrapperComponent = total !== 0 ? TooltipWrapper : InfoAlertMessage;
3234 - const handleMouseEnter = () => {
3235 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_6__.trackGlobalClasses)({
3236 - event: 'classUsageHovered',
3237 - classId: id,
3238 - usage: total
3239 - });
3240 - };
3241 - const handleClick = e => {
3242 - if (total !== 0) {
3243 - (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindTrigger)(cssClassUsagePopover).onClick(e);
3244 - onClick(id);
3245 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_6__.trackGlobalClasses)({
3246 - event: 'classUsageClicked',
3247 - classId: id
3248 - });
3249 - }
3250 - };
3251 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, {
3252 - position: 'relative',
3253 - onMouseEnter: handleMouseEnter
3254 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(WrapperComponent, {
3255 - total: total
3256 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(CustomIconButton, _extends({
3257 - disabled: total === 0,
3258 - size: 'tiny'
3259 - }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindTrigger)(cssClassUsagePopover), {
3260 - onClick: handleClick
3261 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.CurrentLocationIcon, {
3262 - fontSize: 'tiny'
3263 - })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Popover, _extends({
3264 - anchorOrigin: {
3265 - vertical: 'center',
3266 - horizontal: 'right'
3267 - },
3268 - transformOrigin: {
3269 - vertical: 15,
3270 - horizontal: -50
3271 - }
3272 - }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindPopover)(cssClassUsagePopover), {
3273 - onClose: () => {
3274 - (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindPopover)(cssClassUsagePopover).onClose();
3275 - onClick('');
3276 - }
3277 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_css_class_usage_popover__WEBPACK_IMPORTED_MODULE_7__.CssClassUsagePopover, {
3278 - onClose: cssClassUsagePopover.close,
3279 - "aria-label": "css-class-usage-popover",
3280 - cssClassID: id
3281 - }))));
3282 -};
3283 -const CustomIconButton = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.styled)(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.IconButton)(({
3284 - theme
3285 -}) => ({
3286 - '&.Mui-disabled': {
3287 - pointerEvents: 'auto',
3288 - // Enable hover
3289 - '&:hover': {
3290 - color: theme.palette.action.disabled // optional
3291 - }
3292 - },
3293 - height: '22px',
3294 - width: '22px'
3295 -}));
3296 -const TooltipWrapper = ({
3297 - children,
3298 - total
3299 -}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Tooltip, {
3300 - disableInteractive: true,
3301 - placement: 'top',
3302 - title: `${(0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Show {{number}} {{locations}}', 'elementor').replace('{{number}}', total.toString()).replace('{{locations}}', total === 1 ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('location', 'elementor') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('locations', 'elementor'))}`
3303 -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", null, children));
3304 -const InfoAlertMessage = ({
3305 - children
3306 -}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Infotip, {
3307 - disableInteractive: true,
3308 - placement: 'top',
3309 - color: 'secondary',
3310 - content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.InfoAlert, {
3311 - sx: {
3312 - mt: 1
3313 - }
3314 - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('This class isn’t being used yet.', 'elementor'))
3315 -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", null, children));
3316 -
3317 -/***/ }),
3318 -
3319 -/***/ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/index.ts":
3320 -/*!*********************************************************************************************************!*\
3321 - !*** ./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/index.ts ***!
3322 - \*********************************************************************************************************/
3323 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3324 -
3325 -__webpack_require__.r(__webpack_exports__);
3326 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3327 -/* harmony export */ CssClassUsagePopover: function() { return /* reexport safe */ _css_class_usage_popover__WEBPACK_IMPORTED_MODULE_0__.CssClassUsagePopover; },
3328 -/* harmony export */ CssClassUsageTrigger: function() { return /* reexport safe */ _css_class_usage_trigger__WEBPACK_IMPORTED_MODULE_1__.CssClassUsageTrigger; }
3329 -/* harmony export */ });
3330 -/* harmony import */ var _css_class_usage_popover__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./css-class-usage-popover */ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-popover.tsx");
3331 -/* harmony import */ var _css_class_usage_trigger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./css-class-usage-trigger */ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-trigger.tsx");
3332 -
3333 -
3334 -
3335 -/***/ }),
3336 -
3337 -/***/ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/types.ts":
3338 -/*!**********************************************************************************************!*\
3339 - !*** ./packages/packages/core/editor-global-classes/src/components/css-class-usage/types.ts ***!
3340 - \**********************************************************************************************/
3341 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3342 -
3343 -__webpack_require__.r(__webpack_exports__);
3344 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3345 -/* harmony export */ QUERY_KEY: function() { return /* binding */ QUERY_KEY; }
3346 -/* harmony export */ });
3347 -const QUERY_KEY = 'css-classes-usage';
3348 -
3349 -/***/ }),
3350 -
3351 -/***/ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/utils.ts":
3352 -/*!**********************************************************************************************!*\
3353 - !*** ./packages/packages/core/editor-global-classes/src/components/css-class-usage/utils.ts ***!
3354 - \**********************************************************************************************/
3355 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3356 -
3357 -__webpack_require__.r(__webpack_exports__);
3358 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3359 -/* harmony export */ transformData: function() { return /* binding */ transformData; }
3360 -/* harmony export */ });
3361 -const transformData = data => Object.entries(data).reduce((acc, [key, value]) => {
3362 - acc[key] = {
3363 - content: value || [],
3364 - total: value.reduce((total, val) => total + (val?.total || 0), 0)
3365 - };
3366 - return acc;
3367 -}, {});
3368 -
3369 -/***/ }),
3370 -
3371 -/***/ "./packages/packages/core/editor-global-classes/src/components/global-styles-import-listener.tsx":
3372 -/*!*******************************************************************************************************!*\
3373 - !*** ./packages/packages/core/editor-global-classes/src/components/global-styles-import-listener.tsx ***!
3374 - \*******************************************************************************************************/
3375 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3376 -
3377 -__webpack_require__.r(__webpack_exports__);
3378 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3379 -/* harmony export */ GlobalStylesImportListener: function() { return /* binding */ GlobalStylesImportListener; }
3380 -/* harmony export */ });
3381 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3382 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3383 -/* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-canvas */ "@elementor/editor-canvas");
3384 -/* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__);
3385 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
3386 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_2__);
3387 -/* harmony import */ var _load_document_classes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../load-document-classes */ "./packages/packages/core/editor-global-classes/src/load-document-classes.ts");
3388 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts");
3389 -/* harmony import */ var _utils_create_labels_for_classes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/create-labels-for-classes */ "./packages/packages/core/editor-global-classes/src/utils/create-labels-for-classes.ts");
3390 -
3391 -
3392 -
3393 -
3394 -
3395 -
3396 -function GlobalStylesImportListener() {
3397 - const dispatch = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__useDispatch)();
3398 - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
3399 - const handleGlobalStylesImported = async event => {
3400 - const customEvent = event;
3401 - const globalClasses = customEvent.detail?.global_classes;
3402 - if (!globalClasses?.added_items_order || !globalClasses?.added_items || globalClasses?.added_items_order?.length === 0) {
3403 - (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_3__.loadCurrentDocumentClasses)();
3404 - return;
3405 - }
3406 - dispatch(_store__WEBPACK_IMPORTED_MODULE_4__.slice.actions.updateAfterTemplateImport({
3407 - addedItems: globalClasses.added_items,
3408 - addedIdsOrder: globalClasses.added_items_order,
3409 - addedClassLabels: (0,_utils_create_labels_for_classes__WEBPACK_IMPORTED_MODULE_5__.createLabelsForClasses)(Object.values(globalClasses.added_items))
3410 - }));
3411 - };
3412 - window.addEventListener(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__.GLOBAL_STYLES_IMPORTED_EVENT, handleGlobalStylesImported);
3413 - return () => {
3414 - window.removeEventListener(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__.GLOBAL_STYLES_IMPORTED_EVENT, handleGlobalStylesImported);
3415 - };
3416 - }, [dispatch]);
3417 - return null;
3418 -}
3419 -
3420 -/***/ }),
3421 -
3422 -/***/ "./packages/packages/core/editor-global-classes/src/components/populate-store.tsx":
3423 -/*!****************************************************************************************!*\
3424 - !*** ./packages/packages/core/editor-global-classes/src/components/populate-store.tsx ***!
3425 - \****************************************************************************************/
3426 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3427 -
3428 -__webpack_require__.r(__webpack_exports__);
3429 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3430 -/* harmony export */ PopulateStore: function() { return /* binding */ PopulateStore; }
3431 -/* harmony export */ });
3432 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3433 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3434 -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters");
3435 -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__);
3436 -/* harmony import */ var _load_document_classes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../load-document-classes */ "./packages/packages/core/editor-global-classes/src/load-document-classes.ts");
3437 -
3438 -
3439 -
3440 -function PopulateStore() {
3441 - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
3442 - // TODO - we run it early to have the labels mapping prior to the canvas rendering
3443 - // but in fact we need a way to re-render any dependant twig-templated widgets/elements once we get the initial data
3444 - // in case the canvas rendering has occurred prior to the resolving of this fetch
3445 - (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_2__.loadCurrentDocumentClasses)();
3446 - (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.registerDataHook)('after', 'editor/documents/attach-preview', async () => {
3447 - await (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_2__.loadCurrentDocumentClasses)();
3448 - });
3449 - }, []);
3450 - return null;
3451 -}
3452 -
3453 -/***/ }),
3454 -
3455 -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/active-filters.tsx":
3456 -/*!****************************************************************************************************************************!*\
3457 - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/active-filters.tsx ***!
3458 - \****************************************************************************************************************************/
3459 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3460 -
3461 -__webpack_require__.r(__webpack_exports__);
3462 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3463 -/* harmony export */ ActiveFilters: function() { return /* binding */ ActiveFilters; }
3464 -/* harmony export */ });
3465 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3466 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3467 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
3468 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__);
3469 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
3470 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
3471 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
3472 -/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx");
3473 -/* harmony import */ var _clear_icon_button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./clear-icon-button */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/clear-icon-button.tsx");
3474 -/* harmony import */ var _filter_list__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./filter-list */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/filter-list.tsx");
3475 -
3476 -
3477 -
3478 -
3479 -
3480 -
3481 -
3482 -const ActiveFilters = () => {
3483 - const {
3484 - filters: {
3485 - filters,
3486 - setFilters
3487 - }
3488 - } = (0,_context__WEBPACK_IMPORTED_MODULE_4__.useSearchAndFilters)();
3489 - const handleRemove = key => {
3490 - setFilters(prev => ({
3491 - ...prev,
3492 - [key]: false
3493 - }));
3494 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_3__.trackGlobalClasses)({
3495 - event: 'classManagerFilterUsed',
3496 - action: 'remove',
3497 - type: key,
3498 - trigger: 'header'
3499 - });
3500 - };
3501 - const activeKeys = Object.keys(filters).filter(key => filters[key]);
3502 - const showClearIcon = activeKeys.length > 0;
3503 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Stack, {
3504 - direction: "row",
3505 - alignItems: "center",
3506 - justifyContent: "space-between"
3507 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Stack, {
3508 - direction: "row",
3509 - gap: 0.5,
3510 - alignItems: "center",
3511 - flexWrap: "wrap"
3512 - }, activeKeys.map(key => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Chip, {
3513 - key: key,
3514 - label: _filter_list__WEBPACK_IMPORTED_MODULE_6__.filterConfig[key],
3515 - onDelete: () => handleRemove(key),
3516 - sx: chipSx,
3517 - size: "tiny"
3518 - }))), showClearIcon && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_clear_icon_button__WEBPACK_IMPORTED_MODULE_5__.ClearIconButton, {
3519 - trigger: "header",
3520 - tooltipText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Clear Filters', 'elementor'),
3521 - sx: {
3522 - margin: '0 0 auto auto'
3523 - }
3524 - }));
3525 -};
3526 -const chipSx = {
3527 - '& .MuiChip-deleteIcon': {
3528 - display: 'none',
3529 - transition: 'opacity 0.2s'
3530 - },
3531 - '&:hover .MuiChip-deleteIcon': {
3532 - display: 'block'
3533 - }
3534 -};
3535 -
3536 -/***/ }),
3537 -
3538 -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/clear-icon-button.tsx":
3539 -/*!*******************************************************************************************************************************!*\
3540 - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/clear-icon-button.tsx ***!
3541 - \*******************************************************************************************************************************/
3542 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3543 -
3544 -__webpack_require__.r(__webpack_exports__);
3545 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3546 -/* harmony export */ ClearIconButton: function() { return /* binding */ ClearIconButton; }
3547 -/* harmony export */ });
3548 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3549 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3550 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
3551 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__);
3552 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
3553 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__);
3554 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
3555 -/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx");
3556 -
3557 -
3558 -
3559 -
3560 -
3561 -const ClearIconButton = ({
3562 - tooltipText,
3563 - sx,
3564 - trigger
3565 -}) => {
3566 - const {
3567 - filters: {
3568 - onClearFilter
3569 - }
3570 - } = (0,_context__WEBPACK_IMPORTED_MODULE_4__.useSearchAndFilters)();
3571 - const handleClearFilters = () => {
3572 - onClearFilter(trigger);
3573 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_3__.trackGlobalClasses)({
3574 - event: 'classManagerFilterCleared',
3575 - trigger
3576 - });
3577 - };
3578 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Tooltip, {
3579 - title: tooltipText,
3580 - placement: "top",
3581 - disableInteractive: true
3582 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(CustomIconButton, {
3583 - "aria-label": tooltipText,
3584 - size: "tiny",
3585 - onClick: handleClearFilters,
3586 - sx: sx
3587 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.BrushBigIcon, {
3588 - fontSize: "tiny"
3589 - }))));
3590 -};
3591 -const CustomIconButton = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.styled)(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.IconButton)(({
3592 - theme
3593 -}) => ({
3594 - '&.Mui-disabled': {
3595 - pointerEvents: 'auto',
3596 - '&:hover': {
3597 - color: theme.palette.action.disabled
3598 - }
3599 - }
3600 -}));
3601 -
3602 -/***/ }),
3603 -
3604 -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/css-class-filter.tsx":
3605 -/*!******************************************************************************************************************************!*\
3606 - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/css-class-filter.tsx ***!
3607 - \******************************************************************************************************************************/
3608 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3609 -
3610 -__webpack_require__.r(__webpack_exports__);
3611 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3612 -/* harmony export */ CssClassFilter: function() { return /* binding */ CssClassFilter; }
3613 -/* harmony export */ });
3614 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3615 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3616 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui");
3617 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__);
3618 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
3619 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__);
3620 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
3621 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__);
3622 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
3623 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__);
3624 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
3625 -/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx");
3626 -/* harmony import */ var _clear_icon_button__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./clear-icon-button */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/clear-icon-button.tsx");
3627 -/* harmony import */ var _filter_list__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./filter-list */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/filter-list.tsx");
3628 -function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
3629 -
3630 -
3631 -
3632 -
3633 -
3634 -
3635 -
3636 -
3637 -
3638 -
3639 -const CssClassFilter = () => {
3640 - const {
3641 - filters: {
3642 - filters
3643 - }
3644 - } = (0,_context__WEBPACK_IMPORTED_MODULE_6__.useSearchAndFilters)();
3645 - const popupState = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.usePopupState)({
3646 - variant: 'popover',
3647 - disableAutoFocus: true
3648 - });
3649 - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
3650 - if (popupState.isOpen) {
3651 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_5__.trackGlobalClasses)({
3652 - event: 'classManagerFiltersOpened'
3653 - });
3654 - }
3655 - }, [popupState.isOpen]);
3656 - const showCleanIcon = Object.values(filters).some(value => value);
3657 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Tooltip, {
3658 - title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Filters', 'elementor'),
3659 - placement: "top"
3660 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.ToggleButton, _extends({
3661 - value: "filter",
3662 - size: 'tiny',
3663 - selected: popupState.isOpen
3664 - }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindToggle)(popupState)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.FilterIcon, {
3665 - fontSize: "tiny"
3666 - }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Popover, _extends({
3667 - sx: {
3668 - maxWidth: '344px'
3669 - },
3670 - anchorOrigin: {
3671 - vertical: 'top',
3672 - horizontal: 'right'
3673 - },
3674 - transformOrigin: {
3675 - vertical: 'top',
3676 - horizontal: -21
3677 - }
3678 - }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindPopover)(popupState)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.PopoverHeader, {
3679 - actions: showCleanIcon ? [/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_clear_icon_button__WEBPACK_IMPORTED_MODULE_7__.ClearIconButton, {
3680 - trigger: "menu",
3681 - key: "clear-all-button",
3682 - tooltipText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Clear all', 'elementor')
3683 - })] : [],
3684 - onClose: popupState.close,
3685 - title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Filters', 'elementor'),
3686 - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.FilterIcon, {
3687 - fontSize: 'tiny'
3688 - })
3689 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Divider, {
3690 - sx: {
3691 - borderWidth: '1px 0 0 0'
3692 - }
3693 - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.PopoverBody, {
3694 - width: 344,
3695 - height: 125
3696 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_filter_list__WEBPACK_IMPORTED_MODULE_8__.FilterList, null))));
3697 -};
3698 -
3699 -/***/ }),
3700 -
3701 -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/filter-list.tsx":
3702 -/*!*************************************************************************************************************************!*\
3703 - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/filter-list.tsx ***!
3704 - \*************************************************************************************************************************/
3705 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3706 -
3707 -__webpack_require__.r(__webpack_exports__);
3708 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3709 -/* harmony export */ FilterList: function() { return /* binding */ FilterList; },
3710 -/* harmony export */ filterConfig: function() { return /* binding */ filterConfig; }
3711 -/* harmony export */ });
3712 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3713 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3714 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
3715 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__);
3716 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
3717 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
3718 -/* harmony import */ var _hooks_use_filtered_css_class_usage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../hooks/use-filtered-css-class-usage */ "./packages/packages/core/editor-global-classes/src/hooks/use-filtered-css-class-usage.tsx");
3719 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
3720 -/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx");
3721 -
3722 -
3723 -
3724 -
3725 -
3726 -
3727 -const filterConfig = {
3728 - unused: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Unused', 'elementor'),
3729 - empty: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Empty', 'elementor'),
3730 - onThisPage: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('On this page', 'elementor')
3731 -};
3732 -const FilterList = () => {
3733 - const {
3734 - filters: {
3735 - filters,
3736 - setFilters
3737 - }
3738 - } = (0,_context__WEBPACK_IMPORTED_MODULE_5__.useSearchAndFilters)();
3739 - const filteredCssClass = (0,_hooks_use_filtered_css_class_usage__WEBPACK_IMPORTED_MODULE_3__.useFilteredCssClassUsage)();
3740 - const handleOnClick = value => {
3741 - setFilters(prev => ({
3742 - ...prev,
3743 - [value]: !prev[value]
3744 - }));
3745 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_4__.trackGlobalClasses)({
3746 - event: 'classManagerFilterUsed',
3747 - action: filters[value] ? 'remove' : 'apply',
3748 - type: value,
3749 - trigger: 'menu'
3750 - });
3751 - };
3752 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuList, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuItem, {
3753 - onClick: () => handleOnClick('unused')
3754 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LabeledCheckbox, {
3755 - label: filterConfig.unused,
3756 - checked: filters.unused,
3757 - suffix: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Chip, {
3758 - size: 'tiny',
3759 - sx: {
3760 - ml: 'auto'
3761 - },
3762 - label: filteredCssClass.unused.length
3763 - })
3764 - })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuItem, {
3765 - onClick: () => handleOnClick('empty')
3766 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LabeledCheckbox, {
3767 - label: filterConfig.empty,
3768 - checked: filters.empty,
3769 - suffix: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Chip, {
3770 - size: 'tiny',
3771 - sx: {
3772 - ml: 'auto'
3773 - },
3774 - label: filteredCssClass.empty.length
3775 - })
3776 - })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuItem, {
3777 - onClick: () => handleOnClick('onThisPage')
3778 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LabeledCheckbox, {
3779 - label: filterConfig.onThisPage,
3780 - checked: filters.onThisPage,
3781 - suffix: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Chip, {
3782 - size: 'tiny',
3783 - sx: {
3784 - ml: 'auto'
3785 - },
3786 - label: filteredCssClass.onThisPage.length
3787 - })
3788 - })));
3789 -};
3790 -const LabeledCheckbox = ({
3791 - label,
3792 - suffix,
3793 - checked
3794 -}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Stack, {
3795 - direction: "row",
3796 - alignItems: "center",
3797 - gap: 0.5,
3798 - flex: 1
3799 -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Checkbox, {
3800 - size: 'small',
3801 - checked: checked,
3802 - sx: {
3803 - padding: 0,
3804 - color: 'text.tertiary',
3805 - '&.Mui-checked': {
3806 - color: 'text.tertiary'
3807 - }
3808 - }
3809 -}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Typography, {
3810 - variant: "caption",
3811 - sx: {
3812 - color: 'text.secondary'
3813 - }
3814 -}, label), suffix);
3815 -
3816 -/***/ }),
3817 -
3818 -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/search/class-manager-search.tsx":
3819 -/*!**********************************************************************************************************************************!*\
3820 - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/search/class-manager-search.tsx ***!
3821 - \**********************************************************************************************************************************/
3822 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3823 -
3824 -__webpack_require__.r(__webpack_exports__);
3825 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3826 -/* harmony export */ ClassManagerSearch: function() { return /* binding */ ClassManagerSearch; }
3827 -/* harmony export */ });
3828 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3829 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3830 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons");
3831 -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__);
3832 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui");
3833 -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__);
3834 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
3835 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
3836 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
3837 -/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx");
3838 -
3839 -
3840 -
3841 -
3842 -
3843 -
3844 -const ClassManagerSearch = () => {
3845 - const {
3846 - search: {
3847 - inputValue,
3848 - handleChange
3849 - }
3850 - } = (0,_context__WEBPACK_IMPORTED_MODULE_5__.useSearchAndFilters)();
3851 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Stack, {
3852 - direction: "row",
3853 - gap: 0.5,
3854 - sx: {
3855 - width: '100%'
3856 - }
3857 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, {
3858 - sx: {
3859 - flexGrow: 1
3860 - }
3861 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.TextField, {
3862 - role: 'search',
3863 - fullWidth: true,
3864 - size: 'tiny',
3865 - value: inputValue,
3866 - onFocus: () => {
3867 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_4__.trackGlobalClasses)({
3868 - event: 'classManagerSearched'
3869 - });
3870 - },
3871 - placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Search', 'elementor'),
3872 - onChange: e => handleChange(e.target.value),
3873 - InputProps: {
3874 - startAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.InputAdornment, {
3875 - position: "start"
3876 - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.SearchIcon, {
3877 - fontSize: 'tiny'
3878 - }))
3879 - }
3880 - })));
3881 -};
3882 -
3883 -/***/ }),
3884 -
3885 -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx":
3886 -/*!***************************************************************************************************!*\
3887 - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx ***!
3888 - \***************************************************************************************************/
3889 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3890 -
3891 -__webpack_require__.r(__webpack_exports__);
3892 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3893 -/* harmony export */ SearchAndFilterProvider: function() { return /* binding */ SearchAndFilterProvider; },
3894 -/* harmony export */ useSearchAndFilters: function() { return /* binding */ useSearchAndFilters; }
3895 -/* harmony export */ });
3896 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3897 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3898 -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils");
3899 -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_1__);
3900 -
3901 -
3902 -
3903 -const SearchAndFilterContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(undefined);
3904 -const INIT_CHECKED_FILTERS = {
3905 - empty: false,
3906 - onThisPage: false,
3907 - unused: false
3908 -};
3909 -const SearchAndFilterProvider = ({
3910 - children
3911 -}) => {
3912 - const [filters, setFilters] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(INIT_CHECKED_FILTERS);
3913 - const getInitialSearchValue = () => {
3914 - const storedValue = localStorage.getItem('elementor-global-classes-search');
3915 - if (storedValue) {
3916 - localStorage.removeItem('elementor-global-classes-search');
3917 - return storedValue;
3918 - }
3919 - return '';
3920 - };
3921 - const {
3922 - debouncedValue,
3923 - inputValue,
3924 - handleChange
3925 - } = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_1__.useDebounceState)({
3926 - delay: 300,
3927 - initialValue: getInitialSearchValue()
3928 - });
3929 - const onClearSearch = () => {
3930 - handleChange('');
3931 - };
3932 - const onClearFilter = () => {
3933 - setFilters(INIT_CHECKED_FILTERS);
3934 - };
3935 - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(SearchAndFilterContext.Provider, {
3936 - value: {
3937 - search: {
3938 - debouncedValue,
3939 - inputValue,
3940 - handleChange,
3941 - onClearSearch
3942 - },
3943 - filters: {
3944 - filters,
3945 - setFilters,
3946 - onClearFilter
3947 - }
3948 - }
3949 - }, children);
3950 -};
3951 -const useSearchAndFilters = () => {
3952 - const context = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(SearchAndFilterContext);
3953 - if (!context) {
3954 - throw new Error('useSearchContext must be used within a SearchContextProvider');
3955 - }
3956 - return context;
3957 -};
3958 -
3959 -/***/ }),
3960 -
3961 -/***/ "./packages/packages/core/editor-global-classes/src/errors.ts":
3962 -/*!********************************************************************!*\
3963 - !*** ./packages/packages/core/editor-global-classes/src/errors.ts ***!
3964 - \********************************************************************/
3965 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3966 -
3967 -__webpack_require__.r(__webpack_exports__);
3968 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3969 -/* harmony export */ GlobalClassLabelAlreadyExistsError: function() { return /* binding */ GlobalClassLabelAlreadyExistsError; },
3970 -/* harmony export */ GlobalClassNotFoundError: function() { return /* binding */ GlobalClassNotFoundError; },
3971 -/* harmony export */ GlobalClassTrackingError: function() { return /* binding */ GlobalClassTrackingError; }
3972 -/* harmony export */ });
3973 -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils");
3974 -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_0__);
3975 -
3976 -const GlobalClassNotFoundError = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_0__.createError)({
3977 - code: 'global_class_not_found',
3978 - message: 'Global class not found.'
3979 -});
3980 -const GlobalClassLabelAlreadyExistsError = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_0__.createError)({
3981 - code: 'global_class_label_already_exists',
3982 - message: 'Class with this name already exists.'
3983 -});
3984 -const GlobalClassTrackingError = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_0__.createError)({
3985 - code: 'global_class_tracking_error',
3986 - message: 'Error tracking global classes event.'
3987 -});
3988 -
3989 -/***/ }),
3990 -
3991 -/***/ "./packages/packages/core/editor-global-classes/src/global-classes-styles-provider.ts":
3992 -/*!********************************************************************************************!*\
3993 - !*** ./packages/packages/core/editor-global-classes/src/global-classes-styles-provider.ts ***!
3994 - \********************************************************************************************/
3995 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3996 -
3997 -__webpack_require__.r(__webpack_exports__);
3998 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3999 -/* harmony export */ GLOBAL_CLASSES_PROVIDER_KEY: function() { return /* binding */ GLOBAL_CLASSES_PROVIDER_KEY; },
4000 -/* harmony export */ globalClassesStylesProvider: function() { return /* binding */ globalClassesStylesProvider; }
4001 -/* harmony export */ });
4002 -/* harmony import */ var _elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-styles */ "@elementor/editor-styles");
4003 -/* harmony import */ var _elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__);
4004 -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository");
4005 -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__);
4006 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
4007 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_2__);
4008 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
4009 -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__);
4010 -/* harmony import */ var _capabilities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./capabilities */ "./packages/packages/core/editor-global-classes/src/capabilities.ts");
4011 -/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./errors */ "./packages/packages/core/editor-global-classes/src/errors.ts");
4012 -/* harmony import */ var _load_existing_classes__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./load-existing-classes */ "./packages/packages/core/editor-global-classes/src/load-existing-classes.ts");
4013 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts");
4014 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
4015 -
4016 -
4017 -
4018 -
4019 -
4020 -
4021 -
4022 -
4023 -
4024 -const MAX_CLASSES = 1000;
4025 -const GLOBAL_CLASSES_PROVIDER_KEY = 'global-classes';
4026 -const PREGENERATED_LINK_PATTERN = /^global-([0-9]+-)?(preview|frontend)-[a-zA-Z_-]+-css$/;
4027 -const globalClassesStylesProvider = (0,_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__.createStylesProvider)({
4028 - key: GLOBAL_CLASSES_PROVIDER_KEY,
4029 - priority: 30,
4030 - limit: MAX_CLASSES,
4031 - isPregeneratedLink: ({
4032 - id
4033 - }) => PREGENERATED_LINK_PATTERN.test(id),
4034 - labels: {
4035 - singular: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('class', 'elementor'),
4036 - plural: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('classes', 'elementor')
4037 - },
4038 - subscribe: cb => subscribeWithStates(cb),
4039 - capabilities: (0,_capabilities__WEBPACK_IMPORTED_MODULE_4__.getCapabilities)(),
4040 - actions: {
4041 - all: () => (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectOrderedClasses)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)()),
4042 - get: id => {
4043 - const state = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)();
4044 - const isFetched = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectIsClassFetched)(state, id);
4045 - const style = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectClass)(state, id);
4046 -
4047 - // the isFetched flag is based on the existence of the style in the initial data
4048 - // so if the style is created during the same session - it won't be stored as part of the initial data
4049 - if (isFetched || style) {
4050 - return style;
4051 - }
4052 - (0,_load_existing_classes__WEBPACK_IMPORTED_MODULE_6__.loadExistingClasses)([id]);
4053 - const label = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectClassLabels)(state)[id] ?? id;
4054 - return (0,_store__WEBPACK_IMPORTED_MODULE_7__.placeholderDefinition)(id, label);
4055 - },
4056 - resolveCssName: id => {
4057 - const state = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)();
4058 - const loaded = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectClass)(state, id);
4059 - if (loaded) {
4060 - return loaded.label;
4061 - }
4062 - const fromIndex = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectClassLabels)(state)[id];
4063 - return fromIndex ?? id;
4064 - },
4065 - create: (label, variants = [], id) => {
4066 - const existingClasses = Object.entries((0,_store__WEBPACK_IMPORTED_MODULE_7__.selectClassLabels)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)()));
4067 - const existingLabels = existingClasses.map(([, classLabel]) => classLabel);
4068 - if (existingLabels.includes(label)) {
4069 - throw new _errors__WEBPACK_IMPORTED_MODULE_5__.GlobalClassLabelAlreadyExistsError({
4070 - context: {
4071 - label
4072 - }
4073 - });
4074 - }
4075 - const existingIds = existingClasses.map(([existingId]) => existingId);
4076 - if (!id) {
4077 - id = (0,_elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__.generateId)('g-', existingIds);
4078 - }
4079 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_7__.slice.actions.add({
4080 - id,
4081 - type: 'class',
4082 - label,
4083 - variants
4084 - }));
4085 - return id;
4086 - },
4087 - update: payload => {
4088 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_7__.slice.actions.update({
4089 - style: payload
4090 - }));
4091 - },
4092 - delete: id => {
4093 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_7__.slice.actions.delete(id));
4094 - },
4095 - updateProps: args => {
4096 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_7__.slice.actions.updateProps({
4097 - id: args.id,
4098 - meta: args.meta,
4099 - props: args.props,
4100 - mode: args.mode
4101 - }));
4102 - },
4103 - updateCustomCss: args => {
4104 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_7__.slice.actions.updateProps({
4105 - id: args.id,
4106 - meta: args.meta,
4107 - custom_css: args.custom_css,
4108 - props: {}
4109 - }));
4110 - },
4111 - tracking: data => {
4112 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_8__.trackGlobalClasses)(data).catch(error => {
4113 - throw new _errors__WEBPACK_IMPORTED_MODULE_5__.GlobalClassTrackingError({
4114 - cause: error
4115 - });
4116 - });
4117 - }
4118 - }
4119 -});
4120 -const subscribeWithStates = cb => {
4121 - let previousState = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectData)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)());
4122 - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__subscribeWithSelector)(state => (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectData)(state), currentState => {
4123 - cb(previousState.items, currentState.items);
4124 - previousState = currentState;
4125 - });
4126 -};
4127 -
4128 -/***/ }),
4129 -
4130 -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-classes-order.ts":
4131 -/*!*************************************************************************************!*\
4132 - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-classes-order.ts ***!
4133 - \*************************************************************************************/
4134 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4135 -
4136 -__webpack_require__.r(__webpack_exports__);
4137 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4138 -/* harmony export */ useClassesOrder: function() { return /* binding */ useClassesOrder; }
4139 -/* harmony export */ });
4140 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
4141 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__);
4142 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts");
4143 -
4144 -
4145 -const useClassesOrder = () => {
4146 - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectOrder);
4147 -};
4148 -
4149 -/***/ }),
4150 -
4151 -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage-by-id.ts":
4152 -/*!*********************************************************************************************!*\
4153 - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage-by-id.ts ***!
4154 - \*********************************************************************************************/
4155 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4156 -
4157 -__webpack_require__.r(__webpack_exports__);
4158 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4159 -/* harmony export */ useCssClassUsageByID: function() { return /* binding */ useCssClassUsageByID; }
4160 -/* harmony export */ });
4161 -/* harmony import */ var _use_css_class_usage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./use-css-class-usage */ "./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage.ts");
4162 -
4163 -const EMPTY_CLASS_USAGE = {
4164 - total: 0,
4165 - content: []
4166 -};
4167 -const useCssClassUsageByID = id => {
4168 - const {
4169 - data,
4170 - ...rest
4171 - } = (0,_use_css_class_usage__WEBPACK_IMPORTED_MODULE_0__.useCssClassUsage)();
4172 - const classData = data?.[id] ?? EMPTY_CLASS_USAGE;
4173 - return {
4174 - ...rest,
4175 - data: classData
4176 - };
4177 -};
4178 -
4179 -/***/ }),
4180 -
4181 -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage.ts":
4182 -/*!***************************************************************************************!*\
4183 - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage.ts ***!
4184 - \***************************************************************************************/
4185 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4186 -
4187 -__webpack_require__.r(__webpack_exports__);
4188 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4189 -/* harmony export */ useCssClassUsage: function() { return /* binding */ useCssClassUsage; }
4190 -/* harmony export */ });
4191 -/* harmony import */ var _elementor_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/query */ "@elementor/query");
4192 -/* harmony import */ var _elementor_query__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_query__WEBPACK_IMPORTED_MODULE_0__);
4193 -/* harmony import */ var _service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../service/css-class-usage-service */ "./packages/packages/core/editor-global-classes/service/css-class-usage-service.ts");
4194 -/* harmony import */ var _components_css_class_usage_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/css-class-usage/types */ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/types.ts");
4195 -
4196 -
4197 -
4198 -const useCssClassUsage = () => {
4199 - return (0,_elementor_query__WEBPACK_IMPORTED_MODULE_0__.useQuery)({
4200 - queryKey: [_components_css_class_usage_types__WEBPACK_IMPORTED_MODULE_2__.QUERY_KEY],
4201 - queryFn: _service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_1__.fetchCssClassUsage,
4202 - refetchOnMount: false,
4203 - refetchOnWindowFocus: true
4204 - });
4205 -};
4206 -
4207 -/***/ }),
4208 -
4209 -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-dirty-state.ts":
4210 -/*!***********************************************************************************!*\
4211 - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-dirty-state.ts ***!
4212 - \***********************************************************************************/
4213 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4214 -
4215 -__webpack_require__.r(__webpack_exports__);
4216 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4217 -/* harmony export */ useDirtyState: function() { return /* binding */ useDirtyState; }
4218 -/* harmony export */ });
4219 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
4220 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__);
4221 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts");
4222 -
4223 -
4224 -const useDirtyState = () => {
4225 - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectIsDirty);
4226 -};
4227 -
4228 -/***/ }),
4229 -
4230 -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-empty-css-class.ts":
4231 -/*!***************************************************************************************!*\
4232 - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-empty-css-class.ts ***!
4233 - \***************************************************************************************/
4234 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4235 -
4236 -__webpack_require__.r(__webpack_exports__);
4237 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4238 -/* harmony export */ useAllCssClassesIDs: function() { return /* binding */ useAllCssClassesIDs; },
4239 -/* harmony export */ useEmptyCssClass: function() { return /* binding */ useEmptyCssClass; }
4240 -/* harmony export */ });
4241 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
4242 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__);
4243 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts");
4244 -
4245 -
4246 -const useEmptyCssClass = () => {
4247 - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectEmptyCssClass);
4248 -};
4249 -const useAllCssClassesIDs = () => {
4250 - const cssClasses = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectGlobalClasses);
4251 - return Object.keys(cssClasses);
4252 -};
4253 -
4254 -/***/ }),
4255 -
4256 -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-filtered-css-class-usage.tsx":
4257 -/*!*************************************************************************************************!*\
4258 - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-filtered-css-class-usage.tsx ***!
4259 - \*************************************************************************************************/
4260 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4261 -
4262 -__webpack_require__.r(__webpack_exports__);
4263 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4264 -/* harmony export */ useFilteredCssClassUsage: function() { return /* binding */ useFilteredCssClassUsage; }
4265 -/* harmony export */ });
4266 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
4267 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
4268 -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents");
4269 -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__);
4270 -/* harmony import */ var _use_css_class_usage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./use-css-class-usage */ "./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage.ts");
4271 -/* harmony import */ var _use_empty_css_class__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./use-empty-css-class */ "./packages/packages/core/editor-global-classes/src/hooks/use-empty-css-class.ts");
4272 -
4273 -
4274 -
4275 -
4276 -const findCssClassKeysByPageID = (data, pageId) => {
4277 - const result = [];
4278 - for (const key in data) {
4279 - data[key].content.forEach(content => {
4280 - if (+content.pageId === pageId) {
4281 - result.push(key);
4282 - }
4283 - });
4284 - }
4285 - return result;
4286 -};
4287 -const getUnusedClasses = (usedCssClass, potentialUnused) => {
4288 - const set = new Set(usedCssClass);
4289 - return potentialUnused.filter(cssClass => !set.has(cssClass));
4290 -};
4291 -const EMPTY_FILTERED_CSS_CLASS_RESPONSE = {
4292 - empty: [],
4293 - onThisPage: [],
4294 - unused: []
4295 -};
4296 -const useFilteredCssClassUsage = () => {
4297 - const document = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__.__useActiveDocument)();
4298 - const emptyCssClasses = (0,_use_empty_css_class__WEBPACK_IMPORTED_MODULE_3__.useEmptyCssClass)();
4299 - const {
4300 - data,
4301 - isLoading
4302 - } = (0,_use_css_class_usage__WEBPACK_IMPORTED_MODULE_2__.useCssClassUsage)();
4303 - const listOfCssClasses = (0,_use_empty_css_class__WEBPACK_IMPORTED_MODULE_3__.useAllCssClassesIDs)();
4304 - const emptyCssClassesIDs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => emptyCssClasses.map(({
4305 - id
4306 - }) => id), [emptyCssClasses]);
4307 - const onThisPage = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
4308 - if (!data || !document) {
4309 - return [];
4310 - }
4311 - return findCssClassKeysByPageID(data, document.id);
4312 - }, [data, document]);
4313 - const unused = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
4314 - if (!data) {
4315 - return [];
4316 - }
4317 - return getUnusedClasses(Object.keys(data), listOfCssClasses);
4318 - }, [data, listOfCssClasses]);
4319 - if (isLoading || !data || !document) {
4320 - return EMPTY_FILTERED_CSS_CLASS_RESPONSE;
4321 - }
4322 - return {
4323 - onThisPage,
4324 - unused,
4325 - empty: emptyCssClassesIDs
4326 - };
4327 -};
4328 -
4329 -/***/ }),
4330 -
4331 -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-filters.ts":
4332 -/*!*******************************************************************************!*\
4333 - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-filters.ts ***!
4334 - \*******************************************************************************/
4335 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4336 -
4337 -__webpack_require__.r(__webpack_exports__);
4338 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4339 -/* harmony export */ useFilters: function() { return /* binding */ useFilters; }
4340 -/* harmony export */ });
4341 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
4342 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
4343 -/* harmony import */ var _components_search_and_filter_context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/search-and-filter/context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx");
4344 -/* harmony import */ var _use_filtered_css_class_usage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./use-filtered-css-class-usage */ "./packages/packages/core/editor-global-classes/src/hooks/use-filtered-css-class-usage.tsx");
4345 -
4346 -
4347 -
4348 -const useFilters = () => {
4349 - const {
4350 - filters: {
4351 - filters
4352 - }
4353 - } = (0,_components_search_and_filter_context__WEBPACK_IMPORTED_MODULE_1__.useSearchAndFilters)();
4354 - const allFilters = (0,_use_filtered_css_class_usage__WEBPACK_IMPORTED_MODULE_2__.useFilteredCssClassUsage)();
4355 - return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
4356 - const activeEntries = Object.entries(filters).filter(([, isActive]) => isActive);
4357 - if (activeEntries.length === 0) {
4358 - return null;
4359 - }
4360 - return activeEntries.reduce((acc, [key], index) => {
4361 - const current = allFilters[key] || [];
4362 - if (index === 0) {
4363 - return current;
4364 - }
4365 - return acc.filter(val => current.includes(val));
4366 - }, []);
4367 - }, [filters, allFilters]);
4368 -};
4369 -
4370 -/***/ }),
4371 -
4372 -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-ordered-classes.ts":
4373 -/*!***************************************************************************************!*\
4374 - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-ordered-classes.ts ***!
4375 - \***************************************************************************************/
4376 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4377 -
4378 -__webpack_require__.r(__webpack_exports__);
4379 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4380 -/* harmony export */ useOrderedClasses: function() { return /* binding */ useOrderedClasses; }
4381 -/* harmony export */ });
4382 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
4383 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__);
4384 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts");
4385 -
4386 -
4387 -const useOrderedClasses = () => {
4388 - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectOrderedClasses);
4389 -};
4390 -
4391 -/***/ }),
4392 -
4393 -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-prefetch-css-class-usage.ts":
4394 -/*!************************************************************************************************!*\
4395 - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-prefetch-css-class-usage.ts ***!
4396 - \************************************************************************************************/
4397 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4398 -
4399 -__webpack_require__.r(__webpack_exports__);
4400 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4401 -/* harmony export */ PrefetchCssClassUsage: function() { return /* binding */ PrefetchCssClassUsage; },
4402 -/* harmony export */ usePrefetchCssClassUsage: function() { return /* binding */ usePrefetchCssClassUsage; }
4403 -/* harmony export */ });
4404 -/* harmony import */ var _elementor_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/query */ "@elementor/query");
4405 -/* harmony import */ var _elementor_query__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_query__WEBPACK_IMPORTED_MODULE_0__);
4406 -/* harmony import */ var _service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../service/css-class-usage-service */ "./packages/packages/core/editor-global-classes/service/css-class-usage-service.ts");
4407 -/* harmony import */ var _components_css_class_usage_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../components/css-class-usage/types */ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/types.ts");
4408 -
4409 -
4410 -
4411 -function usePrefetchCssClassUsage() {
4412 - const queryClient = (0,_elementor_query__WEBPACK_IMPORTED_MODULE_0__.useQueryClient)();
4413 - const prefetchClassesUsage = () => queryClient.prefetchQuery({
4414 - queryKey: [_components_css_class_usage_types__WEBPACK_IMPORTED_MODULE_2__.QUERY_KEY],
4415 - queryFn: _service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_1__.fetchCssClassUsage
4416 - });
4417 - return {
4418 - prefetchClassesUsage
4419 - };
4420 -}
4421 -const PrefetchCssClassUsage = () => {
4422 - const {
4423 - prefetchClassesUsage
4424 - } = usePrefetchCssClassUsage();
4425 - prefetchClassesUsage();
4426 - return null;
4427 -};
4428 -
4429 -/***/ }),
4430 -
4431 -/***/ "./packages/packages/core/editor-global-classes/src/init.ts":
4432 -/*!******************************************************************!*\
4433 - !*** ./packages/packages/core/editor-global-classes/src/init.ts ***!
4434 - \******************************************************************/
4435 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4436 -
4437 -__webpack_require__.r(__webpack_exports__);
4438 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4439 -/* harmony export */ init: function() { return /* binding */ init; }
4440 -/* harmony export */ });
4441 -/* harmony import */ var _elementor_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor */ "@elementor/editor");
4442 -/* harmony import */ var _elementor_editor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor__WEBPACK_IMPORTED_MODULE_0__);
4443 -/* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-editing-panel */ "@elementor/editor-editing-panel");
4444 -/* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__);
4445 -/* harmony import */ var _elementor_editor_embedded_documents_manager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-embedded-documents-manager */ "@elementor/editor-embedded-documents-manager");
4446 -/* harmony import */ var _elementor_editor_embedded_documents_manager__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_embedded_documents_manager__WEBPACK_IMPORTED_MODULE_2__);
4447 -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp");
4448 -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_3__);
4449 -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository");
4450 -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_4__);
4451 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
4452 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_5__);
4453 -/* harmony import */ var _components_class_manager_class_manager_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/class-manager/class-manager-button */ "./packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-button.tsx");
4454 -/* harmony import */ var _components_convert_local_class_to_global_class__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/convert-local-class-to-global-class */ "./packages/packages/core/editor-global-classes/src/components/convert-local-class-to-global-class.tsx");
4455 -/* harmony import */ var _components_global_styles_import_listener__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/global-styles-import-listener */ "./packages/packages/core/editor-global-classes/src/components/global-styles-import-listener.tsx");
4456 -/* harmony import */ var _components_populate_store__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/populate-store */ "./packages/packages/core/editor-global-classes/src/components/populate-store.tsx");
4457 -/* harmony import */ var _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./global-classes-styles-provider */ "./packages/packages/core/editor-global-classes/src/global-classes-styles-provider.ts");
4458 -/* harmony import */ var _hooks_use_prefetch_css_class_usage__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/use-prefetch-css-class-usage */ "./packages/packages/core/editor-global-classes/src/hooks/use-prefetch-css-class-usage.ts");
4459 -/* harmony import */ var _load_document_classes__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./load-document-classes */ "./packages/packages/core/editor-global-classes/src/load-document-classes.ts");
4460 -/* harmony import */ var _mcp_integration__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./mcp-integration */ "./packages/packages/core/editor-global-classes/src/mcp-integration/index.ts");
4461 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts");
4462 -/* harmony import */ var _sync_with_document__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./sync-with-document */ "./packages/packages/core/editor-global-classes/src/sync-with-document.tsx");
4463 -
4464 -
4465 -
4466 -
4467 -
4468 -
4469 -
4470 -
4471 -
4472 -
4473 -
4474 -
4475 -
4476 -
4477 -
4478 -
4479 -function init() {
4480 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_5__.__registerSlice)(_store__WEBPACK_IMPORTED_MODULE_14__.slice);
4481 - _elementor_editor_embedded_documents_manager__WEBPACK_IMPORTED_MODULE_2__.embeddedDocumentsManager.onDocumentLoad(documentId => {
4482 - void (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_12__.addDocumentClasses)(documentId);
4483 - });
4484 - _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_4__.stylesRepository.register(_global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_10__.globalClassesStylesProvider);
4485 - (0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoLogic)({
4486 - id: 'global-classes-populate-store',
4487 - component: _components_populate_store__WEBPACK_IMPORTED_MODULE_9__.PopulateStore
4488 - });
4489 - (0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoLogic)({
4490 - id: 'global-classes-sync-with-document',
4491 - component: _sync_with_document__WEBPACK_IMPORTED_MODULE_15__.SyncWithDocumentSave
4492 - });
4493 - (0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoLogic)({
4494 - id: 'global-classes-import-listener',
4495 - component: _components_global_styles_import_listener__WEBPACK_IMPORTED_MODULE_8__.GlobalStylesImportListener
4496 - });
4497 - (0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoLogic)({
4498 - id: 'global-classes-prefetch-css-class-usage',
4499 - component: _hooks_use_prefetch_css_class_usage__WEBPACK_IMPORTED_MODULE_11__.PrefetchCssClassUsage
4500 - });
4501 - (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__.injectIntoCssClassConvert)({
4502 - id: 'global-classes-convert-from-local-class',
4503 - component: _components_convert_local_class_to_global_class__WEBPACK_IMPORTED_MODULE_7__.ConvertLocalClassToGlobalClass
4504 - });
4505 - (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__.injectIntoClassSelectorActions)({
4506 - id: 'global-classes-manager-button',
4507 - component: _components_class_manager_class_manager_button__WEBPACK_IMPORTED_MODULE_6__.ClassManagerButton
4508 - });
4509 - (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__.registerStyleProviderToColors)(_global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_10__.GLOBAL_CLASSES_PROVIDER_KEY, {
4510 - name: 'global',
4511 - getThemeColor: theme => theme.palette.global.dark
4512 - });
4513 - (0,_mcp_integration__WEBPACK_IMPORTED_MODULE_13__.initMcpIntegration)((0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_3__.getMCPByDomain)('classes', {
4514 - instructions: 'MCP server for management of Elementor global classes',
4515 - docs: `Everything related to V4 ( Atomic ) global classes.
4516 -# Global classes
4517 -- Create/update/delete global classes
4518 -- Get list of global classes
4519 -- Get details of a global class
4520 -`
4521 - }), (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_3__.getMCPByDomain)('canvas'));
4522 -}
4523 -
4524 -/***/ }),
4525 -
4526 -/***/ "./packages/packages/core/editor-global-classes/src/load-document-classes.ts":
4527 -/*!***********************************************************************************!*\
4528 - !*** ./packages/packages/core/editor-global-classes/src/load-document-classes.ts ***!
4529 - \***********************************************************************************/
4530 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4531 -
4532 -__webpack_require__.r(__webpack_exports__);
4533 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4534 -/* harmony export */ addDocumentClasses: function() { return /* binding */ addDocumentClasses; },
4535 -/* harmony export */ loadCurrentDocumentClasses: function() { return /* binding */ loadCurrentDocumentClasses; },
4536 -/* harmony export */ styleDefinitionsMapWithoutNull: function() { return /* binding */ styleDefinitionsMapWithoutNull; }
4537 -/* harmony export */ });
4538 -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents");
4539 -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__);
4540 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
4541 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_1__);
4542 -/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./api */ "./packages/packages/core/editor-global-classes/src/api.ts");
4543 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts");
4544 -/* harmony import */ var _utils_create_labels_for_classes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/create-labels-for-classes */ "./packages/packages/core/editor-global-classes/src/utils/create-labels-for-classes.ts");
4545 -
4546 -
4547 -
4548 -
4549 -
4550 -function styleDefinitionsMapWithoutNull(map) {
4551 - return Object.fromEntries(Object.entries(map).filter(entry => entry[1] !== null));
4552 -}
4553 -function resetGlobalClassesState(globalOrder, classLabels) {
4554 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.load({
4555 - preview: {
4556 - items: {},
4557 - order: globalOrder
4558 - },
4559 - frontend: {
4560 - items: {},
4561 - order: globalOrder
4562 - },
4563 - classLabels
4564 - }));
4565 -}
4566 -async function loadCurrentDocumentClasses() {
4567 - const [previewIndexRes, frontendIndexRes] = await Promise.all([_api__WEBPACK_IMPORTED_MODULE_2__.apiClient.all('preview'), _api__WEBPACK_IMPORTED_MODULE_2__.apiClient.all('frontend')]);
4568 - const previewIndex = previewIndexRes.data.data;
4569 - const frontendIndex = frontendIndexRes.data.data;
4570 - const classLabels = (0,_utils_create_labels_for_classes__WEBPACK_IMPORTED_MODULE_4__.createLabelsForClasses)(previewIndex);
4571 - const previewOrder = previewIndex.map(e => e.id);
4572 - const frontendOrder = frontendIndex.map(e => e.id);
4573 -
4574 - // This is intended to establish the baseline with current labels and order
4575 - // without it we won't be able to properly resolve the styles' class names
4576 - resetGlobalClassesState(previewOrder, classLabels);
4577 - const postId = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__.getCurrentDocument)()?.id;
4578 - if (!postId) {
4579 - return;
4580 - }
4581 - const [previewPostRes, frontendPostRes] = await Promise.all([_api__WEBPACK_IMPORTED_MODULE_2__.apiClient.getStylesForPost(postId, 'preview'), _api__WEBPACK_IMPORTED_MODULE_2__.apiClient.getStylesForPost(postId, 'frontend')]);
4582 - const previewItems = styleDefinitionsMapWithoutNull(previewPostRes.data.data);
4583 - const frontendItems = styleDefinitionsMapWithoutNull(frontendPostRes.data.data);
4584 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.load({
4585 - preview: {
4586 - items: previewItems,
4587 - order: previewOrder
4588 - },
4589 - frontend: {
4590 - items: frontendItems,
4591 - order: frontendOrder
4592 - },
4593 - classLabels
4594 - }));
4595 -}
4596 -async function addDocumentClasses(documentId) {
4597 - const [previewPostRes, frontendPostRes] = await Promise.all([_api__WEBPACK_IMPORTED_MODULE_2__.apiClient.getStylesForPost(documentId, 'preview'), _api__WEBPACK_IMPORTED_MODULE_2__.apiClient.getStylesForPost(documentId, 'frontend')]);
4598 - const previewItems = styleDefinitionsMapWithoutNull(previewPostRes.data.data);
4599 - const frontendItems = styleDefinitionsMapWithoutNull(frontendPostRes.data.data);
4600 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.mergeExistingClasses({
4601 - preview: previewItems,
4602 - frontend: frontendItems
4603 - }));
4604 -}
4605 -
4606 -/***/ }),
4607 -
4608 -/***/ "./packages/packages/core/editor-global-classes/src/load-existing-classes.ts":
4609 -/*!***********************************************************************************!*\
4610 - !*** ./packages/packages/core/editor-global-classes/src/load-existing-classes.ts ***!
4611 - \***********************************************************************************/
4612 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4613 -
4614 -__webpack_require__.r(__webpack_exports__);
4615 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4616 -/* harmony export */ loadExistingClasses: function() { return /* binding */ loadExistingClasses; }
4617 -/* harmony export */ });
4618 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
4619 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__);
4620 -/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./api */ "./packages/packages/core/editor-global-classes/src/api.ts");
4621 -/* harmony import */ var _load_document_classes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load-document-classes */ "./packages/packages/core/editor-global-classes/src/load-document-classes.ts");
4622 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts");
4623 -
4624 -
4625 -
4626 -
4627 -let pendingLoad = null;
4628 -const pendingIds = new Set();
4629 -async function loadExistingClasses(classIds) {
4630 - const existingClasses = (0,_store__WEBPACK_IMPORTED_MODULE_3__.selectGlobalClasses)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__getState)());
4631 - const missingIds = classIds.filter(id => !(id in existingClasses));
4632 - if (missingIds.length === 0) {
4633 - return;
4634 - }
4635 - missingIds.forEach(id => pendingIds.add(id));
4636 - if (pendingLoad) {
4637 - await pendingLoad;
4638 - return loadExistingClasses(classIds);
4639 - }
4640 - pendingLoad = fetchAndMergeClasses();
4641 - try {
4642 - await pendingLoad;
4643 - } finally {
4644 - pendingLoad = null;
4645 - }
4646 -}
4647 -async function fetchAndMergeClasses() {
4648 - const idsToFetch = Array.from(pendingIds);
4649 - pendingIds.clear();
4650 - if (idsToFetch.length === 0) {
4651 - return;
4652 - }
4653 - const [previewResponse, frontendResponse] = await Promise.all([_api__WEBPACK_IMPORTED_MODULE_1__.apiClient.getStylesByIds(idsToFetch, 'preview'), _api__WEBPACK_IMPORTED_MODULE_1__.apiClient.getStylesByIds(idsToFetch, 'frontend')]);
4654 - const previewItems = (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_2__.styleDefinitionsMapWithoutNull)(previewResponse.data.data);
4655 - const frontendItems = (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_2__.styleDefinitionsMapWithoutNull)(frontendResponse.data.data);
4656 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.mergeExistingClasses({
4657 - preview: previewItems,
4658 - frontend: frontendItems
4659 - }));
4660 -}
4661 -
4662 -/***/ }),
4663 -
4664 -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/apply-global-class-guide-prompt.ts":
4665 -/*!*************************************************************************************************************!*\
4666 - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/apply-global-class-guide-prompt.ts ***!
4667 - \*************************************************************************************************************/
4668 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4669 -
4670 -__webpack_require__.r(__webpack_exports__);
4671 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4672 -/* harmony export */ APPLY_GLOBAL_CLASS_GUIDE_URI: function() { return /* binding */ APPLY_GLOBAL_CLASS_GUIDE_URI; },
4673 -/* harmony export */ generateApplyGlobalClassGuidePrompt: function() { return /* binding */ generateApplyGlobalClassGuidePrompt; }
4674 -/* harmony export */ });
4675 -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp");
4676 -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0__);
4677 -
4678 -const APPLY_GLOBAL_CLASS_GUIDE_URI = 'elementor://global-classes/tools/apply-global-class-guide';
4679 -const generateApplyGlobalClassGuidePrompt = () => {
4680 - const prompt = (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0__.toolPrompts)('apply-global-class');
4681 - prompt.description('Apply a global class to an element, enabling consistent styling through your design system.');
4682 - prompt.instruction(`## When to use this tool:
4683 -**ALWAYS use this IMMEDIATELY AFTER building compositions** to apply the global classes you created beforehand:
4684 -- After using "build-compositions" tool, apply semantic classes to the created elements
3266 +//#endregion
3267 +//#region packages/packages/core/editor-global-classes/src/mcp-integration/apply-global-class-guide-prompt.ts
3268 + var APPLY_GLOBAL_CLASS_GUIDE_URI = "elementor://global-classes/tools/apply-global-class-guide";
3269 + var generateApplyGlobalClassGuidePrompt = () => {
3270 + const prompt = (0, _elementor_editor_mcp.toolPrompts)("apply-global-class");
3271 + prompt.description("Apply a global class to an element, enabling consistent styling through your design system.");
3272 + prompt.instruction(`## When to use this tool:
3273 +**ALWAYS use this IMMEDIATELY AFTER creating or updating elements** to apply the global classes you created beforehand:
3274 +- After adding elements to the canvas, apply semantic classes to them
4685 3275 - When applying consistent typography styles (heading-primary, text-body, etc.)
4686 3276 - When applying theme colors or brand styles (bg-brand, button-cta, etc.)
4687 3277 - When ensuring spacing consistency (spacing-section-large, etc.)
4688 3278
@@ -4688,1795 +3278,270 @@
4688 3278
4689 3279 **DO NOT use this tool** for:
4690 3280 - Elements that don't share styles with other elements (use inline styles instead)
4691 3281 - Layout-specific properties (those should remain inline in stylesConfig)`);
4692 - prompt.instruction(`## Prerequisites:
3282 + prompt.instruction(`## Prerequisites:
4693 3283 - **REQUIRED**: Get the list of available global classes from 'elementor://global-classes' resource
4694 -- **REQUIRED**: Get element IDs from the composition XML returned by "build-compositions" tool
3284 +- **REQUIRED**: Get element IDs from the page structure or selected element resources
4695 3285 - Ensure you have the most up-to-date list of classes applied to the element to avoid duplicates
4696 3286 - Make sure you have the correct class ID that you want to apply`);
4697 - prompt.instruction(`## Best Practices:
3287 + prompt.instruction(`## Best Practices:
4698 3288 1. Apply multiple classes to a single element if needed (typography + color + spacing)
4699 3289 2. After applying, the tool will remind you to remove duplicate inline styles from elementConfig
4700 3290 3. Classes should describe purpose, not implementation (e.g., "heading-primary" not "big-red-text")`);
4701 - return prompt.prompt();
4702 -};
3291 + return prompt.prompt();
3292 + };
4703 3293
4704 -/***/ }),
3294 +//#endregion
3295 +//#region packages/packages/core/editor-global-classes/src/mcp-integration/mcp-apply-unapply-global-classes.ts
3296 + function initMcpApplyUnapplyGlobalClasses(server) {
3297 + const { addTool, resource } = server;
3298 + const applyGlobalClassGuideText = generateApplyGlobalClassGuidePrompt();
3299 + resource("apply-global-class-guide", APPLY_GLOBAL_CLASS_GUIDE_URI, {
3300 + description: "Workflow, prerequisites, and best practices for apply-global-class",
3301 + mimeType: "text/plain",
3302 + title: "Apply global class tool guide"
3303 + }, async (uri) => ({ contents: [{
3304 + mimeType: "text/plain",
3305 + text: applyGlobalClassGuideText,
3306 + uri: uri.href
3307 + }] }));
3308 + addTool({
3309 + schema: {
3310 + classId: _elementor_schema.z.string().describe("The ID of the class to apply"),
3311 + elementId: _elementor_schema.z.string().describe("The ID of the element to which the class will be applied")
3312 + },
3313 + outputSchema: {
3314 + result: _elementor_schema.z.string().describe("Result message indicating the success of the apply operation"),
3315 + llm_instructions: _elementor_schema.z.string().describe("Instructions what to do next, Important to follow these instructions!")
3316 + },
3317 + name: "apply-global-class",
3318 + description: `Apply a global class to an element for shared design-system styling. Read the full guide at [${APPLY_GLOBAL_CLASS_GUIDE_URI}].`,
3319 + requiredResources: [{
3320 + description: "Apply global class tool guide",
3321 + uri: APPLY_GLOBAL_CLASS_GUIDE_URI
3322 + }, {
3323 + description: "Global classes list",
3324 + uri: GLOBAL_CLASSES_URI
3325 + }],
3326 + handler: async (params) => {
3327 + const { classId, elementId } = params;
3328 + (0, _elementor_editor_editing_panel.doApplyClasses)(elementId, [...(0, _elementor_editor_editing_panel.doGetAppliedClasses)(elementId), classId]);
3329 + globalClassesStylesProvider.actions.tracking?.({
3330 + event: "classApplied",
3331 + executedBy: "mcp_tool",
3332 + classId
3333 + });
3334 + return {
3335 + llm_instructions: "Please check the element configuration, find inline styles duplicated by the applied global class, and remove them",
3336 + result: `Class ${classId} applied to element ${elementId} successfully.`
3337 + };
3338 + }
3339 + });
3340 + addTool({
3341 + name: "unapply-global-class",
3342 + schema: {
3343 + classId: _elementor_schema.z.string().describe("The ID of the class to unapply"),
3344 + elementId: _elementor_schema.z.string().describe("The ID of the element from which the class will be unapplied")
3345 + },
3346 + outputSchema: { result: _elementor_schema.z.string().describe("Result message indicating the success of the unapply operation") },
3347 + description: `Unapply a global class from an element by class ID. Resolve class names to IDs via [${GLOBAL_CLASSES_URI}].`,
3348 + requiredResources: [{
3349 + description: "Global classes list",
3350 + uri: GLOBAL_CLASSES_URI
3351 + }],
3352 + handler: async (params) => {
3353 + const { classId, elementId } = params;
3354 + if (!(0, _elementor_editor_editing_panel.doUnapplyClass)(elementId, classId)) throw new Error(`Class ${classId} is not applied to element ${elementId}, cannot unapply it.`);
3355 + return { result: `Class ${classId} unapplied from element ${elementId} successfully.` };
3356 + }
3357 + });
3358 + }
4705 3359
4706 -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/classes-resource.ts":
4707 -/*!**********************************************************************************************!*\
4708 - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/classes-resource.ts ***!
4709 - \**********************************************************************************************/
4710 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3360 +//#endregion
3361 +//#region packages/packages/core/editor-global-classes/src/mcp-integration/mcp-get-global-class-usages.ts
3362 + function initMcpApplyGetGlobalClassUsages(reg) {
3363 + const { addTool } = reg;
3364 + const globalClassesUsageSchema = { usages: _elementor_schema.z.array(_elementor_schema.z.object({
3365 + classId: _elementor_schema.z.string().describe("The ID of the class, not visible to the user. To retrieve the name of the class, use the \"list-global-classes\" tool"),
3366 + usages: _elementor_schema.z.array(_elementor_schema.z.object({
3367 + pageId: _elementor_schema.z.string().describe("The ID of the page where the class is used"),
3368 + title: _elementor_schema.z.string().describe("The title of the page where the class is used"),
3369 + total: _elementor_schema.z.number().describe("The number of times the class is used on this page"),
3370 + elements: _elementor_schema.z.array(_elementor_schema.z.string()).describe("List of element IDs using this class on the page")
3371 + }))
3372 + })) };
3373 + addTool({
3374 + name: "get-global-class-usages",
3375 + description: `Retrieve usages of global classes across all Elementor pages. Heavy operation \u2014 scans every page in the site.
4711 3376
4712 -__webpack_require__.r(__webpack_exports__);
4713 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4714 -/* harmony export */ GLOBAL_CLASSES_URI: function() { return /* binding */ GLOBAL_CLASSES_URI; },
4715 -/* harmony export */ initClassesResource: function() { return /* binding */ initClassesResource; }
4716 -/* harmony export */ });
4717 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
4718 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__);
4719 -/* harmony import */ var _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../global-classes-styles-provider */ "./packages/packages/core/editor-global-classes/src/global-classes-styles-provider.ts");
4720 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts");
4721 -
4722 -
4723 -
4724 -const GLOBAL_CLASSES_URI = 'elementor://global-classes';
4725 -const STORAGE_KEY = 'elementor-global-classes';
4726 -const updateLocalStorageCache = () => {
4727 - const classes = (0,_store__WEBPACK_IMPORTED_MODULE_2__.selectOrderedClasses)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__getState)());
4728 - localStorage.setItem(STORAGE_KEY, JSON.stringify(classes));
4729 -};
4730 -const initClassesResource = (classesMcpEntry, canvasMcpEntry) => {
4731 - [canvasMcpEntry, classesMcpEntry].forEach(entry => {
4732 - const {
4733 - sendResourceUpdated,
4734 - resource,
4735 - waitForReady
4736 - } = entry;
4737 - resource('global-classes', GLOBAL_CLASSES_URI, {
4738 - description: 'Global classes list.'
4739 - }, async () => {
4740 - return {
4741 - contents: [{
4742 - uri: GLOBAL_CLASSES_URI,
4743 - text: localStorage[STORAGE_KEY] ?? '[]'
4744 - }]
4745 - };
4746 - });
4747 - waitForReady().then(() => {
4748 - updateLocalStorageCache();
4749 - _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_1__.globalClassesStylesProvider.subscribe(() => {
4750 - updateLocalStorageCache();
4751 - sendResourceUpdated({
4752 - uri: GLOBAL_CLASSES_URI
4753 - });
4754 - });
4755 - });
4756 - });
4757 -};
4758 -
4759 -/***/ }),
4760 -
4761 -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/index.ts":
4762 -/*!***********************************************************************************!*\
4763 - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/index.ts ***!
4764 - \***********************************************************************************/
4765 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4766 -
4767 -__webpack_require__.r(__webpack_exports__);
4768 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4769 -/* harmony export */ initMcpIntegration: function() { return /* binding */ initMcpIntegration; }
4770 -/* harmony export */ });
4771 -/* harmony import */ var _classes_resource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./classes-resource */ "./packages/packages/core/editor-global-classes/src/mcp-integration/classes-resource.ts");
4772 -/* harmony import */ var _mcp_apply_unapply_global_classes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mcp-apply-unapply-global-classes */ "./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-apply-unapply-global-classes.ts");
4773 -/* harmony import */ var _mcp_get_global_class_usages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mcp-get-global-class-usages */ "./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-get-global-class-usages.ts");
4774 -/* harmony import */ var _mcp_manage_global_classes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mcp-manage-global-classes */ "./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-manage-global-classes.ts");
4775 -
4776 -
4777 -
4778 -
4779 -const initMcpIntegration = (reg, canvasMcpEntry) => {
4780 - (0,_mcp_apply_unapply_global_classes__WEBPACK_IMPORTED_MODULE_1__["default"])(reg);
4781 - (0,_mcp_get_global_class_usages__WEBPACK_IMPORTED_MODULE_2__["default"])(reg);
4782 - (0,_mcp_manage_global_classes__WEBPACK_IMPORTED_MODULE_3__.initManageGlobalClasses)(reg);
4783 - (0,_classes_resource__WEBPACK_IMPORTED_MODULE_0__.initClassesResource)(reg, canvasMcpEntry);
4784 -};
4785 -
4786 -/***/ }),
4787 -
4788 -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-apply-unapply-global-classes.ts":
4789 -/*!**************************************************************************************************************!*\
4790 - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-apply-unapply-global-classes.ts ***!
4791 - \**************************************************************************************************************/
4792 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4793 -
4794 -__webpack_require__.r(__webpack_exports__);
4795 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4796 -/* harmony export */ "default": function() { return /* binding */ initMcpApplyUnapplyGlobalClasses; }
4797 -/* harmony export */ });
4798 -/* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-editing-panel */ "@elementor/editor-editing-panel");
4799 -/* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0__);
4800 -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/schema */ "@elementor/schema");
4801 -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_schema__WEBPACK_IMPORTED_MODULE_1__);
4802 -/* harmony import */ var _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../global-classes-styles-provider */ "./packages/packages/core/editor-global-classes/src/global-classes-styles-provider.ts");
4803 -/* harmony import */ var _apply_global_class_guide_prompt__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./apply-global-class-guide-prompt */ "./packages/packages/core/editor-global-classes/src/mcp-integration/apply-global-class-guide-prompt.ts");
4804 -/* harmony import */ var _classes_resource__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./classes-resource */ "./packages/packages/core/editor-global-classes/src/mcp-integration/classes-resource.ts");
4805 -
4806 -
4807 -
4808 -
4809 -
4810 -function initMcpApplyUnapplyGlobalClasses(server) {
4811 - const {
4812 - addTool,
4813 - resource
4814 - } = server;
4815 - const applyGlobalClassGuideText = (0,_apply_global_class_guide_prompt__WEBPACK_IMPORTED_MODULE_3__.generateApplyGlobalClassGuidePrompt)();
4816 - resource('apply-global-class-guide', _apply_global_class_guide_prompt__WEBPACK_IMPORTED_MODULE_3__.APPLY_GLOBAL_CLASS_GUIDE_URI, {
4817 - description: 'Workflow, prerequisites, and best practices for apply-global-class',
4818 - mimeType: 'text/plain',
4819 - title: 'Apply global class tool guide'
4820 - }, async uri => ({
4821 - contents: [{
4822 - mimeType: 'text/plain',
4823 - text: applyGlobalClassGuideText,
4824 - uri: uri.href
4825 - }]
4826 - }));
4827 - addTool({
4828 - schema: {
4829 - classId: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('The ID of the class to apply'),
4830 - elementId: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('The ID of the element to which the class will be applied')
4831 - },
4832 - outputSchema: {
4833 - result: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('Result message indicating the success of the apply operation'),
4834 - llm_instructions: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('Instructions what to do next, Important to follow these instructions!')
4835 - },
4836 - name: 'apply-global-class',
4837 - description: `Apply a global class to an element for shared design-system styling. Read the full guide at [${_apply_global_class_guide_prompt__WEBPACK_IMPORTED_MODULE_3__.APPLY_GLOBAL_CLASS_GUIDE_URI}].`,
4838 - requiredResources: [{
4839 - description: 'Apply global class tool guide',
4840 - uri: _apply_global_class_guide_prompt__WEBPACK_IMPORTED_MODULE_3__.APPLY_GLOBAL_CLASS_GUIDE_URI
4841 - }, {
4842 - description: 'Global classes list',
4843 - uri: _classes_resource__WEBPACK_IMPORTED_MODULE_4__.GLOBAL_CLASSES_URI
4844 - }],
4845 - handler: async params => {
4846 - const {
4847 - classId,
4848 - elementId
4849 - } = params;
4850 - const appliedClasses = (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0__.doGetAppliedClasses)(elementId);
4851 - (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0__.doApplyClasses)(elementId, [...appliedClasses, classId]);
4852 - _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_2__.globalClassesStylesProvider.actions.tracking?.({
4853 - event: 'classApplied',
4854 - executedBy: 'mcp_tool',
4855 - classId
4856 - });
4857 - return {
4858 - llm_instructions: 'Please check the element configuration, find inline styles duplicated by the applied global class, and remove them',
4859 - result: `Class ${classId} applied to element ${elementId} successfully.`
4860 - };
4861 - }
4862 - });
4863 - addTool({
4864 - name: 'unapply-global-class',
4865 - schema: {
4866 - classId: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('The ID of the class to unapply'),
4867 - elementId: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('The ID of the element from which the class will be unapplied')
4868 - },
4869 - outputSchema: {
4870 - result: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('Result message indicating the success of the unapply operation')
4871 - },
4872 - description: `Unapply a global class from an element by class ID. Resolve class names to IDs via [${_classes_resource__WEBPACK_IMPORTED_MODULE_4__.GLOBAL_CLASSES_URI}].`,
4873 - requiredResources: [{
4874 - description: 'Global classes list',
4875 - uri: _classes_resource__WEBPACK_IMPORTED_MODULE_4__.GLOBAL_CLASSES_URI
4876 - }],
4877 - handler: async params => {
4878 - const {
4879 - classId,
4880 - elementId
4881 - } = params;
4882 - const ok = (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0__.doUnapplyClass)(elementId, classId);
4883 - if (!ok) {
4884 - throw new Error(`Class ${classId} is not applied to element ${elementId}, cannot unapply it.`);
4885 - }
4886 - return {
4887 - result: `Class ${classId} unapplied from element ${elementId} successfully.`
4888 - };
4889 - }
4890 - });
4891 -}
4892 -
4893 -/***/ }),
4894 -
4895 -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-get-global-class-usages.ts":
4896 -/*!*********************************************************************************************************!*\
4897 - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-get-global-class-usages.ts ***!
4898 - \*********************************************************************************************************/
4899 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4900 -
4901 -__webpack_require__.r(__webpack_exports__);
4902 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4903 -/* harmony export */ "default": function() { return /* binding */ initMcpApplyGetGlobalClassUsages; }
4904 -/* harmony export */ });
4905 -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/schema */ "@elementor/schema");
4906 -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_schema__WEBPACK_IMPORTED_MODULE_0__);
4907 -/* harmony import */ var _service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../service/css-class-usage-service */ "./packages/packages/core/editor-global-classes/service/css-class-usage-service.ts");
4908 -/* harmony import */ var _classes_resource__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./classes-resource */ "./packages/packages/core/editor-global-classes/src/mcp-integration/classes-resource.ts");
4909 -
4910 -
4911 -
4912 -function initMcpApplyGetGlobalClassUsages(reg) {
4913 - const {
4914 - addTool
4915 - } = reg;
4916 - const globalClassesUsageSchema = {
4917 - usages: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.array(_elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.object({
4918 - classId: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.string().describe('The ID of the class, not visible to the user. To retrieve the name of the class, use the "list-global-classes" tool'),
4919 - usages: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.array(_elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.object({
4920 - pageId: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.string().describe('The ID of the page where the class is used'),
4921 - title: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.string().describe('The title of the page where the class is used'),
4922 - total: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.number().describe('The number of times the class is used on this page'),
4923 - elements: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.array(_elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.string()).describe('List of element IDs using this class on the page')
4924 - }))
4925 - }))
4926 - };
4927 - addTool({
4928 - name: 'get-global-class-usages',
4929 - description: `Retrieve usages of global classes across all Elementor pages. Heavy operation — scans every page in the site.
4930 -
4931 3377 ## When to use:
4932 -- Before deleting or radically changing a class — to understand cross-page side effects and decide whether to consult the user.
3378 +- Before deleting or radically changing a class \u2014 to understand cross-page side effects and decide whether to consult the user.
4933 3379 - To identify unused global classes for cleanup.
4934 3380
4935 3381 ## When NOT to use:
4936 -- To list global classes themselves — use the global-classes resource instead (this tool returns usages, not the class list).`,
4937 - requiredResources: [{
4938 - description: 'Global classes list',
4939 - uri: _classes_resource__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_CLASSES_URI
4940 - }],
4941 - outputSchema: globalClassesUsageSchema,
4942 - handler: async () => {
4943 - const data = await (0,_service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_1__.fetchCssClassUsage)();
4944 - const result = {
4945 - usages: []
4946 - };
4947 - Object.entries(data).forEach(([classId, usageDetails]) => {
4948 - const newEntry = {
4949 - classId,
4950 - usages: []
4951 - };
4952 - if (typeof usageDetails !== 'number') {
4953 - const {
4954 - content
4955 - } = usageDetails;
4956 - content.forEach(detail => {
4957 - newEntry.usages.push({
4958 - pageId: String(detail.pageId),
4959 - title: detail.title,
4960 - total: detail.total,
4961 - elements: detail.elements
4962 - });
4963 - });
4964 - result.usages.push(newEntry);
4965 - }
4966 - });
4967 - return result;
4968 - }
4969 - });
4970 -}
3382 +- To list global classes themselves \u2014 use the global-classes resource instead (this tool returns usages, not the class list).`,
3383 + requiredResources: [{
3384 + description: "Global classes list",
3385 + uri: GLOBAL_CLASSES_URI
3386 + }],
3387 + outputSchema: globalClassesUsageSchema,
3388 + handler: async () => {
3389 + const data = await fetchCssClassUsage();
3390 + const result = { usages: [] };
3391 + Object.entries(data).forEach(([classId, usageDetails]) => {
3392 + const newEntry = {
3393 + classId,
3394 + usages: []
3395 + };
3396 + if (typeof usageDetails !== "number") {
3397 + const { content } = usageDetails;
3398 + content.forEach((detail) => {
3399 + newEntry.usages.push({
3400 + pageId: String(detail.pageId),
3401 + title: detail.title,
3402 + total: detail.total,
3403 + elements: detail.elements
3404 + });
3405 + });
3406 + result.usages.push(newEntry);
3407 + }
3408 + });
3409 + return result;
3410 + }
3411 + });
3412 + }
4971 3413
4972 -/***/ }),
3414 +//#endregion
3415 +//#region packages/packages/core/editor-global-classes/src/mcp-integration/index.ts
3416 + var initMcpIntegration = (reg, canvasMcpEntry) => {
3417 + initMcpApplyUnapplyGlobalClasses(reg);
3418 + initMcpApplyGetGlobalClassUsages(reg);
3419 + initManageClassesTool(reg);
3420 + initClassesResource(reg, canvasMcpEntry);
3421 + };
4973 3422
4974 -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-manage-global-classes.ts":
4975 -/*!*******************************************************************************************************!*\
4976 - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-manage-global-classes.ts ***!
4977 - \*******************************************************************************************************/
4978 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3423 +//#endregion
3424 +//#region packages/packages/core/editor-global-classes/src/sync-with-document-save.ts
3425 + var pendingSave = null;
3426 + function syncWithDocumentSave(panelActions) {
3427 + const unsubscribe = syncDirtyState();
3428 + bindSaveAction(panelActions);
3429 + bindBeforeSaveTemplateAction();
3430 + return unsubscribe;
3431 + }
3432 + function syncDirtyState() {
3433 + return (0, _elementor_store.__subscribeWithSelector)(selectIsDirty, () => {
3434 + if (!isDirty()) return;
3435 + (0, _elementor_editor_documents.setDocumentModifiedStatus)(true);
3436 + });
3437 + }
3438 + function triggerSave(panelActions, context = "preview") {
3439 + if (!(0, _elementor_editor_current_user.getCurrentUser)()?.capabilities.includes("elementor_global_classes_update_class")) return null;
3440 + if (pendingSave) return pendingSave;
3441 + const promise = saveGlobalClasses({
3442 + context,
3443 + onApprove: panelActions?.open
3444 + });
3445 + pendingSave = promise;
3446 + promise.finally(() => {
3447 + pendingSave = null;
3448 + });
3449 + return promise;
3450 + }
3451 + function bindSaveAction(panelActions) {
3452 + (0, _elementor_editor_v1_adapters.registerDataHook)("dependency", "document/save/save", (args) => {
3453 + triggerSave(panelActions, args.status === "publish" ? "frontend" : "preview");
3454 + return true;
3455 + });
3456 + }
3457 + function bindBeforeSaveTemplateAction() {
3458 + window.addEventListener("elementor/global-styles/before-save", (event) => {
3459 + if (!pendingSave && isDirty()) triggerSave();
3460 + if (pendingSave) event.detail.promises.push(pendingSave);
3461 + });
3462 + }
3463 + function isDirty() {
3464 + return selectIsDirty((0, _elementor_store.__getState)());
3465 + }
4979 3466
4980 -__webpack_require__.r(__webpack_exports__);
4981 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4982 -/* harmony export */ initManageGlobalClasses: function() { return /* binding */ initManageGlobalClasses; }
4983 -/* harmony export */ });
4984 -/* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-canvas */ "@elementor/editor-canvas");
4985 -/* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__);
4986 -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp");
4987 -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__);
4988 -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/schema */ "@elementor/schema");
4989 -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_schema__WEBPACK_IMPORTED_MODULE_2__);
4990 -/* harmony import */ var _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../global-classes-styles-provider */ "./packages/packages/core/editor-global-classes/src/global-classes-styles-provider.ts");
4991 -/* harmony import */ var _load_existing_classes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../load-existing-classes */ "./packages/packages/core/editor-global-classes/src/load-existing-classes.ts");
4992 -/* harmony import */ var _save_global_classes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../save-global-classes */ "./packages/packages/core/editor-global-classes/src/save-global-classes.tsx");
4993 -/* harmony import */ var _classes_resource__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./classes-resource */ "./packages/packages/core/editor-global-classes/src/mcp-integration/classes-resource.ts");
3467 +//#endregion
3468 +//#region packages/packages/core/editor-global-classes/src/sync-with-document.tsx
3469 + function SyncWithDocumentSave() {
3470 + (0, react.useEffect)(() => {
3471 + return (0, _elementor_editor_v1_adapters.__privateListenTo)((0, _elementor_editor_v1_adapters.v1ReadyEvent)(), () => {
3472 + const open = () => {
3473 + window.dispatchEvent(new CustomEvent("elementor/open-global-classes-manager"));
3474 + };
3475 + syncWithDocumentSave({ open });
3476 + });
3477 + }, []);
3478 + return null;
3479 + }
4994 3480
3481 +//#endregion
3482 +//#region packages/packages/core/editor-global-classes/src/init.ts
3483 + function init() {
3484 + (0, _elementor_store.__registerSlice)(slice);
3485 + _elementor_editor_embedded_documents_manager.embeddedDocumentsManager.onDocumentLoad((documentId) => {
3486 + addDocumentClasses(documentId);
3487 + });
3488 + _elementor_editor_styles_repository.stylesRepository.register(globalClassesStylesProvider);
3489 + (0, _elementor_editor.injectIntoLogic)({
3490 + id: "global-classes-populate-store",
3491 + component: PopulateStore
3492 + });
3493 + (0, _elementor_editor.injectIntoLogic)({
3494 + id: "global-classes-sync-with-document",
3495 + component: SyncWithDocumentSave
3496 + });
3497 + (0, _elementor_editor.injectIntoLogic)({
3498 + id: "global-classes-import-listener",
3499 + component: GlobalStylesImportListener
3500 + });
3501 + (0, _elementor_editor.injectIntoLogic)({
3502 + id: "global-classes-prefetch-css-class-usage",
3503 + component: PrefetchCssClassUsage
3504 + });
3505 + (0, _elementor_editor_editing_panel.injectIntoCssClassConvert)({
3506 + id: "global-classes-convert-from-local-class",
3507 + component: ConvertLocalClassToGlobalClass
3508 + });
3509 + (0, _elementor_editor_editing_panel.injectIntoClassSelectorActions)({
3510 + id: "global-classes-manager-button",
3511 + component: ClassManagerButton
3512 + });
3513 + (0, _elementor_editor_editing_panel.registerStyleProviderToColors)(GLOBAL_CLASSES_PROVIDER_KEY, {
3514 + name: "global",
3515 + getThemeColor: (theme) => theme.palette.global.dark
3516 + });
3517 + initMcpIntegration((0, _elementor_editor_mcp.getMCPByDomain)("classes", {
3518 + instructions: "MCP server for management of Elementor global classes",
3519 + docs: `Everything related to V4 ( Atomic ) global classes.
3520 +# Global classes
3521 +- Create/update/delete global classes
3522 +- Get list of global classes
3523 +- Get details of a global class
3524 +`
3525 + }), (0, _elementor_editor_mcp.getMCPByDomain)("canvas"));
3526 + }
4995 3527
3528 +//#endregion
3529 +//#region packages/packages/core/editor-global-classes/src/index.ts
3530 + var src_exports = /* @__PURE__ */ __exportAll({
3531 + ClassManagerPanelEmbedded: () => ClassManagerPanelEmbedded,
3532 + GLOBAL_CLASSES_URI: () => GLOBAL_CLASSES_URI,
3533 + addDocumentClasses: () => addDocumentClasses,
3534 + createLabelsForClasses: () => createLabelsForClasses,
3535 + init: () => init,
3536 + loadExistingClasses: () => loadExistingClasses,
3537 + trackGlobalClasses: () => trackGlobalClasses
3538 + });
4996 3539
3540 +//#endregion
3541 +//#region \0elementor-package-library-entry
3542 + (window.elementorV2 = window.elementorV2 || {}).editorGlobalClasses = src_exports;
4997 3543
4998 -
4999 -
5000 -
5001 -const schema = {
5002 - action: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.enum(['create', 'modify', 'delete']).describe('Operation to perform'),
5003 - classId: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().optional().describe('Global class ID (required for modify). Get from elementor://global-classes resource.'),
5004 - globalClassName: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().optional().describe('Global class name (required for create)'),
5005 - style: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.object({
5006 - default: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().describe('Plaintext CSS for the default state. MUST be non-empty — blank strings are rejected.'),
5007 - hover: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().describe('Plaintext CSS for the :hover state. optional').optional(),
5008 - focus: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().describe('Plaintext CSS for the :focus state. optional').optional(),
5009 - active: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().describe('Plaintext CSS for the :active state. optional').optional()
5010 - }).describe('Plaintext CSS per pseudo-state. All states are converted in one bulk request; unconvertible declarations are stored as custom CSS.'),
5011 - breakpoint: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.nullable(_elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().describe('Responsive breakpoint name for styles. Defaults to desktop (null).')).default(null).describe('Responsive breakpoint name for styles. Defaults to desktop (null).')
5012 -};
5013 -const outputSchema = {
5014 - status: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.enum(['ok', 'error']).describe('Operation status'),
5015 - classId: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().optional().describe('Class ID (returned on create success)'),
5016 - message: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().optional().describe('Error details if status is error')
5017 -};
5018 -const handler = async input => {
5019 - const {
5020 - action,
5021 - classId: rawClassId,
5022 - globalClassName,
5023 - style: rawStyle,
5024 - breakpoint
5025 - } = input;
5026 - let classId = rawClassId;
5027 - if (action === 'create' && !globalClassName) {
5028 - return {
5029 - status: 'error',
5030 - message: 'Create requires globalClassName'
5031 - };
5032 - }
5033 - if (action === 'modify' && !classId) {
5034 - return {
5035 - status: 'error',
5036 - message: 'Modify requires classId'
5037 - };
5038 - }
5039 - if (action === 'delete' && !classId) {
5040 - return {
5041 - status: 'error',
5042 - message: 'Delete requires classId'
5043 - };
5044 - }
5045 - const {
5046 - create,
5047 - update,
5048 - delete: deleteClass
5049 - } = _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_3__.globalClassesStylesProvider.actions;
5050 - if (!create || !update || !deleteClass) {
5051 - return {
5052 - status: 'error',
5053 - message: 'Required actions not available'
5054 - };
5055 - }
5056 - const styleBlocks = collectNonEmptyStyleBlocks(rawStyle);
5057 - if (action !== 'delete' && Object.keys(styleBlocks).length === 0) {
5058 - throw new Error('Style must not be empty. Provide plaintext CSS per state.\n\nExample: style.default = "display: flex; flex-direction: column; gap: 1rem;"');
5059 - }
5060 - let convertedByState = {};
5061 - if (action !== 'delete') {
5062 - const conversionResults = await (0,_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.convertStyleBlocksToAtomic)(styleBlocks);
5063 - convertedByState = Object.fromEntries(Object.entries(conversionResults).map(([state, {
5064 - props,
5065 - customCss
5066 - }]) => [state, {
5067 - props: props,
5068 - customCss: toStoredCustomCss(customCss)
5069 - }]));
5070 - }
5071 - const breakpointValue = breakpoint ?? 'desktop';
5072 - let result = {
5073 - status: 'error',
5074 - classId: '',
5075 - message: 'unknown error'
5076 - };
5077 - try {
5078 - if (action === 'delete') {
5079 - const deleted = await attemptDelete({
5080 - classId,
5081 - stylesProvider: _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_3__.globalClassesStylesProvider
5082 - });
5083 - if (deleted) {
5084 - return {
5085 - status: 'ok',
5086 - message: `deleted global class with ID ${classId}`
5087 - };
5088 - }
5089 - throw new Error('error deleting class');
5090 - }
5091 - let currentAction = action;
5092 - for await (const [state, {
5093 - props,
5094 - customCss
5095 - }] of Object.entries(convertedByState)) {
5096 - switch (currentAction) {
5097 - case 'create':
5098 - const newClassId = await attemptCreate({
5099 - props,
5100 - customCss,
5101 - className: globalClassName,
5102 - stylesProvider: _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_3__.globalClassesStylesProvider,
5103 - breakpoint: breakpointValue,
5104 - state: state
5105 - });
5106 - if (newClassId && currentAction === 'create') {
5107 - currentAction = 'modify';
5108 - classId = newClassId;
5109 - result = {
5110 - status: 'ok',
5111 - message: `created global class with ID ${newClassId}`
5112 - };
5113 - _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_3__.globalClassesStylesProvider.actions.tracking?.({
5114 - event: 'classCreated',
5115 - executedBy: 'mcp_tool',
5116 - classId: newClassId
5117 - });
5118 - (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__.dispatchMcpStylesAppliedEvent)({
5119 - styleValue: props
5120 - });
5121 - } else {
5122 - throw new Error('error creating class');
5123 - }
5124 - break;
5125 - case 'modify':
5126 - const updated = await attemptUpdate({
5127 - classId,
5128 - props,
5129 - customCss,
5130 - stylesProvider: _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_3__.globalClassesStylesProvider,
5131 - breakpoint: breakpointValue,
5132 - state: state
5133 - });
5134 - if (updated) {
5135 - result = {
5136 - status: 'ok',
5137 - classId
5138 - };
5139 - (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__.dispatchMcpStylesAppliedEvent)({
5140 - styleValue: props
5141 - });
5142 - } else {
5143 - throw new Error('error modifying class');
5144 - }
5145 - break;
5146 - default:
5147 - throw new Error(`Unsupported action ${action}`);
5148 - }
5149 - }
5150 - } catch (error) {
5151 - return {
5152 - status: 'error',
5153 - message: `${action} failed: ${error.message || 'Unknown error'}`
5154 - };
5155 - }
5156 - return result;
5157 -};
5158 -const initManageGlobalClasses = reg => {
5159 - const {
5160 - addTool
5161 - } = reg;
5162 - addTool({
5163 - name: 'manage-global-classes',
5164 - requiredResources: [{
5165 - uri: _classes_resource__WEBPACK_IMPORTED_MODULE_6__.GLOBAL_CLASSES_URI,
5166 - description: 'Global classes list'
5167 - }, {
5168 - uri: _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.BREAKPOINTS_SCHEMA_FULL_URI,
5169 - description: 'Breakpoints list'
5170 - }],
5171 - description: `Create or modify global classes for reusable design-system styling. Class names must reflect purpose (e.g. heading-primary, button-cta). Create classes BEFORE applying them. Do NOT create classes for one-off styles.
5172 -
5173 -IMPORTANT: style must contain plaintext CSS rules per state — never pass empty strings.
5174 -CSS is converted server-side in one bulk request; any declaration that cannot be converted is stored as the class custom CSS.
5175 -
5176 -Example — creating a flex column class:
5177 -style.default = "display: flex; flex-direction: column; gap: 1rem;"
5178 -
5179 -Example — hover state:
5180 -style.hover = "opacity: 0.85;"`,
5181 - schema,
5182 - outputSchema,
5183 - handler
5184 - });
5185 -};
5186 -async function attemptCreate(opts) {
5187 - const {
5188 - props,
5189 - customCss,
5190 - breakpoint,
5191 - className,
5192 - stylesProvider,
5193 - state
5194 - } = opts;
5195 - const {
5196 - create,
5197 - delete: deleteClass
5198 - } = stylesProvider.actions;
5199 - if (!className) {
5200 - throw new Error('Global class name is a required for creation');
5201 - }
5202 - if (!create || !deleteClass) {
5203 - throw new Error('User is unable to create global classes');
5204 - }
5205 - const newClassId = create(className, [{
5206 - meta: {
5207 - breakpoint,
5208 - state: state === 'default' ? null : state
5209 - },
5210 - custom_css: customCss,
5211 - props
5212 - }]);
5213 - try {
5214 - await (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_5__.saveGlobalClasses)({
5215 - context: 'frontend'
5216 - });
5217 - return newClassId;
5218 - } catch {
5219 - deleteClass(newClassId);
5220 - throw new Error('error creating class');
5221 - }
5222 -}
5223 -async function attemptUpdate(opts) {
5224 - const {
5225 - props,
5226 - customCss,
5227 - breakpoint,
5228 - classId,
5229 - stylesProvider,
5230 - state
5231 - } = opts;
5232 - const {
5233 - updateProps,
5234 - update
5235 - } = stylesProvider.actions;
5236 - if (!classId) {
5237 - throw new Error('Class ID is required for modification');
5238 - }
5239 - if (!updateProps || !update) {
5240 - throw new Error('User is unable to update global classes');
5241 - }
5242 - await (0,_load_existing_classes__WEBPACK_IMPORTED_MODULE_4__.loadExistingClasses)([classId]);
5243 - const snapshot = structuredClone(stylesProvider.actions.all());
5244 - try {
5245 - updateProps({
5246 - id: classId,
5247 - props,
5248 - custom_css: customCss,
5249 - meta: {
5250 - breakpoint,
5251 - state: state === 'default' ? null : state
5252 - }
5253 - });
5254 - await (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_5__.saveGlobalClasses)({
5255 - context: 'frontend'
5256 - });
5257 - return true;
5258 - } catch {
5259 - snapshot.forEach(style => {
5260 - update({
5261 - id: style.id,
5262 - variants: style.variants
5263 - });
5264 - });
5265 - await (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_5__.saveGlobalClasses)({
5266 - context: 'frontend'
5267 - });
5268 - throw new Error('error updating class');
5269 - }
5270 -}
5271 -async function attemptDelete(opts) {
5272 - const {
5273 - classId,
5274 - stylesProvider
5275 - } = opts;
5276 - const {
5277 - delete: deleteClass,
5278 - create
5279 - } = stylesProvider.actions;
5280 - if (!classId) {
5281 - throw new Error('Class ID is required for deletion');
5282 - }
5283 - if (!deleteClass || !create) {
5284 - throw new Error('User is unable to delete global classes');
5285 - }
5286 - const snapshot = structuredClone(stylesProvider.actions.all());
5287 - const targetClass = snapshot.find(style => style.id === classId);
5288 - if (!targetClass) {
5289 - throw new Error(`Class with ID "${classId}" not found`);
5290 - }
5291 - deleteClass(classId);
5292 - await (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_5__.saveGlobalClasses)({
5293 - context: 'frontend'
5294 - });
5295 - return true;
5296 -}
5297 -function collectNonEmptyStyleBlocks(style) {
5298 - const blocks = {};
5299 - Object.entries(style).forEach(([state, cssText]) => {
5300 - if (cssText?.trim()) {
5301 - blocks[state] = cssText.trim();
5302 - }
5303 - });
5304 - return blocks;
5305 -}
5306 -function toStoredCustomCss(customCss) {
5307 - if (!customCss?.trim()) {
5308 - return null;
5309 - }
5310 - return {
5311 - raw: btoa(customCss)
5312 - };
5313 -}
5314 -
5315 -/***/ }),
5316 -
5317 -/***/ "./packages/packages/core/editor-global-classes/src/save-global-classes.tsx":
5318 -/*!**********************************************************************************!*\
5319 - !*** ./packages/packages/core/editor-global-classes/src/save-global-classes.tsx ***!
5320 - \**********************************************************************************/
5321 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
5322 -
5323 -__webpack_require__.r(__webpack_exports__);
5324 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5325 -/* harmony export */ saveGlobalClasses: function() { return /* binding */ saveGlobalClasses; }
5326 -/* harmony export */ });
5327 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
5328 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
5329 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui");
5330 -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__);
5331 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
5332 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_2__);
5333 -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils");
5334 -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_3__);
5335 -/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./api */ "./packages/packages/core/editor-global-classes/src/api.ts");
5336 -/* harmony import */ var _components_class_manager_duplicate_label_dialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/class-manager/duplicate-label-dialog */ "./packages/packages/core/editor-global-classes/src/components/class-manager/duplicate-label-dialog.tsx");
5337 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts");
5338 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
5339 -
5340 -
5341 -
5342 -
5343 -
5344 -
5345 -
5346 -
5347 -async function saveGlobalClasses({
5348 - context,
5349 - onApprove
5350 -}) {
5351 - const state = (0,_store__WEBPACK_IMPORTED_MODULE_6__.selectData)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)());
5352 - const apiAction = context === 'preview' ? _api__WEBPACK_IMPORTED_MODULE_4__.apiClient.saveDraft : _api__WEBPACK_IMPORTED_MODULE_4__.apiClient.publish;
5353 - const currentContext = context === 'preview' ? _store__WEBPACK_IMPORTED_MODULE_6__.selectPreviewInitialData : _store__WEBPACK_IMPORTED_MODULE_6__.selectFrontendInitialData;
5354 - const changes = calculateChanges(state, currentContext((0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)()));
5355 - const touchedIds = [...changes.added, ...changes.modified];
5356 - const touchedItems = Object.fromEntries(touchedIds.map(id => [id, state.items[id]]).filter(([, v]) => v));
5357 - const response = await apiAction({
5358 - items: touchedItems,
5359 - order: state.order,
5360 - changes
5361 - });
5362 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_6__.slice.actions.reset({
5363 - context
5364 - }));
5365 - window.dispatchEvent(new CustomEvent('classes:updated', {
5366 - detail: {
5367 - context
5368 - }
5369 - }));
5370 - if (response?.data?.data?.code === _api__WEBPACK_IMPORTED_MODULE_4__.API_ERROR_CODES.DUPLICATED_LABEL) {
5371 - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_6__.slice.actions.updateMultiple(response.data.data.modifiedLabels));
5372 - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_7__.trackGlobalClasses)({
5373 - event: 'classPublishConflict',
5374 - numOfConflicts: Object.keys(response.data.data.modifiedLabels).length
5375 - });
5376 - (0,_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.openDialog)({
5377 - component: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_class_manager_duplicate_label_dialog__WEBPACK_IMPORTED_MODULE_5__.DuplicateLabelDialog, {
5378 - modifiedLabels: response.data.data.modifiedLabels || [],
5379 - onApprove: onApprove
5380 - })
5381 - });
5382 - }
5383 -}
5384 -function calculateChanges(state, initialData) {
5385 - const stateIds = Object.keys(state.items);
5386 - const initialDataIds = Object.keys(initialData.items);
5387 - const {
5388 - order: stateOrder
5389 - } = state;
5390 - const {
5391 - order: initialDataOrder
5392 - } = initialData;
5393 - const stateOrderIdSet = new Set(stateOrder);
5394 - const deleted = initialDataOrder.filter(id => !stateOrderIdSet.has(id));
5395 - const order = stateOrder.join(';') !== initialDataOrder.join(';');
5396 - return {
5397 - added: stateIds.filter(id => !initialDataIds.includes(id)),
5398 - deleted,
5399 - modified: stateIds.filter(id => {
5400 - return id in initialData.items && (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_3__.hash)(state.items[id]) !== (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_3__.hash)(initialData.items[id]);
5401 - }),
5402 - order
5403 - };
5404 -}
5405 -
5406 -/***/ }),
5407 -
5408 -/***/ "./packages/packages/core/editor-global-classes/src/store.ts":
5409 -/*!*******************************************************************!*\
5410 - !*** ./packages/packages/core/editor-global-classes/src/store.ts ***!
5411 - \*******************************************************************/
5412 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
5413 -
5414 -__webpack_require__.r(__webpack_exports__);
5415 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5416 -/* harmony export */ placeholderDefinition: function() { return /* binding */ placeholderDefinition; },
5417 -/* harmony export */ selectClass: function() { return /* binding */ selectClass; },
5418 -/* harmony export */ selectClassLabels: function() { return /* binding */ selectClassLabels; },
5419 -/* harmony export */ selectData: function() { return /* binding */ selectData; },
5420 -/* harmony export */ selectEmptyCssClass: function() { return /* binding */ selectEmptyCssClass; },
5421 -/* harmony export */ selectFrontendInitialData: function() { return /* binding */ selectFrontendInitialData; },
5422 -/* harmony export */ selectGlobalClasses: function() { return /* binding */ selectGlobalClasses; },
5423 -/* harmony export */ selectIsClassFetched: function() { return /* binding */ selectIsClassFetched; },
5424 -/* harmony export */ selectIsDirty: function() { return /* binding */ selectIsDirty; },
5425 -/* harmony export */ selectOrder: function() { return /* binding */ selectOrder; },
5426 -/* harmony export */ selectOrderedClasses: function() { return /* binding */ selectOrderedClasses; },
5427 -/* harmony export */ selectPreviewInitialData: function() { return /* binding */ selectPreviewInitialData; },
5428 -/* harmony export */ slice: function() { return /* binding */ slice; }
5429 -/* harmony export */ });
5430 -/* harmony import */ var _elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-styles */ "@elementor/editor-styles");
5431 -/* harmony import */ var _elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__);
5432 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
5433 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_1__);
5434 -/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ "./packages/packages/core/editor-global-classes/src/errors.ts");
5435 -/* harmony import */ var _utils_snapshot_history__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/snapshot-history */ "./packages/packages/core/editor-global-classes/src/utils/snapshot-history.ts");
5436 -
5437 -
5438 -
5439 -
5440 -const localHistory = _utils_snapshot_history__WEBPACK_IMPORTED_MODULE_3__.SnapshotHistory.get('global-classes');
5441 -const initialState = {
5442 - data: {
5443 - items: {},
5444 - order: []
5445 - },
5446 - classLabels: {},
5447 - initialData: {
5448 - frontend: {
5449 - items: {},
5450 - order: []
5451 - },
5452 - preview: {
5453 - items: {},
5454 - order: []
5455 - }
5456 - },
5457 - isDirty: false
5458 -};
5459 -// Slice
5460 -const SLICE_NAME = 'globalClasses';
5461 -const slice = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__createSlice)({
5462 - name: SLICE_NAME,
5463 - initialState,
5464 - reducers: {
5465 - load(state, {
5466 - payload: {
5467 - frontend,
5468 - preview,
5469 - classLabels
5470 - }
5471 - }) {
5472 - state.initialData.frontend = frontend;
5473 - state.initialData.preview = preview;
5474 - state.data = preview;
5475 - state.classLabels = classLabels;
5476 - state.isDirty = false;
5477 - },
5478 - add(state, {
5479 - payload
5480 - }) {
5481 - localHistory.next(state.data);
5482 - state.data.items[payload.id] = payload;
5483 - state.data.order.unshift(payload.id);
5484 - state.classLabels[payload.id] = payload.label;
5485 - state.isDirty = true;
5486 - },
5487 - delete(state, {
5488 - payload
5489 - }) {
5490 - localHistory.next(state.data);
5491 - state.data.items = Object.fromEntries(Object.entries(state.data.items).filter(([id]) => id !== payload));
5492 - state.data.order = state.data.order.filter(id => id !== payload);
5493 - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
5494 - delete state.classLabels[payload];
5495 - state.isDirty = true;
5496 - },
5497 - setOrder(state, {
5498 - payload
5499 - }) {
5500 - localHistory.next(state.data);
5501 - state.data.order = payload;
5502 - state.isDirty = true;
5503 - },
5504 - update(state, {
5505 - payload
5506 - }) {
5507 - localHistory.next(state.data);
5508 - const style = state.data.items[payload.style.id];
5509 - const mergedData = {
5510 - ...style,
5511 - ...payload.style
5512 - };
5513 - state.data.items[payload.style.id] = mergedData;
5514 - state.isDirty = true;
5515 - },
5516 - updateMultiple(state, {
5517 - payload
5518 - }) {
5519 - localHistory.next(state.data);
5520 - Object.entries(payload).forEach(([id, {
5521 - modified
5522 - }]) => {
5523 - state.data.items[id].label = modified;
5524 - state.classLabels[id] = modified;
5525 - });
5526 - state.isDirty = false;
5527 - },
5528 - updateProps(state, {
5529 - payload
5530 - }) {
5531 - const style = state.data.items[payload.id];
5532 - if (!style) {
5533 - throw new _errors__WEBPACK_IMPORTED_MODULE_2__.GlobalClassNotFoundError({
5534 - context: {
5535 - styleId: payload.id
5536 - }
5537 - });
5538 - }
5539 - localHistory.next(state.data);
5540 - const variant = (0,_elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__.getVariantByMeta)(style, payload.meta);
5541 - let customCss = ('custom_css' in payload ? payload.custom_css : variant?.custom_css) ?? null;
5542 - customCss = customCss?.raw ? customCss : null;
5543 - if (variant) {
5544 - const payloadProps = JSON.parse(JSON.stringify(payload.props));
5545 - const mode = payload.mode ?? 'merge';
5546 - if (mode === 'replace') {
5547 - variant.props = payloadProps;
5548 - } else {
5549 - const variantProps = JSON.parse(JSON.stringify(variant.props));
5550 - variant.props = mergeProps(variantProps, payloadProps);
5551 - }
5552 - variant.custom_css = customCss;
5553 - style.variants = getNonEmptyVariants(style);
5554 - } else {
5555 - style.variants.push({
5556 - meta: payload.meta,
5557 - props: payload.props,
5558 - custom_css: customCss
5559 - });
5560 - }
5561 - state.isDirty = true;
5562 - },
5563 - reset(state, {
5564 - payload: {
5565 - context
5566 - }
5567 - }) {
5568 - if (context === 'frontend') {
5569 - localHistory.reset();
5570 - state.initialData.frontend = state.data;
5571 - state.isDirty = false;
5572 - }
5573 - state.initialData.preview = state.data;
5574 - },
5575 - undo(state) {
5576 - if (localHistory.isLast()) {
5577 - localHistory.next(state.data); // store current before undo
5578 - }
5579 - const data = localHistory.prev();
5580 - if (data) {
5581 - state.data = data;
5582 - state.isDirty = true;
5583 - } else {
5584 - state.data = state.initialData.preview;
5585 - }
5586 - },
5587 - resetToInitialState(state, {
5588 - payload: {
5589 - context
5590 - }
5591 - }) {
5592 - localHistory.reset();
5593 - state.data = state.initialData[context];
5594 - state.isDirty = false;
5595 - },
5596 - redo(state) {
5597 - const data = localHistory.next();
5598 - if (localHistory.isLast()) {
5599 - localHistory.prev();
5600 - }
5601 - if (data) {
5602 - state.data = data;
5603 - state.isDirty = true;
5604 - }
5605 - },
5606 - mergeExistingClasses(state, {
5607 - payload: {
5608 - preview,
5609 - frontend
5610 - }
5611 - }) {
5612 - Object.entries(preview).forEach(([id, previewClassData]) => {
5613 - const frontendClassData = frontend[id];
5614 - if (previewClassData === null || previewClassData === undefined) {
5615 - return;
5616 - }
5617 - if (!(id in state.data.items)) {
5618 - state.data.items[id] = previewClassData;
5619 - }
5620 - if (!(id in state.initialData.frontend.items)) {
5621 - state.initialData.frontend.items[id] = frontendClassData;
5622 - }
5623 - if (!(id in state.initialData.preview.items)) {
5624 - state.initialData.preview.items[id] = previewClassData;
5625 - }
5626 - if (!(id in state.classLabels)) {
5627 - state.classLabels[id] = previewClassData.label;
5628 - }
5629 - });
5630 - },
5631 - setOrderWithoutHistory(state, {
5632 - payload
5633 - }) {
5634 - state.data.order = payload;
5635 - },
5636 - updateAfterTemplateImport(state, {
5637 - payload
5638 - }) {
5639 - // Update initial data
5640 - state.initialData.frontend.items = {
5641 - ...state.initialData.frontend.items,
5642 - ...payload.addedItems
5643 - };
5644 - state.initialData.frontend.order = [...state.initialData.frontend.order, ...payload.addedIdsOrder];
5645 - state.initialData.preview.items = {
5646 - ...state.initialData.preview.items,
5647 - ...payload.addedItems
5648 - };
5649 - state.initialData.preview.order = [...state.initialData.preview.order, ...payload.addedIdsOrder];
5650 -
5651 - // Update current data
5652 - state.data.items = {
5653 - ...state.data.items,
5654 - ...payload.addedItems
5655 - };
5656 - state.data.order = [...state.data.order, ...payload.addedIdsOrder];
5657 -
5658 - // Update class labels
5659 - state.classLabels = {
5660 - ...state.classLabels,
5661 - ...payload.addedClassLabels
5662 - };
5663 - }
5664 - }
5665 -});
5666 -const mergeProps = (current, updates) => {
5667 - // edge case, the server returns an array instead of an object when empty props because of PHP array / object conversion
5668 - const props = Array.isArray(current) ? {} : current;
5669 - Object.entries(updates).forEach(([key, value]) => {
5670 - if (value === null || value === undefined) {
5671 - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
5672 - delete props[key];
5673 - } else {
5674 - props[key] = value;
5675 - }
5676 - });
5677 - return props;
5678 -};
5679 -const getNonEmptyVariants = style => {
5680 - return style.variants.filter(({
5681 - props,
5682 - custom_css: customCss
5683 - }) => Object.keys(props).length || customCss?.raw);
5684 -};
5685 -const placeholderDefinition = (id, label) => ({
5686 - id,
5687 - type: 'class',
5688 - label,
5689 - variants: []
5690 -});
5691 -
5692 -// Selectors
5693 -const selectData = state => state[SLICE_NAME].data;
5694 -const selectClassLabels = state => state[SLICE_NAME].classLabels;
5695 -const selectFrontendInitialData = state => state[SLICE_NAME].initialData.frontend;
5696 -const selectPreviewInitialData = state => state[SLICE_NAME].initialData.preview;
5697 -const selectOrder = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__createSelector)(selectData, ({
5698 - order
5699 -}) => order);
5700 -const selectGlobalClasses = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__createSelector)(selectData, ({
5701 - items
5702 -}) => items);
5703 -const selectIsDirty = state => state[SLICE_NAME].isDirty;
5704 -const selectOrderedClasses = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__createSelector)(selectData, selectClassLabels, ({
5705 - items,
5706 - order
5707 -}, classLabels) => order.map(id => {
5708 - const loaded = items[id];
5709 - if (loaded) {
5710 - return loaded;
5711 - }
5712 - const label = classLabels[id];
5713 - return label !== undefined ? placeholderDefinition(id, label) : null;
5714 -}).filter(s => s !== null));
5715 -const selectClass = (state, id) => state[SLICE_NAME].data.items[id] ?? null;
5716 -const selectEmptyCssClass = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__createSelector)(selectData, ({
5717 - items
5718 -}) => Object.values(items).filter(cssClass => (cssClass.variants?.length ?? 0) === 0));
5719 -const selectIsClassFetched = (state, id) => !!state[SLICE_NAME].initialData.preview.items[id] || !!state[SLICE_NAME].initialData.frontend.items[id] || false;
5720 -
5721 -/***/ }),
5722 -
5723 -/***/ "./packages/packages/core/editor-global-classes/src/sync-with-document-save.ts":
5724 -/*!*************************************************************************************!*\
5725 - !*** ./packages/packages/core/editor-global-classes/src/sync-with-document-save.ts ***!
5726 - \*************************************************************************************/
5727 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
5728 -
5729 -__webpack_require__.r(__webpack_exports__);
5730 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5731 -/* harmony export */ syncWithDocumentSave: function() { return /* binding */ syncWithDocumentSave; }
5732 -/* harmony export */ });
5733 -/* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-current-user */ "@elementor/editor-current-user");
5734 -/* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_0__);
5735 -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents");
5736 -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__);
5737 -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters");
5738 -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__);
5739 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
5740 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_3__);
5741 -/* harmony import */ var _capabilities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./capabilities */ "./packages/packages/core/editor-global-classes/src/capabilities.ts");
5742 -/* harmony import */ var _save_global_classes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./save-global-classes */ "./packages/packages/core/editor-global-classes/src/save-global-classes.tsx");
5743 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts");
5744 -
5745 -
5746 -
5747 -
5748 -
5749 -
5750 -
5751 -let pendingSave = null;
5752 -function syncWithDocumentSave(panelActions) {
5753 - const unsubscribe = syncDirtyState();
5754 - bindSaveAction(panelActions);
5755 - bindBeforeSaveTemplateAction();
5756 - return unsubscribe;
5757 -}
5758 -function syncDirtyState() {
5759 - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_3__.__subscribeWithSelector)(_store__WEBPACK_IMPORTED_MODULE_6__.selectIsDirty, () => {
5760 - if (!isDirty()) {
5761 - return;
5762 - }
5763 - (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__.setDocumentModifiedStatus)(true);
5764 - });
5765 -}
5766 -function triggerSave(panelActions, context = 'preview') {
5767 - const user = (0,_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_0__.getCurrentUser)();
5768 - const canEdit = user?.capabilities.includes(_capabilities__WEBPACK_IMPORTED_MODULE_4__.UPDATE_CLASS_CAPABILITY_KEY);
5769 - if (!canEdit) {
5770 - return null;
5771 - }
5772 - if (pendingSave) {
5773 - return pendingSave;
5774 - }
5775 - const promise = (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_5__.saveGlobalClasses)({
5776 - context,
5777 - onApprove: panelActions?.open
5778 - });
5779 - pendingSave = promise;
5780 - promise.finally(() => {
5781 - pendingSave = null;
5782 - });
5783 - return promise;
5784 -}
5785 -function bindSaveAction(panelActions) {
5786 - (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__.registerDataHook)('dependency', 'document/save/save', args => {
5787 - triggerSave(panelActions, args.status === 'publish' ? 'frontend' : 'preview');
5788 - return true;
5789 - });
5790 -}
5791 -function bindBeforeSaveTemplateAction() {
5792 - window.addEventListener('elementor/global-styles/before-save', event => {
5793 - if (!pendingSave && isDirty()) {
5794 - triggerSave();
5795 - }
5796 - if (pendingSave) {
5797 - event.detail.promises.push(pendingSave);
5798 - }
5799 - });
5800 -}
5801 -function isDirty() {
5802 - return (0,_store__WEBPACK_IMPORTED_MODULE_6__.selectIsDirty)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_3__.__getState)());
5803 -}
5804 -
5805 -/***/ }),
5806 -
5807 -/***/ "./packages/packages/core/editor-global-classes/src/sync-with-document.tsx":
5808 -/*!*********************************************************************************!*\
5809 - !*** ./packages/packages/core/editor-global-classes/src/sync-with-document.tsx ***!
5810 - \*********************************************************************************/
5811 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
5812 -
5813 -__webpack_require__.r(__webpack_exports__);
5814 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5815 -/* harmony export */ SyncWithDocumentSave: function() { return /* binding */ SyncWithDocumentSave; }
5816 -/* harmony export */ });
5817 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
5818 -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
5819 -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters");
5820 -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__);
5821 -/* harmony import */ var _sync_with_document_save__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sync-with-document-save */ "./packages/packages/core/editor-global-classes/src/sync-with-document-save.ts");
5822 -
5823 -
5824 -
5825 -function SyncWithDocumentSave() {
5826 - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
5827 - const unsubscribe = (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.__privateListenTo)((0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.v1ReadyEvent)(), () => {
5828 - const open = () => {
5829 - window.dispatchEvent(new CustomEvent('elementor/open-global-classes-manager'));
5830 - };
5831 - (0,_sync_with_document_save__WEBPACK_IMPORTED_MODULE_2__.syncWithDocumentSave)({
5832 - open
5833 - });
5834 - });
5835 - return unsubscribe;
5836 - }, []);
5837 - return null;
5838 -}
5839 -
5840 -/***/ }),
5841 -
5842 -/***/ "./packages/packages/core/editor-global-classes/src/utils/create-labels-for-classes.ts":
5843 -/*!*********************************************************************************************!*\
5844 - !*** ./packages/packages/core/editor-global-classes/src/utils/create-labels-for-classes.ts ***!
5845 - \*********************************************************************************************/
5846 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
5847 -
5848 -__webpack_require__.r(__webpack_exports__);
5849 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5850 -/* harmony export */ createLabelsForClasses: function() { return /* binding */ createLabelsForClasses; }
5851 -/* harmony export */ });
5852 -function createLabelsForClasses(entries) {
5853 - return Object.fromEntries(entries.map(e => [e.id, e.label]));
5854 -}
5855 -
5856 -/***/ }),
5857 -
5858 -/***/ "./packages/packages/core/editor-global-classes/src/utils/snapshot-history.ts":
5859 -/*!************************************************************************************!*\
5860 - !*** ./packages/packages/core/editor-global-classes/src/utils/snapshot-history.ts ***!
5861 - \************************************************************************************/
5862 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
5863 -
5864 -__webpack_require__.r(__webpack_exports__);
5865 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5866 -/* harmony export */ SnapshotHistory: function() { return /* binding */ SnapshotHistory; }
5867 -/* harmony export */ });
5868 -function createLink({
5869 - value,
5870 - next,
5871 - prev
5872 -}) {
5873 - return {
5874 - value,
5875 - prev: prev || null,
5876 - next: next || null
5877 - };
5878 -}
5879 -class SnapshotHistory {
5880 - static registry = {};
5881 - static get(namespace) {
5882 - if (!SnapshotHistory.registry[namespace]) {
5883 - SnapshotHistory.registry[namespace] = new SnapshotHistory(namespace);
5884 - }
5885 - return SnapshotHistory.registry[namespace];
5886 - }
5887 - first = null;
5888 - current = null;
5889 - constructor(namespace) {
5890 - this.namespace = namespace;
5891 - }
5892 - transform(item) {
5893 - return JSON.parse(JSON.stringify(item));
5894 - }
5895 - reset() {
5896 - this.first = this.current = null;
5897 - }
5898 - prev() {
5899 - if (!this.current || this.current === this.first) {
5900 - return null;
5901 - }
5902 - this.current = this.current.prev;
5903 - return this.current?.value || null;
5904 - }
5905 - isLast() {
5906 - return !this.current || !this.current.next;
5907 - }
5908 - next(value) {
5909 - if (value) {
5910 - if (!this.current) {
5911 - this.first = createLink({
5912 - value: this.transform(value)
5913 - });
5914 - this.current = this.first;
5915 - return this.current.value;
5916 - }
5917 - const nextLink = createLink({
5918 - value: this.transform(value),
5919 - prev: this.current
5920 - });
5921 - this.current.next = nextLink;
5922 - this.current = nextLink;
5923 - return this.current.value;
5924 - }
5925 -
5926 - // No value skip to next without setting any
5927 - if (!this.current || !this.current.next) {
5928 - return null;
5929 - }
5930 - this.current = this.current.next;
5931 - return this.current.value;
5932 - }
5933 -}
5934 -
5935 -/***/ }),
5936 -
5937 -/***/ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts":
5938 -/*!****************************************************************************!*\
5939 - !*** ./packages/packages/core/editor-global-classes/src/utils/tracking.ts ***!
5940 - \****************************************************************************/
5941 -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
5942 -
5943 -__webpack_require__.r(__webpack_exports__);
5944 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5945 -/* harmony export */ trackGlobalClasses: function() { return /* binding */ trackGlobalClasses; }
5946 -/* harmony export */ });
5947 -/* harmony import */ var _elementor_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/events */ "@elementor/events");
5948 -/* harmony import */ var _elementor_events__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_events__WEBPACK_IMPORTED_MODULE_0__);
5949 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/store */ "@elementor/store");
5950 -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_1__);
5951 -/* harmony import */ var _service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../service/css-class-usage-service */ "./packages/packages/core/editor-global-classes/service/css-class-usage-service.ts");
5952 -/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../errors */ "./packages/packages/core/editor-global-classes/src/errors.ts");
5953 -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts");
5954 -
5955 -
5956 -
5957 -
5958 -
5959 -const trackGlobalClasses = async payload => {
5960 - const {
5961 - runAction
5962 - } = payload;
5963 - const data = await getSanitizedData(payload);
5964 - if (data) {
5965 - track(data);
5966 - if (data.event === 'classCreated' && 'classId' in data) {
5967 - fireClassApplied(data.classId);
5968 - }
5969 - }
5970 - runAction?.();
5971 -};
5972 -const fireClassApplied = async classId => {
5973 - const appliedInfo = await getAppliedInfo(classId);
5974 - track({
5975 - event: 'classApplied',
5976 - classId,
5977 - ...appliedInfo,
5978 - totalInstancesAfterApply: 1
5979 - });
5980 -};
5981 -const getSanitizedData = async payload => {
5982 - switch (payload.event) {
5983 - case 'classApplied':
5984 - if ('classId' in payload && payload.classId) {
5985 - const appliedInfo = await getAppliedInfo(payload.classId);
5986 - return {
5987 - ...payload,
5988 - ...appliedInfo
5989 - };
5990 - }
5991 - break;
5992 - case 'classRemoved':
5993 - if ('classId' in payload && payload.classId) {
5994 - const deleteInfo = getRemovedInfo(payload.classId);
5995 - return {
5996 - ...payload,
5997 - ...deleteInfo
5998 - };
5999 - }
6000 - break;
6001 - case 'classDeleted':
6002 - if ('classId' in payload && payload.classId) {
6003 - const deleteInfo = await trackDeleteClass(payload.classId);
6004 - return {
6005 - ...payload,
6006 - ...deleteInfo
6007 - };
6008 - }
6009 - break;
6010 - case 'classCreated':
6011 - if ('source' in payload && payload.source !== 'created') {
6012 - if ('classId' in payload && payload.classId) {
6013 - return {
6014 - ...payload,
6015 - classTitle: getCssClass(payload.classId).label
6016 - };
6017 - }
6018 - }
6019 - return payload;
6020 - case 'classStateClicked':
6021 - if ('classId' in payload && payload.classId) {
6022 - return {
6023 - ...payload,
6024 - classTitle: getCssClass(payload.classId).label
6025 - };
6026 - }
6027 - break;
6028 - case 'classSyncToV3PopupShown':
6029 - return {
6030 - ...payload,
6031 - interaction_type: 'popup_shown',
6032 - target_type: 'popup',
6033 - target_name: 'sync_to_v3_popup',
6034 - interaction_result: 'popup_viewed',
6035 - target_location: 'widget_panel',
6036 - location_l1: 'class_manager'
6037 - };
6038 - case 'classSyncToV3':
6039 - {
6040 - const classLabel = getCssClass(payload.classId).label;
6041 - const isSync = payload.action === 'sync';
6042 - return {
6043 - ...payload,
6044 - interaction_type: 'click',
6045 - target_type: classLabel,
6046 - target_name: isSync ? 'sync_to_v3' : 'unsync_to_v3',
6047 - interaction_result: isSync ? 'class_is_synced_to_V3' : 'class_is_unsynced_from_V3',
6048 - target_location: 'widget_panel',
6049 - location_l1: 'class_manager',
6050 - interaction_description: isSync ? `user_synced_${classLabel}_to_v3` : `user_unsync_${classLabel}_from_v3`
6051 - };
6052 - }
6053 - case 'classSyncToV3PopupClick':
6054 - {
6055 - const isSyncAction = payload.action === 'sync';
6056 - return {
6057 - ...payload,
6058 - interaction_type: 'click',
6059 - target_type: 'button',
6060 - target_name: isSyncAction ? 'sync_to_v3' : 'cancel',
6061 - interaction_result: isSyncAction ? 'class_is_synced' : 'cancel',
6062 - target_location: 'sync_to_v3_popup'
6063 - };
6064 - }
6065 - default:
6066 - return payload;
6067 - }
6068 -};
6069 -const track = data => {
6070 - const {
6071 - dispatchEvent,
6072 - config
6073 - } = (0,_elementor_events__WEBPACK_IMPORTED_MODULE_0__.getMixpanel)();
6074 - if (!config?.names?.global_classes?.[data.event]) {
6075 - // eslint-disable-next-line no-console
6076 - console.error('Global class tracking event not found', {
6077 - event: data.event
6078 - });
6079 - return;
6080 - }
6081 - const name = config.names.global_classes[data.event];
6082 - const {
6083 - event,
6084 - ...eventData
6085 - } = data;
6086 - try {
6087 - dispatchEvent?.(name, {
6088 - event,
6089 - ...eventData
6090 - });
6091 - } catch (error) {
6092 - throw new _errors__WEBPACK_IMPORTED_MODULE_3__.GlobalClassTrackingError({
6093 - cause: error
6094 - });
6095 - }
6096 -};
6097 -const extractCssClassData = classId => {
6098 - const cssClass = getCssClass(classId);
6099 - const classTitle = cssClass.label;
6100 - return {
6101 - classTitle
6102 - };
6103 -};
6104 -const getCssClass = classId => {
6105 - const state = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__getState)();
6106 - const cssClass = (0,_store__WEBPACK_IMPORTED_MODULE_4__.selectClass)(state, classId);
6107 - if (cssClass) {
6108 - return cssClass;
6109 - }
6110 - const label = (0,_store__WEBPACK_IMPORTED_MODULE_4__.selectClassLabels)(state)[classId];
6111 - if (label !== undefined) {
6112 - return (0,_store__WEBPACK_IMPORTED_MODULE_4__.placeholderDefinition)(classId, label);
6113 - }
6114 - throw new Error(`CSS class with ID ${classId} not found`);
6115 -};
6116 -const trackDeleteClass = async classId => {
6117 - const classTitle = getCssClass(classId).label;
6118 - const totalInstances = await getTotalInstancesByCssClassID(classId);
6119 - return {
6120 - totalInstances,
6121 - classTitle
6122 - };
6123 -};
6124 -const getTotalInstancesByCssClassID = async classId => {
6125 - const cssClassUsage = await (0,_service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_2__.fetchCssClassUsage)();
6126 - return cssClassUsage[classId]?.total ?? 1;
6127 -};
6128 -const getAppliedInfo = async classId => {
6129 - const {
6130 - classTitle
6131 - } = extractCssClassData(classId);
6132 - const totalInstancesAfterApply = (await getTotalInstancesByCssClassID(classId)) + 1;
6133 - return {
6134 - classTitle,
6135 - totalInstancesAfterApply
6136 - };
6137 -};
6138 -const getRemovedInfo = classId => {
6139 - const {
6140 - classTitle
6141 - } = extractCssClassData(classId);
6142 - return {
6143 - classTitle
6144 - };
6145 -};
6146 -
6147 -/***/ }),
6148 -
6149 -/***/ "@elementor/editor":
6150 -/*!*****************************************!*\
6151 - !*** external ["elementorV2","editor"] ***!
6152 - \*****************************************/
6153 -/***/ (function(module) {
6154 -
6155 -module.exports = window["elementorV2"]["editor"];
6156 -
6157 -/***/ }),
6158 -
6159 -/***/ "@elementor/editor-canvas":
6160 -/*!***********************************************!*\
6161 - !*** external ["elementorV2","editorCanvas"] ***!
6162 - \***********************************************/
6163 -/***/ (function(module) {
6164 -
6165 -module.exports = window["elementorV2"]["editorCanvas"];
6166 -
6167 -/***/ }),
6168 -
6169 -/***/ "@elementor/editor-current-user":
6170 -/*!****************************************************!*\
6171 - !*** external ["elementorV2","editorCurrentUser"] ***!
6172 - \****************************************************/
6173 -/***/ (function(module) {
6174 -
6175 -module.exports = window["elementorV2"]["editorCurrentUser"];
6176 -
6177 -/***/ }),
6178 -
6179 -/***/ "@elementor/editor-documents":
6180 -/*!**************************************************!*\
6181 - !*** external ["elementorV2","editorDocuments"] ***!
6182 - \**************************************************/
6183 -/***/ (function(module) {
6184 -
6185 -module.exports = window["elementorV2"]["editorDocuments"];
6186 -
6187 -/***/ }),
6188 -
6189 -/***/ "@elementor/editor-editing-panel":
6190 -/*!*****************************************************!*\
6191 - !*** external ["elementorV2","editorEditingPanel"] ***!
6192 - \*****************************************************/
6193 -/***/ (function(module) {
6194 -
6195 -module.exports = window["elementorV2"]["editorEditingPanel"];
6196 -
6197 -/***/ }),
6198 -
6199 -/***/ "@elementor/editor-embedded-documents-manager":
6200 -/*!*****************************************************************!*\
6201 - !*** external ["elementorV2","editorEmbeddedDocumentsManager"] ***!
6202 - \*****************************************************************/
6203 -/***/ (function(module) {
6204 -
6205 -module.exports = window["elementorV2"]["editorEmbeddedDocumentsManager"];
6206 -
6207 -/***/ }),
6208 -
6209 -/***/ "@elementor/editor-mcp":
6210 -/*!********************************************!*\
6211 - !*** external ["elementorV2","editorMcp"] ***!
6212 - \********************************************/
6213 -/***/ (function(module) {
6214 -
6215 -module.exports = window["elementorV2"]["editorMcp"];
6216 -
6217 -/***/ }),
6218 -
6219 -/***/ "@elementor/editor-panels":
6220 -/*!***********************************************!*\
6221 - !*** external ["elementorV2","editorPanels"] ***!
6222 - \***********************************************/
6223 -/***/ (function(module) {
6224 -
6225 -module.exports = window["elementorV2"]["editorPanels"];
6226 -
6227 -/***/ }),
6228 -
6229 -/***/ "@elementor/editor-styles":
6230 -/*!***********************************************!*\
6231 - !*** external ["elementorV2","editorStyles"] ***!
6232 - \***********************************************/
6233 -/***/ (function(module) {
6234 -
6235 -module.exports = window["elementorV2"]["editorStyles"];
6236 -
6237 -/***/ }),
6238 -
6239 -/***/ "@elementor/editor-styles-repository":
6240 -/*!*********************************************************!*\
6241 - !*** external ["elementorV2","editorStylesRepository"] ***!
6242 - \*********************************************************/
6243 -/***/ (function(module) {
6244 -
6245 -module.exports = window["elementorV2"]["editorStylesRepository"];
6246 -
6247 -/***/ }),
6248 -
6249 -/***/ "@elementor/editor-ui":
6250 -/*!*******************************************!*\
6251 - !*** external ["elementorV2","editorUi"] ***!
6252 - \*******************************************/
6253 -/***/ (function(module) {
6254 -
6255 -module.exports = window["elementorV2"]["editorUi"];
6256 -
6257 -/***/ }),
6258 -
6259 -/***/ "@elementor/editor-v1-adapters":
6260 -/*!***************************************************!*\
6261 - !*** external ["elementorV2","editorV1Adapters"] ***!
6262 - \***************************************************/
6263 -/***/ (function(module) {
6264 -
6265 -module.exports = window["elementorV2"]["editorV1Adapters"];
6266 -
6267 -/***/ }),
6268 -
6269 -/***/ "@elementor/events":
6270 -/*!*****************************************!*\
6271 - !*** external ["elementorV2","events"] ***!
6272 - \*****************************************/
6273 -/***/ (function(module) {
6274 -
6275 -module.exports = window["elementorV2"]["events"];
6276 -
6277 -/***/ }),
6278 -
6279 -/***/ "@elementor/http-client":
6280 -/*!*********************************************!*\
6281 - !*** external ["elementorV2","httpClient"] ***!
6282 - \*********************************************/
6283 -/***/ (function(module) {
6284 -
6285 -module.exports = window["elementorV2"]["httpClient"];
6286 -
6287 -/***/ }),
6288 -
6289 -/***/ "@elementor/icons":
6290 -/*!****************************************!*\
6291 - !*** external ["elementorV2","icons"] ***!
6292 - \****************************************/
6293 -/***/ (function(module) {
6294 -
6295 -module.exports = window["elementorV2"]["icons"];
6296 -
6297 -/***/ }),
6298 -
6299 -/***/ "@elementor/query":
6300 -/*!****************************************!*\
6301 - !*** external ["elementorV2","query"] ***!
6302 - \****************************************/
6303 -/***/ (function(module) {
6304 -
6305 -module.exports = window["elementorV2"]["query"];
6306 -
6307 -/***/ }),
6308 -
6309 -/***/ "@elementor/schema":
6310 -/*!*****************************************!*\
6311 - !*** external ["elementorV2","schema"] ***!
6312 - \*****************************************/
6313 -/***/ (function(module) {
6314 -
6315 -module.exports = window["elementorV2"]["schema"];
6316 -
6317 -/***/ }),
6318 -
6319 -/***/ "@elementor/store":
6320 -/*!****************************************!*\
6321 - !*** external ["elementorV2","store"] ***!
6322 - \****************************************/
6323 -/***/ (function(module) {
6324 -
6325 -module.exports = window["elementorV2"]["store"];
6326 -
6327 -/***/ }),
6328 -
6329 -/***/ "@elementor/ui":
6330 -/*!*************************************!*\
6331 - !*** external ["elementorV2","ui"] ***!
6332 - \*************************************/
6333 -/***/ (function(module) {
6334 -
6335 -module.exports = window["elementorV2"]["ui"];
6336 -
6337 -/***/ }),
6338 -
6339 -/***/ "@elementor/utils":
6340 -/*!****************************************!*\
6341 - !*** external ["elementorV2","utils"] ***!
6342 - \****************************************/
6343 -/***/ (function(module) {
6344 -
6345 -module.exports = window["elementorV2"]["utils"];
6346 -
6347 -/***/ }),
6348 -
6349 -/***/ "@wordpress/i18n":
6350 -/*!******************************!*\
6351 - !*** external ["wp","i18n"] ***!
6352 - \******************************/
6353 -/***/ (function(module) {
6354 -
6355 -module.exports = window["wp"]["i18n"];
6356 -
6357 -/***/ }),
6358 -
6359 -/***/ "react":
6360 -/*!**************************!*\
6361 - !*** external ["React"] ***!
6362 - \**************************/
6363 -/***/ (function(module) {
6364 -
6365 -module.exports = window["React"];
6366 -
6367 -/***/ }),
6368 -
6369 -/***/ "react-dom":
6370 -/*!*****************************!*\
6371 - !*** external ["ReactDOM"] ***!
6372 - \*****************************/
6373 -/***/ (function(module) {
6374 -
6375 -module.exports = window["ReactDOM"];
6376 -
6377 -/***/ })
6378 -
6379 -/******/ });
6380 -/************************************************************************/
6381 -/******/ // The module cache
6382 -/******/ var __webpack_module_cache__ = {};
6383 -/******/
6384 -/******/ // The require function
6385 -/******/ function __webpack_require__(moduleId) {
6386 -/******/ // Check if module is in cache
6387 -/******/ var cachedModule = __webpack_module_cache__[moduleId];
6388 -/******/ if (cachedModule !== undefined) {
6389 -/******/ return cachedModule.exports;
6390 -/******/ }
6391 -/******/ // Create a new module (and put it into the cache)
6392 -/******/ var module = __webpack_module_cache__[moduleId] = {
6393 -/******/ // no module.id needed
6394 -/******/ // no module.loaded needed
6395 -/******/ exports: {}
6396 -/******/ };
6397 -/******/
6398 -/******/ // Execute the module function
6399 -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
6400 -/******/
6401 -/******/ // Return the exports of the module
6402 -/******/ return module.exports;
6403 -/******/ }
6404 -/******/
6405 -/************************************************************************/
6406 -/******/ /* webpack/runtime/compat get default export */
6407 -/******/ !function() {
6408 -/******/ // getDefaultExport function for compatibility with non-harmony modules
6409 -/******/ __webpack_require__.n = function(module) {
6410 -/******/ var getter = module && module.__esModule ?
6411 -/******/ function() { return module['default']; } :
6412 -/******/ function() { return module; };
6413 -/******/ __webpack_require__.d(getter, { a: getter });
6414 -/******/ return getter;
6415 -/******/ };
6416 -/******/ }();
6417 -/******/
6418 -/******/ /* webpack/runtime/define property getters */
6419 -/******/ !function() {
6420 -/******/ // define getter functions for harmony exports
6421 -/******/ __webpack_require__.d = function(exports, definition) {
6422 -/******/ for(var key in definition) {
6423 -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
6424 -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
6425 -/******/ }
6426 -/******/ }
6427 -/******/ };
6428 -/******/ }();
6429 -/******/
6430 -/******/ /* webpack/runtime/hasOwnProperty shorthand */
6431 -/******/ !function() {
6432 -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
6433 -/******/ }();
6434 -/******/
6435 -/******/ /* webpack/runtime/make namespace object */
6436 -/******/ !function() {
6437 -/******/ // define __esModule on exports
6438 -/******/ __webpack_require__.r = function(exports) {
6439 -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
6440 -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
6441 -/******/ }
6442 -/******/ Object.defineProperty(exports, '__esModule', { value: true });
6443 -/******/ };
6444 -/******/ }();
6445 -/******/
6446 -/************************************************************************/
6447 -var __webpack_exports__ = {};
6448 -// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
6449 -!function() {
6450 -/*!*******************************************************************!*\
6451 - !*** ./packages/packages/core/editor-global-classes/src/index.ts ***!
6452 - \*******************************************************************/
6453 -__webpack_require__.r(__webpack_exports__);
6454 -/* harmony export */ __webpack_require__.d(__webpack_exports__, {
6455 -/* harmony export */ ClassManagerPanelEmbedded: function() { return /* reexport safe */ _components_class_manager_class_manager_panel__WEBPACK_IMPORTED_MODULE_0__.ClassManagerPanelEmbedded; },
6456 -/* harmony export */ GLOBAL_CLASSES_URI: function() { return /* reexport safe */ _mcp_integration_classes_resource__WEBPACK_IMPORTED_MODULE_1__.GLOBAL_CLASSES_URI; },
6457 -/* harmony export */ addDocumentClasses: function() { return /* reexport safe */ _load_document_classes__WEBPACK_IMPORTED_MODULE_4__.addDocumentClasses; },
6458 -/* harmony export */ createLabelsForClasses: function() { return /* reexport safe */ _utils_create_labels_for_classes__WEBPACK_IMPORTED_MODULE_5__.createLabelsForClasses; },
6459 -/* harmony export */ init: function() { return /* reexport safe */ _init__WEBPACK_IMPORTED_MODULE_2__.init; },
6460 -/* harmony export */ loadExistingClasses: function() { return /* reexport safe */ _load_existing_classes__WEBPACK_IMPORTED_MODULE_3__.loadExistingClasses; },
6461 -/* harmony export */ trackGlobalClasses: function() { return /* reexport safe */ _utils_tracking__WEBPACK_IMPORTED_MODULE_6__.trackGlobalClasses; }
6462 -/* harmony export */ });
6463 -/* harmony import */ var _components_class_manager_class_manager_panel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components/class-manager/class-manager-panel */ "./packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-panel.tsx");
6464 -/* harmony import */ var _mcp_integration_classes_resource__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mcp-integration/classes-resource */ "./packages/packages/core/editor-global-classes/src/mcp-integration/classes-resource.ts");
6465 -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "./packages/packages/core/editor-global-classes/src/init.ts");
6466 -/* harmony import */ var _load_existing_classes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load-existing-classes */ "./packages/packages/core/editor-global-classes/src/load-existing-classes.ts");
6467 -/* harmony import */ var _load_document_classes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load-document-classes */ "./packages/packages/core/editor-global-classes/src/load-document-classes.ts");
6468 -/* harmony import */ var _utils_create_labels_for_classes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/create-labels-for-classes */ "./packages/packages/core/editor-global-classes/src/utils/create-labels-for-classes.ts");
6469 -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts");
6470 -
6471 -
6472 -
6473 -
6474 -
6475 -
6476 -
6477 -}();
6478 -(window.elementorV2 = window.elementorV2 || {}).editorGlobalClasses = __webpack_exports__;
6479 -/******/ })()
6480 -;
3544 +//#endregion
3545 +})(React, elementorV2.editorCurrentUser, elementorV2.editorDocuments, elementorV2.editorPanels, elementorV2.editorUi, elementorV2.query, elementorV2.store, elementorV2.ui, wp.i18n, elementorV2.editorStyles, elementorV2.utils, elementorV2.httpClient, elementorV2.icons, elementorV2.events, ReactDOM, elementorV2.editorStylesRepository, elementorV2.editor, elementorV2.editorEditingPanel, elementorV2.editorEmbeddedDocumentsManager, elementorV2.editorMcp, elementorV2.editorCanvas, elementorV2.editorV1Adapters, elementorV2.schema);
6481 3546 window.elementorV2.editorGlobalClasses?.init?.();
6482 3547 //# sourceMappingURL=editor-global-classes.js.map