← All changes
|
assets/js/packages/editor-global-classes/editor-global-classes.js
+3441
-6372
4.2.0-dev2
→
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,3254 +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 _save_global_classes__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../save-global-classes */ "./packages/packages/core/editor-global-classes/src/save-global-classes.tsx"); | |
| 1644 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 1645 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 1646 | -/* harmony import */ var _search_and_filter_components_filter_active_filters__WEBPACK_IMPORTED_MODULE_15__ = __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"); | |
| 1647 | -/* harmony import */ var _search_and_filter_components_filter_css_class_filter__WEBPACK_IMPORTED_MODULE_16__ = __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"); | |
| 1648 | -/* harmony import */ var _search_and_filter_components_search_class_manager_search__WEBPACK_IMPORTED_MODULE_17__ = __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"); | |
| 1649 | -/* harmony import */ var _search_and_filter_context__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../search-and-filter/context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx"); | |
| 1650 | -/* harmony import */ var _class_manager_introduction__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./class-manager-introduction */ "./packages/packages/core/editor-global-classes/src/components/class-manager/class-manager-introduction.tsx"); | |
| 1651 | -/* harmony import */ var _delete_class__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./delete-class */ "./packages/packages/core/editor-global-classes/src/components/class-manager/delete-class.ts"); | |
| 1652 | -/* harmony import */ var _flipped_color_swatch_icon__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./flipped-color-swatch-icon */ "./packages/packages/core/editor-global-classes/src/components/class-manager/flipped-color-swatch-icon.tsx"); | |
| 1653 | -/* harmony import */ var _global_classes_list__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./global-classes-list */ "./packages/packages/core/editor-global-classes/src/components/class-manager/global-classes-list.tsx"); | |
| 1654 | -/* harmony import */ var _panel_interactions__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./panel-interactions */ "./packages/packages/core/editor-global-classes/src/components/class-manager/panel-interactions.ts"); | |
| 1655 | -/* harmony import */ var _start_sync_to_v3_modal__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./start-sync-to-v3-modal */ "./packages/packages/core/editor-global-classes/src/components/class-manager/start-sync-to-v3-modal.tsx"); | |
| 1656 | - | |
| 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 | -const STOP_SYNC_MESSAGE_KEY = 'stop-sync-class'; | |
| 1683 | -function ClassManagerPanelEmbedded({ | |
| 1684 | - onRequestClose, | |
| 1685 | - onExposeCloseAttempt, | |
| 1686 | - isActive | |
| 1687 | -}) { | |
| 1688 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ClassManagerPanelContent, { | |
| 1689 | - onRequestClose: onRequestClose, | |
| 1690 | - onExposeCloseAttempt: onExposeCloseAttempt, | |
| 1691 | - isActive: isActive | |
| 1692 | - }); | |
| 1693 | -} | |
| 1694 | -function ClassManagerPanelContent({ | |
| 1695 | - onRequestClose, | |
| 1696 | - onExposeCloseAttempt, | |
| 1697 | - isActive = true | |
| 1698 | -}) { | |
| 1699 | - const isDirty = (0,_hooks_use_dirty_state__WEBPACK_IMPORTED_MODULE_10__.useDirtyState)(); | |
| 1700 | - const { | |
| 1701 | - open: openSaveChangesDialog, | |
| 1702 | - close: closeSaveChangesDialog, | |
| 1703 | - isOpen: isSaveChangesDialogOpen | |
| 1704 | - } = (0,_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.useDialog)(); | |
| 1705 | - const [stopSyncConfirmation, setStopSyncConfirmation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); | |
| 1706 | - const [startSyncConfirmation, setStartSyncConfirmation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); | |
| 1707 | - const [isStopSyncSuppressed] = (0,_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__.useSuppressedMessage)(STOP_SYNC_MESSAGE_KEY); | |
| 1708 | - const [scrollElement, setScrollElement] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); | |
| 1709 | - const { | |
| 1710 | - mutateAsync: publish, | |
| 1711 | - isPending: isPublishing | |
| 1712 | - } = usePublish(); | |
| 1713 | - const resetAndClosePanel = () => { | |
| 1714 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_6__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_13__.slice.actions.resetToInitialState({ | |
| 1715 | - context: 'frontend' | |
| 1716 | - })); | |
| 1717 | - closeSaveChangesDialog(); | |
| 1718 | - }; | |
| 1719 | - const handleClosePanel = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => { | |
| 1720 | - if (isDirty) { | |
| 1721 | - openSaveChangesDialog(); | |
| 1722 | - return; | |
| 1723 | - } | |
| 1724 | - void onRequestClose(); | |
| 1725 | - }, [isDirty, openSaveChangesDialog, onRequestClose]); | |
| 1726 | - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { | |
| 1727 | - if (!onExposeCloseAttempt) { | |
| 1728 | - return; | |
| 1729 | - } | |
| 1730 | - onExposeCloseAttempt(() => handleClosePanel()); | |
| 1731 | - return () => onExposeCloseAttempt(null); | |
| 1732 | - }, [onExposeCloseAttempt, handleClosePanel]); | |
| 1733 | - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { | |
| 1734 | - (0,_panel_interactions__WEBPACK_IMPORTED_MODULE_23__.blockPanelInteractions)(); | |
| 1735 | - return () => { | |
| 1736 | - (0,_panel_interactions__WEBPACK_IMPORTED_MODULE_23__.unblockPanelInteractions)(); | |
| 1737 | - }; | |
| 1738 | - }, []); | |
| 1739 | - const handleStopSync = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(classId => { | |
| 1740 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_6__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_13__.slice.actions.update({ | |
| 1741 | - style: { | |
| 1742 | - id: classId, | |
| 1743 | - sync_to_v3: false | |
| 1744 | - } | |
| 1745 | - })); | |
| 1746 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_14__.trackGlobalClasses)({ | |
| 1747 | - event: 'classSyncToV3', | |
| 1748 | - classId, | |
| 1749 | - action: 'unsync' | |
| 1750 | - }); | |
| 1751 | - setStopSyncConfirmation(null); | |
| 1752 | - }, []); | |
| 1753 | - const handleStartSync = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(classId => { | |
| 1754 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_6__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_13__.slice.actions.update({ | |
| 1755 | - style: { | |
| 1756 | - id: classId, | |
| 1757 | - sync_to_v3: true | |
| 1758 | - } | |
| 1759 | - })); | |
| 1760 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_14__.trackGlobalClasses)({ | |
| 1761 | - event: 'classSyncToV3', | |
| 1762 | - classId, | |
| 1763 | - action: 'sync' | |
| 1764 | - }); | |
| 1765 | - setStartSyncConfirmation(null); | |
| 1766 | - }, []); | |
| 1767 | - const handleStopSyncRequest = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(classId => { | |
| 1768 | - if (!isStopSyncSuppressed) { | |
| 1769 | - setStopSyncConfirmation(classId); | |
| 1770 | - } else { | |
| 1771 | - handleStopSync(classId); | |
| 1772 | - } | |
| 1773 | - }, [isStopSyncSuppressed, handleStopSync]); | |
| 1774 | - usePreventUnload(); | |
| 1775 | - 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, { | |
| 1776 | - fallback: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ErrorBoundaryFallback, null) | |
| 1777 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_search_and_filter_context__WEBPACK_IMPORTED_MODULE_18__.SearchAndFilterProvider, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Stack, { | |
| 1778 | - direction: "column", | |
| 1779 | - sx: { | |
| 1780 | - height: '100%', | |
| 1781 | - width: '100%', | |
| 1782 | - flex: 1, | |
| 1783 | - minHeight: 0, | |
| 1784 | - overflow: 'hidden' | |
| 1785 | - } | |
| 1786 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Box, { | |
| 1787 | - px: 2, | |
| 1788 | - pb: 1 | |
| 1789 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Stack, { | |
| 1790 | - direction: "row", | |
| 1791 | - alignItems: "center", | |
| 1792 | - justifyContent: "space-between", | |
| 1793 | - gap: 0.5, | |
| 1794 | - sx: { | |
| 1795 | - pb: 0.5 | |
| 1796 | - } | |
| 1797 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Box, { | |
| 1798 | - sx: { | |
| 1799 | - flexGrow: 1, | |
| 1800 | - minWidth: 0 | |
| 1801 | - } | |
| 1802 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_search_and_filter_components_search_class_manager_search__WEBPACK_IMPORTED_MODULE_17__.ClassManagerSearch, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_search_and_filter_components_filter_css_class_filter__WEBPACK_IMPORTED_MODULE_16__.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_15__.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, { | |
| 1803 | - ref: setScrollElement, | |
| 1804 | - px: 2, | |
| 1805 | - sx: { | |
| 1806 | - flexGrow: 1, | |
| 1807 | - overflowY: 'auto', | |
| 1808 | - minHeight: 0 | |
| 1809 | - } | |
| 1810 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_global_classes_list__WEBPACK_IMPORTED_MODULE_22__.GlobalClassesList, { | |
| 1811 | - disabled: isPublishing, | |
| 1812 | - scrollElement: scrollElement, | |
| 1813 | - onStopSyncRequest: handleStopSyncRequest, | |
| 1814 | - onStartSyncRequest: classId => setStartSyncConfirmation(classId) | |
| 1815 | - })), /*#__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, { | |
| 1816 | - fullWidth: true, | |
| 1817 | - size: "small", | |
| 1818 | - color: "global", | |
| 1819 | - variant: "contained", | |
| 1820 | - onClick: publish, | |
| 1821 | - disabled: !isDirty, | |
| 1822 | - loading: isPublishing | |
| 1823 | - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Save changes', 'elementor')))))), isActive && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_class_manager_introduction__WEBPACK_IMPORTED_MODULE_19__.ClassManagerIntroduction, null), startSyncConfirmation && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_start_sync_to_v3_modal__WEBPACK_IMPORTED_MODULE_24__.StartSyncToV3Modal, { | |
| 1824 | - externalOpen: true, | |
| 1825 | - classId: startSyncConfirmation, | |
| 1826 | - onExternalClose: () => setStartSyncConfirmation(null), | |
| 1827 | - onConfirm: () => handleStartSync(startSyncConfirmation) | |
| 1828 | - }), stopSyncConfirmation && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StopSyncConfirmationDialog, { | |
| 1829 | - open: true, | |
| 1830 | - onClose: () => setStopSyncConfirmation(null), | |
| 1831 | - onConfirm: () => handleStopSync(stopSyncConfirmation) | |
| 1832 | - }), 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, { | |
| 1833 | - onClose: closeSaveChangesDialog, | |
| 1834 | - logo: false | |
| 1835 | - }, /*#__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, { | |
| 1836 | - actions: { | |
| 1837 | - discard: { | |
| 1838 | - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Discard', 'elementor'), | |
| 1839 | - action: () => { | |
| 1840 | - resetAndClosePanel(); | |
| 1841 | - } | |
| 1842 | - }, | |
| 1843 | - confirm: { | |
| 1844 | - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Save & Continue', 'elementor'), | |
| 1845 | - action: async () => { | |
| 1846 | - await publish(); | |
| 1847 | - closeSaveChangesDialog(); | |
| 1848 | - void onRequestClose(); | |
| 1849 | - } | |
| 1850 | - } | |
| 1851 | - } | |
| 1852 | - }))); | |
| 1853 | -} | |
| 1854 | -const ErrorBoundaryFallback = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Box, { | |
| 1855 | - role: "alert", | |
| 1856 | - sx: { | |
| 1857 | - minHeight: '100%', | |
| 1858 | - p: 2 | |
| 1859 | - } | |
| 1860 | -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Alert, { | |
| 1861 | - severity: "error", | |
| 1862 | - sx: { | |
| 1863 | - mb: 2, | |
| 1864 | - maxWidth: 400, | |
| 1865 | - textAlign: 'center' | |
| 1866 | - } | |
| 1867 | -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("strong", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Something went wrong', 'elementor')))); | |
| 1868 | -const usePreventUnload = () => { | |
| 1869 | - const isDirty = (0,_hooks_use_dirty_state__WEBPACK_IMPORTED_MODULE_10__.useDirtyState)(); | |
| 1870 | - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { | |
| 1871 | - const handleBeforeUnload = event => { | |
| 1872 | - if (isDirty) { | |
| 1873 | - event.preventDefault(); | |
| 1874 | - } | |
| 1875 | - }; | |
| 1876 | - window.addEventListener('beforeunload', handleBeforeUnload); | |
| 1877 | - return () => { | |
| 1878 | - window.removeEventListener('beforeunload', handleBeforeUnload); | |
| 1879 | - }; | |
| 1880 | - }, [isDirty]); | |
| 1881 | -}; | |
| 1882 | -const usePublish = () => { | |
| 1883 | - return (0,_elementor_query__WEBPACK_IMPORTED_MODULE_5__.useMutation)({ | |
| 1884 | - mutationFn: () => (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_12__.saveGlobalClasses)({ | |
| 1885 | - context: 'frontend' | |
| 1886 | - }), | |
| 1887 | - onSuccess: async () => { | |
| 1888 | - (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.setDocumentModifiedStatus)(false); | |
| 1889 | - if ((0,_delete_class__WEBPACK_IMPORTED_MODULE_20__.hasDeletedItems)()) { | |
| 1890 | - await (0,_delete_class__WEBPACK_IMPORTED_MODULE_20__.onDelete)(); | |
| 1891 | - } | |
| 1892 | - } | |
| 1893 | - }); | |
| 1894 | -}; | |
| 1895 | -const TotalCssClassCounter = () => { | |
| 1896 | - const filters = (0,_hooks_use_filters__WEBPACK_IMPORTED_MODULE_11__.useFilters)(); | |
| 1897 | - const cssClasses = (0,_hooks_use_classes_order__WEBPACK_IMPORTED_MODULE_9__.useClassesOrder)(); | |
| 1898 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Chip, { | |
| 1899 | - size: 'small', | |
| 1900 | - label: filters ? `${filters.length} / ${cssClasses?.length}` : cssClasses?.length | |
| 1901 | - }); | |
| 1902 | -}; | |
| 1903 | -const StopSyncConfirmationDialog = ({ | |
| 1904 | - open, | |
| 1905 | - onClose, | |
| 1906 | - onConfirm | |
| 1907 | -}) => { | |
| 1908 | - const [, suppressStopSyncMessage] = (0,_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__.useSuppressedMessage)(STOP_SYNC_MESSAGE_KEY); | |
| 1909 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.ConfirmationDialog, { | |
| 1910 | - open: open, | |
| 1911 | - onClose: onClose | |
| 1912 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.ConfirmationDialog.Title, { | |
| 1913 | - icon: _flipped_color_swatch_icon__WEBPACK_IMPORTED_MODULE_21__.FlippedColorSwatchIcon, | |
| 1914 | - iconColor: "primary" | |
| 1915 | - }, (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, { | |
| 1916 | - sx: { | |
| 1917 | - mt: 1 | |
| 1918 | - } | |
| 1919 | - }, (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, { | |
| 1920 | - onClose: onClose, | |
| 1921 | - onConfirm: onConfirm, | |
| 1922 | - cancelLabel: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Cancel', 'elementor'), | |
| 1923 | - confirmLabel: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Got it', 'elementor'), | |
| 1924 | - color: "primary", | |
| 1925 | - onSuppressMessage: suppressStopSyncMessage, | |
| 1926 | - suppressLabel: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)("Don't show again", 'elementor') | |
| 1927 | - })); | |
| 1928 | -}; | |
| 1929 | - | |
| 1930 | -/***/ }), | |
| 1931 | - | |
| 1932 | -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/delete-class.ts": | |
| 1933 | -/*!***************************************************************************************************!*\ | |
| 1934 | - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/delete-class.ts ***! | |
| 1935 | - \***************************************************************************************************/ | |
| 1936 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 1937 | - | |
| 1938 | -__webpack_require__.r(__webpack_exports__); | |
| 1939 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 1940 | -/* harmony export */ deleteClass: function() { return /* binding */ deleteClass; }, | |
| 1941 | -/* harmony export */ hasDeletedItems: function() { return /* binding */ hasDeletedItems; }, | |
| 1942 | -/* harmony export */ onDelete: function() { return /* binding */ onDelete; } | |
| 1943 | -/* harmony export */ }); | |
| 1944 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 1945 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__); | |
| 1946 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 1947 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 1948 | - | |
| 1949 | - | |
| 1950 | - | |
| 1951 | -let isDeleted = false; | |
| 1952 | -const deleteClass = id => { | |
| 1953 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_2__.trackGlobalClasses)({ | |
| 1954 | - event: 'classDeleted', | |
| 1955 | - classId: id, | |
| 1956 | - runAction: () => { | |
| 1957 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_1__.slice.actions.delete(id)); | |
| 1958 | - isDeleted = true; | |
| 1959 | - } | |
| 1960 | - }); | |
| 1961 | -}; | |
| 1962 | -const onDelete = async () => { | |
| 1963 | - isDeleted = false; | |
| 1964 | -}; | |
| 1965 | -const hasDeletedItems = () => isDeleted; | |
| 1966 | - | |
| 1967 | -/***/ }), | |
| 1968 | - | |
| 1969 | -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/delete-confirmation-dialog.tsx": | |
| 1970 | -/*!******************************************************************************************************************!*\ | |
| 1971 | - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/delete-confirmation-dialog.tsx ***! | |
| 1972 | - \******************************************************************************************************************/ | |
| 1973 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 1974 | - | |
| 1975 | -__webpack_require__.r(__webpack_exports__); | |
| 1976 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 1977 | -/* harmony export */ DeleteConfirmationProvider: function() { return /* binding */ DeleteConfirmationProvider; }, | |
| 1978 | -/* harmony export */ useDeleteConfirmation: function() { return /* binding */ useDeleteConfirmation; } | |
| 1979 | -/* harmony export */ }); | |
| 1980 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 1981 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 1982 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); | |
| 1983 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__); | |
| 1984 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 1985 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); | |
| 1986 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 1987 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); | |
| 1988 | -/* 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"); | |
| 1989 | -/* 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"); | |
| 1990 | - | |
| 1991 | - | |
| 1992 | - | |
| 1993 | - | |
| 1994 | - | |
| 1995 | - | |
| 1996 | - | |
| 1997 | -const context = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(null); | |
| 1998 | -const DeleteConfirmationProvider = ({ | |
| 1999 | - children | |
| 2000 | -}) => { | |
| 2001 | - const [dialogProps, setDialogProps] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); | |
| 2002 | - const openDialog = props => { | |
| 2003 | - setDialogProps(props); | |
| 2004 | - }; | |
| 2005 | - const closeDialog = () => { | |
| 2006 | - setDialogProps(null); | |
| 2007 | - }; | |
| 2008 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(context.Provider, { | |
| 2009 | - value: { | |
| 2010 | - openDialog, | |
| 2011 | - closeDialog, | |
| 2012 | - dialogProps | |
| 2013 | - } | |
| 2014 | - }, children, !!dialogProps && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DeleteClassDialog, dialogProps)); | |
| 2015 | -}; | |
| 2016 | -const DeleteClassDialog = ({ | |
| 2017 | - label, | |
| 2018 | - id | |
| 2019 | -}) => { | |
| 2020 | - const { | |
| 2021 | - closeDialog | |
| 2022 | - } = useDeleteConfirmation(); | |
| 2023 | - const { | |
| 2024 | - data: { | |
| 2025 | - total, | |
| 2026 | - content | |
| 2027 | - } | |
| 2028 | - } = (0,_hooks_use_css_class_usage_by_id__WEBPACK_IMPORTED_MODULE_4__.useCssClassUsageByID)(id); | |
| 2029 | - const handleConfirm = () => { | |
| 2030 | - closeDialog(); | |
| 2031 | - (0,_delete_class__WEBPACK_IMPORTED_MODULE_5__.deleteClass)(id); | |
| 2032 | - }; | |
| 2033 | - | |
| 2034 | - // translators: %1: total usage count, %2: number of pages | |
| 2035 | - 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'); | |
| 2036 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog, { | |
| 2037 | - open: true, | |
| 2038 | - onClose: closeDialog | |
| 2039 | - }, /*#__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, { | |
| 2040 | - variant: "subtitle2", | |
| 2041 | - component: "span" | |
| 2042 | - }, "\xA0", label, "\xA0"), text)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog.Actions, { | |
| 2043 | - onClose: closeDialog, | |
| 2044 | - onConfirm: handleConfirm | |
| 2045 | - })); | |
| 2046 | -}; | |
| 2047 | -const useDeleteConfirmation = () => { | |
| 2048 | - const contextValue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(context); | |
| 2049 | - if (!contextValue) { | |
| 2050 | - throw new Error('useDeleteConfirmation must be used within a DeleteConfirmationProvider'); | |
| 2051 | - } | |
| 2052 | - return contextValue; | |
| 2053 | -}; | |
| 2054 | - | |
| 2055 | -/***/ }), | |
| 2056 | - | |
| 2057 | -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/duplicate-label-dialog.tsx": | |
| 2058 | -/*!**************************************************************************************************************!*\ | |
| 2059 | - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/duplicate-label-dialog.tsx ***! | |
| 2060 | - \**************************************************************************************************************/ | |
| 2061 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 2062 | - | |
| 2063 | -__webpack_require__.r(__webpack_exports__); | |
| 2064 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 2065 | -/* harmony export */ DuplicateLabelDialog: function() { return /* binding */ DuplicateLabelDialog; } | |
| 2066 | -/* harmony export */ }); | |
| 2067 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 2068 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 2069 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); | |
| 2070 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__); | |
| 2071 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); | |
| 2072 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__); | |
| 2073 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 2074 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); | |
| 2075 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 2076 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); | |
| 2077 | - | |
| 2078 | - | |
| 2079 | - | |
| 2080 | - | |
| 2081 | - | |
| 2082 | -const DUP_PREFIX = 'DUP_'; | |
| 2083 | -const DuplicateLabelDialog = ({ | |
| 2084 | - modifiedLabels, | |
| 2085 | - onApprove | |
| 2086 | -}) => { | |
| 2087 | - const handleButtonClick = () => { | |
| 2088 | - localStorage.setItem('elementor-global-classes-search', DUP_PREFIX); | |
| 2089 | - onApprove?.(); | |
| 2090 | - (0,_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.closeDialog)(); | |
| 2091 | - }; | |
| 2092 | - 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, { | |
| 2093 | - logo: false | |
| 2094 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { | |
| 2095 | - display: "flex", | |
| 2096 | - alignItems: "center", | |
| 2097 | - gap: 1 | |
| 2098 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Icon, { | |
| 2099 | - color: "secondary" | |
| 2100 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.InfoCircleFilledIcon, { | |
| 2101 | - fontSize: "medium" | |
| 2102 | - })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { | |
| 2103 | - variant: "subtitle1" | |
| 2104 | - }, (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, { | |
| 2105 | - spacing: 2, | |
| 2106 | - direction: "column" | |
| 2107 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { | |
| 2108 | - variant: "body2" | |
| 2109 | - }, (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, { | |
| 2110 | - sx: { | |
| 2111 | - width: '100%', | |
| 2112 | - display: 'flex', | |
| 2113 | - gap: 2, | |
| 2114 | - alignItems: 'flex-start' | |
| 2115 | - } | |
| 2116 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { | |
| 2117 | - variant: "subtitle2", | |
| 2118 | - sx: { | |
| 2119 | - fontWeight: 'bold', | |
| 2120 | - flex: 1, | |
| 2121 | - flexShrink: 1, | |
| 2122 | - flexGrow: 1, | |
| 2123 | - minWidth: 0 | |
| 2124 | - } | |
| 2125 | - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Before', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { | |
| 2126 | - variant: "subtitle2", | |
| 2127 | - sx: { | |
| 2128 | - minWidth: '200px', | |
| 2129 | - fontWeight: 'bold', | |
| 2130 | - flexShrink: 0, | |
| 2131 | - flexGrow: 0, | |
| 2132 | - width: '200px', | |
| 2133 | - maxWidth: '200px' | |
| 2134 | - } | |
| 2135 | - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('After', 'elementor'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Divider, { | |
| 2136 | - sx: { | |
| 2137 | - mt: 0.5, | |
| 2138 | - mb: 0.5 | |
| 2139 | - } | |
| 2140 | - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Stack, { | |
| 2141 | - direction: "column", | |
| 2142 | - gap: 0.5, | |
| 2143 | - sx: { | |
| 2144 | - pb: 2 | |
| 2145 | - } | |
| 2146 | - }, Object.values(modifiedLabels).map(({ | |
| 2147 | - original, | |
| 2148 | - modified | |
| 2149 | - }, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { | |
| 2150 | - key: index, | |
| 2151 | - sx: { | |
| 2152 | - width: '100%', | |
| 2153 | - display: 'flex', | |
| 2154 | - gap: 2, | |
| 2155 | - alignItems: 'flex-start' | |
| 2156 | - } | |
| 2157 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { | |
| 2158 | - sx: { | |
| 2159 | - flex: 1, | |
| 2160 | - flexShrink: 1, | |
| 2161 | - flexGrow: 1, | |
| 2162 | - minWidth: 0 | |
| 2163 | - } | |
| 2164 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.EllipsisWithTooltip, { | |
| 2165 | - title: original | |
| 2166 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { | |
| 2167 | - variant: "body2", | |
| 2168 | - sx: { | |
| 2169 | - color: 'text.secondary' | |
| 2170 | - } | |
| 2171 | - }, original))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { | |
| 2172 | - sx: { | |
| 2173 | - minWidth: '200px', | |
| 2174 | - flexShrink: 0, | |
| 2175 | - flexGrow: 0, | |
| 2176 | - width: '200px', | |
| 2177 | - maxWidth: '200px' | |
| 2178 | - } | |
| 2179 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.EllipsisWithTooltip, { | |
| 2180 | - title: modified | |
| 2181 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { | |
| 2182 | - variant: "body2", | |
| 2183 | - sx: { | |
| 2184 | - color: 'text.primary' | |
| 2185 | - } | |
| 2186 | - }, 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, { | |
| 2187 | - severity: "info", | |
| 2188 | - size: "small", | |
| 2189 | - color: "secondary" | |
| 2190 | - }, /*#__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, { | |
| 2191 | - color: "secondary", | |
| 2192 | - variant: "text", | |
| 2193 | - onClick: handleButtonClick | |
| 2194 | - }, (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, { | |
| 2195 | - color: "secondary", | |
| 2196 | - variant: "contained", | |
| 2197 | - onClick: _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.closeDialog | |
| 2198 | - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Done', 'elementor')))); | |
| 2199 | -}; | |
| 2200 | - | |
| 2201 | -/***/ }), | |
| 2202 | - | |
| 2203 | -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/flipped-color-swatch-icon.tsx": | |
| 2204 | -/*!*****************************************************************************************************************!*\ | |
| 2205 | - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/flipped-color-swatch-icon.tsx ***! | |
| 2206 | - \*****************************************************************************************************************/ | |
| 2207 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 2208 | - | |
| 2209 | -__webpack_require__.r(__webpack_exports__); | |
| 2210 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 2211 | -/* harmony export */ FlippedColorSwatchIcon: function() { return /* binding */ FlippedColorSwatchIcon; } | |
| 2212 | -/* harmony export */ }); | |
| 2213 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 2214 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 2215 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); | |
| 2216 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__); | |
| 2217 | -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); } | |
| 2218 | - | |
| 2219 | - | |
| 2220 | -const FlippedColorSwatchIcon = ({ | |
| 2221 | - sx, | |
| 2222 | - ...props | |
| 2223 | -}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.ColorSwatchIcon, _extends({ | |
| 2224 | - sx: { | |
| 2225 | - transform: 'rotate(90deg)', | |
| 2226 | - ...sx | |
| 2227 | - } | |
| 2228 | -}, props)); | |
| 2229 | - | |
| 2230 | -/***/ }), | |
| 2231 | - | |
| 2232 | -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/global-classes-list.tsx": | |
| 2233 | -/*!***********************************************************************************************************!*\ | |
| 2234 | - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/global-classes-list.tsx ***! | |
| 2235 | - \***********************************************************************************************************/ | |
| 2236 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 2237 | - | |
| 2238 | -__webpack_require__.r(__webpack_exports__); | |
| 2239 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 2240 | -/* harmony export */ GlobalClassesList: function() { return /* binding */ GlobalClassesList; } | |
| 2241 | -/* harmony export */ }); | |
| 2242 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 2243 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 2244 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 2245 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_1__); | |
| 2246 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 2247 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); | |
| 2248 | -/* 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"); | |
| 2249 | -/* 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"); | |
| 2250 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 2251 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__); | |
| 2252 | -/* 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"); | |
| 2253 | -/* 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"); | |
| 2254 | -/* 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"); | |
| 2255 | -/* 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"); | |
| 2256 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 2257 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 2258 | -/* 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"); | |
| 2259 | -/* 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"); | |
| 2260 | -/* 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"); | |
| 2261 | -/* 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"); | |
| 2262 | -/* 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"); | |
| 2263 | -/* harmony import */ var _sortable__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./sortable */ "./packages/packages/core/editor-global-classes/src/components/class-manager/sortable.tsx"); | |
| 2264 | - | |
| 2265 | - | |
| 2266 | - | |
| 2267 | - | |
| 2268 | - | |
| 2269 | - | |
| 2270 | - | |
| 2271 | - | |
| 2272 | - | |
| 2273 | - | |
| 2274 | - | |
| 2275 | - | |
| 2276 | - | |
| 2277 | - | |
| 2278 | - | |
| 2279 | - | |
| 2280 | - | |
| 2281 | - | |
| 2282 | -const ROW_HEIGHT = 40; | |
| 2283 | -const OVERSCAN = 6; | |
| 2284 | -const GlobalClassesList = ({ | |
| 2285 | - disabled, | |
| 2286 | - scrollElement, | |
| 2287 | - onStopSyncRequest, | |
| 2288 | - onStartSyncRequest | |
| 2289 | -}) => { | |
| 2290 | - const { | |
| 2291 | - search: { | |
| 2292 | - debouncedValue: searchValue | |
| 2293 | - } | |
| 2294 | - } = (0,_search_and_filter_context__WEBPACK_IMPORTED_MODULE_12__.useSearchAndFilters)(); | |
| 2295 | - const cssClasses = (0,_hooks_use_ordered_classes__WEBPACK_IMPORTED_MODULE_8__.useOrderedClasses)(); | |
| 2296 | - const dispatch = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__useDispatch)(); | |
| 2297 | - const filters = (0,_hooks_use_filters__WEBPACK_IMPORTED_MODULE_7__.useFilters)(); | |
| 2298 | - const [draggedItemId, setDraggedItemId] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); | |
| 2299 | - const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({}); | |
| 2300 | - const addLoadingClass = classId => setLoading(prev => ({ | |
| 2301 | - ...prev, | |
| 2302 | - [classId]: true | |
| 2303 | - })); | |
| 2304 | - const removeLoadingClass = classId => setLoading(prev => { | |
| 2305 | - const { | |
| 2306 | - [classId]: _, | |
| 2307 | - ...rest | |
| 2308 | - } = prev; | |
| 2309 | - return rest; | |
| 2310 | - }); | |
| 2311 | - const draggedItemLabel = cssClasses.find(cssClass => cssClass.id === draggedItemId)?.label ?? ''; | |
| 2312 | - const [classesOrder, reorderClasses] = useReorder(draggedItemId, setDraggedItemId, draggedItemLabel ?? ''); | |
| 2313 | - const filteredCssClasses = useFilteredCssClasses(); | |
| 2314 | - const virtualizer = (0,_tanstack_react_virtual__WEBPACK_IMPORTED_MODULE_3__.useVirtualizer)({ | |
| 2315 | - count: filteredCssClasses.length, | |
| 2316 | - getScrollElement: () => scrollElement ?? null, | |
| 2317 | - estimateSize: () => ROW_HEIGHT, | |
| 2318 | - overscan: OVERSCAN, | |
| 2319 | - getItemKey: index => filteredCssClasses[index].id, | |
| 2320 | - // Keep the actively dragged row mounted even when scrolled out of view. | |
| 2321 | - // SortableItem unregisters its render on unmount, which would make the | |
| 2322 | - // DragOverlay clone disappear mid-drag. | |
| 2323 | - rangeExtractor: range => { | |
| 2324 | - const indices = new Set((0,_tanstack_react_virtual__WEBPACK_IMPORTED_MODULE_4__.defaultRangeExtractor)(range)); | |
| 2325 | - if (draggedItemId) { | |
| 2326 | - const draggedItemIndex = filteredCssClasses.findIndex(cssClass => cssClass.id === draggedItemId); | |
| 2327 | - if (draggedItemIndex >= 0) { | |
| 2328 | - indices.add(draggedItemIndex); | |
| 2329 | - } | |
| 2330 | - } | |
| 2331 | - return [...indices].sort((a, b) => a - b); | |
| 2332 | - } | |
| 2333 | - }); | |
| 2334 | - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { | |
| 2335 | - const handler = event => { | |
| 2336 | - if (event.key === 'z' && (event.ctrlKey || event.metaKey)) { | |
| 2337 | - event.stopImmediatePropagation(); | |
| 2338 | - event.preventDefault(); | |
| 2339 | - if (event.shiftKey) { | |
| 2340 | - dispatch(_store__WEBPACK_IMPORTED_MODULE_10__.slice.actions.redo()); | |
| 2341 | - return; | |
| 2342 | - } | |
| 2343 | - dispatch(_store__WEBPACK_IMPORTED_MODULE_10__.slice.actions.undo()); | |
| 2344 | - } | |
| 2345 | - }; | |
| 2346 | - window.addEventListener('keydown', handler, { | |
| 2347 | - capture: true | |
| 2348 | - }); | |
| 2349 | - return () => window.removeEventListener('keydown', handler); | |
| 2350 | - }, [dispatch]); | |
| 2351 | - if (!cssClasses?.length) { | |
| 2352 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(EmptyState, null); | |
| 2353 | - } | |
| 2354 | - const notFoundType = (0,_not_found__WEBPACK_IMPORTED_MODULE_16__.getNotFoundType)(searchValue, filters, filteredCssClasses); | |
| 2355 | - if (notFoundType) { | |
| 2356 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_not_found__WEBPACK_IMPORTED_MODULE_16__.NotFound, { | |
| 2357 | - notFoundType: notFoundType | |
| 2358 | - }); | |
| 2359 | - } | |
| 2360 | - const isFiltersApplied = filters?.length || searchValue; | |
| 2361 | - const allowSorting = filteredCssClasses.length > 1 && !isFiltersApplied; | |
| 2362 | - 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, { | |
| 2363 | - sx: { | |
| 2364 | - position: 'relative', | |
| 2365 | - display: 'block', | |
| 2366 | - height: virtualizer.getTotalSize(), | |
| 2367 | - padding: 0 | |
| 2368 | - } | |
| 2369 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_17__.SortableProvider, { | |
| 2370 | - value: classesOrder, | |
| 2371 | - onChange: reorderClasses, | |
| 2372 | - onDragStart: event => setDraggedItemId(event.active.id), | |
| 2373 | - onDragEnd: () => setDraggedItemId(null), | |
| 2374 | - onDragCancel: () => setDraggedItemId(null), | |
| 2375 | - disableDragOverlay: !allowSorting | |
| 2376 | - }, virtualizer.getVirtualItems().map(virtualRow => { | |
| 2377 | - const cssClass = filteredCssClasses[virtualRow.index]; | |
| 2378 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_17__.SortableItem, { | |
| 2379 | - key: virtualRow.key, | |
| 2380 | - id: cssClass.id, | |
| 2381 | - style: { | |
| 2382 | - position: 'absolute', | |
| 2383 | - top: virtualRow.start, | |
| 2384 | - left: 0, | |
| 2385 | - width: '100%' | |
| 2386 | - } | |
| 2387 | - }, ({ | |
| 2388 | - isDragged, | |
| 2389 | - isDragPlaceholder, | |
| 2390 | - triggerProps, | |
| 2391 | - triggerStyle | |
| 2392 | - }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_class_item__WEBPACK_IMPORTED_MODULE_13__.ClassItem, { | |
| 2393 | - id: cssClass.id, | |
| 2394 | - label: cssClass.label, | |
| 2395 | - renameClass: async newLabel => { | |
| 2396 | - addLoadingClass(cssClass.id); | |
| 2397 | - try { | |
| 2398 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_11__.trackGlobalClasses)({ | |
| 2399 | - event: 'classRenamed', | |
| 2400 | - classId: cssClass.id, | |
| 2401 | - oldValue: cssClass.label, | |
| 2402 | - newValue: newLabel, | |
| 2403 | - source: 'class-manager' | |
| 2404 | - }); | |
| 2405 | - void (await (0,_load_existing_classes__WEBPACK_IMPORTED_MODULE_9__.loadExistingClasses)([cssClass.id])); | |
| 2406 | - dispatch(_store__WEBPACK_IMPORTED_MODULE_10__.slice.actions.update({ | |
| 2407 | - style: { | |
| 2408 | - id: cssClass.id, | |
| 2409 | - label: newLabel | |
| 2410 | - } | |
| 2411 | - })); | |
| 2412 | - } finally { | |
| 2413 | - removeLoadingClass(cssClass.id); | |
| 2414 | - } | |
| 2415 | - }, | |
| 2416 | - selected: isDragged, | |
| 2417 | - disabled: disabled || isDragPlaceholder || loading[cssClass.id], | |
| 2418 | - sortableTriggerProps: { | |
| 2419 | - ...triggerProps, | |
| 2420 | - style: triggerStyle | |
| 2421 | - }, | |
| 2422 | - showSortIndicator: allowSorting, | |
| 2423 | - syncToV3: cssClass.sync_to_v3, | |
| 2424 | - onToggleSync: (id, newValue) => { | |
| 2425 | - if (!newValue && onStopSyncRequest) { | |
| 2426 | - onStopSyncRequest(id); | |
| 2427 | - } else if (newValue && onStartSyncRequest) { | |
| 2428 | - onStartSyncRequest(id); | |
| 2429 | - } else { | |
| 2430 | - dispatch(_store__WEBPACK_IMPORTED_MODULE_10__.slice.actions.update({ | |
| 2431 | - style: { | |
| 2432 | - id, | |
| 2433 | - sync_to_v3: newValue | |
| 2434 | - } | |
| 2435 | - })); | |
| 2436 | - } | |
| 2437 | - } | |
| 2438 | - })); | |
| 2439 | - })))); | |
| 2440 | -}; | |
| 2441 | -const EmptyState = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Stack, { | |
| 2442 | - alignItems: "center", | |
| 2443 | - gap: 1.5, | |
| 2444 | - pt: 10, | |
| 2445 | - px: 0.5, | |
| 2446 | - maxWidth: "260px", | |
| 2447 | - margin: "auto" | |
| 2448 | -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_flipped_color_swatch_icon__WEBPACK_IMPORTED_MODULE_15__.FlippedColorSwatchIcon, { | |
| 2449 | - fontSize: "large" | |
| 2450 | -}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StyledHeader, { | |
| 2451 | - variant: "subtitle2", | |
| 2452 | - component: "h2", | |
| 2453 | - color: "text.secondary" | |
| 2454 | -}, (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, { | |
| 2455 | - align: "center", | |
| 2456 | - variant: "caption", | |
| 2457 | - color: "text.secondary" | |
| 2458 | -}, (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'))); | |
| 2459 | - | |
| 2460 | -// Override panel reset styles. | |
| 2461 | -const StyledHeader = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.styled)(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography)(({ | |
| 2462 | - theme, | |
| 2463 | - variant | |
| 2464 | -}) => ({ | |
| 2465 | - '&.MuiTypography-root': { | |
| 2466 | - ...theme.typography[variant] | |
| 2467 | - } | |
| 2468 | -})); | |
| 2469 | -const useReorder = (draggedItemId, setDraggedItemId, draggedItemLabel) => { | |
| 2470 | - const dispatch = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__useDispatch)(); | |
| 2471 | - const order = (0,_hooks_use_classes_order__WEBPACK_IMPORTED_MODULE_6__.useClassesOrder)(); | |
| 2472 | - const reorder = newIds => { | |
| 2473 | - dispatch(_store__WEBPACK_IMPORTED_MODULE_10__.slice.actions.setOrder(newIds)); | |
| 2474 | - if (draggedItemId) { | |
| 2475 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_11__.trackGlobalClasses)({ | |
| 2476 | - event: 'classManagerReorder', | |
| 2477 | - classId: draggedItemId, | |
| 2478 | - classTitle: draggedItemLabel | |
| 2479 | - }); | |
| 2480 | - setDraggedItemId(null); | |
| 2481 | - } | |
| 2482 | - }; | |
| 2483 | - return [order, reorder]; | |
| 2484 | -}; | |
| 2485 | -const useFilteredCssClasses = () => { | |
| 2486 | - const cssClasses = (0,_hooks_use_ordered_classes__WEBPACK_IMPORTED_MODULE_8__.useOrderedClasses)(); | |
| 2487 | - const { | |
| 2488 | - search: { | |
| 2489 | - debouncedValue: searchValue | |
| 2490 | - } | |
| 2491 | - } = (0,_search_and_filter_context__WEBPACK_IMPORTED_MODULE_12__.useSearchAndFilters)(); | |
| 2492 | - const filters = (0,_hooks_use_filters__WEBPACK_IMPORTED_MODULE_7__.useFilters)(); | |
| 2493 | - const lowercaseLabels = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => cssClasses.map(cssClass => ({ | |
| 2494 | - ...cssClass, | |
| 2495 | - lowerLabel: cssClass.label.toLowerCase() | |
| 2496 | - })), [cssClasses]); | |
| 2497 | - const filteredClasses = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { | |
| 2498 | - const normalizedSearch = searchValue.replace(/[^a-zA-Z0-9_-]/g, '').toLowerCase(); | |
| 2499 | - if (normalizedSearch.length > 1) { | |
| 2500 | - return lowercaseLabels.filter(cssClass => cssClass.lowerLabel.includes(normalizedSearch)); | |
| 2501 | - } | |
| 2502 | - return cssClasses; | |
| 2503 | - }, [searchValue, cssClasses, lowercaseLabels]); | |
| 2504 | - return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { | |
| 2505 | - if (filters && filters.length > 0) { | |
| 2506 | - return filteredClasses.filter(cssClass => filters.includes(cssClass.id)); | |
| 2507 | - } | |
| 2508 | - return filteredClasses; | |
| 2509 | - }, [filteredClasses, filters]); | |
| 2510 | -}; | |
| 2511 | - | |
| 2512 | -/***/ }), | |
| 2513 | - | |
| 2514 | -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/not-found.tsx": | |
| 2515 | -/*!*************************************************************************************************!*\ | |
| 2516 | - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/not-found.tsx ***! | |
| 2517 | - \*************************************************************************************************/ | |
| 2518 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 2519 | - | |
| 2520 | -__webpack_require__.r(__webpack_exports__); | |
| 2521 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 2522 | -/* harmony export */ NotFound: function() { return /* binding */ NotFound; }, | |
| 2523 | -/* harmony export */ NotFoundLayout: function() { return /* binding */ NotFoundLayout; }, | |
| 2524 | -/* harmony export */ getNotFoundType: function() { return /* binding */ getNotFoundType; } | |
| 2525 | -/* harmony export */ }); | |
| 2526 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 2527 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 2528 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); | |
| 2529 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__); | |
| 2530 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 2531 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); | |
| 2532 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 2533 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); | |
| 2534 | -/* 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"); | |
| 2535 | -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); } | |
| 2536 | - | |
| 2537 | - | |
| 2538 | - | |
| 2539 | - | |
| 2540 | - | |
| 2541 | -const getNotFoundType = (searchValue, filters, filteredClasses) => { | |
| 2542 | - const searchNotFound = filteredClasses.length <= 0 && searchValue.length > 1; | |
| 2543 | - const filterNotFound = filters && filters.length === 0; | |
| 2544 | - const filterAndSearchNotFound = searchNotFound && filterNotFound; | |
| 2545 | - if (filterAndSearchNotFound) { | |
| 2546 | - return 'filterAndSearch'; | |
| 2547 | - } | |
| 2548 | - if (searchNotFound) { | |
| 2549 | - return 'search'; | |
| 2550 | - } | |
| 2551 | - if (filterNotFound) { | |
| 2552 | - return 'filter'; | |
| 2553 | - } | |
| 2554 | - return undefined; | |
| 2555 | -}; | |
| 2556 | -const notFound = { | |
| 2557 | - filterAndSearch: { | |
| 2558 | - mainText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Sorry, nothing matched.', 'elementor'), | |
| 2559 | - sceneryText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Try something else.', 'elementor'), | |
| 2560 | - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.PhotoIcon, { | |
| 2561 | - color: "inherit", | |
| 2562 | - fontSize: "large" | |
| 2563 | - }) | |
| 2564 | - }, | |
| 2565 | - search: { | |
| 2566 | - mainText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Sorry, nothing matched', 'elementor'), | |
| 2567 | - sceneryText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Clear your input and try something else.', 'elementor'), | |
| 2568 | - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.PhotoIcon, { | |
| 2569 | - color: "inherit", | |
| 2570 | - fontSize: "large" | |
| 2571 | - }) | |
| 2572 | - }, | |
| 2573 | - filter: { | |
| 2574 | - mainText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Sorry, nothing matched that search.', 'elementor'), | |
| 2575 | - sceneryText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Clear the filters and try something else.', 'elementor'), | |
| 2576 | - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.ColorSwatchIcon, { | |
| 2577 | - color: "inherit", | |
| 2578 | - fontSize: "large" | |
| 2579 | - }) | |
| 2580 | - } | |
| 2581 | -}; | |
| 2582 | -const NotFound = ({ | |
| 2583 | - notFoundType | |
| 2584 | -}) => { | |
| 2585 | - const { | |
| 2586 | - search: { | |
| 2587 | - onClearSearch, | |
| 2588 | - inputValue | |
| 2589 | - }, | |
| 2590 | - filters: { | |
| 2591 | - onClearFilter | |
| 2592 | - } | |
| 2593 | - } = (0,_search_and_filter_context__WEBPACK_IMPORTED_MODULE_4__.useSearchAndFilters)(); | |
| 2594 | - switch (notFoundType) { | |
| 2595 | - case 'filter': | |
| 2596 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(NotFoundLayout, _extends({}, notFound.filter, { | |
| 2597 | - onClear: onClearFilter | |
| 2598 | - })); | |
| 2599 | - case 'search': | |
| 2600 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(NotFoundLayout, _extends({}, notFound.search, { | |
| 2601 | - searchValue: inputValue, | |
| 2602 | - onClear: onClearSearch | |
| 2603 | - })); | |
| 2604 | - case 'filterAndSearch': | |
| 2605 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(NotFoundLayout, _extends({}, notFound.filterAndSearch, { | |
| 2606 | - onClear: () => { | |
| 2607 | - onClearFilter(); | |
| 2608 | - onClearSearch(); | |
| 2609 | - } | |
| 2610 | - })); | |
| 2611 | - } | |
| 2612 | -}; | |
| 2613 | -const NotFoundLayout = ({ | |
| 2614 | - onClear, | |
| 2615 | - searchValue, | |
| 2616 | - mainText, | |
| 2617 | - sceneryText, | |
| 2618 | - icon | |
| 2619 | -}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Stack, { | |
| 2620 | - color: 'text.secondary', | |
| 2621 | - pt: 5, | |
| 2622 | - alignItems: "center", | |
| 2623 | - gap: 1, | |
| 2624 | - overflow: 'hidden', | |
| 2625 | - justifySelf: 'center' | |
| 2626 | -}, icon, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, { | |
| 2627 | - sx: { | |
| 2628 | - width: '100%' | |
| 2629 | - } | |
| 2630 | -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, { | |
| 2631 | - align: "center", | |
| 2632 | - variant: "subtitle2", | |
| 2633 | - color: "inherit" | |
| 2634 | -}, mainText), searchValue && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, { | |
| 2635 | - variant: "subtitle2", | |
| 2636 | - color: "inherit", | |
| 2637 | - sx: { | |
| 2638 | - display: 'flex', | |
| 2639 | - width: '100%', | |
| 2640 | - justifyContent: 'center' | |
| 2641 | - } | |
| 2642 | -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", null, "\u201C"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", { | |
| 2643 | - style: { | |
| 2644 | - maxWidth: '80%', | |
| 2645 | - overflow: 'hidden', | |
| 2646 | - textOverflow: 'ellipsis' | |
| 2647 | - } | |
| 2648 | -}, 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, { | |
| 2649 | - align: "center", | |
| 2650 | - variant: "caption", | |
| 2651 | - color: "inherit" | |
| 2652 | -}, sceneryText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, { | |
| 2653 | - align: "center", | |
| 2654 | - variant: "caption", | |
| 2655 | - color: "inherit" | |
| 2656 | -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Link, { | |
| 2657 | - color: "secondary", | |
| 2658 | - variant: "caption", | |
| 2659 | - component: "button", | |
| 2660 | - onClick: onClear | |
| 2661 | -}, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Clear & try again', 'elementor')))); | |
| 2662 | - | |
| 2663 | -/***/ }), | |
| 2664 | - | |
| 2665 | -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/panel-interactions.ts": | |
| 2666 | -/*!*********************************************************************************************************!*\ | |
| 2667 | - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/panel-interactions.ts ***! | |
| 2668 | - \*********************************************************************************************************/ | |
| 2669 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 2670 | - | |
| 2671 | -__webpack_require__.r(__webpack_exports__); | |
| 2672 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 2673 | -/* harmony export */ blockPanelInteractions: function() { return /* binding */ blockPanelInteractions; }, | |
| 2674 | -/* harmony export */ unblockPanelInteractions: function() { return /* binding */ unblockPanelInteractions; } | |
| 2675 | -/* harmony export */ }); | |
| 2676 | -function blockPanelInteractions() { | |
| 2677 | - const extendedWindow = window; | |
| 2678 | - extendedWindow.$e?.components?.get?.('panel')?.blockUserInteractions?.(); | |
| 2679 | -} | |
| 2680 | -function unblockPanelInteractions() { | |
| 2681 | - const extendedWindow = window; | |
| 2682 | - extendedWindow.$e?.components?.get?.('panel')?.unblockUserInteractions?.(); | |
| 2683 | -} | |
| 2684 | - | |
| 2685 | -/***/ }), | |
| 2686 | - | |
| 2687 | -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/sortable.tsx": | |
| 2688 | -/*!************************************************************************************************!*\ | |
| 2689 | - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/sortable.tsx ***! | |
| 2690 | - \************************************************************************************************/ | |
| 2691 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 2692 | - | |
| 2693 | -__webpack_require__.r(__webpack_exports__); | |
| 2694 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 2695 | -/* harmony export */ SortableItem: function() { return /* binding */ SortableItem; }, | |
| 2696 | -/* harmony export */ SortableProvider: function() { return /* binding */ SortableProvider; }, | |
| 2697 | -/* harmony export */ SortableTrigger: function() { return /* binding */ SortableTrigger; } | |
| 2698 | -/* harmony export */ }); | |
| 2699 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 2700 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 2701 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); | |
| 2702 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__); | |
| 2703 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 2704 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); | |
| 2705 | -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); } | |
| 2706 | - | |
| 2707 | - | |
| 2708 | - | |
| 2709 | -const SortableProvider = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.UnstableSortableProvider, _extends({ | |
| 2710 | - restrictAxis: true, | |
| 2711 | - variant: "static", | |
| 2712 | - dragPlaceholderStyle: { | |
| 2713 | - visibility: 'hidden' | |
| 2714 | - } | |
| 2715 | -}, props)); | |
| 2716 | -const SortableTrigger = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StyledSortableTrigger, _extends({}, props, { | |
| 2717 | - role: "button", | |
| 2718 | - className: "class-item-sortable-trigger", | |
| 2719 | - "aria-label": "sort" | |
| 2720 | -}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.GripVerticalIcon, { | |
| 2721 | - fontSize: "tiny" | |
| 2722 | -})); | |
| 2723 | -const SortableItem = ({ | |
| 2724 | - children, | |
| 2725 | - id, | |
| 2726 | - style, | |
| 2727 | - ...props | |
| 2728 | -}) => { | |
| 2729 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.UnstableSortableItem, _extends({}, props, { | |
| 2730 | - id: id, | |
| 2731 | - render: ({ | |
| 2732 | - itemProps, | |
| 2733 | - isDragged, | |
| 2734 | - triggerProps, | |
| 2735 | - itemStyle, | |
| 2736 | - triggerStyle, | |
| 2737 | - dropIndicationStyle, | |
| 2738 | - showDropIndication, | |
| 2739 | - isDragOverlay, | |
| 2740 | - isDragPlaceholder | |
| 2741 | - }) => { | |
| 2742 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, _extends({}, itemProps, { | |
| 2743 | - style: { | |
| 2744 | - ...itemStyle, | |
| 2745 | - ...(!isDragOverlay ? style : null) | |
| 2746 | - }, | |
| 2747 | - component: 'li', | |
| 2748 | - role: "listitem", | |
| 2749 | - sx: { | |
| 2750 | - backgroundColor: isDragOverlay ? 'background.paper' : undefined | |
| 2751 | - } | |
| 2752 | - }), children({ | |
| 2753 | - itemProps, | |
| 2754 | - isDragged, | |
| 2755 | - triggerProps, | |
| 2756 | - itemStyle, | |
| 2757 | - triggerStyle, | |
| 2758 | - isDragPlaceholder | |
| 2759 | - }), showDropIndication && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(SortableItemIndicator, { | |
| 2760 | - style: dropIndicationStyle | |
| 2761 | - })); | |
| 2762 | - } | |
| 2763 | - })); | |
| 2764 | -}; | |
| 2765 | -const StyledSortableTrigger = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.styled)('div')(({ | |
| 2766 | - theme | |
| 2767 | -}) => ({ | |
| 2768 | - position: 'absolute', | |
| 2769 | - left: 0, | |
| 2770 | - top: '50%', | |
| 2771 | - transform: `translate( -${theme.spacing(1.5)}, -50% )`, | |
| 2772 | - color: theme.palette.action.active | |
| 2773 | -})); | |
| 2774 | -const SortableItemIndicator = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.styled)((0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box))` | |
| 2775 | - width: 100%; | |
| 2776 | - height: 1px; | |
| 2777 | - background-color: ${({ | |
| 2778 | - theme | |
| 2779 | -}) => theme.palette.text.primary}; | |
| 2780 | -`; | |
| 2781 | - | |
| 2782 | -/***/ }), | |
| 2783 | - | |
| 2784 | -/***/ "./packages/packages/core/editor-global-classes/src/components/class-manager/start-sync-to-v3-modal.tsx": | |
| 2785 | -/*!**************************************************************************************************************!*\ | |
| 2786 | - !*** ./packages/packages/core/editor-global-classes/src/components/class-manager/start-sync-to-v3-modal.tsx ***! | |
| 2787 | - \**************************************************************************************************************/ | |
| 2788 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 2789 | - | |
| 2790 | -__webpack_require__.r(__webpack_exports__); | |
| 2791 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 2792 | -/* harmony export */ StartSyncToV3Modal: function() { return /* binding */ StartSyncToV3Modal; } | |
| 2793 | -/* harmony export */ }); | |
| 2794 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 2795 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 2796 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 2797 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__); | |
| 2798 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 2799 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); | |
| 2800 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 2801 | - | |
| 2802 | - | |
| 2803 | - | |
| 2804 | - | |
| 2805 | - | |
| 2806 | -const IMAGE_URL = 'https://assets.elementor.com/packages/v1/images/class-manager-sync-modal.png'; | |
| 2807 | -const StartSyncToV3Modal = ({ | |
| 2808 | - externalOpen, | |
| 2809 | - classId, | |
| 2810 | - onExternalClose, | |
| 2811 | - onConfirm | |
| 2812 | -} = {}) => { | |
| 2813 | - const [shouldShowAgain, setShouldShowAgain] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true); | |
| 2814 | - const hasTrackedExposure = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false); | |
| 2815 | - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { | |
| 2816 | - if (externalOpen && classId && !hasTrackedExposure.current) { | |
| 2817 | - hasTrackedExposure.current = true; | |
| 2818 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_3__.trackGlobalClasses)({ | |
| 2819 | - event: 'classSyncToV3PopupShown', | |
| 2820 | - classId | |
| 2821 | - }); | |
| 2822 | - } | |
| 2823 | - if (!externalOpen) { | |
| 2824 | - hasTrackedExposure.current = false; | |
| 2825 | - } | |
| 2826 | - }, [externalOpen, classId]); | |
| 2827 | - const handleClose = () => { | |
| 2828 | - if (classId) { | |
| 2829 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_3__.trackGlobalClasses)({ | |
| 2830 | - event: 'classSyncToV3PopupClick', | |
| 2831 | - classId, | |
| 2832 | - action: 'cancel' | |
| 2833 | - }); | |
| 2834 | - } | |
| 2835 | - onExternalClose?.(); | |
| 2836 | - }; | |
| 2837 | - const handleConfirm = () => { | |
| 2838 | - if (classId) { | |
| 2839 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_3__.trackGlobalClasses)({ | |
| 2840 | - event: 'classSyncToV3PopupClick', | |
| 2841 | - classId, | |
| 2842 | - action: 'sync' | |
| 2843 | - }); | |
| 2844 | - } | |
| 2845 | - onConfirm?.(); | |
| 2846 | - onExternalClose?.(); | |
| 2847 | - }; | |
| 2848 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Dialog, { | |
| 2849 | - open: !!externalOpen, | |
| 2850 | - onClose: handleClose, | |
| 2851 | - maxWidth: "sm", | |
| 2852 | - fullWidth: true | |
| 2853 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.DialogContent, { | |
| 2854 | - sx: { | |
| 2855 | - p: 0 | |
| 2856 | - } | |
| 2857 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Box, { | |
| 2858 | - component: "img", | |
| 2859 | - src: IMAGE_URL, | |
| 2860 | - alt: "", | |
| 2861 | - sx: { | |
| 2862 | - width: '100%', | |
| 2863 | - display: 'block' | |
| 2864 | - } | |
| 2865 | - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Box, { | |
| 2866 | - sx: { | |
| 2867 | - px: 3, | |
| 2868 | - pt: 4, | |
| 2869 | - pb: 1 | |
| 2870 | - } | |
| 2871 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Typography, { | |
| 2872 | - variant: "h6" | |
| 2873 | - }, (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, { | |
| 2874 | - variant: "body2", | |
| 2875 | - color: "secondary", | |
| 2876 | - sx: { | |
| 2877 | - mb: 2, | |
| 2878 | - pt: 1 | |
| 2879 | - } | |
| 2880 | - }, (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, { | |
| 2881 | - sx: { | |
| 2882 | - justifyContent: 'space-between', | |
| 2883 | - px: 3, | |
| 2884 | - pb: 2 | |
| 2885 | - } | |
| 2886 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.FormControlLabel, { | |
| 2887 | - control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Checkbox, { | |
| 2888 | - checked: !shouldShowAgain, | |
| 2889 | - onChange: e => setShouldShowAgain(!e.target.checked) | |
| 2890 | - }), | |
| 2891 | - label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Typography, { | |
| 2892 | - variant: "body2", | |
| 2893 | - color: "secondary" | |
| 2894 | - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)("Don't show again", 'elementor')) | |
| 2895 | - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Box, { | |
| 2896 | - sx: { | |
| 2897 | - display: 'flex', | |
| 2898 | - gap: 1 | |
| 2899 | - } | |
| 2900 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Button, { | |
| 2901 | - onClick: handleClose, | |
| 2902 | - color: "secondary", | |
| 2903 | - size: "small" | |
| 2904 | - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Cancel', 'elementor')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Button, { | |
| 2905 | - onClick: handleConfirm, | |
| 2906 | - variant: "contained", | |
| 2907 | - size: "small" | |
| 2908 | - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Sync to Global Fonts', 'elementor'))))); | |
| 2909 | -}; | |
| 2910 | - | |
| 2911 | -/***/ }), | |
| 2912 | - | |
| 2913 | -/***/ "./packages/packages/core/editor-global-classes/src/components/convert-local-class-to-global-class.tsx": | |
| 2914 | -/*!*************************************************************************************************************!*\ | |
| 2915 | - !*** ./packages/packages/core/editor-global-classes/src/components/convert-local-class-to-global-class.tsx ***! | |
| 2916 | - \*************************************************************************************************************/ | |
| 2917 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 2918 | - | |
| 2919 | -__webpack_require__.r(__webpack_exports__); | |
| 2920 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 2921 | -/* harmony export */ ConvertLocalClassToGlobalClass: function() { return /* binding */ ConvertLocalClassToGlobalClass; } | |
| 2922 | -/* harmony export */ }); | |
| 2923 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 2924 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 2925 | -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository"); | |
| 2926 | -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__); | |
| 2927 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); | |
| 2928 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__); | |
| 2929 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 2930 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); | |
| 2931 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 2932 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); | |
| 2933 | -/* 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"); | |
| 2934 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 2935 | - | |
| 2936 | - | |
| 2937 | - | |
| 2938 | - | |
| 2939 | - | |
| 2940 | - | |
| 2941 | - | |
| 2942 | -const ConvertLocalClassToGlobalClass = props => { | |
| 2943 | - const localStyleData = props.styleDef; | |
| 2944 | - const handleConversion = () => { | |
| 2945 | - const newClassName = createClassName(`converted-class-`); | |
| 2946 | - if (!localStyleData) { | |
| 2947 | - throw new Error('Style definition is required for converting local class to global class.'); | |
| 2948 | - } | |
| 2949 | - const newId = _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_5__.globalClassesStylesProvider.actions.create?.(newClassName, localStyleData.variants); | |
| 2950 | - if (newId) { | |
| 2951 | - props.successCallback(newId); | |
| 2952 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_6__.trackGlobalClasses)({ | |
| 2953 | - classId: newId, | |
| 2954 | - event: 'classCreated', | |
| 2955 | - source: 'converted', | |
| 2956 | - classTitle: newClassName | |
| 2957 | - }); | |
| 2958 | - } | |
| 2959 | - }; | |
| 2960 | - 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, { | |
| 2961 | - disabled: !props.canConvert, | |
| 2962 | - onClick: handleConversion, | |
| 2963 | - dense: true, | |
| 2964 | - sx: { | |
| 2965 | - '&.Mui-focusVisible': { | |
| 2966 | - border: 'none', | |
| 2967 | - boxShadow: 'none !important', | |
| 2968 | - backgroundColor: 'transparent' | |
| 2969 | - } | |
| 2970 | - } | |
| 2971 | - }, (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)); | |
| 2972 | -}; | |
| 2973 | -function createClassName(prefix) { | |
| 2974 | - let i = 1; | |
| 2975 | - let newClassName = `${prefix}${i}`; | |
| 2976 | - while (!(0,_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__.validateStyleLabel)(newClassName, 'create').isValid) { | |
| 2977 | - newClassName = `${prefix}${++i}`; | |
| 2978 | - } | |
| 2979 | - return newClassName; | |
| 2980 | -} | |
| 2981 | - | |
| 2982 | -/***/ }), | |
| 2983 | - | |
| 2984 | -/***/ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-popover.tsx": | |
| 2985 | -/*!****************************************************************************************************************************!*\ | |
| 2986 | - !*** ./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-popover.tsx ***! | |
| 2987 | - \****************************************************************************************************************************/ | |
| 2988 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 2989 | - | |
| 2990 | -__webpack_require__.r(__webpack_exports__); | |
| 2991 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 2992 | -/* harmony export */ CssClassUsagePopover: function() { return /* binding */ CssClassUsagePopover; } | |
| 2993 | -/* harmony export */ }); | |
| 2994 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 2995 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 2996 | -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); | |
| 2997 | -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__); | |
| 2998 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); | |
| 2999 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__); | |
| 3000 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); | |
| 3001 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__); | |
| 3002 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 3003 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__); | |
| 3004 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 3005 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__); | |
| 3006 | -/* 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"); | |
| 3007 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 3008 | - | |
| 3009 | - | |
| 3010 | - | |
| 3011 | - | |
| 3012 | - | |
| 3013 | - | |
| 3014 | - | |
| 3015 | - | |
| 3016 | -const iconMapper = { | |
| 3017 | - 'wp-post': { | |
| 3018 | - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Post', 'elementor'), | |
| 3019 | - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.PostTypeIcon, { | |
| 3020 | - fontSize: 'inherit' | |
| 3021 | - }) | |
| 3022 | - }, | |
| 3023 | - 'wp-page': { | |
| 3024 | - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Page', 'elementor'), | |
| 3025 | - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.PagesIcon, { | |
| 3026 | - fontSize: 'inherit' | |
| 3027 | - }) | |
| 3028 | - }, | |
| 3029 | - popup: { | |
| 3030 | - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Popup', 'elementor'), | |
| 3031 | - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.PopupTemplateIcon, { | |
| 3032 | - fontSize: 'inherit' | |
| 3033 | - }) | |
| 3034 | - }, | |
| 3035 | - header: { | |
| 3036 | - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Header', 'elementor'), | |
| 3037 | - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.HeaderTemplateIcon, { | |
| 3038 | - fontSize: 'inherit' | |
| 3039 | - }) | |
| 3040 | - }, | |
| 3041 | - footer: { | |
| 3042 | - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Footer', 'elementor'), | |
| 3043 | - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.FooterTemplateIcon, { | |
| 3044 | - fontSize: 'inherit' | |
| 3045 | - }) | |
| 3046 | - } | |
| 3047 | -}; | |
| 3048 | -const CssClassUsagePopover = ({ | |
| 3049 | - cssClassID, | |
| 3050 | - onClose | |
| 3051 | -}) => { | |
| 3052 | - const { | |
| 3053 | - data: classUsage | |
| 3054 | - } = (0,_hooks_use_css_class_usage_by_id__WEBPACK_IMPORTED_MODULE_6__.useCssClassUsageByID)(cssClassID); | |
| 3055 | - const onNavigate = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__.__useOpenDocumentInNewTab)(); | |
| 3056 | - const cssClassUsageRecords = classUsage?.content.map(({ | |
| 3057 | - title, | |
| 3058 | - elements, | |
| 3059 | - pageId, | |
| 3060 | - type | |
| 3061 | - }) => ({ | |
| 3062 | - type: 'item', | |
| 3063 | - value: pageId, | |
| 3064 | - label: title, | |
| 3065 | - secondaryText: elements.length.toString(), | |
| 3066 | - docType: type | |
| 3067 | - })) ?? []; | |
| 3068 | - const handleSelect = value => { | |
| 3069 | - onNavigate(+value); | |
| 3070 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_7__.trackGlobalClasses)({ | |
| 3071 | - event: 'classUsageLocate', | |
| 3072 | - classId: cssClassID | |
| 3073 | - }); | |
| 3074 | - }; | |
| 3075 | - 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, { | |
| 3076 | - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.CurrentLocationIcon, { | |
| 3077 | - fontSize: 'tiny' | |
| 3078 | - }), | |
| 3079 | - title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Stack, { | |
| 3080 | - flexDirection: 'row', | |
| 3081 | - gap: 1, | |
| 3082 | - alignItems: 'center' | |
| 3083 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Box, { | |
| 3084 | - "aria-label": 'header-title' | |
| 3085 | - }, (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, { | |
| 3086 | - sx: { | |
| 3087 | - lineHeight: 1 | |
| 3088 | - }, | |
| 3089 | - size: 'tiny', | |
| 3090 | - label: classUsage.total | |
| 3091 | - }))), | |
| 3092 | - onClose: onClose | |
| 3093 | - }), /*#__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, { | |
| 3094 | - width: 300 | |
| 3095 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.PopoverMenuList, { | |
| 3096 | - onSelect: handleSelect, | |
| 3097 | - items: cssClassUsageRecords, | |
| 3098 | - onClose: () => {}, | |
| 3099 | - menuListTemplate: StyledCssClassUsageItem, | |
| 3100 | - menuItemContentTemplate: cssClassUsageRecord => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Stack, { | |
| 3101 | - flexDirection: 'row', | |
| 3102 | - flex: 1, | |
| 3103 | - alignItems: 'center' | |
| 3104 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Box, { | |
| 3105 | - display: 'flex', | |
| 3106 | - sx: { | |
| 3107 | - pr: 1 | |
| 3108 | - } | |
| 3109 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Tooltip, { | |
| 3110 | - disableInteractive: true, | |
| 3111 | - title: iconMapper?.[cssClassUsageRecord.docType]?.label ?? cssClassUsageRecord.docType, | |
| 3112 | - placement: "top" | |
| 3113 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Icon, { | |
| 3114 | - fontSize: 'small' | |
| 3115 | - }, iconMapper?.[cssClassUsageRecord.docType]?.icon || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.PagesIcon, { | |
| 3116 | - fontSize: 'inherit' | |
| 3117 | - })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Box, { | |
| 3118 | - sx: { | |
| 3119 | - pr: 0.5, | |
| 3120 | - maxWidth: '173px' | |
| 3121 | - }, | |
| 3122 | - display: 'flex' | |
| 3123 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.EllipsisWithTooltip, { | |
| 3124 | - title: cssClassUsageRecord.label, | |
| 3125 | - as: _elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Typography, | |
| 3126 | - variant: "caption", | |
| 3127 | - maxWidth: "173px", | |
| 3128 | - sx: { | |
| 3129 | - lineHeight: 1 | |
| 3130 | - } | |
| 3131 | - })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.ExternalLinkIcon, { | |
| 3132 | - className: 'hover-only-icon', | |
| 3133 | - fontSize: 'tiny' | |
| 3134 | - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Chip, { | |
| 3135 | - sx: { | |
| 3136 | - ml: 'auto' | |
| 3137 | - }, | |
| 3138 | - size: 'tiny', | |
| 3139 | - label: cssClassUsageRecord.secondaryText | |
| 3140 | - })) | |
| 3141 | - }))); | |
| 3142 | -}; | |
| 3143 | -const StyledCssClassUsageItem = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.styled)(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.MenuList)(({ | |
| 3144 | - theme | |
| 3145 | -}) => ({ | |
| 3146 | - '& > li': { | |
| 3147 | - display: 'flex', | |
| 3148 | - cursor: 'pointer', | |
| 3149 | - height: 32, | |
| 3150 | - width: '100%' | |
| 3151 | - }, | |
| 3152 | - '& > [role="option"]': { | |
| 3153 | - ...theme.typography.caption, | |
| 3154 | - lineHeight: 'inherit', | |
| 3155 | - padding: theme.spacing(0.5, 1, 0.5, 2), | |
| 3156 | - textOverflow: 'ellipsis', | |
| 3157 | - position: 'absolute', | |
| 3158 | - top: 0, | |
| 3159 | - left: 0, | |
| 3160 | - opacity: 1, | |
| 3161 | - '.hover-only-icon': { | |
| 3162 | - color: theme.palette.text.disabled, | |
| 3163 | - opacity: 0 | |
| 3164 | - }, | |
| 3165 | - '&:hover': { | |
| 3166 | - borderRadius: theme.spacing(0.5), | |
| 3167 | - backgroundColor: theme.palette.action.hover, | |
| 3168 | - '.hover-only-icon': { | |
| 3169 | - color: theme.palette.text.disabled, | |
| 3170 | - opacity: 1 | |
| 3171 | - } | |
| 3172 | - } | |
| 3173 | - }, | |
| 3174 | - width: '100%', | |
| 3175 | - position: 'relative' | |
| 3176 | -})); | |
| 3177 | - | |
| 3178 | -/***/ }), | |
| 3179 | - | |
| 3180 | -/***/ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-trigger.tsx": | |
| 3181 | -/*!****************************************************************************************************************************!*\ | |
| 3182 | - !*** ./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/css-class-usage-trigger.tsx ***! | |
| 3183 | - \****************************************************************************************************************************/ | |
| 3184 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3185 | - | |
| 3186 | -__webpack_require__.r(__webpack_exports__); | |
| 3187 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3188 | -/* harmony export */ CssClassUsageTrigger: function() { return /* binding */ CssClassUsageTrigger; } | |
| 3189 | -/* harmony export */ }); | |
| 3190 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 3191 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 3192 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); | |
| 3193 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__); | |
| 3194 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); | |
| 3195 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__); | |
| 3196 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 3197 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); | |
| 3198 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 3199 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); | |
| 3200 | -/* 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"); | |
| 3201 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 3202 | -/* 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"); | |
| 3203 | -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); } | |
| 3204 | - | |
| 3205 | - | |
| 3206 | - | |
| 3207 | - | |
| 3208 | - | |
| 3209 | - | |
| 3210 | - | |
| 3211 | - | |
| 3212 | -const CssClassUsageTrigger = ({ | |
| 3213 | - id, | |
| 3214 | - onClick | |
| 3215 | -}) => { | |
| 3216 | - const { | |
| 3217 | - data: { | |
| 3218 | - total | |
| 3219 | - }, | |
| 3220 | - isLoading | |
| 3221 | - } = (0,_hooks_use_css_class_usage_by_id__WEBPACK_IMPORTED_MODULE_5__.useCssClassUsageByID)(id); | |
| 3222 | - const cssClassUsagePopover = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.usePopupState)({ | |
| 3223 | - variant: 'popover', | |
| 3224 | - popupId: 'css-class-usage-popover' | |
| 3225 | - }); | |
| 3226 | - if (isLoading) { | |
| 3227 | - return null; | |
| 3228 | - } | |
| 3229 | - const WrapperComponent = total !== 0 ? TooltipWrapper : InfoAlertMessage; | |
| 3230 | - const handleMouseEnter = () => { | |
| 3231 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_6__.trackGlobalClasses)({ | |
| 3232 | - event: 'classUsageHovered', | |
| 3233 | - classId: id, | |
| 3234 | - usage: total | |
| 3235 | - }); | |
| 3236 | - }; | |
| 3237 | - const handleClick = e => { | |
| 3238 | - if (total !== 0) { | |
| 3239 | - (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindTrigger)(cssClassUsagePopover).onClick(e); | |
| 3240 | - onClick(id); | |
| 3241 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_6__.trackGlobalClasses)({ | |
| 3242 | - event: 'classUsageClicked', | |
| 3243 | - classId: id | |
| 3244 | - }); | |
| 3245 | - } | |
| 3246 | - }; | |
| 3247 | - 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, { | |
| 3248 | - position: 'relative', | |
| 3249 | - onMouseEnter: handleMouseEnter | |
| 3250 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(WrapperComponent, { | |
| 3251 | - total: total | |
| 3252 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(CustomIconButton, _extends({ | |
| 3253 | - disabled: total === 0, | |
| 3254 | - size: 'tiny' | |
| 3255 | - }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindTrigger)(cssClassUsagePopover), { | |
| 3256 | - onClick: handleClick | |
| 3257 | - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.CurrentLocationIcon, { | |
| 3258 | - fontSize: 'tiny' | |
| 3259 | - })))), /*#__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({ | |
| 3260 | - anchorOrigin: { | |
| 3261 | - vertical: 'center', | |
| 3262 | - horizontal: 'right' | |
| 3263 | - }, | |
| 3264 | - transformOrigin: { | |
| 3265 | - vertical: 15, | |
| 3266 | - horizontal: -50 | |
| 3267 | - } | |
| 3268 | - }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindPopover)(cssClassUsagePopover), { | |
| 3269 | - onClose: () => { | |
| 3270 | - (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindPopover)(cssClassUsagePopover).onClose(); | |
| 3271 | - onClick(''); | |
| 3272 | - } | |
| 3273 | - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_css_class_usage_popover__WEBPACK_IMPORTED_MODULE_7__.CssClassUsagePopover, { | |
| 3274 | - onClose: cssClassUsagePopover.close, | |
| 3275 | - "aria-label": "css-class-usage-popover", | |
| 3276 | - cssClassID: id | |
| 3277 | - })))); | |
| 3278 | -}; | |
| 3279 | -const CustomIconButton = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.styled)(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.IconButton)(({ | |
| 3280 | - theme | |
| 3281 | -}) => ({ | |
| 3282 | - '&.Mui-disabled': { | |
| 3283 | - pointerEvents: 'auto', | |
| 3284 | - // Enable hover | |
| 3285 | - '&:hover': { | |
| 3286 | - color: theme.palette.action.disabled // optional | |
| 3287 | - } | |
| 3288 | - }, | |
| 3289 | - height: '22px', | |
| 3290 | - width: '22px' | |
| 3291 | -})); | |
| 3292 | -const TooltipWrapper = ({ | |
| 3293 | - children, | |
| 3294 | - total | |
| 3295 | -}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Tooltip, { | |
| 3296 | - disableInteractive: true, | |
| 3297 | - placement: 'top', | |
| 3298 | - 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'))}` | |
| 3299 | -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", null, children)); | |
| 3300 | -const InfoAlertMessage = ({ | |
| 3301 | - children | |
| 3302 | -}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Infotip, { | |
| 3303 | - disableInteractive: true, | |
| 3304 | - placement: 'top', | |
| 3305 | - color: 'secondary', | |
| 3306 | - content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.InfoAlert, { | |
| 3307 | - sx: { | |
| 3308 | - mt: 1 | |
| 3309 | - } | |
| 3310 | - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('This class isn’t being used yet.', 'elementor')) | |
| 3311 | -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", null, children)); | |
| 3312 | - | |
| 3313 | -/***/ }), | |
| 3314 | - | |
| 3315 | -/***/ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/index.ts": | |
| 3316 | -/*!*********************************************************************************************************!*\ | |
| 3317 | - !*** ./packages/packages/core/editor-global-classes/src/components/css-class-usage/components/index.ts ***! | |
| 3318 | - \*********************************************************************************************************/ | |
| 3319 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3320 | - | |
| 3321 | -__webpack_require__.r(__webpack_exports__); | |
| 3322 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3323 | -/* harmony export */ CssClassUsagePopover: function() { return /* reexport safe */ _css_class_usage_popover__WEBPACK_IMPORTED_MODULE_0__.CssClassUsagePopover; }, | |
| 3324 | -/* harmony export */ CssClassUsageTrigger: function() { return /* reexport safe */ _css_class_usage_trigger__WEBPACK_IMPORTED_MODULE_1__.CssClassUsageTrigger; } | |
| 3325 | -/* harmony export */ }); | |
| 3326 | -/* 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"); | |
| 3327 | -/* 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"); | |
| 3328 | - | |
| 3329 | - | |
| 3330 | - | |
| 3331 | -/***/ }), | |
| 3332 | - | |
| 3333 | -/***/ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/types.ts": | |
| 3334 | -/*!**********************************************************************************************!*\ | |
| 3335 | - !*** ./packages/packages/core/editor-global-classes/src/components/css-class-usage/types.ts ***! | |
| 3336 | - \**********************************************************************************************/ | |
| 3337 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3338 | - | |
| 3339 | -__webpack_require__.r(__webpack_exports__); | |
| 3340 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3341 | -/* harmony export */ QUERY_KEY: function() { return /* binding */ QUERY_KEY; } | |
| 3342 | -/* harmony export */ }); | |
| 3343 | -const QUERY_KEY = 'css-classes-usage'; | |
| 3344 | - | |
| 3345 | -/***/ }), | |
| 3346 | - | |
| 3347 | -/***/ "./packages/packages/core/editor-global-classes/src/components/css-class-usage/utils.ts": | |
| 3348 | -/*!**********************************************************************************************!*\ | |
| 3349 | - !*** ./packages/packages/core/editor-global-classes/src/components/css-class-usage/utils.ts ***! | |
| 3350 | - \**********************************************************************************************/ | |
| 3351 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3352 | - | |
| 3353 | -__webpack_require__.r(__webpack_exports__); | |
| 3354 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3355 | -/* harmony export */ transformData: function() { return /* binding */ transformData; } | |
| 3356 | -/* harmony export */ }); | |
| 3357 | -const transformData = data => Object.entries(data).reduce((acc, [key, value]) => { | |
| 3358 | - acc[key] = { | |
| 3359 | - content: value || [], | |
| 3360 | - total: value.reduce((total, val) => total + (val?.total || 0), 0) | |
| 3361 | - }; | |
| 3362 | - return acc; | |
| 3363 | -}, {}); | |
| 3364 | - | |
| 3365 | -/***/ }), | |
| 3366 | - | |
| 3367 | -/***/ "./packages/packages/core/editor-global-classes/src/components/global-styles-import-listener.tsx": | |
| 3368 | -/*!*******************************************************************************************************!*\ | |
| 3369 | - !*** ./packages/packages/core/editor-global-classes/src/components/global-styles-import-listener.tsx ***! | |
| 3370 | - \*******************************************************************************************************/ | |
| 3371 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3372 | - | |
| 3373 | -__webpack_require__.r(__webpack_exports__); | |
| 3374 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3375 | -/* harmony export */ GlobalStylesImportListener: function() { return /* binding */ GlobalStylesImportListener; } | |
| 3376 | -/* harmony export */ }); | |
| 3377 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 3378 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 3379 | -/* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-canvas */ "@elementor/editor-canvas"); | |
| 3380 | -/* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__); | |
| 3381 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 3382 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_2__); | |
| 3383 | -/* 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"); | |
| 3384 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 3385 | -/* 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"); | |
| 3386 | - | |
| 3387 | - | |
| 3388 | - | |
| 3389 | - | |
| 3390 | - | |
| 3391 | - | |
| 3392 | -function GlobalStylesImportListener() { | |
| 3393 | - const dispatch = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__useDispatch)(); | |
| 3394 | - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { | |
| 3395 | - const handleGlobalStylesImported = async event => { | |
| 3396 | - const customEvent = event; | |
| 3397 | - const globalClasses = customEvent.detail?.global_classes; | |
| 3398 | - if (!globalClasses?.added_items_order || !globalClasses?.added_items || globalClasses?.added_items_order?.length === 0) { | |
| 3399 | - (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_3__.loadCurrentDocumentClasses)(); | |
| 3400 | - return; | |
| 3401 | - } | |
| 3402 | - dispatch(_store__WEBPACK_IMPORTED_MODULE_4__.slice.actions.updateAfterTemplateImport({ | |
| 3403 | - addedItems: globalClasses.added_items, | |
| 3404 | - addedIdsOrder: globalClasses.added_items_order, | |
| 3405 | - addedClassLabels: (0,_utils_create_labels_for_classes__WEBPACK_IMPORTED_MODULE_5__.createLabelsForClasses)(Object.values(globalClasses.added_items)) | |
| 3406 | - })); | |
| 3407 | - }; | |
| 3408 | - window.addEventListener(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__.GLOBAL_STYLES_IMPORTED_EVENT, handleGlobalStylesImported); | |
| 3409 | - return () => { | |
| 3410 | - window.removeEventListener(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__.GLOBAL_STYLES_IMPORTED_EVENT, handleGlobalStylesImported); | |
| 3411 | - }; | |
| 3412 | - }, [dispatch]); | |
| 3413 | - return null; | |
| 3414 | -} | |
| 3415 | - | |
| 3416 | -/***/ }), | |
| 3417 | - | |
| 3418 | -/***/ "./packages/packages/core/editor-global-classes/src/components/populate-store.tsx": | |
| 3419 | -/*!****************************************************************************************!*\ | |
| 3420 | - !*** ./packages/packages/core/editor-global-classes/src/components/populate-store.tsx ***! | |
| 3421 | - \****************************************************************************************/ | |
| 3422 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3423 | - | |
| 3424 | -__webpack_require__.r(__webpack_exports__); | |
| 3425 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3426 | -/* harmony export */ PopulateStore: function() { return /* binding */ PopulateStore; } | |
| 3427 | -/* harmony export */ }); | |
| 3428 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 3429 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 3430 | -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); | |
| 3431 | -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__); | |
| 3432 | -/* 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"); | |
| 3433 | - | |
| 3434 | - | |
| 3435 | - | |
| 3436 | -function PopulateStore() { | |
| 3437 | - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { | |
| 3438 | - // TODO - we run it early to have the labels mapping prior to the canvas rendering | |
| 3439 | - // but in fact we need a way to re-render any dependant twig-templated widgets/elements once we get the initial data | |
| 3440 | - // in case the canvas rendering has occurred prior to the resolving of this fetch | |
| 3441 | - (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_2__.loadCurrentDocumentClasses)(); | |
| 3442 | - (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.registerDataHook)('after', 'editor/documents/attach-preview', async () => { | |
| 3443 | - await (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_2__.loadCurrentDocumentClasses)(); | |
| 3444 | - }); | |
| 3445 | - }, []); | |
| 3446 | - return null; | |
| 3447 | -} | |
| 3448 | - | |
| 3449 | -/***/ }), | |
| 3450 | - | |
| 3451 | -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/active-filters.tsx": | |
| 3452 | -/*!****************************************************************************************************************************!*\ | |
| 3453 | - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/active-filters.tsx ***! | |
| 3454 | - \****************************************************************************************************************************/ | |
| 3455 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3456 | - | |
| 3457 | -__webpack_require__.r(__webpack_exports__); | |
| 3458 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3459 | -/* harmony export */ ActiveFilters: function() { return /* binding */ ActiveFilters; } | |
| 3460 | -/* harmony export */ }); | |
| 3461 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 3462 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 3463 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 3464 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__); | |
| 3465 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 3466 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); | |
| 3467 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 3468 | -/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx"); | |
| 3469 | -/* 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"); | |
| 3470 | -/* 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"); | |
| 3471 | - | |
| 3472 | - | |
| 3473 | - | |
| 3474 | - | |
| 3475 | - | |
| 3476 | - | |
| 3477 | - | |
| 3478 | -const ActiveFilters = () => { | |
| 3479 | - const { | |
| 3480 | - filters: { | |
| 3481 | - filters, | |
| 3482 | - setFilters | |
| 3483 | - } | |
| 3484 | - } = (0,_context__WEBPACK_IMPORTED_MODULE_4__.useSearchAndFilters)(); | |
| 3485 | - const handleRemove = key => { | |
| 3486 | - setFilters(prev => ({ | |
| 3487 | - ...prev, | |
| 3488 | - [key]: false | |
| 3489 | - })); | |
| 3490 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_3__.trackGlobalClasses)({ | |
| 3491 | - event: 'classManagerFilterUsed', | |
| 3492 | - action: 'remove', | |
| 3493 | - type: key, | |
| 3494 | - trigger: 'header' | |
| 3495 | - }); | |
| 3496 | - }; | |
| 3497 | - const activeKeys = Object.keys(filters).filter(key => filters[key]); | |
| 3498 | - const showClearIcon = activeKeys.length > 0; | |
| 3499 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Stack, { | |
| 3500 | - direction: "row", | |
| 3501 | - alignItems: "center", | |
| 3502 | - justifyContent: "space-between" | |
| 3503 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Stack, { | |
| 3504 | - direction: "row", | |
| 3505 | - gap: 0.5, | |
| 3506 | - alignItems: "center", | |
| 3507 | - flexWrap: "wrap" | |
| 3508 | - }, activeKeys.map(key => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Chip, { | |
| 3509 | - key: key, | |
| 3510 | - label: _filter_list__WEBPACK_IMPORTED_MODULE_6__.filterConfig[key], | |
| 3511 | - onDelete: () => handleRemove(key), | |
| 3512 | - sx: chipSx, | |
| 3513 | - size: "tiny" | |
| 3514 | - }))), showClearIcon && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_clear_icon_button__WEBPACK_IMPORTED_MODULE_5__.ClearIconButton, { | |
| 3515 | - trigger: "header", | |
| 3516 | - tooltipText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Clear Filters', 'elementor'), | |
| 3517 | - sx: { | |
| 3518 | - margin: '0 0 auto auto' | |
| 3519 | - } | |
| 3520 | - })); | |
| 3521 | -}; | |
| 3522 | -const chipSx = { | |
| 3523 | - '& .MuiChip-deleteIcon': { | |
| 3524 | - display: 'none', | |
| 3525 | - transition: 'opacity 0.2s' | |
| 3526 | - }, | |
| 3527 | - '&:hover .MuiChip-deleteIcon': { | |
| 3528 | - display: 'block' | |
| 3529 | - } | |
| 3530 | -}; | |
| 3531 | - | |
| 3532 | -/***/ }), | |
| 3533 | - | |
| 3534 | -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/clear-icon-button.tsx": | |
| 3535 | -/*!*******************************************************************************************************************************!*\ | |
| 3536 | - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/clear-icon-button.tsx ***! | |
| 3537 | - \*******************************************************************************************************************************/ | |
| 3538 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3539 | - | |
| 3540 | -__webpack_require__.r(__webpack_exports__); | |
| 3541 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3542 | -/* harmony export */ ClearIconButton: function() { return /* binding */ ClearIconButton; } | |
| 3543 | -/* harmony export */ }); | |
| 3544 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 3545 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 3546 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); | |
| 3547 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__); | |
| 3548 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 3549 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); | |
| 3550 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 3551 | -/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx"); | |
| 3552 | - | |
| 3553 | - | |
| 3554 | - | |
| 3555 | - | |
| 3556 | - | |
| 3557 | -const ClearIconButton = ({ | |
| 3558 | - tooltipText, | |
| 3559 | - sx, | |
| 3560 | - trigger | |
| 3561 | -}) => { | |
| 3562 | - const { | |
| 3563 | - filters: { | |
| 3564 | - onClearFilter | |
| 3565 | - } | |
| 3566 | - } = (0,_context__WEBPACK_IMPORTED_MODULE_4__.useSearchAndFilters)(); | |
| 3567 | - const handleClearFilters = () => { | |
| 3568 | - onClearFilter(trigger); | |
| 3569 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_3__.trackGlobalClasses)({ | |
| 3570 | - event: 'classManagerFilterCleared', | |
| 3571 | - trigger | |
| 3572 | - }); | |
| 3573 | - }; | |
| 3574 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Tooltip, { | |
| 3575 | - title: tooltipText, | |
| 3576 | - placement: "top", | |
| 3577 | - disableInteractive: true | |
| 3578 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(CustomIconButton, { | |
| 3579 | - "aria-label": tooltipText, | |
| 3580 | - size: "tiny", | |
| 3581 | - onClick: handleClearFilters, | |
| 3582 | - sx: sx | |
| 3583 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.BrushBigIcon, { | |
| 3584 | - fontSize: "tiny" | |
| 3585 | - })))); | |
| 3586 | -}; | |
| 3587 | -const CustomIconButton = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.styled)(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.IconButton)(({ | |
| 3588 | - theme | |
| 3589 | -}) => ({ | |
| 3590 | - '&.Mui-disabled': { | |
| 3591 | - pointerEvents: 'auto', | |
| 3592 | - '&:hover': { | |
| 3593 | - color: theme.palette.action.disabled | |
| 3594 | - } | |
| 3595 | - } | |
| 3596 | -})); | |
| 3597 | - | |
| 3598 | -/***/ }), | |
| 3599 | - | |
| 3600 | -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/css-class-filter.tsx": | |
| 3601 | -/*!******************************************************************************************************************************!*\ | |
| 3602 | - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/css-class-filter.tsx ***! | |
| 3603 | - \******************************************************************************************************************************/ | |
| 3604 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3605 | - | |
| 3606 | -__webpack_require__.r(__webpack_exports__); | |
| 3607 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3608 | -/* harmony export */ CssClassFilter: function() { return /* binding */ CssClassFilter; } | |
| 3609 | -/* harmony export */ }); | |
| 3610 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 3611 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 3612 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); | |
| 3613 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__); | |
| 3614 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); | |
| 3615 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__); | |
| 3616 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 3617 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); | |
| 3618 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 3619 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); | |
| 3620 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 3621 | -/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx"); | |
| 3622 | -/* 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"); | |
| 3623 | -/* 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"); | |
| 3624 | -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); } | |
| 3625 | - | |
| 3626 | - | |
| 3627 | - | |
| 3628 | - | |
| 3629 | - | |
| 3630 | - | |
| 3631 | - | |
| 3632 | - | |
| 3633 | - | |
| 3634 | - | |
| 3635 | -const CssClassFilter = () => { | |
| 3636 | - const { | |
| 3637 | - filters: { | |
| 3638 | - filters | |
| 3639 | - } | |
| 3640 | - } = (0,_context__WEBPACK_IMPORTED_MODULE_6__.useSearchAndFilters)(); | |
| 3641 | - const popupState = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.usePopupState)({ | |
| 3642 | - variant: 'popover', | |
| 3643 | - disableAutoFocus: true | |
| 3644 | - }); | |
| 3645 | - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { | |
| 3646 | - if (popupState.isOpen) { | |
| 3647 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_5__.trackGlobalClasses)({ | |
| 3648 | - event: 'classManagerFiltersOpened' | |
| 3649 | - }); | |
| 3650 | - } | |
| 3651 | - }, [popupState.isOpen]); | |
| 3652 | - const showCleanIcon = Object.values(filters).some(value => value); | |
| 3653 | - 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, { | |
| 3654 | - title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Filters', 'elementor'), | |
| 3655 | - placement: "top" | |
| 3656 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.ToggleButton, _extends({ | |
| 3657 | - value: "filter", | |
| 3658 | - size: 'tiny', | |
| 3659 | - selected: popupState.isOpen | |
| 3660 | - }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindToggle)(popupState)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.FilterIcon, { | |
| 3661 | - fontSize: "tiny" | |
| 3662 | - }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Popover, _extends({ | |
| 3663 | - sx: { | |
| 3664 | - maxWidth: '344px' | |
| 3665 | - }, | |
| 3666 | - anchorOrigin: { | |
| 3667 | - vertical: 'top', | |
| 3668 | - horizontal: 'right' | |
| 3669 | - }, | |
| 3670 | - transformOrigin: { | |
| 3671 | - vertical: 'top', | |
| 3672 | - horizontal: -21 | |
| 3673 | - } | |
| 3674 | - }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindPopover)(popupState)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.PopoverHeader, { | |
| 3675 | - actions: showCleanIcon ? [/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_clear_icon_button__WEBPACK_IMPORTED_MODULE_7__.ClearIconButton, { | |
| 3676 | - trigger: "menu", | |
| 3677 | - key: "clear-all-button", | |
| 3678 | - tooltipText: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Clear all', 'elementor') | |
| 3679 | - })] : [], | |
| 3680 | - onClose: popupState.close, | |
| 3681 | - title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Filters', 'elementor'), | |
| 3682 | - icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.FilterIcon, { | |
| 3683 | - fontSize: 'tiny' | |
| 3684 | - }) | |
| 3685 | - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Divider, { | |
| 3686 | - sx: { | |
| 3687 | - borderWidth: '1px 0 0 0' | |
| 3688 | - } | |
| 3689 | - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.PopoverBody, { | |
| 3690 | - width: 344, | |
| 3691 | - height: 125 | |
| 3692 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_filter_list__WEBPACK_IMPORTED_MODULE_8__.FilterList, null)))); | |
| 3693 | -}; | |
| 3694 | - | |
| 3695 | -/***/ }), | |
| 3696 | - | |
| 3697 | -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/filter-list.tsx": | |
| 3698 | -/*!*************************************************************************************************************************!*\ | |
| 3699 | - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/filter/filter-list.tsx ***! | |
| 3700 | - \*************************************************************************************************************************/ | |
| 3701 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3702 | - | |
| 3703 | -__webpack_require__.r(__webpack_exports__); | |
| 3704 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3705 | -/* harmony export */ FilterList: function() { return /* binding */ FilterList; }, | |
| 3706 | -/* harmony export */ filterConfig: function() { return /* binding */ filterConfig; } | |
| 3707 | -/* harmony export */ }); | |
| 3708 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 3709 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 3710 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 3711 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__); | |
| 3712 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 3713 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); | |
| 3714 | -/* 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"); | |
| 3715 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 3716 | -/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx"); | |
| 3717 | - | |
| 3718 | - | |
| 3719 | - | |
| 3720 | - | |
| 3721 | - | |
| 3722 | - | |
| 3723 | -const filterConfig = { | |
| 3724 | - unused: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Unused', 'elementor'), | |
| 3725 | - empty: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Empty', 'elementor'), | |
| 3726 | - onThisPage: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('On this page', 'elementor') | |
| 3727 | -}; | |
| 3728 | -const FilterList = () => { | |
| 3729 | - const { | |
| 3730 | - filters: { | |
| 3731 | - filters, | |
| 3732 | - setFilters | |
| 3733 | - } | |
| 3734 | - } = (0,_context__WEBPACK_IMPORTED_MODULE_5__.useSearchAndFilters)(); | |
| 3735 | - const filteredCssClass = (0,_hooks_use_filtered_css_class_usage__WEBPACK_IMPORTED_MODULE_3__.useFilteredCssClassUsage)(); | |
| 3736 | - const handleOnClick = value => { | |
| 3737 | - setFilters(prev => ({ | |
| 3738 | - ...prev, | |
| 3739 | - [value]: !prev[value] | |
| 3740 | - })); | |
| 3741 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_4__.trackGlobalClasses)({ | |
| 3742 | - event: 'classManagerFilterUsed', | |
| 3743 | - action: filters[value] ? 'remove' : 'apply', | |
| 3744 | - type: value, | |
| 3745 | - trigger: 'menu' | |
| 3746 | - }); | |
| 3747 | - }; | |
| 3748 | - 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, { | |
| 3749 | - onClick: () => handleOnClick('unused') | |
| 3750 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LabeledCheckbox, { | |
| 3751 | - label: filterConfig.unused, | |
| 3752 | - checked: filters.unused, | |
| 3753 | - suffix: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Chip, { | |
| 3754 | - size: 'tiny', | |
| 3755 | - sx: { | |
| 3756 | - ml: 'auto' | |
| 3757 | - }, | |
| 3758 | - label: filteredCssClass.unused.length | |
| 3759 | - }) | |
| 3760 | - })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuItem, { | |
| 3761 | - onClick: () => handleOnClick('empty') | |
| 3762 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LabeledCheckbox, { | |
| 3763 | - label: filterConfig.empty, | |
| 3764 | - checked: filters.empty, | |
| 3765 | - suffix: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Chip, { | |
| 3766 | - size: 'tiny', | |
| 3767 | - sx: { | |
| 3768 | - ml: 'auto' | |
| 3769 | - }, | |
| 3770 | - label: filteredCssClass.empty.length | |
| 3771 | - }) | |
| 3772 | - })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuItem, { | |
| 3773 | - onClick: () => handleOnClick('onThisPage') | |
| 3774 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LabeledCheckbox, { | |
| 3775 | - label: filterConfig.onThisPage, | |
| 3776 | - checked: filters.onThisPage, | |
| 3777 | - suffix: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Chip, { | |
| 3778 | - size: 'tiny', | |
| 3779 | - sx: { | |
| 3780 | - ml: 'auto' | |
| 3781 | - }, | |
| 3782 | - label: filteredCssClass.onThisPage.length | |
| 3783 | - }) | |
| 3784 | - }))); | |
| 3785 | -}; | |
| 3786 | -const LabeledCheckbox = ({ | |
| 3787 | - label, | |
| 3788 | - suffix, | |
| 3789 | - checked | |
| 3790 | -}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Stack, { | |
| 3791 | - direction: "row", | |
| 3792 | - alignItems: "center", | |
| 3793 | - gap: 0.5, | |
| 3794 | - flex: 1 | |
| 3795 | -}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Checkbox, { | |
| 3796 | - size: 'small', | |
| 3797 | - checked: checked, | |
| 3798 | - sx: { | |
| 3799 | - padding: 0, | |
| 3800 | - color: 'text.tertiary', | |
| 3801 | - '&.Mui-checked': { | |
| 3802 | - color: 'text.tertiary' | |
| 3803 | - } | |
| 3804 | - } | |
| 3805 | -}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_1__.Typography, { | |
| 3806 | - variant: "caption", | |
| 3807 | - sx: { | |
| 3808 | - color: 'text.secondary' | |
| 3809 | - } | |
| 3810 | -}, label), suffix); | |
| 3811 | - | |
| 3812 | -/***/ }), | |
| 3813 | - | |
| 3814 | -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/search/class-manager-search.tsx": | |
| 3815 | -/*!**********************************************************************************************************************************!*\ | |
| 3816 | - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/components/search/class-manager-search.tsx ***! | |
| 3817 | - \**********************************************************************************************************************************/ | |
| 3818 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3819 | - | |
| 3820 | -__webpack_require__.r(__webpack_exports__); | |
| 3821 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3822 | -/* harmony export */ ClassManagerSearch: function() { return /* binding */ ClassManagerSearch; } | |
| 3823 | -/* harmony export */ }); | |
| 3824 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 3825 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 3826 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); | |
| 3827 | -/* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__); | |
| 3828 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); | |
| 3829 | -/* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); | |
| 3830 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 3831 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); | |
| 3832 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 3833 | -/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context */ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx"); | |
| 3834 | - | |
| 3835 | - | |
| 3836 | - | |
| 3837 | - | |
| 3838 | - | |
| 3839 | - | |
| 3840 | -const ClassManagerSearch = () => { | |
| 3841 | - const { | |
| 3842 | - search: { | |
| 3843 | - inputValue, | |
| 3844 | - handleChange | |
| 3845 | - } | |
| 3846 | - } = (0,_context__WEBPACK_IMPORTED_MODULE_5__.useSearchAndFilters)(); | |
| 3847 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Stack, { | |
| 3848 | - direction: "row", | |
| 3849 | - gap: 0.5, | |
| 3850 | - sx: { | |
| 3851 | - width: '100%' | |
| 3852 | - } | |
| 3853 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, { | |
| 3854 | - sx: { | |
| 3855 | - flexGrow: 1 | |
| 3856 | - } | |
| 3857 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.TextField, { | |
| 3858 | - role: 'search', | |
| 3859 | - fullWidth: true, | |
| 3860 | - size: 'tiny', | |
| 3861 | - value: inputValue, | |
| 3862 | - onFocus: () => { | |
| 3863 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_4__.trackGlobalClasses)({ | |
| 3864 | - event: 'classManagerSearched' | |
| 3865 | - }); | |
| 3866 | - }, | |
| 3867 | - placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Search', 'elementor'), | |
| 3868 | - onChange: e => handleChange(e.target.value), | |
| 3869 | - InputProps: { | |
| 3870 | - startAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.InputAdornment, { | |
| 3871 | - position: "start" | |
| 3872 | - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.SearchIcon, { | |
| 3873 | - fontSize: 'tiny' | |
| 3874 | - })) | |
| 3875 | - } | |
| 3876 | - }))); | |
| 3877 | -}; | |
| 3878 | - | |
| 3879 | -/***/ }), | |
| 3880 | - | |
| 3881 | -/***/ "./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx": | |
| 3882 | -/*!***************************************************************************************************!*\ | |
| 3883 | - !*** ./packages/packages/core/editor-global-classes/src/components/search-and-filter/context.tsx ***! | |
| 3884 | - \***************************************************************************************************/ | |
| 3885 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3886 | - | |
| 3887 | -__webpack_require__.r(__webpack_exports__); | |
| 3888 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3889 | -/* harmony export */ SearchAndFilterProvider: function() { return /* binding */ SearchAndFilterProvider; }, | |
| 3890 | -/* harmony export */ useSearchAndFilters: function() { return /* binding */ useSearchAndFilters; } | |
| 3891 | -/* harmony export */ }); | |
| 3892 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 3893 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 3894 | -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils"); | |
| 3895 | -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_1__); | |
| 3896 | - | |
| 3897 | - | |
| 3898 | - | |
| 3899 | -const SearchAndFilterContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(undefined); | |
| 3900 | -const INIT_CHECKED_FILTERS = { | |
| 3901 | - empty: false, | |
| 3902 | - onThisPage: false, | |
| 3903 | - unused: false | |
| 3904 | -}; | |
| 3905 | -const SearchAndFilterProvider = ({ | |
| 3906 | - children | |
| 3907 | -}) => { | |
| 3908 | - const [filters, setFilters] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(INIT_CHECKED_FILTERS); | |
| 3909 | - const getInitialSearchValue = () => { | |
| 3910 | - const storedValue = localStorage.getItem('elementor-global-classes-search'); | |
| 3911 | - if (storedValue) { | |
| 3912 | - localStorage.removeItem('elementor-global-classes-search'); | |
| 3913 | - return storedValue; | |
| 3914 | - } | |
| 3915 | - return ''; | |
| 3916 | - }; | |
| 3917 | - const { | |
| 3918 | - debouncedValue, | |
| 3919 | - inputValue, | |
| 3920 | - handleChange | |
| 3921 | - } = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_1__.useDebounceState)({ | |
| 3922 | - delay: 300, | |
| 3923 | - initialValue: getInitialSearchValue() | |
| 3924 | - }); | |
| 3925 | - const onClearSearch = () => { | |
| 3926 | - handleChange(''); | |
| 3927 | - }; | |
| 3928 | - const onClearFilter = () => { | |
| 3929 | - setFilters(INIT_CHECKED_FILTERS); | |
| 3930 | - }; | |
| 3931 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(SearchAndFilterContext.Provider, { | |
| 3932 | - value: { | |
| 3933 | - search: { | |
| 3934 | - debouncedValue, | |
| 3935 | - inputValue, | |
| 3936 | - handleChange, | |
| 3937 | - onClearSearch | |
| 3938 | - }, | |
| 3939 | - filters: { | |
| 3940 | - filters, | |
| 3941 | - setFilters, | |
| 3942 | - onClearFilter | |
| 3943 | - } | |
| 3944 | - } | |
| 3945 | - }, children); | |
| 3946 | -}; | |
| 3947 | -const useSearchAndFilters = () => { | |
| 3948 | - const context = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(SearchAndFilterContext); | |
| 3949 | - if (!context) { | |
| 3950 | - throw new Error('useSearchContext must be used within a SearchContextProvider'); | |
| 3951 | - } | |
| 3952 | - return context; | |
| 3953 | -}; | |
| 3954 | - | |
| 3955 | -/***/ }), | |
| 3956 | - | |
| 3957 | -/***/ "./packages/packages/core/editor-global-classes/src/errors.ts": | |
| 3958 | -/*!********************************************************************!*\ | |
| 3959 | - !*** ./packages/packages/core/editor-global-classes/src/errors.ts ***! | |
| 3960 | - \********************************************************************/ | |
| 3961 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3962 | - | |
| 3963 | -__webpack_require__.r(__webpack_exports__); | |
| 3964 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3965 | -/* harmony export */ GlobalClassLabelAlreadyExistsError: function() { return /* binding */ GlobalClassLabelAlreadyExistsError; }, | |
| 3966 | -/* harmony export */ GlobalClassNotFoundError: function() { return /* binding */ GlobalClassNotFoundError; }, | |
| 3967 | -/* harmony export */ GlobalClassTrackingError: function() { return /* binding */ GlobalClassTrackingError; } | |
| 3968 | -/* harmony export */ }); | |
| 3969 | -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils"); | |
| 3970 | -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_0__); | |
| 3971 | - | |
| 3972 | -const GlobalClassNotFoundError = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_0__.createError)({ | |
| 3973 | - code: 'global_class_not_found', | |
| 3974 | - message: 'Global class not found.' | |
| 3975 | -}); | |
| 3976 | -const GlobalClassLabelAlreadyExistsError = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_0__.createError)({ | |
| 3977 | - code: 'global_class_label_already_exists', | |
| 3978 | - message: 'Class with this name already exists.' | |
| 3979 | -}); | |
| 3980 | -const GlobalClassTrackingError = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_0__.createError)({ | |
| 3981 | - code: 'global_class_tracking_error', | |
| 3982 | - message: 'Error tracking global classes event.' | |
| 3983 | -}); | |
| 3984 | - | |
| 3985 | -/***/ }), | |
| 3986 | - | |
| 3987 | -/***/ "./packages/packages/core/editor-global-classes/src/global-classes-styles-provider.ts": | |
| 3988 | -/*!********************************************************************************************!*\ | |
| 3989 | - !*** ./packages/packages/core/editor-global-classes/src/global-classes-styles-provider.ts ***! | |
| 3990 | - \********************************************************************************************/ | |
| 3991 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 3992 | - | |
| 3993 | -__webpack_require__.r(__webpack_exports__); | |
| 3994 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 3995 | -/* harmony export */ GLOBAL_CLASSES_PROVIDER_KEY: function() { return /* binding */ GLOBAL_CLASSES_PROVIDER_KEY; }, | |
| 3996 | -/* harmony export */ globalClassesStylesProvider: function() { return /* binding */ globalClassesStylesProvider; } | |
| 3997 | -/* harmony export */ }); | |
| 3998 | -/* harmony import */ var _elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-styles */ "@elementor/editor-styles"); | |
| 3999 | -/* harmony import */ var _elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__); | |
| 4000 | -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository"); | |
| 4001 | -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__); | |
| 4002 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 4003 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_2__); | |
| 4004 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 4005 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); | |
| 4006 | -/* harmony import */ var _capabilities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./capabilities */ "./packages/packages/core/editor-global-classes/src/capabilities.ts"); | |
| 4007 | -/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./errors */ "./packages/packages/core/editor-global-classes/src/errors.ts"); | |
| 4008 | -/* 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"); | |
| 4009 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 4010 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 4011 | - | |
| 4012 | - | |
| 4013 | - | |
| 4014 | - | |
| 4015 | - | |
| 4016 | - | |
| 4017 | - | |
| 4018 | - | |
| 4019 | - | |
| 4020 | -const MAX_CLASSES = 1000; | |
| 4021 | -const GLOBAL_CLASSES_PROVIDER_KEY = 'global-classes'; | |
| 4022 | -const PREGENERATED_LINK_PATTERN = /^global-([0-9]+-)?(preview|frontend)-[a-zA-Z_-]+-css$/; | |
| 4023 | -const globalClassesStylesProvider = (0,_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_1__.createStylesProvider)({ | |
| 4024 | - key: GLOBAL_CLASSES_PROVIDER_KEY, | |
| 4025 | - priority: 30, | |
| 4026 | - limit: MAX_CLASSES, | |
| 4027 | - isPregeneratedLink: ({ | |
| 4028 | - id | |
| 4029 | - }) => PREGENERATED_LINK_PATTERN.test(id), | |
| 4030 | - labels: { | |
| 4031 | - singular: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('class', 'elementor'), | |
| 4032 | - plural: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('classes', 'elementor') | |
| 4033 | - }, | |
| 4034 | - subscribe: cb => subscribeWithStates(cb), | |
| 4035 | - capabilities: (0,_capabilities__WEBPACK_IMPORTED_MODULE_4__.getCapabilities)(), | |
| 4036 | - actions: { | |
| 4037 | - all: () => (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectOrderedClasses)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)()), | |
| 4038 | - get: id => { | |
| 4039 | - const state = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)(); | |
| 4040 | - const isFetched = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectIsClassFetched)(state, id); | |
| 4041 | - const style = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectClass)(state, id); | |
| 4042 | - | |
| 4043 | - // the isFetched flag is based on the existence of the style in the initial data | |
| 4044 | - // so if the style is created during the same session - it won't be stored as part of the initial data | |
| 4045 | - if (isFetched || style) { | |
| 4046 | - return style; | |
| 4047 | - } | |
| 4048 | - (0,_load_existing_classes__WEBPACK_IMPORTED_MODULE_6__.loadExistingClasses)([id]); | |
| 4049 | - const label = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectClassLabels)(state)[id] ?? id; | |
| 4050 | - return (0,_store__WEBPACK_IMPORTED_MODULE_7__.placeholderDefinition)(id, label); | |
| 4051 | - }, | |
| 4052 | - resolveCssName: id => { | |
| 4053 | - const state = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)(); | |
| 4054 | - const loaded = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectClass)(state, id); | |
| 4055 | - if (loaded) { | |
| 4056 | - return loaded.label; | |
| 4057 | - } | |
| 4058 | - const fromIndex = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectClassLabels)(state)[id]; | |
| 4059 | - return fromIndex ?? id; | |
| 4060 | - }, | |
| 4061 | - create: (label, variants = [], id) => { | |
| 4062 | - const existingClasses = Object.entries((0,_store__WEBPACK_IMPORTED_MODULE_7__.selectClassLabels)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)())); | |
| 4063 | - const existingLabels = existingClasses.map(([, classLabel]) => classLabel); | |
| 4064 | - if (existingLabels.includes(label)) { | |
| 4065 | - throw new _errors__WEBPACK_IMPORTED_MODULE_5__.GlobalClassLabelAlreadyExistsError({ | |
| 4066 | - context: { | |
| 4067 | - label | |
| 4068 | - } | |
| 4069 | - }); | |
| 4070 | - } | |
| 4071 | - const existingIds = existingClasses.map(([existingId]) => existingId); | |
| 4072 | - if (!id) { | |
| 4073 | - id = (0,_elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__.generateId)('g-', existingIds); | |
| 4074 | - } | |
| 4075 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_7__.slice.actions.add({ | |
| 4076 | - id, | |
| 4077 | - type: 'class', | |
| 4078 | - label, | |
| 4079 | - variants | |
| 4080 | - })); | |
| 4081 | - return id; | |
| 4082 | - }, | |
| 4083 | - update: payload => { | |
| 4084 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_7__.slice.actions.update({ | |
| 4085 | - style: payload | |
| 4086 | - })); | |
| 4087 | - }, | |
| 4088 | - delete: id => { | |
| 4089 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_7__.slice.actions.delete(id)); | |
| 4090 | - }, | |
| 4091 | - updateProps: args => { | |
| 4092 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_7__.slice.actions.updateProps({ | |
| 4093 | - id: args.id, | |
| 4094 | - meta: args.meta, | |
| 4095 | - props: args.props, | |
| 4096 | - mode: args.mode | |
| 4097 | - })); | |
| 4098 | - }, | |
| 4099 | - updateCustomCss: args => { | |
| 4100 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_7__.slice.actions.updateProps({ | |
| 4101 | - id: args.id, | |
| 4102 | - meta: args.meta, | |
| 4103 | - custom_css: args.custom_css, | |
| 4104 | - props: {} | |
| 4105 | - })); | |
| 4106 | - }, | |
| 4107 | - tracking: data => { | |
| 4108 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_8__.trackGlobalClasses)(data).catch(error => { | |
| 4109 | - throw new _errors__WEBPACK_IMPORTED_MODULE_5__.GlobalClassTrackingError({ | |
| 4110 | - cause: error | |
| 4111 | - }); | |
| 4112 | - }); | |
| 4113 | - } | |
| 4114 | - } | |
| 4115 | -}); | |
| 4116 | -const subscribeWithStates = cb => { | |
| 4117 | - let previousState = (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectData)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)()); | |
| 4118 | - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__subscribeWithSelector)(state => (0,_store__WEBPACK_IMPORTED_MODULE_7__.selectData)(state), currentState => { | |
| 4119 | - cb(previousState.items, currentState.items); | |
| 4120 | - previousState = currentState; | |
| 4121 | - }); | |
| 4122 | -}; | |
| 4123 | - | |
| 4124 | -/***/ }), | |
| 4125 | - | |
| 4126 | -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-classes-order.ts": | |
| 4127 | -/*!*************************************************************************************!*\ | |
| 4128 | - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-classes-order.ts ***! | |
| 4129 | - \*************************************************************************************/ | |
| 4130 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4131 | - | |
| 4132 | -__webpack_require__.r(__webpack_exports__); | |
| 4133 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4134 | -/* harmony export */ useClassesOrder: function() { return /* binding */ useClassesOrder; } | |
| 4135 | -/* harmony export */ }); | |
| 4136 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 4137 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__); | |
| 4138 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 4139 | - | |
| 4140 | - | |
| 4141 | -const useClassesOrder = () => { | |
| 4142 | - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectOrder); | |
| 4143 | -}; | |
| 4144 | - | |
| 4145 | -/***/ }), | |
| 4146 | - | |
| 4147 | -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage-by-id.ts": | |
| 4148 | -/*!*********************************************************************************************!*\ | |
| 4149 | - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage-by-id.ts ***! | |
| 4150 | - \*********************************************************************************************/ | |
| 4151 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4152 | - | |
| 4153 | -__webpack_require__.r(__webpack_exports__); | |
| 4154 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4155 | -/* harmony export */ useCssClassUsageByID: function() { return /* binding */ useCssClassUsageByID; } | |
| 4156 | -/* harmony export */ }); | |
| 4157 | -/* 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"); | |
| 4158 | - | |
| 4159 | -const EMPTY_CLASS_USAGE = { | |
| 4160 | - total: 0, | |
| 4161 | - content: [] | |
| 4162 | -}; | |
| 4163 | -const useCssClassUsageByID = id => { | |
| 4164 | - const { | |
| 4165 | - data, | |
| 4166 | - ...rest | |
| 4167 | - } = (0,_use_css_class_usage__WEBPACK_IMPORTED_MODULE_0__.useCssClassUsage)(); | |
| 4168 | - const classData = data?.[id] ?? EMPTY_CLASS_USAGE; | |
| 4169 | - return { | |
| 4170 | - ...rest, | |
| 4171 | - data: classData | |
| 4172 | - }; | |
| 4173 | -}; | |
| 4174 | - | |
| 4175 | -/***/ }), | |
| 4176 | - | |
| 4177 | -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage.ts": | |
| 4178 | -/*!***************************************************************************************!*\ | |
| 4179 | - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-css-class-usage.ts ***! | |
| 4180 | - \***************************************************************************************/ | |
| 4181 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4182 | - | |
| 4183 | -__webpack_require__.r(__webpack_exports__); | |
| 4184 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4185 | -/* harmony export */ useCssClassUsage: function() { return /* binding */ useCssClassUsage; } | |
| 4186 | -/* harmony export */ }); | |
| 4187 | -/* harmony import */ var _elementor_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/query */ "@elementor/query"); | |
| 4188 | -/* harmony import */ var _elementor_query__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_query__WEBPACK_IMPORTED_MODULE_0__); | |
| 4189 | -/* 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"); | |
| 4190 | -/* 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"); | |
| 4191 | - | |
| 4192 | - | |
| 4193 | - | |
| 4194 | -const useCssClassUsage = () => { | |
| 4195 | - return (0,_elementor_query__WEBPACK_IMPORTED_MODULE_0__.useQuery)({ | |
| 4196 | - queryKey: [_components_css_class_usage_types__WEBPACK_IMPORTED_MODULE_2__.QUERY_KEY], | |
| 4197 | - queryFn: _service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_1__.fetchCssClassUsage, | |
| 4198 | - refetchOnMount: false, | |
| 4199 | - refetchOnWindowFocus: true | |
| 4200 | - }); | |
| 4201 | -}; | |
| 4202 | - | |
| 4203 | -/***/ }), | |
| 4204 | - | |
| 4205 | -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-dirty-state.ts": | |
| 4206 | -/*!***********************************************************************************!*\ | |
| 4207 | - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-dirty-state.ts ***! | |
| 4208 | - \***********************************************************************************/ | |
| 4209 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4210 | - | |
| 4211 | -__webpack_require__.r(__webpack_exports__); | |
| 4212 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4213 | -/* harmony export */ useDirtyState: function() { return /* binding */ useDirtyState; } | |
| 4214 | -/* harmony export */ }); | |
| 4215 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 4216 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__); | |
| 4217 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 4218 | - | |
| 4219 | - | |
| 4220 | -const useDirtyState = () => { | |
| 4221 | - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectIsDirty); | |
| 4222 | -}; | |
| 4223 | - | |
| 4224 | -/***/ }), | |
| 4225 | - | |
| 4226 | -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-empty-css-class.ts": | |
| 4227 | -/*!***************************************************************************************!*\ | |
| 4228 | - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-empty-css-class.ts ***! | |
| 4229 | - \***************************************************************************************/ | |
| 4230 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4231 | - | |
| 4232 | -__webpack_require__.r(__webpack_exports__); | |
| 4233 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4234 | -/* harmony export */ useAllCssClassesIDs: function() { return /* binding */ useAllCssClassesIDs; }, | |
| 4235 | -/* harmony export */ useEmptyCssClass: function() { return /* binding */ useEmptyCssClass; } | |
| 4236 | -/* harmony export */ }); | |
| 4237 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 4238 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__); | |
| 4239 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 4240 | - | |
| 4241 | - | |
| 4242 | -const useEmptyCssClass = () => { | |
| 4243 | - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectEmptyCssClass); | |
| 4244 | -}; | |
| 4245 | -const useAllCssClassesIDs = () => { | |
| 4246 | - const cssClasses = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectGlobalClasses); | |
| 4247 | - return Object.keys(cssClasses); | |
| 4248 | -}; | |
| 4249 | - | |
| 4250 | -/***/ }), | |
| 4251 | - | |
| 4252 | -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-filtered-css-class-usage.tsx": | |
| 4253 | -/*!*************************************************************************************************!*\ | |
| 4254 | - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-filtered-css-class-usage.tsx ***! | |
| 4255 | - \*************************************************************************************************/ | |
| 4256 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4257 | - | |
| 4258 | -__webpack_require__.r(__webpack_exports__); | |
| 4259 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4260 | -/* harmony export */ useFilteredCssClassUsage: function() { return /* binding */ useFilteredCssClassUsage; } | |
| 4261 | -/* harmony export */ }); | |
| 4262 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 4263 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 4264 | -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); | |
| 4265 | -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__); | |
| 4266 | -/* 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"); | |
| 4267 | -/* 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"); | |
| 4268 | - | |
| 4269 | - | |
| 4270 | - | |
| 4271 | - | |
| 4272 | -const findCssClassKeysByPageID = (data, pageId) => { | |
| 4273 | - const result = []; | |
| 4274 | - for (const key in data) { | |
| 4275 | - data[key].content.forEach(content => { | |
| 4276 | - if (+content.pageId === pageId) { | |
| 4277 | - result.push(key); | |
| 4278 | - } | |
| 4279 | - }); | |
| 4280 | - } | |
| 4281 | - return result; | |
| 4282 | -}; | |
| 4283 | -const getUnusedClasses = (usedCssClass, potentialUnused) => { | |
| 4284 | - const set = new Set(usedCssClass); | |
| 4285 | - return potentialUnused.filter(cssClass => !set.has(cssClass)); | |
| 4286 | -}; | |
| 4287 | -const EMPTY_FILTERED_CSS_CLASS_RESPONSE = { | |
| 4288 | - empty: [], | |
| 4289 | - onThisPage: [], | |
| 4290 | - unused: [] | |
| 4291 | -}; | |
| 4292 | -const useFilteredCssClassUsage = () => { | |
| 4293 | - const document = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__.__useActiveDocument)(); | |
| 4294 | - const emptyCssClasses = (0,_use_empty_css_class__WEBPACK_IMPORTED_MODULE_3__.useEmptyCssClass)(); | |
| 4295 | - const { | |
| 4296 | - data, | |
| 4297 | - isLoading | |
| 4298 | - } = (0,_use_css_class_usage__WEBPACK_IMPORTED_MODULE_2__.useCssClassUsage)(); | |
| 4299 | - const listOfCssClasses = (0,_use_empty_css_class__WEBPACK_IMPORTED_MODULE_3__.useAllCssClassesIDs)(); | |
| 4300 | - const emptyCssClassesIDs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => emptyCssClasses.map(({ | |
| 4301 | - id | |
| 4302 | - }) => id), [emptyCssClasses]); | |
| 4303 | - const onThisPage = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { | |
| 4304 | - if (!data || !document) { | |
| 4305 | - return []; | |
| 4306 | - } | |
| 4307 | - return findCssClassKeysByPageID(data, document.id); | |
| 4308 | - }, [data, document]); | |
| 4309 | - const unused = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { | |
| 4310 | - if (!data) { | |
| 4311 | - return []; | |
| 4312 | - } | |
| 4313 | - return getUnusedClasses(Object.keys(data), listOfCssClasses); | |
| 4314 | - }, [data, listOfCssClasses]); | |
| 4315 | - if (isLoading || !data || !document) { | |
| 4316 | - return EMPTY_FILTERED_CSS_CLASS_RESPONSE; | |
| 4317 | - } | |
| 4318 | - return { | |
| 4319 | - onThisPage, | |
| 4320 | - unused, | |
| 4321 | - empty: emptyCssClassesIDs | |
| 4322 | - }; | |
| 4323 | -}; | |
| 4324 | - | |
| 4325 | -/***/ }), | |
| 4326 | - | |
| 4327 | -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-filters.ts": | |
| 4328 | -/*!*******************************************************************************!*\ | |
| 4329 | - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-filters.ts ***! | |
| 4330 | - \*******************************************************************************/ | |
| 4331 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4332 | - | |
| 4333 | -__webpack_require__.r(__webpack_exports__); | |
| 4334 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4335 | -/* harmony export */ useFilters: function() { return /* binding */ useFilters; } | |
| 4336 | -/* harmony export */ }); | |
| 4337 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 4338 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 4339 | -/* 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"); | |
| 4340 | -/* 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"); | |
| 4341 | - | |
| 4342 | - | |
| 4343 | - | |
| 4344 | -const useFilters = () => { | |
| 4345 | - const { | |
| 4346 | - filters: { | |
| 4347 | - filters | |
| 4348 | - } | |
| 4349 | - } = (0,_components_search_and_filter_context__WEBPACK_IMPORTED_MODULE_1__.useSearchAndFilters)(); | |
| 4350 | - const allFilters = (0,_use_filtered_css_class_usage__WEBPACK_IMPORTED_MODULE_2__.useFilteredCssClassUsage)(); | |
| 4351 | - return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { | |
| 4352 | - const activeEntries = Object.entries(filters).filter(([, isActive]) => isActive); | |
| 4353 | - if (activeEntries.length === 0) { | |
| 4354 | - return null; | |
| 4355 | - } | |
| 4356 | - return activeEntries.reduce((acc, [key], index) => { | |
| 4357 | - const current = allFilters[key] || []; | |
| 4358 | - if (index === 0) { | |
| 4359 | - return current; | |
| 4360 | - } | |
| 4361 | - return acc.filter(val => current.includes(val)); | |
| 4362 | - }, []); | |
| 4363 | - }, [filters, allFilters]); | |
| 4364 | -}; | |
| 4365 | - | |
| 4366 | -/***/ }), | |
| 4367 | - | |
| 4368 | -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-ordered-classes.ts": | |
| 4369 | -/*!***************************************************************************************!*\ | |
| 4370 | - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-ordered-classes.ts ***! | |
| 4371 | - \***************************************************************************************/ | |
| 4372 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4373 | - | |
| 4374 | -__webpack_require__.r(__webpack_exports__); | |
| 4375 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4376 | -/* harmony export */ useOrderedClasses: function() { return /* binding */ useOrderedClasses; } | |
| 4377 | -/* harmony export */ }); | |
| 4378 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 4379 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__); | |
| 4380 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 4381 | - | |
| 4382 | - | |
| 4383 | -const useOrderedClasses = () => { | |
| 4384 | - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__useSelector)(_store__WEBPACK_IMPORTED_MODULE_1__.selectOrderedClasses); | |
| 4385 | -}; | |
| 4386 | - | |
| 4387 | -/***/ }), | |
| 4388 | - | |
| 4389 | -/***/ "./packages/packages/core/editor-global-classes/src/hooks/use-prefetch-css-class-usage.ts": | |
| 4390 | -/*!************************************************************************************************!*\ | |
| 4391 | - !*** ./packages/packages/core/editor-global-classes/src/hooks/use-prefetch-css-class-usage.ts ***! | |
| 4392 | - \************************************************************************************************/ | |
| 4393 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4394 | - | |
| 4395 | -__webpack_require__.r(__webpack_exports__); | |
| 4396 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4397 | -/* harmony export */ PrefetchCssClassUsage: function() { return /* binding */ PrefetchCssClassUsage; }, | |
| 4398 | -/* harmony export */ usePrefetchCssClassUsage: function() { return /* binding */ usePrefetchCssClassUsage; } | |
| 4399 | -/* harmony export */ }); | |
| 4400 | -/* harmony import */ var _elementor_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/query */ "@elementor/query"); | |
| 4401 | -/* harmony import */ var _elementor_query__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_query__WEBPACK_IMPORTED_MODULE_0__); | |
| 4402 | -/* 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"); | |
| 4403 | -/* 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"); | |
| 4404 | - | |
| 4405 | - | |
| 4406 | - | |
| 4407 | -function usePrefetchCssClassUsage() { | |
| 4408 | - const queryClient = (0,_elementor_query__WEBPACK_IMPORTED_MODULE_0__.useQueryClient)(); | |
| 4409 | - const prefetchClassesUsage = () => queryClient.prefetchQuery({ | |
| 4410 | - queryKey: [_components_css_class_usage_types__WEBPACK_IMPORTED_MODULE_2__.QUERY_KEY], | |
| 4411 | - queryFn: _service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_1__.fetchCssClassUsage | |
| 4412 | - }); | |
| 4413 | - return { | |
| 4414 | - prefetchClassesUsage | |
| 4415 | - }; | |
| 4416 | -} | |
| 4417 | -const PrefetchCssClassUsage = () => { | |
| 4418 | - const { | |
| 4419 | - prefetchClassesUsage | |
| 4420 | - } = usePrefetchCssClassUsage(); | |
| 4421 | - prefetchClassesUsage(); | |
| 4422 | - return null; | |
| 4423 | -}; | |
| 4424 | - | |
| 4425 | -/***/ }), | |
| 4426 | - | |
| 4427 | -/***/ "./packages/packages/core/editor-global-classes/src/init.ts": | |
| 4428 | -/*!******************************************************************!*\ | |
| 4429 | - !*** ./packages/packages/core/editor-global-classes/src/init.ts ***! | |
| 4430 | - \******************************************************************/ | |
| 4431 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4432 | - | |
| 4433 | -__webpack_require__.r(__webpack_exports__); | |
| 4434 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4435 | -/* harmony export */ init: function() { return /* binding */ init; } | |
| 4436 | -/* harmony export */ }); | |
| 4437 | -/* harmony import */ var _elementor_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor */ "@elementor/editor"); | |
| 4438 | -/* harmony import */ var _elementor_editor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor__WEBPACK_IMPORTED_MODULE_0__); | |
| 4439 | -/* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-editing-panel */ "@elementor/editor-editing-panel"); | |
| 4440 | -/* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__); | |
| 4441 | -/* harmony import */ var _elementor_editor_embedded_documents_manager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-embedded-documents-manager */ "@elementor/editor-embedded-documents-manager"); | |
| 4442 | -/* 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__); | |
| 4443 | -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp"); | |
| 4444 | -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_3__); | |
| 4445 | -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/editor-styles-repository */ "@elementor/editor-styles-repository"); | |
| 4446 | -/* harmony import */ var _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_4__); | |
| 4447 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 4448 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_5__); | |
| 4449 | -/* 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"); | |
| 4450 | -/* 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"); | |
| 4451 | -/* 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"); | |
| 4452 | -/* 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"); | |
| 4453 | -/* 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"); | |
| 4454 | -/* 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"); | |
| 4455 | -/* 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"); | |
| 4456 | -/* harmony import */ var _mcp_integration__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./mcp-integration */ "./packages/packages/core/editor-global-classes/src/mcp-integration/index.ts"); | |
| 4457 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 4458 | -/* 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"); | |
| 4459 | - | |
| 4460 | - | |
| 4461 | - | |
| 4462 | - | |
| 4463 | - | |
| 4464 | - | |
| 4465 | - | |
| 4466 | - | |
| 4467 | - | |
| 4468 | - | |
| 4469 | - | |
| 4470 | - | |
| 4471 | - | |
| 4472 | - | |
| 4473 | - | |
| 4474 | - | |
| 4475 | -function init() { | |
| 4476 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_5__.__registerSlice)(_store__WEBPACK_IMPORTED_MODULE_14__.slice); | |
| 4477 | - _elementor_editor_embedded_documents_manager__WEBPACK_IMPORTED_MODULE_2__.embeddedDocumentsManager.onDocumentLoad(documentId => { | |
| 4478 | - void (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_12__.addDocumentClasses)(documentId); | |
| 4479 | - }); | |
| 4480 | - _elementor_editor_styles_repository__WEBPACK_IMPORTED_MODULE_4__.stylesRepository.register(_global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_10__.globalClassesStylesProvider); | |
| 4481 | - (0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoLogic)({ | |
| 4482 | - id: 'global-classes-populate-store', | |
| 4483 | - component: _components_populate_store__WEBPACK_IMPORTED_MODULE_9__.PopulateStore | |
| 4484 | - }); | |
| 4485 | - (0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoLogic)({ | |
| 4486 | - id: 'global-classes-sync-with-document', | |
| 4487 | - component: _sync_with_document__WEBPACK_IMPORTED_MODULE_15__.SyncWithDocumentSave | |
| 4488 | - }); | |
| 4489 | - (0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoLogic)({ | |
| 4490 | - id: 'global-classes-import-listener', | |
| 4491 | - component: _components_global_styles_import_listener__WEBPACK_IMPORTED_MODULE_8__.GlobalStylesImportListener | |
| 4492 | - }); | |
| 4493 | - (0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoLogic)({ | |
| 4494 | - id: 'global-classes-prefetch-css-class-usage', | |
| 4495 | - component: _hooks_use_prefetch_css_class_usage__WEBPACK_IMPORTED_MODULE_11__.PrefetchCssClassUsage | |
| 4496 | - }); | |
| 4497 | - (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__.injectIntoCssClassConvert)({ | |
| 4498 | - id: 'global-classes-convert-from-local-class', | |
| 4499 | - component: _components_convert_local_class_to_global_class__WEBPACK_IMPORTED_MODULE_7__.ConvertLocalClassToGlobalClass | |
| 4500 | - }); | |
| 4501 | - (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__.injectIntoClassSelectorActions)({ | |
| 4502 | - id: 'global-classes-manager-button', | |
| 4503 | - component: _components_class_manager_class_manager_button__WEBPACK_IMPORTED_MODULE_6__.ClassManagerButton | |
| 4504 | - }); | |
| 4505 | - (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__.registerStyleProviderToColors)(_global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_10__.GLOBAL_CLASSES_PROVIDER_KEY, { | |
| 4506 | - name: 'global', | |
| 4507 | - getThemeColor: theme => theme.palette.global.dark | |
| 4508 | - }); | |
| 4509 | - (0,_mcp_integration__WEBPACK_IMPORTED_MODULE_13__.initMcpIntegration)((0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_3__.getMCPByDomain)('classes', { | |
| 4510 | - instructions: 'MCP server for management of Elementor global classes', | |
| 4511 | - docs: `Everything related to V4 ( Atomic ) global classes. | |
| 4512 | -# Global classes | |
| 4513 | -- Create/update/delete global classes | |
| 4514 | -- Get list of global classes | |
| 4515 | -- Get details of a global class | |
| 4516 | -` | |
| 4517 | - }), (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_3__.getMCPByDomain)('canvas')); | |
| 4518 | -} | |
| 4519 | - | |
| 4520 | -/***/ }), | |
| 4521 | - | |
| 4522 | -/***/ "./packages/packages/core/editor-global-classes/src/load-document-classes.ts": | |
| 4523 | -/*!***********************************************************************************!*\ | |
| 4524 | - !*** ./packages/packages/core/editor-global-classes/src/load-document-classes.ts ***! | |
| 4525 | - \***********************************************************************************/ | |
| 4526 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4527 | - | |
| 4528 | -__webpack_require__.r(__webpack_exports__); | |
| 4529 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4530 | -/* harmony export */ addDocumentClasses: function() { return /* binding */ addDocumentClasses; }, | |
| 4531 | -/* harmony export */ loadCurrentDocumentClasses: function() { return /* binding */ loadCurrentDocumentClasses; }, | |
| 4532 | -/* harmony export */ styleDefinitionsMapWithoutNull: function() { return /* binding */ styleDefinitionsMapWithoutNull; } | |
| 4533 | -/* harmony export */ }); | |
| 4534 | -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); | |
| 4535 | -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__); | |
| 4536 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 4537 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_1__); | |
| 4538 | -/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./api */ "./packages/packages/core/editor-global-classes/src/api.ts"); | |
| 4539 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 4540 | -/* 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"); | |
| 4541 | - | |
| 4542 | - | |
| 4543 | - | |
| 4544 | - | |
| 4545 | - | |
| 4546 | -function styleDefinitionsMapWithoutNull(map) { | |
| 4547 | - return Object.fromEntries(Object.entries(map).filter(entry => entry[1] !== null)); | |
| 4548 | -} | |
| 4549 | -function resetGlobalClassesState(globalOrder, classLabels) { | |
| 4550 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.load({ | |
| 4551 | - preview: { | |
| 4552 | - items: {}, | |
| 4553 | - order: globalOrder | |
| 4554 | - }, | |
| 4555 | - frontend: { | |
| 4556 | - items: {}, | |
| 4557 | - order: globalOrder | |
| 4558 | - }, | |
| 4559 | - classLabels | |
| 4560 | - })); | |
| 4561 | -} | |
| 4562 | -async function loadCurrentDocumentClasses() { | |
| 4563 | - const [previewIndexRes, frontendIndexRes] = await Promise.all([_api__WEBPACK_IMPORTED_MODULE_2__.apiClient.all('preview'), _api__WEBPACK_IMPORTED_MODULE_2__.apiClient.all('frontend')]); | |
| 4564 | - const previewIndex = previewIndexRes.data.data; | |
| 4565 | - const frontendIndex = frontendIndexRes.data.data; | |
| 4566 | - const classLabels = (0,_utils_create_labels_for_classes__WEBPACK_IMPORTED_MODULE_4__.createLabelsForClasses)(previewIndex); | |
| 4567 | - const previewOrder = previewIndex.map(e => e.id); | |
| 4568 | - const frontendOrder = frontendIndex.map(e => e.id); | |
| 4569 | - | |
| 4570 | - // This is intended to establish the baseline with current labels and order | |
| 4571 | - // without it we won't be able to properly resolve the styles' class names | |
| 4572 | - resetGlobalClassesState(previewOrder, classLabels); | |
| 4573 | - const postId = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_0__.getCurrentDocument)()?.id; | |
| 4574 | - if (!postId) { | |
| 4575 | - return; | |
| 4576 | - } | |
| 4577 | - const [previewPostRes, frontendPostRes] = await Promise.all([_api__WEBPACK_IMPORTED_MODULE_2__.apiClient.getStylesForPost(postId, 'preview'), _api__WEBPACK_IMPORTED_MODULE_2__.apiClient.getStylesForPost(postId, 'frontend')]); | |
| 4578 | - const previewItems = styleDefinitionsMapWithoutNull(previewPostRes.data.data); | |
| 4579 | - const frontendItems = styleDefinitionsMapWithoutNull(frontendPostRes.data.data); | |
| 4580 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.load({ | |
| 4581 | - preview: { | |
| 4582 | - items: previewItems, | |
| 4583 | - order: previewOrder | |
| 4584 | - }, | |
| 4585 | - frontend: { | |
| 4586 | - items: frontendItems, | |
| 4587 | - order: frontendOrder | |
| 4588 | - }, | |
| 4589 | - classLabels | |
| 4590 | - })); | |
| 4591 | -} | |
| 4592 | -async function addDocumentClasses(documentId) { | |
| 4593 | - const [previewPostRes, frontendPostRes] = await Promise.all([_api__WEBPACK_IMPORTED_MODULE_2__.apiClient.getStylesForPost(documentId, 'preview'), _api__WEBPACK_IMPORTED_MODULE_2__.apiClient.getStylesForPost(documentId, 'frontend')]); | |
| 4594 | - const previewItems = styleDefinitionsMapWithoutNull(previewPostRes.data.data); | |
| 4595 | - const frontendItems = styleDefinitionsMapWithoutNull(frontendPostRes.data.data); | |
| 4596 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.mergeExistingClasses({ | |
| 4597 | - preview: previewItems, | |
| 4598 | - frontend: frontendItems | |
| 4599 | - })); | |
| 4600 | -} | |
| 4601 | - | |
| 4602 | -/***/ }), | |
| 4603 | - | |
| 4604 | -/***/ "./packages/packages/core/editor-global-classes/src/load-existing-classes.ts": | |
| 4605 | -/*!***********************************************************************************!*\ | |
| 4606 | - !*** ./packages/packages/core/editor-global-classes/src/load-existing-classes.ts ***! | |
| 4607 | - \***********************************************************************************/ | |
| 4608 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4609 | - | |
| 4610 | -__webpack_require__.r(__webpack_exports__); | |
| 4611 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4612 | -/* harmony export */ loadExistingClasses: function() { return /* binding */ loadExistingClasses; } | |
| 4613 | -/* harmony export */ }); | |
| 4614 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 4615 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__); | |
| 4616 | -/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./api */ "./packages/packages/core/editor-global-classes/src/api.ts"); | |
| 4617 | -/* 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"); | |
| 4618 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 4619 | - | |
| 4620 | - | |
| 4621 | - | |
| 4622 | - | |
| 4623 | -let pendingLoad = null; | |
| 4624 | -const pendingIds = new Set(); | |
| 4625 | -async function loadExistingClasses(classIds) { | |
| 4626 | - const existingClasses = (0,_store__WEBPACK_IMPORTED_MODULE_3__.selectGlobalClasses)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__getState)()); | |
| 4627 | - const missingIds = classIds.filter(id => !(id in existingClasses)); | |
| 4628 | - if (missingIds.length === 0) { | |
| 4629 | - return; | |
| 4630 | - } | |
| 4631 | - missingIds.forEach(id => pendingIds.add(id)); | |
| 4632 | - if (pendingLoad) { | |
| 4633 | - await pendingLoad; | |
| 4634 | - return loadExistingClasses(classIds); | |
| 4635 | - } | |
| 4636 | - pendingLoad = fetchAndMergeClasses(); | |
| 4637 | - try { | |
| 4638 | - await pendingLoad; | |
| 4639 | - } finally { | |
| 4640 | - pendingLoad = null; | |
| 4641 | - } | |
| 4642 | -} | |
| 4643 | -async function fetchAndMergeClasses() { | |
| 4644 | - const idsToFetch = Array.from(pendingIds); | |
| 4645 | - pendingIds.clear(); | |
| 4646 | - if (idsToFetch.length === 0) { | |
| 4647 | - return; | |
| 4648 | - } | |
| 4649 | - const [previewResponse, frontendResponse] = await Promise.all([_api__WEBPACK_IMPORTED_MODULE_1__.apiClient.getStylesByIds(idsToFetch, 'preview'), _api__WEBPACK_IMPORTED_MODULE_1__.apiClient.getStylesByIds(idsToFetch, 'frontend')]); | |
| 4650 | - const previewItems = (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_2__.styleDefinitionsMapWithoutNull)(previewResponse.data.data); | |
| 4651 | - const frontendItems = (0,_load_document_classes__WEBPACK_IMPORTED_MODULE_2__.styleDefinitionsMapWithoutNull)(frontendResponse.data.data); | |
| 4652 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_3__.slice.actions.mergeExistingClasses({ | |
| 4653 | - preview: previewItems, | |
| 4654 | - frontend: frontendItems | |
| 4655 | - })); | |
| 4656 | -} | |
| 4657 | - | |
| 4658 | -/***/ }), | |
| 4659 | - | |
| 4660 | -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/apply-global-class-guide-prompt.ts": | |
| 4661 | -/*!*************************************************************************************************************!*\ | |
| 4662 | - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/apply-global-class-guide-prompt.ts ***! | |
| 4663 | - \*************************************************************************************************************/ | |
| 4664 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4665 | - | |
| 4666 | -__webpack_require__.r(__webpack_exports__); | |
| 4667 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4668 | -/* harmony export */ APPLY_GLOBAL_CLASS_GUIDE_URI: function() { return /* binding */ APPLY_GLOBAL_CLASS_GUIDE_URI; }, | |
| 4669 | -/* harmony export */ generateApplyGlobalClassGuidePrompt: function() { return /* binding */ generateApplyGlobalClassGuidePrompt; } | |
| 4670 | -/* harmony export */ }); | |
| 4671 | -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp"); | |
| 4672 | -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0__); | |
| 4673 | - | |
| 4674 | -const APPLY_GLOBAL_CLASS_GUIDE_URI = 'elementor://global-classes/tools/apply-global-class-guide'; | |
| 4675 | -const generateApplyGlobalClassGuidePrompt = () => { | |
| 4676 | - const prompt = (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0__.toolPrompts)('apply-global-class'); | |
| 4677 | - prompt.description('Apply a global class to an element, enabling consistent styling through your design system.'); | |
| 4678 | - prompt.instruction(`## When to use this tool: | |
| 4679 | -**ALWAYS use this IMMEDIATELY AFTER building compositions** to apply the global classes you created beforehand: | |
| 4680 | -- 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 | |
| 4681 | 3275 | - When applying consistent typography styles (heading-primary, text-body, etc.) |
| 4682 | 3276 | - When applying theme colors or brand styles (bg-brand, button-cta, etc.) |
| 4683 | 3277 | - When ensuring spacing consistency (spacing-section-large, etc.) |
| 4684 | 3278 | |
| @@ -4684,1795 +3278,270 @@ | ||
| 4684 | 3278 | |
| 4685 | 3279 | **DO NOT use this tool** for: |
| 4686 | 3280 | - Elements that don't share styles with other elements (use inline styles instead) |
| 4687 | 3281 | - Layout-specific properties (those should remain inline in stylesConfig)`); |
| 4688 | - prompt.instruction(`## Prerequisites: | |
| 3282 | + prompt.instruction(`## Prerequisites: | |
| 4689 | 3283 | - **REQUIRED**: Get the list of available global classes from 'elementor://global-classes' resource |
| 4690 | -- **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 | |
| 4691 | 3285 | - Ensure you have the most up-to-date list of classes applied to the element to avoid duplicates |
| 4692 | 3286 | - Make sure you have the correct class ID that you want to apply`); |
| 4693 | - prompt.instruction(`## Best Practices: | |
| 3287 | + prompt.instruction(`## Best Practices: | |
| 4694 | 3288 | 1. Apply multiple classes to a single element if needed (typography + color + spacing) |
| 4695 | 3289 | 2. After applying, the tool will remind you to remove duplicate inline styles from elementConfig |
| 4696 | 3290 | 3. Classes should describe purpose, not implementation (e.g., "heading-primary" not "big-red-text")`); |
| 4697 | - return prompt.prompt(); | |
| 4698 | -}; | |
| 3291 | + return prompt.prompt(); | |
| 3292 | + }; | |
| 4699 | 3293 | |
| 4700 | -/***/ }), | |
| 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 | + } | |
| 4701 | 3359 | |
| 4702 | -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/classes-resource.ts": | |
| 4703 | -/*!**********************************************************************************************!*\ | |
| 4704 | - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/classes-resource.ts ***! | |
| 4705 | - \**********************************************************************************************/ | |
| 4706 | -/***/ (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. | |
| 4707 | 3376 | |
| 4708 | -__webpack_require__.r(__webpack_exports__); | |
| 4709 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4710 | -/* harmony export */ GLOBAL_CLASSES_URI: function() { return /* binding */ GLOBAL_CLASSES_URI; }, | |
| 4711 | -/* harmony export */ initClassesResource: function() { return /* binding */ initClassesResource; } | |
| 4712 | -/* harmony export */ }); | |
| 4713 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 4714 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_0__); | |
| 4715 | -/* 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"); | |
| 4716 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 4717 | - | |
| 4718 | - | |
| 4719 | - | |
| 4720 | -const GLOBAL_CLASSES_URI = 'elementor://global-classes'; | |
| 4721 | -const STORAGE_KEY = 'elementor-global-classes'; | |
| 4722 | -const updateLocalStorageCache = () => { | |
| 4723 | - const classes = (0,_store__WEBPACK_IMPORTED_MODULE_2__.selectOrderedClasses)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_0__.__getState)()); | |
| 4724 | - localStorage.setItem(STORAGE_KEY, JSON.stringify(classes)); | |
| 4725 | -}; | |
| 4726 | -const initClassesResource = (classesMcpEntry, canvasMcpEntry) => { | |
| 4727 | - [canvasMcpEntry, classesMcpEntry].forEach(entry => { | |
| 4728 | - const { | |
| 4729 | - sendResourceUpdated, | |
| 4730 | - resource, | |
| 4731 | - waitForReady | |
| 4732 | - } = entry; | |
| 4733 | - resource('global-classes', GLOBAL_CLASSES_URI, { | |
| 4734 | - description: 'Global classes list.' | |
| 4735 | - }, async () => { | |
| 4736 | - return { | |
| 4737 | - contents: [{ | |
| 4738 | - uri: GLOBAL_CLASSES_URI, | |
| 4739 | - text: localStorage[STORAGE_KEY] ?? '[]' | |
| 4740 | - }] | |
| 4741 | - }; | |
| 4742 | - }); | |
| 4743 | - waitForReady().then(() => { | |
| 4744 | - updateLocalStorageCache(); | |
| 4745 | - _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_1__.globalClassesStylesProvider.subscribe(() => { | |
| 4746 | - updateLocalStorageCache(); | |
| 4747 | - sendResourceUpdated({ | |
| 4748 | - uri: GLOBAL_CLASSES_URI | |
| 4749 | - }); | |
| 4750 | - }); | |
| 4751 | - }); | |
| 4752 | - }); | |
| 4753 | -}; | |
| 4754 | - | |
| 4755 | -/***/ }), | |
| 4756 | - | |
| 4757 | -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/index.ts": | |
| 4758 | -/*!***********************************************************************************!*\ | |
| 4759 | - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/index.ts ***! | |
| 4760 | - \***********************************************************************************/ | |
| 4761 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4762 | - | |
| 4763 | -__webpack_require__.r(__webpack_exports__); | |
| 4764 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4765 | -/* harmony export */ initMcpIntegration: function() { return /* binding */ initMcpIntegration; } | |
| 4766 | -/* harmony export */ }); | |
| 4767 | -/* 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"); | |
| 4768 | -/* 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"); | |
| 4769 | -/* 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"); | |
| 4770 | -/* 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"); | |
| 4771 | - | |
| 4772 | - | |
| 4773 | - | |
| 4774 | - | |
| 4775 | -const initMcpIntegration = (reg, canvasMcpEntry) => { | |
| 4776 | - (0,_mcp_apply_unapply_global_classes__WEBPACK_IMPORTED_MODULE_1__["default"])(reg); | |
| 4777 | - (0,_mcp_get_global_class_usages__WEBPACK_IMPORTED_MODULE_2__["default"])(reg); | |
| 4778 | - (0,_mcp_manage_global_classes__WEBPACK_IMPORTED_MODULE_3__.initManageGlobalClasses)(reg); | |
| 4779 | - (0,_classes_resource__WEBPACK_IMPORTED_MODULE_0__.initClassesResource)(reg, canvasMcpEntry); | |
| 4780 | -}; | |
| 4781 | - | |
| 4782 | -/***/ }), | |
| 4783 | - | |
| 4784 | -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-apply-unapply-global-classes.ts": | |
| 4785 | -/*!**************************************************************************************************************!*\ | |
| 4786 | - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-apply-unapply-global-classes.ts ***! | |
| 4787 | - \**************************************************************************************************************/ | |
| 4788 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4789 | - | |
| 4790 | -__webpack_require__.r(__webpack_exports__); | |
| 4791 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4792 | -/* harmony export */ "default": function() { return /* binding */ initMcpApplyUnapplyGlobalClasses; } | |
| 4793 | -/* harmony export */ }); | |
| 4794 | -/* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-editing-panel */ "@elementor/editor-editing-panel"); | |
| 4795 | -/* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0__); | |
| 4796 | -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/schema */ "@elementor/schema"); | |
| 4797 | -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_schema__WEBPACK_IMPORTED_MODULE_1__); | |
| 4798 | -/* 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"); | |
| 4799 | -/* 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"); | |
| 4800 | -/* 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"); | |
| 4801 | - | |
| 4802 | - | |
| 4803 | - | |
| 4804 | - | |
| 4805 | - | |
| 4806 | -function initMcpApplyUnapplyGlobalClasses(server) { | |
| 4807 | - const { | |
| 4808 | - addTool, | |
| 4809 | - resource | |
| 4810 | - } = server; | |
| 4811 | - const applyGlobalClassGuideText = (0,_apply_global_class_guide_prompt__WEBPACK_IMPORTED_MODULE_3__.generateApplyGlobalClassGuidePrompt)(); | |
| 4812 | - resource('apply-global-class-guide', _apply_global_class_guide_prompt__WEBPACK_IMPORTED_MODULE_3__.APPLY_GLOBAL_CLASS_GUIDE_URI, { | |
| 4813 | - description: 'Workflow, prerequisites, and best practices for apply-global-class', | |
| 4814 | - mimeType: 'text/plain', | |
| 4815 | - title: 'Apply global class tool guide' | |
| 4816 | - }, async uri => ({ | |
| 4817 | - contents: [{ | |
| 4818 | - mimeType: 'text/plain', | |
| 4819 | - text: applyGlobalClassGuideText, | |
| 4820 | - uri: uri.href | |
| 4821 | - }] | |
| 4822 | - })); | |
| 4823 | - addTool({ | |
| 4824 | - schema: { | |
| 4825 | - classId: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('The ID of the class to apply'), | |
| 4826 | - elementId: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('The ID of the element to which the class will be applied') | |
| 4827 | - }, | |
| 4828 | - outputSchema: { | |
| 4829 | - result: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('Result message indicating the success of the apply operation'), | |
| 4830 | - llm_instructions: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('Instructions what to do next, Important to follow these instructions!') | |
| 4831 | - }, | |
| 4832 | - name: 'apply-global-class', | |
| 4833 | - 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}].`, | |
| 4834 | - requiredResources: [{ | |
| 4835 | - description: 'Apply global class tool guide', | |
| 4836 | - uri: _apply_global_class_guide_prompt__WEBPACK_IMPORTED_MODULE_3__.APPLY_GLOBAL_CLASS_GUIDE_URI | |
| 4837 | - }, { | |
| 4838 | - description: 'Global classes list', | |
| 4839 | - uri: _classes_resource__WEBPACK_IMPORTED_MODULE_4__.GLOBAL_CLASSES_URI | |
| 4840 | - }], | |
| 4841 | - handler: async params => { | |
| 4842 | - const { | |
| 4843 | - classId, | |
| 4844 | - elementId | |
| 4845 | - } = params; | |
| 4846 | - const appliedClasses = (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0__.doGetAppliedClasses)(elementId); | |
| 4847 | - (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0__.doApplyClasses)(elementId, [...appliedClasses, classId]); | |
| 4848 | - _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_2__.globalClassesStylesProvider.actions.tracking?.({ | |
| 4849 | - event: 'classApplied', | |
| 4850 | - executedBy: 'mcp_tool', | |
| 4851 | - classId | |
| 4852 | - }); | |
| 4853 | - return { | |
| 4854 | - llm_instructions: 'Please check the element configuration, find inline styles duplicated by the applied global class, and remove them', | |
| 4855 | - result: `Class ${classId} applied to element ${elementId} successfully.` | |
| 4856 | - }; | |
| 4857 | - } | |
| 4858 | - }); | |
| 4859 | - addTool({ | |
| 4860 | - name: 'unapply-global-class', | |
| 4861 | - schema: { | |
| 4862 | - classId: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('The ID of the class to unapply'), | |
| 4863 | - elementId: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('The ID of the element from which the class will be unapplied') | |
| 4864 | - }, | |
| 4865 | - outputSchema: { | |
| 4866 | - result: _elementor_schema__WEBPACK_IMPORTED_MODULE_1__.z.string().describe('Result message indicating the success of the unapply operation') | |
| 4867 | - }, | |
| 4868 | - 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}].`, | |
| 4869 | - requiredResources: [{ | |
| 4870 | - description: 'Global classes list', | |
| 4871 | - uri: _classes_resource__WEBPACK_IMPORTED_MODULE_4__.GLOBAL_CLASSES_URI | |
| 4872 | - }], | |
| 4873 | - handler: async params => { | |
| 4874 | - const { | |
| 4875 | - classId, | |
| 4876 | - elementId | |
| 4877 | - } = params; | |
| 4878 | - const ok = (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_0__.doUnapplyClass)(elementId, classId); | |
| 4879 | - if (!ok) { | |
| 4880 | - throw new Error(`Class ${classId} is not applied to element ${elementId}, cannot unapply it.`); | |
| 4881 | - } | |
| 4882 | - return { | |
| 4883 | - result: `Class ${classId} unapplied from element ${elementId} successfully.` | |
| 4884 | - }; | |
| 4885 | - } | |
| 4886 | - }); | |
| 4887 | -} | |
| 4888 | - | |
| 4889 | -/***/ }), | |
| 4890 | - | |
| 4891 | -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-get-global-class-usages.ts": | |
| 4892 | -/*!*********************************************************************************************************!*\ | |
| 4893 | - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-get-global-class-usages.ts ***! | |
| 4894 | - \*********************************************************************************************************/ | |
| 4895 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4896 | - | |
| 4897 | -__webpack_require__.r(__webpack_exports__); | |
| 4898 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4899 | -/* harmony export */ "default": function() { return /* binding */ initMcpApplyGetGlobalClassUsages; } | |
| 4900 | -/* harmony export */ }); | |
| 4901 | -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/schema */ "@elementor/schema"); | |
| 4902 | -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_schema__WEBPACK_IMPORTED_MODULE_0__); | |
| 4903 | -/* 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"); | |
| 4904 | -/* 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"); | |
| 4905 | - | |
| 4906 | - | |
| 4907 | - | |
| 4908 | -function initMcpApplyGetGlobalClassUsages(reg) { | |
| 4909 | - const { | |
| 4910 | - addTool | |
| 4911 | - } = reg; | |
| 4912 | - const globalClassesUsageSchema = { | |
| 4913 | - usages: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.array(_elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.object({ | |
| 4914 | - 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'), | |
| 4915 | - usages: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.array(_elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.object({ | |
| 4916 | - pageId: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.string().describe('The ID of the page where the class is used'), | |
| 4917 | - title: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.string().describe('The title of the page where the class is used'), | |
| 4918 | - total: _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.number().describe('The number of times the class is used on this page'), | |
| 4919 | - 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') | |
| 4920 | - })) | |
| 4921 | - })) | |
| 4922 | - }; | |
| 4923 | - addTool({ | |
| 4924 | - name: 'get-global-class-usages', | |
| 4925 | - description: `Retrieve usages of global classes across all Elementor pages. Heavy operation — scans every page in the site. | |
| 4926 | - | |
| 4927 | 3377 | ## When to use: |
| 4928 | -- 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. | |
| 4929 | 3379 | - To identify unused global classes for cleanup. |
| 4930 | 3380 | |
| 4931 | 3381 | ## When NOT to use: |
| 4932 | -- To list global classes themselves — use the global-classes resource instead (this tool returns usages, not the class list).`, | |
| 4933 | - requiredResources: [{ | |
| 4934 | - description: 'Global classes list', | |
| 4935 | - uri: _classes_resource__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_CLASSES_URI | |
| 4936 | - }], | |
| 4937 | - outputSchema: globalClassesUsageSchema, | |
| 4938 | - handler: async () => { | |
| 4939 | - const data = await (0,_service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_1__.fetchCssClassUsage)(); | |
| 4940 | - const result = { | |
| 4941 | - usages: [] | |
| 4942 | - }; | |
| 4943 | - Object.entries(data).forEach(([classId, usageDetails]) => { | |
| 4944 | - const newEntry = { | |
| 4945 | - classId, | |
| 4946 | - usages: [] | |
| 4947 | - }; | |
| 4948 | - if (typeof usageDetails !== 'number') { | |
| 4949 | - const { | |
| 4950 | - content | |
| 4951 | - } = usageDetails; | |
| 4952 | - content.forEach(detail => { | |
| 4953 | - newEntry.usages.push({ | |
| 4954 | - pageId: String(detail.pageId), | |
| 4955 | - title: detail.title, | |
| 4956 | - total: detail.total, | |
| 4957 | - elements: detail.elements | |
| 4958 | - }); | |
| 4959 | - }); | |
| 4960 | - result.usages.push(newEntry); | |
| 4961 | - } | |
| 4962 | - }); | |
| 4963 | - return result; | |
| 4964 | - } | |
| 4965 | - }); | |
| 4966 | -} | |
| 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 | + } | |
| 4967 | 3413 | |
| 4968 | -/***/ }), | |
| 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 | + }; | |
| 4969 | 3422 | |
| 4970 | -/***/ "./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-manage-global-classes.ts": | |
| 4971 | -/*!*******************************************************************************************************!*\ | |
| 4972 | - !*** ./packages/packages/core/editor-global-classes/src/mcp-integration/mcp-manage-global-classes.ts ***! | |
| 4973 | - \*******************************************************************************************************/ | |
| 4974 | -/***/ (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 | + } | |
| 4975 | 3466 | |
| 4976 | -__webpack_require__.r(__webpack_exports__); | |
| 4977 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 4978 | -/* harmony export */ initManageGlobalClasses: function() { return /* binding */ initManageGlobalClasses; } | |
| 4979 | -/* harmony export */ }); | |
| 4980 | -/* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-canvas */ "@elementor/editor-canvas"); | |
| 4981 | -/* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__); | |
| 4982 | -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp"); | |
| 4983 | -/* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__); | |
| 4984 | -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/schema */ "@elementor/schema"); | |
| 4985 | -/* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_schema__WEBPACK_IMPORTED_MODULE_2__); | |
| 4986 | -/* 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"); | |
| 4987 | -/* 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"); | |
| 4988 | -/* 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"); | |
| 4989 | -/* 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 | + } | |
| 4990 | 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 | + } | |
| 4991 | 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 | + }); | |
| 4992 | 3539 | |
| 3540 | +//#endregion | |
| 3541 | +//#region \0elementor-package-library-entry | |
| 3542 | + (window.elementorV2 = window.elementorV2 || {}).editorGlobalClasses = src_exports; | |
| 4993 | 3543 | |
| 4994 | - | |
| 4995 | - | |
| 4996 | - | |
| 4997 | -const schema = { | |
| 4998 | - action: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.enum(['create', 'modify', 'delete']).describe('Operation to perform'), | |
| 4999 | - classId: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().optional().describe('Global class ID (required for modify). Get from elementor://global-classes resource.'), | |
| 5000 | - globalClassName: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().optional().describe('Global class name (required for create)'), | |
| 5001 | - style: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.object({ | |
| 5002 | - default: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().describe('Plaintext CSS for the default state. MUST be non-empty — blank strings are rejected.'), | |
| 5003 | - hover: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().describe('Plaintext CSS for the :hover state. optional').optional(), | |
| 5004 | - focus: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().describe('Plaintext CSS for the :focus state. optional').optional(), | |
| 5005 | - active: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().describe('Plaintext CSS for the :active state. optional').optional() | |
| 5006 | - }).describe('Plaintext CSS per pseudo-state. All states are converted in one bulk request; unconvertible declarations are stored as custom CSS.'), | |
| 5007 | - 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).') | |
| 5008 | -}; | |
| 5009 | -const outputSchema = { | |
| 5010 | - status: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.enum(['ok', 'error']).describe('Operation status'), | |
| 5011 | - classId: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().optional().describe('Class ID (returned on create success)'), | |
| 5012 | - message: _elementor_schema__WEBPACK_IMPORTED_MODULE_2__.z.string().optional().describe('Error details if status is error') | |
| 5013 | -}; | |
| 5014 | -const handler = async input => { | |
| 5015 | - const { | |
| 5016 | - action, | |
| 5017 | - classId: rawClassId, | |
| 5018 | - globalClassName, | |
| 5019 | - style: rawStyle, | |
| 5020 | - breakpoint | |
| 5021 | - } = input; | |
| 5022 | - let classId = rawClassId; | |
| 5023 | - if (action === 'create' && !globalClassName) { | |
| 5024 | - return { | |
| 5025 | - status: 'error', | |
| 5026 | - message: 'Create requires globalClassName' | |
| 5027 | - }; | |
| 5028 | - } | |
| 5029 | - if (action === 'modify' && !classId) { | |
| 5030 | - return { | |
| 5031 | - status: 'error', | |
| 5032 | - message: 'Modify requires classId' | |
| 5033 | - }; | |
| 5034 | - } | |
| 5035 | - if (action === 'delete' && !classId) { | |
| 5036 | - return { | |
| 5037 | - status: 'error', | |
| 5038 | - message: 'Delete requires classId' | |
| 5039 | - }; | |
| 5040 | - } | |
| 5041 | - const { | |
| 5042 | - create, | |
| 5043 | - update, | |
| 5044 | - delete: deleteClass | |
| 5045 | - } = _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_3__.globalClassesStylesProvider.actions; | |
| 5046 | - if (!create || !update || !deleteClass) { | |
| 5047 | - return { | |
| 5048 | - status: 'error', | |
| 5049 | - message: 'Required actions not available' | |
| 5050 | - }; | |
| 5051 | - } | |
| 5052 | - const styleBlocks = collectNonEmptyStyleBlocks(rawStyle); | |
| 5053 | - if (action !== 'delete' && Object.keys(styleBlocks).length === 0) { | |
| 5054 | - throw new Error('Style must not be empty. Provide plaintext CSS per state.\n\nExample: style.default = "display: flex; flex-direction: column; gap: 1rem;"'); | |
| 5055 | - } | |
| 5056 | - let convertedByState = {}; | |
| 5057 | - if (action !== 'delete') { | |
| 5058 | - const conversionResults = await (0,_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.convertStyleBlocksToAtomic)(styleBlocks); | |
| 5059 | - convertedByState = Object.fromEntries(Object.entries(conversionResults).map(([state, { | |
| 5060 | - props, | |
| 5061 | - customCss | |
| 5062 | - }]) => [state, { | |
| 5063 | - props: props, | |
| 5064 | - customCss: toStoredCustomCss(customCss) | |
| 5065 | - }])); | |
| 5066 | - } | |
| 5067 | - const breakpointValue = breakpoint ?? 'desktop'; | |
| 5068 | - let result = { | |
| 5069 | - status: 'error', | |
| 5070 | - classId: '', | |
| 5071 | - message: 'unknown error' | |
| 5072 | - }; | |
| 5073 | - try { | |
| 5074 | - if (action === 'delete') { | |
| 5075 | - const deleted = await attemptDelete({ | |
| 5076 | - classId, | |
| 5077 | - stylesProvider: _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_3__.globalClassesStylesProvider | |
| 5078 | - }); | |
| 5079 | - if (deleted) { | |
| 5080 | - return { | |
| 5081 | - status: 'ok', | |
| 5082 | - message: `deleted global class with ID ${classId}` | |
| 5083 | - }; | |
| 5084 | - } | |
| 5085 | - throw new Error('error deleting class'); | |
| 5086 | - } | |
| 5087 | - let currentAction = action; | |
| 5088 | - for await (const [state, { | |
| 5089 | - props, | |
| 5090 | - customCss | |
| 5091 | - }] of Object.entries(convertedByState)) { | |
| 5092 | - switch (currentAction) { | |
| 5093 | - case 'create': | |
| 5094 | - const newClassId = await attemptCreate({ | |
| 5095 | - props, | |
| 5096 | - customCss, | |
| 5097 | - className: globalClassName, | |
| 5098 | - stylesProvider: _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_3__.globalClassesStylesProvider, | |
| 5099 | - breakpoint: breakpointValue, | |
| 5100 | - state: state | |
| 5101 | - }); | |
| 5102 | - if (newClassId && currentAction === 'create') { | |
| 5103 | - currentAction = 'modify'; | |
| 5104 | - classId = newClassId; | |
| 5105 | - result = { | |
| 5106 | - status: 'ok', | |
| 5107 | - message: `created global class with ID ${newClassId}` | |
| 5108 | - }; | |
| 5109 | - _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_3__.globalClassesStylesProvider.actions.tracking?.({ | |
| 5110 | - event: 'classCreated', | |
| 5111 | - executedBy: 'mcp_tool', | |
| 5112 | - classId: newClassId | |
| 5113 | - }); | |
| 5114 | - (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__.dispatchMcpStylesAppliedEvent)({ | |
| 5115 | - styleValue: props | |
| 5116 | - }); | |
| 5117 | - } else { | |
| 5118 | - throw new Error('error creating class'); | |
| 5119 | - } | |
| 5120 | - break; | |
| 5121 | - case 'modify': | |
| 5122 | - const updated = await attemptUpdate({ | |
| 5123 | - classId, | |
| 5124 | - props, | |
| 5125 | - customCss, | |
| 5126 | - stylesProvider: _global_classes_styles_provider__WEBPACK_IMPORTED_MODULE_3__.globalClassesStylesProvider, | |
| 5127 | - breakpoint: breakpointValue, | |
| 5128 | - state: state | |
| 5129 | - }); | |
| 5130 | - if (updated) { | |
| 5131 | - result = { | |
| 5132 | - status: 'ok', | |
| 5133 | - classId | |
| 5134 | - }; | |
| 5135 | - (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__.dispatchMcpStylesAppliedEvent)({ | |
| 5136 | - styleValue: props | |
| 5137 | - }); | |
| 5138 | - } else { | |
| 5139 | - throw new Error('error modifying class'); | |
| 5140 | - } | |
| 5141 | - break; | |
| 5142 | - default: | |
| 5143 | - throw new Error(`Unsupported action ${action}`); | |
| 5144 | - } | |
| 5145 | - } | |
| 5146 | - } catch (error) { | |
| 5147 | - return { | |
| 5148 | - status: 'error', | |
| 5149 | - message: `${action} failed: ${error.message || 'Unknown error'}` | |
| 5150 | - }; | |
| 5151 | - } | |
| 5152 | - return result; | |
| 5153 | -}; | |
| 5154 | -const initManageGlobalClasses = reg => { | |
| 5155 | - const { | |
| 5156 | - addTool | |
| 5157 | - } = reg; | |
| 5158 | - addTool({ | |
| 5159 | - name: 'manage-global-classes', | |
| 5160 | - requiredResources: [{ | |
| 5161 | - uri: _classes_resource__WEBPACK_IMPORTED_MODULE_6__.GLOBAL_CLASSES_URI, | |
| 5162 | - description: 'Global classes list' | |
| 5163 | - }, { | |
| 5164 | - uri: _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.BREAKPOINTS_SCHEMA_FULL_URI, | |
| 5165 | - description: 'Breakpoints list' | |
| 5166 | - }], | |
| 5167 | - 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. | |
| 5168 | - | |
| 5169 | -IMPORTANT: style must contain plaintext CSS rules per state — never pass empty strings. | |
| 5170 | -CSS is converted server-side in one bulk request; any declaration that cannot be converted is stored as the class custom CSS. | |
| 5171 | - | |
| 5172 | -Example — creating a flex column class: | |
| 5173 | -style.default = "display: flex; flex-direction: column; gap: 1rem;" | |
| 5174 | - | |
| 5175 | -Example — hover state: | |
| 5176 | -style.hover = "opacity: 0.85;"`, | |
| 5177 | - schema, | |
| 5178 | - outputSchema, | |
| 5179 | - handler | |
| 5180 | - }); | |
| 5181 | -}; | |
| 5182 | -async function attemptCreate(opts) { | |
| 5183 | - const { | |
| 5184 | - props, | |
| 5185 | - customCss, | |
| 5186 | - breakpoint, | |
| 5187 | - className, | |
| 5188 | - stylesProvider, | |
| 5189 | - state | |
| 5190 | - } = opts; | |
| 5191 | - const { | |
| 5192 | - create, | |
| 5193 | - delete: deleteClass | |
| 5194 | - } = stylesProvider.actions; | |
| 5195 | - if (!className) { | |
| 5196 | - throw new Error('Global class name is a required for creation'); | |
| 5197 | - } | |
| 5198 | - if (!create || !deleteClass) { | |
| 5199 | - throw new Error('User is unable to create global classes'); | |
| 5200 | - } | |
| 5201 | - const newClassId = create(className, [{ | |
| 5202 | - meta: { | |
| 5203 | - breakpoint, | |
| 5204 | - state: state === 'default' ? null : state | |
| 5205 | - }, | |
| 5206 | - custom_css: customCss, | |
| 5207 | - props | |
| 5208 | - }]); | |
| 5209 | - try { | |
| 5210 | - await (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_5__.saveGlobalClasses)({ | |
| 5211 | - context: 'frontend' | |
| 5212 | - }); | |
| 5213 | - return newClassId; | |
| 5214 | - } catch { | |
| 5215 | - deleteClass(newClassId); | |
| 5216 | - throw new Error('error creating class'); | |
| 5217 | - } | |
| 5218 | -} | |
| 5219 | -async function attemptUpdate(opts) { | |
| 5220 | - const { | |
| 5221 | - props, | |
| 5222 | - customCss, | |
| 5223 | - breakpoint, | |
| 5224 | - classId, | |
| 5225 | - stylesProvider, | |
| 5226 | - state | |
| 5227 | - } = opts; | |
| 5228 | - const { | |
| 5229 | - updateProps, | |
| 5230 | - update | |
| 5231 | - } = stylesProvider.actions; | |
| 5232 | - if (!classId) { | |
| 5233 | - throw new Error('Class ID is required for modification'); | |
| 5234 | - } | |
| 5235 | - if (!updateProps || !update) { | |
| 5236 | - throw new Error('User is unable to update global classes'); | |
| 5237 | - } | |
| 5238 | - await (0,_load_existing_classes__WEBPACK_IMPORTED_MODULE_4__.loadExistingClasses)([classId]); | |
| 5239 | - const snapshot = structuredClone(stylesProvider.actions.all()); | |
| 5240 | - try { | |
| 5241 | - updateProps({ | |
| 5242 | - id: classId, | |
| 5243 | - props, | |
| 5244 | - custom_css: customCss, | |
| 5245 | - meta: { | |
| 5246 | - breakpoint, | |
| 5247 | - state: state === 'default' ? null : state | |
| 5248 | - } | |
| 5249 | - }); | |
| 5250 | - await (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_5__.saveGlobalClasses)({ | |
| 5251 | - context: 'frontend' | |
| 5252 | - }); | |
| 5253 | - return true; | |
| 5254 | - } catch { | |
| 5255 | - snapshot.forEach(style => { | |
| 5256 | - update({ | |
| 5257 | - id: style.id, | |
| 5258 | - variants: style.variants | |
| 5259 | - }); | |
| 5260 | - }); | |
| 5261 | - await (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_5__.saveGlobalClasses)({ | |
| 5262 | - context: 'frontend' | |
| 5263 | - }); | |
| 5264 | - throw new Error('error updating class'); | |
| 5265 | - } | |
| 5266 | -} | |
| 5267 | -async function attemptDelete(opts) { | |
| 5268 | - const { | |
| 5269 | - classId, | |
| 5270 | - stylesProvider | |
| 5271 | - } = opts; | |
| 5272 | - const { | |
| 5273 | - delete: deleteClass, | |
| 5274 | - create | |
| 5275 | - } = stylesProvider.actions; | |
| 5276 | - if (!classId) { | |
| 5277 | - throw new Error('Class ID is required for deletion'); | |
| 5278 | - } | |
| 5279 | - if (!deleteClass || !create) { | |
| 5280 | - throw new Error('User is unable to delete global classes'); | |
| 5281 | - } | |
| 5282 | - const snapshot = structuredClone(stylesProvider.actions.all()); | |
| 5283 | - const targetClass = snapshot.find(style => style.id === classId); | |
| 5284 | - if (!targetClass) { | |
| 5285 | - throw new Error(`Class with ID "${classId}" not found`); | |
| 5286 | - } | |
| 5287 | - deleteClass(classId); | |
| 5288 | - await (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_5__.saveGlobalClasses)({ | |
| 5289 | - context: 'frontend' | |
| 5290 | - }); | |
| 5291 | - return true; | |
| 5292 | -} | |
| 5293 | -function collectNonEmptyStyleBlocks(style) { | |
| 5294 | - const blocks = {}; | |
| 5295 | - Object.entries(style).forEach(([state, cssText]) => { | |
| 5296 | - if (cssText?.trim()) { | |
| 5297 | - blocks[state] = cssText.trim(); | |
| 5298 | - } | |
| 5299 | - }); | |
| 5300 | - return blocks; | |
| 5301 | -} | |
| 5302 | -function toStoredCustomCss(customCss) { | |
| 5303 | - if (!customCss?.trim()) { | |
| 5304 | - return null; | |
| 5305 | - } | |
| 5306 | - return { | |
| 5307 | - raw: btoa(customCss) | |
| 5308 | - }; | |
| 5309 | -} | |
| 5310 | - | |
| 5311 | -/***/ }), | |
| 5312 | - | |
| 5313 | -/***/ "./packages/packages/core/editor-global-classes/src/save-global-classes.tsx": | |
| 5314 | -/*!**********************************************************************************!*\ | |
| 5315 | - !*** ./packages/packages/core/editor-global-classes/src/save-global-classes.tsx ***! | |
| 5316 | - \**********************************************************************************/ | |
| 5317 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 5318 | - | |
| 5319 | -__webpack_require__.r(__webpack_exports__); | |
| 5320 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 5321 | -/* harmony export */ saveGlobalClasses: function() { return /* binding */ saveGlobalClasses; } | |
| 5322 | -/* harmony export */ }); | |
| 5323 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 5324 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 5325 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); | |
| 5326 | -/* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__); | |
| 5327 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 5328 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_2__); | |
| 5329 | -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils"); | |
| 5330 | -/* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_3__); | |
| 5331 | -/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./api */ "./packages/packages/core/editor-global-classes/src/api.ts"); | |
| 5332 | -/* 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"); | |
| 5333 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 5334 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 5335 | - | |
| 5336 | - | |
| 5337 | - | |
| 5338 | - | |
| 5339 | - | |
| 5340 | - | |
| 5341 | - | |
| 5342 | - | |
| 5343 | -async function saveGlobalClasses({ | |
| 5344 | - context, | |
| 5345 | - onApprove | |
| 5346 | -}) { | |
| 5347 | - const state = (0,_store__WEBPACK_IMPORTED_MODULE_6__.selectData)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)()); | |
| 5348 | - const apiAction = context === 'preview' ? _api__WEBPACK_IMPORTED_MODULE_4__.apiClient.saveDraft : _api__WEBPACK_IMPORTED_MODULE_4__.apiClient.publish; | |
| 5349 | - const currentContext = context === 'preview' ? _store__WEBPACK_IMPORTED_MODULE_6__.selectPreviewInitialData : _store__WEBPACK_IMPORTED_MODULE_6__.selectFrontendInitialData; | |
| 5350 | - const changes = calculateChanges(state, currentContext((0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__getState)())); | |
| 5351 | - const touchedIds = [...changes.added, ...changes.modified]; | |
| 5352 | - const touchedItems = Object.fromEntries(touchedIds.map(id => [id, state.items[id]]).filter(([, v]) => v)); | |
| 5353 | - const response = await apiAction({ | |
| 5354 | - items: touchedItems, | |
| 5355 | - order: state.order, | |
| 5356 | - changes | |
| 5357 | - }); | |
| 5358 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_6__.slice.actions.reset({ | |
| 5359 | - context | |
| 5360 | - })); | |
| 5361 | - window.dispatchEvent(new CustomEvent('classes:updated', { | |
| 5362 | - detail: { | |
| 5363 | - context | |
| 5364 | - } | |
| 5365 | - })); | |
| 5366 | - if (response?.data?.data?.code === _api__WEBPACK_IMPORTED_MODULE_4__.API_ERROR_CODES.DUPLICATED_LABEL) { | |
| 5367 | - (0,_elementor_store__WEBPACK_IMPORTED_MODULE_2__.__dispatch)(_store__WEBPACK_IMPORTED_MODULE_6__.slice.actions.updateMultiple(response.data.data.modifiedLabels)); | |
| 5368 | - (0,_utils_tracking__WEBPACK_IMPORTED_MODULE_7__.trackGlobalClasses)({ | |
| 5369 | - event: 'classPublishConflict', | |
| 5370 | - numOfConflicts: Object.keys(response.data.data.modifiedLabels).length | |
| 5371 | - }); | |
| 5372 | - (0,_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.openDialog)({ | |
| 5373 | - component: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_class_manager_duplicate_label_dialog__WEBPACK_IMPORTED_MODULE_5__.DuplicateLabelDialog, { | |
| 5374 | - modifiedLabels: response.data.data.modifiedLabels || [], | |
| 5375 | - onApprove: onApprove | |
| 5376 | - }) | |
| 5377 | - }); | |
| 5378 | - } | |
| 5379 | -} | |
| 5380 | -function calculateChanges(state, initialData) { | |
| 5381 | - const stateIds = Object.keys(state.items); | |
| 5382 | - const initialDataIds = Object.keys(initialData.items); | |
| 5383 | - const { | |
| 5384 | - order: stateOrder | |
| 5385 | - } = state; | |
| 5386 | - const { | |
| 5387 | - order: initialDataOrder | |
| 5388 | - } = initialData; | |
| 5389 | - const stateOrderIdSet = new Set(stateOrder); | |
| 5390 | - const deleted = initialDataOrder.filter(id => !stateOrderIdSet.has(id)); | |
| 5391 | - const order = stateOrder.join(';') !== initialDataOrder.join(';'); | |
| 5392 | - return { | |
| 5393 | - added: stateIds.filter(id => !initialDataIds.includes(id)), | |
| 5394 | - deleted, | |
| 5395 | - modified: stateIds.filter(id => { | |
| 5396 | - 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]); | |
| 5397 | - }), | |
| 5398 | - order | |
| 5399 | - }; | |
| 5400 | -} | |
| 5401 | - | |
| 5402 | -/***/ }), | |
| 5403 | - | |
| 5404 | -/***/ "./packages/packages/core/editor-global-classes/src/store.ts": | |
| 5405 | -/*!*******************************************************************!*\ | |
| 5406 | - !*** ./packages/packages/core/editor-global-classes/src/store.ts ***! | |
| 5407 | - \*******************************************************************/ | |
| 5408 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 5409 | - | |
| 5410 | -__webpack_require__.r(__webpack_exports__); | |
| 5411 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 5412 | -/* harmony export */ placeholderDefinition: function() { return /* binding */ placeholderDefinition; }, | |
| 5413 | -/* harmony export */ selectClass: function() { return /* binding */ selectClass; }, | |
| 5414 | -/* harmony export */ selectClassLabels: function() { return /* binding */ selectClassLabels; }, | |
| 5415 | -/* harmony export */ selectData: function() { return /* binding */ selectData; }, | |
| 5416 | -/* harmony export */ selectEmptyCssClass: function() { return /* binding */ selectEmptyCssClass; }, | |
| 5417 | -/* harmony export */ selectFrontendInitialData: function() { return /* binding */ selectFrontendInitialData; }, | |
| 5418 | -/* harmony export */ selectGlobalClasses: function() { return /* binding */ selectGlobalClasses; }, | |
| 5419 | -/* harmony export */ selectIsClassFetched: function() { return /* binding */ selectIsClassFetched; }, | |
| 5420 | -/* harmony export */ selectIsDirty: function() { return /* binding */ selectIsDirty; }, | |
| 5421 | -/* harmony export */ selectOrder: function() { return /* binding */ selectOrder; }, | |
| 5422 | -/* harmony export */ selectOrderedClasses: function() { return /* binding */ selectOrderedClasses; }, | |
| 5423 | -/* harmony export */ selectPreviewInitialData: function() { return /* binding */ selectPreviewInitialData; }, | |
| 5424 | -/* harmony export */ slice: function() { return /* binding */ slice; } | |
| 5425 | -/* harmony export */ }); | |
| 5426 | -/* harmony import */ var _elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-styles */ "@elementor/editor-styles"); | |
| 5427 | -/* harmony import */ var _elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__); | |
| 5428 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 5429 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_1__); | |
| 5430 | -/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ "./packages/packages/core/editor-global-classes/src/errors.ts"); | |
| 5431 | -/* 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"); | |
| 5432 | - | |
| 5433 | - | |
| 5434 | - | |
| 5435 | - | |
| 5436 | -const localHistory = _utils_snapshot_history__WEBPACK_IMPORTED_MODULE_3__.SnapshotHistory.get('global-classes'); | |
| 5437 | -const initialState = { | |
| 5438 | - data: { | |
| 5439 | - items: {}, | |
| 5440 | - order: [] | |
| 5441 | - }, | |
| 5442 | - classLabels: {}, | |
| 5443 | - initialData: { | |
| 5444 | - frontend: { | |
| 5445 | - items: {}, | |
| 5446 | - order: [] | |
| 5447 | - }, | |
| 5448 | - preview: { | |
| 5449 | - items: {}, | |
| 5450 | - order: [] | |
| 5451 | - } | |
| 5452 | - }, | |
| 5453 | - isDirty: false | |
| 5454 | -}; | |
| 5455 | -// Slice | |
| 5456 | -const SLICE_NAME = 'globalClasses'; | |
| 5457 | -const slice = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__createSlice)({ | |
| 5458 | - name: SLICE_NAME, | |
| 5459 | - initialState, | |
| 5460 | - reducers: { | |
| 5461 | - load(state, { | |
| 5462 | - payload: { | |
| 5463 | - frontend, | |
| 5464 | - preview, | |
| 5465 | - classLabels | |
| 5466 | - } | |
| 5467 | - }) { | |
| 5468 | - state.initialData.frontend = frontend; | |
| 5469 | - state.initialData.preview = preview; | |
| 5470 | - state.data = preview; | |
| 5471 | - state.classLabels = classLabels; | |
| 5472 | - state.isDirty = false; | |
| 5473 | - }, | |
| 5474 | - add(state, { | |
| 5475 | - payload | |
| 5476 | - }) { | |
| 5477 | - localHistory.next(state.data); | |
| 5478 | - state.data.items[payload.id] = payload; | |
| 5479 | - state.data.order.unshift(payload.id); | |
| 5480 | - state.classLabels[payload.id] = payload.label; | |
| 5481 | - state.isDirty = true; | |
| 5482 | - }, | |
| 5483 | - delete(state, { | |
| 5484 | - payload | |
| 5485 | - }) { | |
| 5486 | - localHistory.next(state.data); | |
| 5487 | - state.data.items = Object.fromEntries(Object.entries(state.data.items).filter(([id]) => id !== payload)); | |
| 5488 | - state.data.order = state.data.order.filter(id => id !== payload); | |
| 5489 | - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete | |
| 5490 | - delete state.classLabels[payload]; | |
| 5491 | - state.isDirty = true; | |
| 5492 | - }, | |
| 5493 | - setOrder(state, { | |
| 5494 | - payload | |
| 5495 | - }) { | |
| 5496 | - localHistory.next(state.data); | |
| 5497 | - state.data.order = payload; | |
| 5498 | - state.isDirty = true; | |
| 5499 | - }, | |
| 5500 | - update(state, { | |
| 5501 | - payload | |
| 5502 | - }) { | |
| 5503 | - localHistory.next(state.data); | |
| 5504 | - const style = state.data.items[payload.style.id]; | |
| 5505 | - const mergedData = { | |
| 5506 | - ...style, | |
| 5507 | - ...payload.style | |
| 5508 | - }; | |
| 5509 | - state.data.items[payload.style.id] = mergedData; | |
| 5510 | - state.isDirty = true; | |
| 5511 | - }, | |
| 5512 | - updateMultiple(state, { | |
| 5513 | - payload | |
| 5514 | - }) { | |
| 5515 | - localHistory.next(state.data); | |
| 5516 | - Object.entries(payload).forEach(([id, { | |
| 5517 | - modified | |
| 5518 | - }]) => { | |
| 5519 | - state.data.items[id].label = modified; | |
| 5520 | - state.classLabels[id] = modified; | |
| 5521 | - }); | |
| 5522 | - state.isDirty = false; | |
| 5523 | - }, | |
| 5524 | - updateProps(state, { | |
| 5525 | - payload | |
| 5526 | - }) { | |
| 5527 | - const style = state.data.items[payload.id]; | |
| 5528 | - if (!style) { | |
| 5529 | - throw new _errors__WEBPACK_IMPORTED_MODULE_2__.GlobalClassNotFoundError({ | |
| 5530 | - context: { | |
| 5531 | - styleId: payload.id | |
| 5532 | - } | |
| 5533 | - }); | |
| 5534 | - } | |
| 5535 | - localHistory.next(state.data); | |
| 5536 | - const variant = (0,_elementor_editor_styles__WEBPACK_IMPORTED_MODULE_0__.getVariantByMeta)(style, payload.meta); | |
| 5537 | - let customCss = ('custom_css' in payload ? payload.custom_css : variant?.custom_css) ?? null; | |
| 5538 | - customCss = customCss?.raw ? customCss : null; | |
| 5539 | - if (variant) { | |
| 5540 | - const payloadProps = JSON.parse(JSON.stringify(payload.props)); | |
| 5541 | - const mode = payload.mode ?? 'merge'; | |
| 5542 | - if (mode === 'replace') { | |
| 5543 | - variant.props = payloadProps; | |
| 5544 | - } else { | |
| 5545 | - const variantProps = JSON.parse(JSON.stringify(variant.props)); | |
| 5546 | - variant.props = mergeProps(variantProps, payloadProps); | |
| 5547 | - } | |
| 5548 | - variant.custom_css = customCss; | |
| 5549 | - style.variants = getNonEmptyVariants(style); | |
| 5550 | - } else { | |
| 5551 | - style.variants.push({ | |
| 5552 | - meta: payload.meta, | |
| 5553 | - props: payload.props, | |
| 5554 | - custom_css: customCss | |
| 5555 | - }); | |
| 5556 | - } | |
| 5557 | - state.isDirty = true; | |
| 5558 | - }, | |
| 5559 | - reset(state, { | |
| 5560 | - payload: { | |
| 5561 | - context | |
| 5562 | - } | |
| 5563 | - }) { | |
| 5564 | - if (context === 'frontend') { | |
| 5565 | - localHistory.reset(); | |
| 5566 | - state.initialData.frontend = state.data; | |
| 5567 | - state.isDirty = false; | |
| 5568 | - } | |
| 5569 | - state.initialData.preview = state.data; | |
| 5570 | - }, | |
| 5571 | - undo(state) { | |
| 5572 | - if (localHistory.isLast()) { | |
| 5573 | - localHistory.next(state.data); // store current before undo | |
| 5574 | - } | |
| 5575 | - const data = localHistory.prev(); | |
| 5576 | - if (data) { | |
| 5577 | - state.data = data; | |
| 5578 | - state.isDirty = true; | |
| 5579 | - } else { | |
| 5580 | - state.data = state.initialData.preview; | |
| 5581 | - } | |
| 5582 | - }, | |
| 5583 | - resetToInitialState(state, { | |
| 5584 | - payload: { | |
| 5585 | - context | |
| 5586 | - } | |
| 5587 | - }) { | |
| 5588 | - localHistory.reset(); | |
| 5589 | - state.data = state.initialData[context]; | |
| 5590 | - state.isDirty = false; | |
| 5591 | - }, | |
| 5592 | - redo(state) { | |
| 5593 | - const data = localHistory.next(); | |
| 5594 | - if (localHistory.isLast()) { | |
| 5595 | - localHistory.prev(); | |
| 5596 | - } | |
| 5597 | - if (data) { | |
| 5598 | - state.data = data; | |
| 5599 | - state.isDirty = true; | |
| 5600 | - } | |
| 5601 | - }, | |
| 5602 | - mergeExistingClasses(state, { | |
| 5603 | - payload: { | |
| 5604 | - preview, | |
| 5605 | - frontend | |
| 5606 | - } | |
| 5607 | - }) { | |
| 5608 | - Object.entries(preview).forEach(([id, previewClassData]) => { | |
| 5609 | - const frontendClassData = frontend[id]; | |
| 5610 | - if (previewClassData === null || previewClassData === undefined) { | |
| 5611 | - return; | |
| 5612 | - } | |
| 5613 | - if (!(id in state.data.items)) { | |
| 5614 | - state.data.items[id] = previewClassData; | |
| 5615 | - } | |
| 5616 | - if (!(id in state.initialData.frontend.items)) { | |
| 5617 | - state.initialData.frontend.items[id] = frontendClassData; | |
| 5618 | - } | |
| 5619 | - if (!(id in state.initialData.preview.items)) { | |
| 5620 | - state.initialData.preview.items[id] = previewClassData; | |
| 5621 | - } | |
| 5622 | - if (!(id in state.classLabels)) { | |
| 5623 | - state.classLabels[id] = previewClassData.label; | |
| 5624 | - } | |
| 5625 | - }); | |
| 5626 | - }, | |
| 5627 | - setOrderWithoutHistory(state, { | |
| 5628 | - payload | |
| 5629 | - }) { | |
| 5630 | - state.data.order = payload; | |
| 5631 | - }, | |
| 5632 | - updateAfterTemplateImport(state, { | |
| 5633 | - payload | |
| 5634 | - }) { | |
| 5635 | - // Update initial data | |
| 5636 | - state.initialData.frontend.items = { | |
| 5637 | - ...state.initialData.frontend.items, | |
| 5638 | - ...payload.addedItems | |
| 5639 | - }; | |
| 5640 | - state.initialData.frontend.order = [...state.initialData.frontend.order, ...payload.addedIdsOrder]; | |
| 5641 | - state.initialData.preview.items = { | |
| 5642 | - ...state.initialData.preview.items, | |
| 5643 | - ...payload.addedItems | |
| 5644 | - }; | |
| 5645 | - state.initialData.preview.order = [...state.initialData.preview.order, ...payload.addedIdsOrder]; | |
| 5646 | - | |
| 5647 | - // Update current data | |
| 5648 | - state.data.items = { | |
| 5649 | - ...state.data.items, | |
| 5650 | - ...payload.addedItems | |
| 5651 | - }; | |
| 5652 | - state.data.order = [...state.data.order, ...payload.addedIdsOrder]; | |
| 5653 | - | |
| 5654 | - // Update class labels | |
| 5655 | - state.classLabels = { | |
| 5656 | - ...state.classLabels, | |
| 5657 | - ...payload.addedClassLabels | |
| 5658 | - }; | |
| 5659 | - } | |
| 5660 | - } | |
| 5661 | -}); | |
| 5662 | -const mergeProps = (current, updates) => { | |
| 5663 | - // edge case, the server returns an array instead of an object when empty props because of PHP array / object conversion | |
| 5664 | - const props = Array.isArray(current) ? {} : current; | |
| 5665 | - Object.entries(updates).forEach(([key, value]) => { | |
| 5666 | - if (value === null || value === undefined) { | |
| 5667 | - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete | |
| 5668 | - delete props[key]; | |
| 5669 | - } else { | |
| 5670 | - props[key] = value; | |
| 5671 | - } | |
| 5672 | - }); | |
| 5673 | - return props; | |
| 5674 | -}; | |
| 5675 | -const getNonEmptyVariants = style => { | |
| 5676 | - return style.variants.filter(({ | |
| 5677 | - props, | |
| 5678 | - custom_css: customCss | |
| 5679 | - }) => Object.keys(props).length || customCss?.raw); | |
| 5680 | -}; | |
| 5681 | -const placeholderDefinition = (id, label) => ({ | |
| 5682 | - id, | |
| 5683 | - type: 'class', | |
| 5684 | - label, | |
| 5685 | - variants: [] | |
| 5686 | -}); | |
| 5687 | - | |
| 5688 | -// Selectors | |
| 5689 | -const selectData = state => state[SLICE_NAME].data; | |
| 5690 | -const selectClassLabels = state => state[SLICE_NAME].classLabels; | |
| 5691 | -const selectFrontendInitialData = state => state[SLICE_NAME].initialData.frontend; | |
| 5692 | -const selectPreviewInitialData = state => state[SLICE_NAME].initialData.preview; | |
| 5693 | -const selectOrder = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__createSelector)(selectData, ({ | |
| 5694 | - order | |
| 5695 | -}) => order); | |
| 5696 | -const selectGlobalClasses = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__createSelector)(selectData, ({ | |
| 5697 | - items | |
| 5698 | -}) => items); | |
| 5699 | -const selectIsDirty = state => state[SLICE_NAME].isDirty; | |
| 5700 | -const selectOrderedClasses = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__createSelector)(selectData, selectClassLabels, ({ | |
| 5701 | - items, | |
| 5702 | - order | |
| 5703 | -}, classLabels) => order.map(id => { | |
| 5704 | - const loaded = items[id]; | |
| 5705 | - if (loaded) { | |
| 5706 | - return loaded; | |
| 5707 | - } | |
| 5708 | - const label = classLabels[id]; | |
| 5709 | - return label !== undefined ? placeholderDefinition(id, label) : null; | |
| 5710 | -}).filter(s => s !== null)); | |
| 5711 | -const selectClass = (state, id) => state[SLICE_NAME].data.items[id] ?? null; | |
| 5712 | -const selectEmptyCssClass = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__createSelector)(selectData, ({ | |
| 5713 | - items | |
| 5714 | -}) => Object.values(items).filter(cssClass => (cssClass.variants?.length ?? 0) === 0)); | |
| 5715 | -const selectIsClassFetched = (state, id) => !!state[SLICE_NAME].initialData.preview.items[id] || !!state[SLICE_NAME].initialData.frontend.items[id] || false; | |
| 5716 | - | |
| 5717 | -/***/ }), | |
| 5718 | - | |
| 5719 | -/***/ "./packages/packages/core/editor-global-classes/src/sync-with-document-save.ts": | |
| 5720 | -/*!*************************************************************************************!*\ | |
| 5721 | - !*** ./packages/packages/core/editor-global-classes/src/sync-with-document-save.ts ***! | |
| 5722 | - \*************************************************************************************/ | |
| 5723 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 5724 | - | |
| 5725 | -__webpack_require__.r(__webpack_exports__); | |
| 5726 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 5727 | -/* harmony export */ syncWithDocumentSave: function() { return /* binding */ syncWithDocumentSave; } | |
| 5728 | -/* harmony export */ }); | |
| 5729 | -/* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-current-user */ "@elementor/editor-current-user"); | |
| 5730 | -/* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_0__); | |
| 5731 | -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); | |
| 5732 | -/* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__); | |
| 5733 | -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); | |
| 5734 | -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__); | |
| 5735 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 5736 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_3__); | |
| 5737 | -/* harmony import */ var _capabilities__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./capabilities */ "./packages/packages/core/editor-global-classes/src/capabilities.ts"); | |
| 5738 | -/* 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"); | |
| 5739 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 5740 | - | |
| 5741 | - | |
| 5742 | - | |
| 5743 | - | |
| 5744 | - | |
| 5745 | - | |
| 5746 | - | |
| 5747 | -let pendingSave = null; | |
| 5748 | -function syncWithDocumentSave(panelActions) { | |
| 5749 | - const unsubscribe = syncDirtyState(); | |
| 5750 | - bindSaveAction(panelActions); | |
| 5751 | - bindBeforeSaveTemplateAction(); | |
| 5752 | - return unsubscribe; | |
| 5753 | -} | |
| 5754 | -function syncDirtyState() { | |
| 5755 | - return (0,_elementor_store__WEBPACK_IMPORTED_MODULE_3__.__subscribeWithSelector)(_store__WEBPACK_IMPORTED_MODULE_6__.selectIsDirty, () => { | |
| 5756 | - if (!isDirty()) { | |
| 5757 | - return; | |
| 5758 | - } | |
| 5759 | - (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__.setDocumentModifiedStatus)(true); | |
| 5760 | - }); | |
| 5761 | -} | |
| 5762 | -function triggerSave(panelActions, context = 'preview') { | |
| 5763 | - const user = (0,_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_0__.getCurrentUser)(); | |
| 5764 | - const canEdit = user?.capabilities.includes(_capabilities__WEBPACK_IMPORTED_MODULE_4__.UPDATE_CLASS_CAPABILITY_KEY); | |
| 5765 | - if (!canEdit) { | |
| 5766 | - return null; | |
| 5767 | - } | |
| 5768 | - if (pendingSave) { | |
| 5769 | - return pendingSave; | |
| 5770 | - } | |
| 5771 | - const promise = (0,_save_global_classes__WEBPACK_IMPORTED_MODULE_5__.saveGlobalClasses)({ | |
| 5772 | - context, | |
| 5773 | - onApprove: panelActions?.open | |
| 5774 | - }); | |
| 5775 | - pendingSave = promise; | |
| 5776 | - promise.finally(() => { | |
| 5777 | - pendingSave = null; | |
| 5778 | - }); | |
| 5779 | - return promise; | |
| 5780 | -} | |
| 5781 | -function bindSaveAction(panelActions) { | |
| 5782 | - (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__.registerDataHook)('dependency', 'document/save/save', args => { | |
| 5783 | - triggerSave(panelActions, args.status === 'publish' ? 'frontend' : 'preview'); | |
| 5784 | - return true; | |
| 5785 | - }); | |
| 5786 | -} | |
| 5787 | -function bindBeforeSaveTemplateAction() { | |
| 5788 | - window.addEventListener('elementor/global-styles/before-save', event => { | |
| 5789 | - if (!pendingSave && isDirty()) { | |
| 5790 | - triggerSave(); | |
| 5791 | - } | |
| 5792 | - if (pendingSave) { | |
| 5793 | - event.detail.promises.push(pendingSave); | |
| 5794 | - } | |
| 5795 | - }); | |
| 5796 | -} | |
| 5797 | -function isDirty() { | |
| 5798 | - return (0,_store__WEBPACK_IMPORTED_MODULE_6__.selectIsDirty)((0,_elementor_store__WEBPACK_IMPORTED_MODULE_3__.__getState)()); | |
| 5799 | -} | |
| 5800 | - | |
| 5801 | -/***/ }), | |
| 5802 | - | |
| 5803 | -/***/ "./packages/packages/core/editor-global-classes/src/sync-with-document.tsx": | |
| 5804 | -/*!*********************************************************************************!*\ | |
| 5805 | - !*** ./packages/packages/core/editor-global-classes/src/sync-with-document.tsx ***! | |
| 5806 | - \*********************************************************************************/ | |
| 5807 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 5808 | - | |
| 5809 | -__webpack_require__.r(__webpack_exports__); | |
| 5810 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 5811 | -/* harmony export */ SyncWithDocumentSave: function() { return /* binding */ SyncWithDocumentSave; } | |
| 5812 | -/* harmony export */ }); | |
| 5813 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 5814 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 5815 | -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); | |
| 5816 | -/* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__); | |
| 5817 | -/* 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"); | |
| 5818 | - | |
| 5819 | - | |
| 5820 | - | |
| 5821 | -function SyncWithDocumentSave() { | |
| 5822 | - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { | |
| 5823 | - const unsubscribe = (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.__privateListenTo)((0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.v1ReadyEvent)(), () => { | |
| 5824 | - const open = () => { | |
| 5825 | - window.dispatchEvent(new CustomEvent('elementor/open-global-classes-manager')); | |
| 5826 | - }; | |
| 5827 | - (0,_sync_with_document_save__WEBPACK_IMPORTED_MODULE_2__.syncWithDocumentSave)({ | |
| 5828 | - open | |
| 5829 | - }); | |
| 5830 | - }); | |
| 5831 | - return unsubscribe; | |
| 5832 | - }, []); | |
| 5833 | - return null; | |
| 5834 | -} | |
| 5835 | - | |
| 5836 | -/***/ }), | |
| 5837 | - | |
| 5838 | -/***/ "./packages/packages/core/editor-global-classes/src/utils/create-labels-for-classes.ts": | |
| 5839 | -/*!*********************************************************************************************!*\ | |
| 5840 | - !*** ./packages/packages/core/editor-global-classes/src/utils/create-labels-for-classes.ts ***! | |
| 5841 | - \*********************************************************************************************/ | |
| 5842 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 5843 | - | |
| 5844 | -__webpack_require__.r(__webpack_exports__); | |
| 5845 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 5846 | -/* harmony export */ createLabelsForClasses: function() { return /* binding */ createLabelsForClasses; } | |
| 5847 | -/* harmony export */ }); | |
| 5848 | -function createLabelsForClasses(entries) { | |
| 5849 | - return Object.fromEntries(entries.map(e => [e.id, e.label])); | |
| 5850 | -} | |
| 5851 | - | |
| 5852 | -/***/ }), | |
| 5853 | - | |
| 5854 | -/***/ "./packages/packages/core/editor-global-classes/src/utils/snapshot-history.ts": | |
| 5855 | -/*!************************************************************************************!*\ | |
| 5856 | - !*** ./packages/packages/core/editor-global-classes/src/utils/snapshot-history.ts ***! | |
| 5857 | - \************************************************************************************/ | |
| 5858 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 5859 | - | |
| 5860 | -__webpack_require__.r(__webpack_exports__); | |
| 5861 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 5862 | -/* harmony export */ SnapshotHistory: function() { return /* binding */ SnapshotHistory; } | |
| 5863 | -/* harmony export */ }); | |
| 5864 | -function createLink({ | |
| 5865 | - value, | |
| 5866 | - next, | |
| 5867 | - prev | |
| 5868 | -}) { | |
| 5869 | - return { | |
| 5870 | - value, | |
| 5871 | - prev: prev || null, | |
| 5872 | - next: next || null | |
| 5873 | - }; | |
| 5874 | -} | |
| 5875 | -class SnapshotHistory { | |
| 5876 | - static registry = {}; | |
| 5877 | - static get(namespace) { | |
| 5878 | - if (!SnapshotHistory.registry[namespace]) { | |
| 5879 | - SnapshotHistory.registry[namespace] = new SnapshotHistory(namespace); | |
| 5880 | - } | |
| 5881 | - return SnapshotHistory.registry[namespace]; | |
| 5882 | - } | |
| 5883 | - first = null; | |
| 5884 | - current = null; | |
| 5885 | - constructor(namespace) { | |
| 5886 | - this.namespace = namespace; | |
| 5887 | - } | |
| 5888 | - transform(item) { | |
| 5889 | - return JSON.parse(JSON.stringify(item)); | |
| 5890 | - } | |
| 5891 | - reset() { | |
| 5892 | - this.first = this.current = null; | |
| 5893 | - } | |
| 5894 | - prev() { | |
| 5895 | - if (!this.current || this.current === this.first) { | |
| 5896 | - return null; | |
| 5897 | - } | |
| 5898 | - this.current = this.current.prev; | |
| 5899 | - return this.current?.value || null; | |
| 5900 | - } | |
| 5901 | - isLast() { | |
| 5902 | - return !this.current || !this.current.next; | |
| 5903 | - } | |
| 5904 | - next(value) { | |
| 5905 | - if (value) { | |
| 5906 | - if (!this.current) { | |
| 5907 | - this.first = createLink({ | |
| 5908 | - value: this.transform(value) | |
| 5909 | - }); | |
| 5910 | - this.current = this.first; | |
| 5911 | - return this.current.value; | |
| 5912 | - } | |
| 5913 | - const nextLink = createLink({ | |
| 5914 | - value: this.transform(value), | |
| 5915 | - prev: this.current | |
| 5916 | - }); | |
| 5917 | - this.current.next = nextLink; | |
| 5918 | - this.current = nextLink; | |
| 5919 | - return this.current.value; | |
| 5920 | - } | |
| 5921 | - | |
| 5922 | - // No value skip to next without setting any | |
| 5923 | - if (!this.current || !this.current.next) { | |
| 5924 | - return null; | |
| 5925 | - } | |
| 5926 | - this.current = this.current.next; | |
| 5927 | - return this.current.value; | |
| 5928 | - } | |
| 5929 | -} | |
| 5930 | - | |
| 5931 | -/***/ }), | |
| 5932 | - | |
| 5933 | -/***/ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts": | |
| 5934 | -/*!****************************************************************************!*\ | |
| 5935 | - !*** ./packages/packages/core/editor-global-classes/src/utils/tracking.ts ***! | |
| 5936 | - \****************************************************************************/ | |
| 5937 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 5938 | - | |
| 5939 | -__webpack_require__.r(__webpack_exports__); | |
| 5940 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 5941 | -/* harmony export */ trackGlobalClasses: function() { return /* binding */ trackGlobalClasses; } | |
| 5942 | -/* harmony export */ }); | |
| 5943 | -/* harmony import */ var _elementor_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/events */ "@elementor/events"); | |
| 5944 | -/* harmony import */ var _elementor_events__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_events__WEBPACK_IMPORTED_MODULE_0__); | |
| 5945 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); | |
| 5946 | -/* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_1__); | |
| 5947 | -/* 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"); | |
| 5948 | -/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../errors */ "./packages/packages/core/editor-global-classes/src/errors.ts"); | |
| 5949 | -/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../store */ "./packages/packages/core/editor-global-classes/src/store.ts"); | |
| 5950 | - | |
| 5951 | - | |
| 5952 | - | |
| 5953 | - | |
| 5954 | - | |
| 5955 | -const trackGlobalClasses = async payload => { | |
| 5956 | - const { | |
| 5957 | - runAction | |
| 5958 | - } = payload; | |
| 5959 | - const data = await getSanitizedData(payload); | |
| 5960 | - if (data) { | |
| 5961 | - track(data); | |
| 5962 | - if (data.event === 'classCreated' && 'classId' in data) { | |
| 5963 | - fireClassApplied(data.classId); | |
| 5964 | - } | |
| 5965 | - } | |
| 5966 | - runAction?.(); | |
| 5967 | -}; | |
| 5968 | -const fireClassApplied = async classId => { | |
| 5969 | - const appliedInfo = await getAppliedInfo(classId); | |
| 5970 | - track({ | |
| 5971 | - event: 'classApplied', | |
| 5972 | - classId, | |
| 5973 | - ...appliedInfo, | |
| 5974 | - totalInstancesAfterApply: 1 | |
| 5975 | - }); | |
| 5976 | -}; | |
| 5977 | -const getSanitizedData = async payload => { | |
| 5978 | - switch (payload.event) { | |
| 5979 | - case 'classApplied': | |
| 5980 | - if ('classId' in payload && payload.classId) { | |
| 5981 | - const appliedInfo = await getAppliedInfo(payload.classId); | |
| 5982 | - return { | |
| 5983 | - ...payload, | |
| 5984 | - ...appliedInfo | |
| 5985 | - }; | |
| 5986 | - } | |
| 5987 | - break; | |
| 5988 | - case 'classRemoved': | |
| 5989 | - if ('classId' in payload && payload.classId) { | |
| 5990 | - const deleteInfo = getRemovedInfo(payload.classId); | |
| 5991 | - return { | |
| 5992 | - ...payload, | |
| 5993 | - ...deleteInfo | |
| 5994 | - }; | |
| 5995 | - } | |
| 5996 | - break; | |
| 5997 | - case 'classDeleted': | |
| 5998 | - if ('classId' in payload && payload.classId) { | |
| 5999 | - const deleteInfo = await trackDeleteClass(payload.classId); | |
| 6000 | - return { | |
| 6001 | - ...payload, | |
| 6002 | - ...deleteInfo | |
| 6003 | - }; | |
| 6004 | - } | |
| 6005 | - break; | |
| 6006 | - case 'classCreated': | |
| 6007 | - if ('source' in payload && payload.source !== 'created') { | |
| 6008 | - if ('classId' in payload && payload.classId) { | |
| 6009 | - return { | |
| 6010 | - ...payload, | |
| 6011 | - classTitle: getCssClass(payload.classId).label | |
| 6012 | - }; | |
| 6013 | - } | |
| 6014 | - } | |
| 6015 | - return payload; | |
| 6016 | - case 'classStateClicked': | |
| 6017 | - if ('classId' in payload && payload.classId) { | |
| 6018 | - return { | |
| 6019 | - ...payload, | |
| 6020 | - classTitle: getCssClass(payload.classId).label | |
| 6021 | - }; | |
| 6022 | - } | |
| 6023 | - break; | |
| 6024 | - case 'classSyncToV3PopupShown': | |
| 6025 | - return { | |
| 6026 | - ...payload, | |
| 6027 | - interaction_type: 'popup_shown', | |
| 6028 | - target_type: 'popup', | |
| 6029 | - target_name: 'sync_to_v3_popup', | |
| 6030 | - interaction_result: 'popup_viewed', | |
| 6031 | - target_location: 'widget_panel', | |
| 6032 | - location_l1: 'class_manager' | |
| 6033 | - }; | |
| 6034 | - case 'classSyncToV3': | |
| 6035 | - { | |
| 6036 | - const classLabel = getCssClass(payload.classId).label; | |
| 6037 | - const isSync = payload.action === 'sync'; | |
| 6038 | - return { | |
| 6039 | - ...payload, | |
| 6040 | - interaction_type: 'click', | |
| 6041 | - target_type: classLabel, | |
| 6042 | - target_name: isSync ? 'sync_to_v3' : 'unsync_to_v3', | |
| 6043 | - interaction_result: isSync ? 'class_is_synced_to_V3' : 'class_is_unsynced_from_V3', | |
| 6044 | - target_location: 'widget_panel', | |
| 6045 | - location_l1: 'class_manager', | |
| 6046 | - interaction_description: isSync ? `user_synced_${classLabel}_to_v3` : `user_unsync_${classLabel}_from_v3` | |
| 6047 | - }; | |
| 6048 | - } | |
| 6049 | - case 'classSyncToV3PopupClick': | |
| 6050 | - { | |
| 6051 | - const isSyncAction = payload.action === 'sync'; | |
| 6052 | - return { | |
| 6053 | - ...payload, | |
| 6054 | - interaction_type: 'click', | |
| 6055 | - target_type: 'button', | |
| 6056 | - target_name: isSyncAction ? 'sync_to_v3' : 'cancel', | |
| 6057 | - interaction_result: isSyncAction ? 'class_is_synced' : 'cancel', | |
| 6058 | - target_location: 'sync_to_v3_popup' | |
| 6059 | - }; | |
| 6060 | - } | |
| 6061 | - default: | |
| 6062 | - return payload; | |
| 6063 | - } | |
| 6064 | -}; | |
| 6065 | -const track = data => { | |
| 6066 | - const { | |
| 6067 | - dispatchEvent, | |
| 6068 | - config | |
| 6069 | - } = (0,_elementor_events__WEBPACK_IMPORTED_MODULE_0__.getMixpanel)(); | |
| 6070 | - if (!config?.names?.global_classes?.[data.event]) { | |
| 6071 | - // eslint-disable-next-line no-console | |
| 6072 | - console.error('Global class tracking event not found', { | |
| 6073 | - event: data.event | |
| 6074 | - }); | |
| 6075 | - return; | |
| 6076 | - } | |
| 6077 | - const name = config.names.global_classes[data.event]; | |
| 6078 | - const { | |
| 6079 | - event, | |
| 6080 | - ...eventData | |
| 6081 | - } = data; | |
| 6082 | - try { | |
| 6083 | - dispatchEvent?.(name, { | |
| 6084 | - event, | |
| 6085 | - ...eventData | |
| 6086 | - }); | |
| 6087 | - } catch (error) { | |
| 6088 | - throw new _errors__WEBPACK_IMPORTED_MODULE_3__.GlobalClassTrackingError({ | |
| 6089 | - cause: error | |
| 6090 | - }); | |
| 6091 | - } | |
| 6092 | -}; | |
| 6093 | -const extractCssClassData = classId => { | |
| 6094 | - const cssClass = getCssClass(classId); | |
| 6095 | - const classTitle = cssClass.label; | |
| 6096 | - return { | |
| 6097 | - classTitle | |
| 6098 | - }; | |
| 6099 | -}; | |
| 6100 | -const getCssClass = classId => { | |
| 6101 | - const state = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__getState)(); | |
| 6102 | - const cssClass = (0,_store__WEBPACK_IMPORTED_MODULE_4__.selectClass)(state, classId); | |
| 6103 | - if (cssClass) { | |
| 6104 | - return cssClass; | |
| 6105 | - } | |
| 6106 | - const label = (0,_store__WEBPACK_IMPORTED_MODULE_4__.selectClassLabels)(state)[classId]; | |
| 6107 | - if (label !== undefined) { | |
| 6108 | - return (0,_store__WEBPACK_IMPORTED_MODULE_4__.placeholderDefinition)(classId, label); | |
| 6109 | - } | |
| 6110 | - throw new Error(`CSS class with ID ${classId} not found`); | |
| 6111 | -}; | |
| 6112 | -const trackDeleteClass = async classId => { | |
| 6113 | - const classTitle = getCssClass(classId).label; | |
| 6114 | - const totalInstances = await getTotalInstancesByCssClassID(classId); | |
| 6115 | - return { | |
| 6116 | - totalInstances, | |
| 6117 | - classTitle | |
| 6118 | - }; | |
| 6119 | -}; | |
| 6120 | -const getTotalInstancesByCssClassID = async classId => { | |
| 6121 | - const cssClassUsage = await (0,_service_css_class_usage_service__WEBPACK_IMPORTED_MODULE_2__.fetchCssClassUsage)(); | |
| 6122 | - return cssClassUsage[classId]?.total ?? 1; | |
| 6123 | -}; | |
| 6124 | -const getAppliedInfo = async classId => { | |
| 6125 | - const { | |
| 6126 | - classTitle | |
| 6127 | - } = extractCssClassData(classId); | |
| 6128 | - const totalInstancesAfterApply = (await getTotalInstancesByCssClassID(classId)) + 1; | |
| 6129 | - return { | |
| 6130 | - classTitle, | |
| 6131 | - totalInstancesAfterApply | |
| 6132 | - }; | |
| 6133 | -}; | |
| 6134 | -const getRemovedInfo = classId => { | |
| 6135 | - const { | |
| 6136 | - classTitle | |
| 6137 | - } = extractCssClassData(classId); | |
| 6138 | - return { | |
| 6139 | - classTitle | |
| 6140 | - }; | |
| 6141 | -}; | |
| 6142 | - | |
| 6143 | -/***/ }), | |
| 6144 | - | |
| 6145 | -/***/ "@elementor/editor": | |
| 6146 | -/*!*****************************************!*\ | |
| 6147 | - !*** external ["elementorV2","editor"] ***! | |
| 6148 | - \*****************************************/ | |
| 6149 | -/***/ (function(module) { | |
| 6150 | - | |
| 6151 | -module.exports = window["elementorV2"]["editor"]; | |
| 6152 | - | |
| 6153 | -/***/ }), | |
| 6154 | - | |
| 6155 | -/***/ "@elementor/editor-canvas": | |
| 6156 | -/*!***********************************************!*\ | |
| 6157 | - !*** external ["elementorV2","editorCanvas"] ***! | |
| 6158 | - \***********************************************/ | |
| 6159 | -/***/ (function(module) { | |
| 6160 | - | |
| 6161 | -module.exports = window["elementorV2"]["editorCanvas"]; | |
| 6162 | - | |
| 6163 | -/***/ }), | |
| 6164 | - | |
| 6165 | -/***/ "@elementor/editor-current-user": | |
| 6166 | -/*!****************************************************!*\ | |
| 6167 | - !*** external ["elementorV2","editorCurrentUser"] ***! | |
| 6168 | - \****************************************************/ | |
| 6169 | -/***/ (function(module) { | |
| 6170 | - | |
| 6171 | -module.exports = window["elementorV2"]["editorCurrentUser"]; | |
| 6172 | - | |
| 6173 | -/***/ }), | |
| 6174 | - | |
| 6175 | -/***/ "@elementor/editor-documents": | |
| 6176 | -/*!**************************************************!*\ | |
| 6177 | - !*** external ["elementorV2","editorDocuments"] ***! | |
| 6178 | - \**************************************************/ | |
| 6179 | -/***/ (function(module) { | |
| 6180 | - | |
| 6181 | -module.exports = window["elementorV2"]["editorDocuments"]; | |
| 6182 | - | |
| 6183 | -/***/ }), | |
| 6184 | - | |
| 6185 | -/***/ "@elementor/editor-editing-panel": | |
| 6186 | -/*!*****************************************************!*\ | |
| 6187 | - !*** external ["elementorV2","editorEditingPanel"] ***! | |
| 6188 | - \*****************************************************/ | |
| 6189 | -/***/ (function(module) { | |
| 6190 | - | |
| 6191 | -module.exports = window["elementorV2"]["editorEditingPanel"]; | |
| 6192 | - | |
| 6193 | -/***/ }), | |
| 6194 | - | |
| 6195 | -/***/ "@elementor/editor-embedded-documents-manager": | |
| 6196 | -/*!*****************************************************************!*\ | |
| 6197 | - !*** external ["elementorV2","editorEmbeddedDocumentsManager"] ***! | |
| 6198 | - \*****************************************************************/ | |
| 6199 | -/***/ (function(module) { | |
| 6200 | - | |
| 6201 | -module.exports = window["elementorV2"]["editorEmbeddedDocumentsManager"]; | |
| 6202 | - | |
| 6203 | -/***/ }), | |
| 6204 | - | |
| 6205 | -/***/ "@elementor/editor-mcp": | |
| 6206 | -/*!********************************************!*\ | |
| 6207 | - !*** external ["elementorV2","editorMcp"] ***! | |
| 6208 | - \********************************************/ | |
| 6209 | -/***/ (function(module) { | |
| 6210 | - | |
| 6211 | -module.exports = window["elementorV2"]["editorMcp"]; | |
| 6212 | - | |
| 6213 | -/***/ }), | |
| 6214 | - | |
| 6215 | -/***/ "@elementor/editor-panels": | |
| 6216 | -/*!***********************************************!*\ | |
| 6217 | - !*** external ["elementorV2","editorPanels"] ***! | |
| 6218 | - \***********************************************/ | |
| 6219 | -/***/ (function(module) { | |
| 6220 | - | |
| 6221 | -module.exports = window["elementorV2"]["editorPanels"]; | |
| 6222 | - | |
| 6223 | -/***/ }), | |
| 6224 | - | |
| 6225 | -/***/ "@elementor/editor-styles": | |
| 6226 | -/*!***********************************************!*\ | |
| 6227 | - !*** external ["elementorV2","editorStyles"] ***! | |
| 6228 | - \***********************************************/ | |
| 6229 | -/***/ (function(module) { | |
| 6230 | - | |
| 6231 | -module.exports = window["elementorV2"]["editorStyles"]; | |
| 6232 | - | |
| 6233 | -/***/ }), | |
| 6234 | - | |
| 6235 | -/***/ "@elementor/editor-styles-repository": | |
| 6236 | -/*!*********************************************************!*\ | |
| 6237 | - !*** external ["elementorV2","editorStylesRepository"] ***! | |
| 6238 | - \*********************************************************/ | |
| 6239 | -/***/ (function(module) { | |
| 6240 | - | |
| 6241 | -module.exports = window["elementorV2"]["editorStylesRepository"]; | |
| 6242 | - | |
| 6243 | -/***/ }), | |
| 6244 | - | |
| 6245 | -/***/ "@elementor/editor-ui": | |
| 6246 | -/*!*******************************************!*\ | |
| 6247 | - !*** external ["elementorV2","editorUi"] ***! | |
| 6248 | - \*******************************************/ | |
| 6249 | -/***/ (function(module) { | |
| 6250 | - | |
| 6251 | -module.exports = window["elementorV2"]["editorUi"]; | |
| 6252 | - | |
| 6253 | -/***/ }), | |
| 6254 | - | |
| 6255 | -/***/ "@elementor/editor-v1-adapters": | |
| 6256 | -/*!***************************************************!*\ | |
| 6257 | - !*** external ["elementorV2","editorV1Adapters"] ***! | |
| 6258 | - \***************************************************/ | |
| 6259 | -/***/ (function(module) { | |
| 6260 | - | |
| 6261 | -module.exports = window["elementorV2"]["editorV1Adapters"]; | |
| 6262 | - | |
| 6263 | -/***/ }), | |
| 6264 | - | |
| 6265 | -/***/ "@elementor/events": | |
| 6266 | -/*!*****************************************!*\ | |
| 6267 | - !*** external ["elementorV2","events"] ***! | |
| 6268 | - \*****************************************/ | |
| 6269 | -/***/ (function(module) { | |
| 6270 | - | |
| 6271 | -module.exports = window["elementorV2"]["events"]; | |
| 6272 | - | |
| 6273 | -/***/ }), | |
| 6274 | - | |
| 6275 | -/***/ "@elementor/http-client": | |
| 6276 | -/*!*********************************************!*\ | |
| 6277 | - !*** external ["elementorV2","httpClient"] ***! | |
| 6278 | - \*********************************************/ | |
| 6279 | -/***/ (function(module) { | |
| 6280 | - | |
| 6281 | -module.exports = window["elementorV2"]["httpClient"]; | |
| 6282 | - | |
| 6283 | -/***/ }), | |
| 6284 | - | |
| 6285 | -/***/ "@elementor/icons": | |
| 6286 | -/*!****************************************!*\ | |
| 6287 | - !*** external ["elementorV2","icons"] ***! | |
| 6288 | - \****************************************/ | |
| 6289 | -/***/ (function(module) { | |
| 6290 | - | |
| 6291 | -module.exports = window["elementorV2"]["icons"]; | |
| 6292 | - | |
| 6293 | -/***/ }), | |
| 6294 | - | |
| 6295 | -/***/ "@elementor/query": | |
| 6296 | -/*!****************************************!*\ | |
| 6297 | - !*** external ["elementorV2","query"] ***! | |
| 6298 | - \****************************************/ | |
| 6299 | -/***/ (function(module) { | |
| 6300 | - | |
| 6301 | -module.exports = window["elementorV2"]["query"]; | |
| 6302 | - | |
| 6303 | -/***/ }), | |
| 6304 | - | |
| 6305 | -/***/ "@elementor/schema": | |
| 6306 | -/*!*****************************************!*\ | |
| 6307 | - !*** external ["elementorV2","schema"] ***! | |
| 6308 | - \*****************************************/ | |
| 6309 | -/***/ (function(module) { | |
| 6310 | - | |
| 6311 | -module.exports = window["elementorV2"]["schema"]; | |
| 6312 | - | |
| 6313 | -/***/ }), | |
| 6314 | - | |
| 6315 | -/***/ "@elementor/store": | |
| 6316 | -/*!****************************************!*\ | |
| 6317 | - !*** external ["elementorV2","store"] ***! | |
| 6318 | - \****************************************/ | |
| 6319 | -/***/ (function(module) { | |
| 6320 | - | |
| 6321 | -module.exports = window["elementorV2"]["store"]; | |
| 6322 | - | |
| 6323 | -/***/ }), | |
| 6324 | - | |
| 6325 | -/***/ "@elementor/ui": | |
| 6326 | -/*!*************************************!*\ | |
| 6327 | - !*** external ["elementorV2","ui"] ***! | |
| 6328 | - \*************************************/ | |
| 6329 | -/***/ (function(module) { | |
| 6330 | - | |
| 6331 | -module.exports = window["elementorV2"]["ui"]; | |
| 6332 | - | |
| 6333 | -/***/ }), | |
| 6334 | - | |
| 6335 | -/***/ "@elementor/utils": | |
| 6336 | -/*!****************************************!*\ | |
| 6337 | - !*** external ["elementorV2","utils"] ***! | |
| 6338 | - \****************************************/ | |
| 6339 | -/***/ (function(module) { | |
| 6340 | - | |
| 6341 | -module.exports = window["elementorV2"]["utils"]; | |
| 6342 | - | |
| 6343 | -/***/ }), | |
| 6344 | - | |
| 6345 | -/***/ "@wordpress/i18n": | |
| 6346 | -/*!******************************!*\ | |
| 6347 | - !*** external ["wp","i18n"] ***! | |
| 6348 | - \******************************/ | |
| 6349 | -/***/ (function(module) { | |
| 6350 | - | |
| 6351 | -module.exports = window["wp"]["i18n"]; | |
| 6352 | - | |
| 6353 | -/***/ }), | |
| 6354 | - | |
| 6355 | -/***/ "react": | |
| 6356 | -/*!**************************!*\ | |
| 6357 | - !*** external ["React"] ***! | |
| 6358 | - \**************************/ | |
| 6359 | -/***/ (function(module) { | |
| 6360 | - | |
| 6361 | -module.exports = window["React"]; | |
| 6362 | - | |
| 6363 | -/***/ }), | |
| 6364 | - | |
| 6365 | -/***/ "react-dom": | |
| 6366 | -/*!*****************************!*\ | |
| 6367 | - !*** external ["ReactDOM"] ***! | |
| 6368 | - \*****************************/ | |
| 6369 | -/***/ (function(module) { | |
| 6370 | - | |
| 6371 | -module.exports = window["ReactDOM"]; | |
| 6372 | - | |
| 6373 | -/***/ }) | |
| 6374 | - | |
| 6375 | -/******/ }); | |
| 6376 | -/************************************************************************/ | |
| 6377 | -/******/ // The module cache | |
| 6378 | -/******/ var __webpack_module_cache__ = {}; | |
| 6379 | -/******/ | |
| 6380 | -/******/ // The require function | |
| 6381 | -/******/ function __webpack_require__(moduleId) { | |
| 6382 | -/******/ // Check if module is in cache | |
| 6383 | -/******/ var cachedModule = __webpack_module_cache__[moduleId]; | |
| 6384 | -/******/ if (cachedModule !== undefined) { | |
| 6385 | -/******/ return cachedModule.exports; | |
| 6386 | -/******/ } | |
| 6387 | -/******/ // Create a new module (and put it into the cache) | |
| 6388 | -/******/ var module = __webpack_module_cache__[moduleId] = { | |
| 6389 | -/******/ // no module.id needed | |
| 6390 | -/******/ // no module.loaded needed | |
| 6391 | -/******/ exports: {} | |
| 6392 | -/******/ }; | |
| 6393 | -/******/ | |
| 6394 | -/******/ // Execute the module function | |
| 6395 | -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); | |
| 6396 | -/******/ | |
| 6397 | -/******/ // Return the exports of the module | |
| 6398 | -/******/ return module.exports; | |
| 6399 | -/******/ } | |
| 6400 | -/******/ | |
| 6401 | -/************************************************************************/ | |
| 6402 | -/******/ /* webpack/runtime/compat get default export */ | |
| 6403 | -/******/ !function() { | |
| 6404 | -/******/ // getDefaultExport function for compatibility with non-harmony modules | |
| 6405 | -/******/ __webpack_require__.n = function(module) { | |
| 6406 | -/******/ var getter = module && module.__esModule ? | |
| 6407 | -/******/ function() { return module['default']; } : | |
| 6408 | -/******/ function() { return module; }; | |
| 6409 | -/******/ __webpack_require__.d(getter, { a: getter }); | |
| 6410 | -/******/ return getter; | |
| 6411 | -/******/ }; | |
| 6412 | -/******/ }(); | |
| 6413 | -/******/ | |
| 6414 | -/******/ /* webpack/runtime/define property getters */ | |
| 6415 | -/******/ !function() { | |
| 6416 | -/******/ // define getter functions for harmony exports | |
| 6417 | -/******/ __webpack_require__.d = function(exports, definition) { | |
| 6418 | -/******/ for(var key in definition) { | |
| 6419 | -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { | |
| 6420 | -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); | |
| 6421 | -/******/ } | |
| 6422 | -/******/ } | |
| 6423 | -/******/ }; | |
| 6424 | -/******/ }(); | |
| 6425 | -/******/ | |
| 6426 | -/******/ /* webpack/runtime/hasOwnProperty shorthand */ | |
| 6427 | -/******/ !function() { | |
| 6428 | -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } | |
| 6429 | -/******/ }(); | |
| 6430 | -/******/ | |
| 6431 | -/******/ /* webpack/runtime/make namespace object */ | |
| 6432 | -/******/ !function() { | |
| 6433 | -/******/ // define __esModule on exports | |
| 6434 | -/******/ __webpack_require__.r = function(exports) { | |
| 6435 | -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { | |
| 6436 | -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); | |
| 6437 | -/******/ } | |
| 6438 | -/******/ Object.defineProperty(exports, '__esModule', { value: true }); | |
| 6439 | -/******/ }; | |
| 6440 | -/******/ }(); | |
| 6441 | -/******/ | |
| 6442 | -/************************************************************************/ | |
| 6443 | -var __webpack_exports__ = {}; | |
| 6444 | -// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. | |
| 6445 | -!function() { | |
| 6446 | -/*!*******************************************************************!*\ | |
| 6447 | - !*** ./packages/packages/core/editor-global-classes/src/index.ts ***! | |
| 6448 | - \*******************************************************************/ | |
| 6449 | -__webpack_require__.r(__webpack_exports__); | |
| 6450 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 6451 | -/* harmony export */ ClassManagerPanelEmbedded: function() { return /* reexport safe */ _components_class_manager_class_manager_panel__WEBPACK_IMPORTED_MODULE_0__.ClassManagerPanelEmbedded; }, | |
| 6452 | -/* harmony export */ GLOBAL_CLASSES_URI: function() { return /* reexport safe */ _mcp_integration_classes_resource__WEBPACK_IMPORTED_MODULE_1__.GLOBAL_CLASSES_URI; }, | |
| 6453 | -/* harmony export */ addDocumentClasses: function() { return /* reexport safe */ _load_document_classes__WEBPACK_IMPORTED_MODULE_4__.addDocumentClasses; }, | |
| 6454 | -/* harmony export */ createLabelsForClasses: function() { return /* reexport safe */ _utils_create_labels_for_classes__WEBPACK_IMPORTED_MODULE_5__.createLabelsForClasses; }, | |
| 6455 | -/* harmony export */ init: function() { return /* reexport safe */ _init__WEBPACK_IMPORTED_MODULE_2__.init; }, | |
| 6456 | -/* harmony export */ loadExistingClasses: function() { return /* reexport safe */ _load_existing_classes__WEBPACK_IMPORTED_MODULE_3__.loadExistingClasses; }, | |
| 6457 | -/* harmony export */ trackGlobalClasses: function() { return /* reexport safe */ _utils_tracking__WEBPACK_IMPORTED_MODULE_6__.trackGlobalClasses; } | |
| 6458 | -/* harmony export */ }); | |
| 6459 | -/* 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"); | |
| 6460 | -/* 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"); | |
| 6461 | -/* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./init */ "./packages/packages/core/editor-global-classes/src/init.ts"); | |
| 6462 | -/* 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"); | |
| 6463 | -/* 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"); | |
| 6464 | -/* 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"); | |
| 6465 | -/* harmony import */ var _utils_tracking__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/tracking */ "./packages/packages/core/editor-global-classes/src/utils/tracking.ts"); | |
| 6466 | - | |
| 6467 | - | |
| 6468 | - | |
| 6469 | - | |
| 6470 | - | |
| 6471 | - | |
| 6472 | - | |
| 6473 | -}(); | |
| 6474 | -(window.elementorV2 = window.elementorV2 || {}).editorGlobalClasses = __webpack_exports__; | |
| 6475 | -/******/ })() | |
| 6476 | -; | |
| 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); | |
| 6477 | 3546 | window.elementorV2.editorGlobalClasses?.init?.(); |
| 6478 | 3547 | //# sourceMappingURL=editor-global-classes.js.map |