← All changes
|
assets/js/packages/editor-components/editor-components.js
+2
-2933
4.3.0
→
4.0.0-dev4
View file →
| @@ -1,2934 +1,3 @@ | ||
| 1 | -(function(_elementor_editor, _elementor_editor_canvas, _elementor_editor_documents, _elementor_editor_editing_panel, _elementor_editor_elements_panel, _elementor_editor_embedded_documents_manager, _elementor_editor_v1_adapters, _elementor_store, _wordpress_i18n, _elementor_http_client, react, _elementor_editor_ui, _elementor_ui, _elementor_utils, _elementor_icons, _elementor_editor_current_user, _elementor_editor_notifications, _elementor_editor_elements, _elementor_editor_props, _elementor_schema, _elementor_events, _elementor_editor_panels, _elementor_editor_controls, _elementor_editor_templates) { | |
| 2 | - | |
| 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)); | |
| 45 | - | |
| 46 | -//#endregion | |
| 47 | -react = __toESM(react); | |
| 48 | - | |
| 49 | -//#region packages/packages/core/editor-components/src/store/store-types.ts | |
| 50 | - var initialState = { | |
| 51 | - data: [], | |
| 52 | - unpublishedData: [], | |
| 53 | - loadStatus: "idle", | |
| 54 | - createdThisSession: [], | |
| 55 | - archivedThisSession: [], | |
| 56 | - path: [], | |
| 57 | - currentComponentId: null, | |
| 58 | - updatedComponentNames: {}, | |
| 59 | - sanitized: {} | |
| 60 | - }; | |
| 61 | - var SLICE_NAME = "components"; | |
| 62 | - | |
| 63 | -//#endregion | |
| 64 | -//#region packages/packages/core/editor-components/src/api.ts | |
| 65 | - var BASE_URL = "elementor/v1/components"; | |
| 66 | - var getParams = (id) => ({ | |
| 67 | - action: "get_document_config", | |
| 68 | - unique_id: `document-config-${id}`, | |
| 69 | - data: { id } | |
| 70 | - }); | |
| 71 | - var apiClient = { | |
| 72 | - get: () => (0, _elementor_http_client.httpService)().get(`${BASE_URL}`).then((res) => res.data.data), | |
| 73 | - create: (payload) => (0, _elementor_http_client.httpService)().post(`${BASE_URL}`, payload).then((res) => res.data.data), | |
| 74 | - updateStatuses: (ids, status) => (0, _elementor_http_client.httpService)().put(`${BASE_URL}/status`, { | |
| 75 | - ids, | |
| 76 | - status | |
| 77 | - }), | |
| 78 | - getComponentConfig: (id) => _elementor_editor_v1_adapters.ajax.load(getParams(id)), | |
| 79 | - invalidateComponentConfigCache: (id) => _elementor_editor_v1_adapters.ajax.invalidateCache(getParams(id)), | |
| 80 | - getComponentLockStatus: async (componentId) => await (0, _elementor_http_client.httpService)().get(`${BASE_URL}/lock-status`, { params: { componentId } }).then((res) => { | |
| 81 | - const { is_current_user_allow_to_edit: isAllowedToSwitchDocument, locked_by: lockedBy } = res.data.data; | |
| 82 | - return { | |
| 83 | - isAllowedToSwitchDocument, | |
| 84 | - lockedBy: lockedBy || "" | |
| 85 | - }; | |
| 86 | - }), | |
| 87 | - lockComponent: async (componentId) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/lock`, { componentId }).then((res) => res.data), | |
| 88 | - unlockComponent: async (componentId) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/unlock`, { componentId }).then((res) => res.data), | |
| 89 | - getOverridableProps: async (componentIds) => await (0, _elementor_http_client.httpService)().get(`${BASE_URL}/overridable-props`, { params: { "componentIds[]": componentIds } }).then((res) => res.data), | |
| 90 | - updateArchivedComponents: async (componentIds, status) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/archive`, { | |
| 91 | - componentIds, | |
| 92 | - status | |
| 93 | - }).then((res) => res.data.data), | |
| 94 | - updateComponentTitle: (updatedComponentNames, status) => (0, _elementor_http_client.httpService)().post(`${BASE_URL}/update-titles`, { | |
| 95 | - components: updatedComponentNames, | |
| 96 | - status | |
| 97 | - }).then((res) => res.data.data), | |
| 98 | - validate: async (payload) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/create-validate`, payload).then((res) => res.data) | |
| 99 | - }; | |
| 100 | - | |
| 101 | -//#endregion | |
| 102 | -//#region packages/packages/core/editor-components/src/store/thunks.ts | |
| 103 | - var loadComponents = (0, _elementor_store.__createAsyncThunk)("components/load", async () => { | |
| 104 | - return await apiClient.get(); | |
| 105 | - }); | |
| 106 | - | |
| 107 | -//#endregion | |
| 108 | -//#region packages/packages/core/editor-components/src/store/extensible-slice.ts | |
| 109 | - var extraReducersMap = /* @__PURE__ */ new Map(); | |
| 110 | - function registerComponentsReducer(name, reducer) { | |
| 111 | - extraReducersMap.set(`${SLICE_NAME}/${name}`, reducer); | |
| 112 | - } | |
| 113 | - function createComponentsAction(name) { | |
| 114 | - const action = (0, _elementor_store.__createAction)(`${SLICE_NAME}/${name}`); | |
| 115 | - return { | |
| 116 | - action, | |
| 117 | - register(reducer) { | |
| 118 | - registerComponentsReducer(name, reducer); | |
| 119 | - }, | |
| 120 | - dispatch(payload) { | |
| 121 | - (0, _elementor_store.__dispatch)(action(payload)); | |
| 122 | - } | |
| 123 | - }; | |
| 124 | - } | |
| 125 | - var baseSlice = (0, _elementor_store.__createSlice)({ | |
| 126 | - name: SLICE_NAME, | |
| 127 | - initialState, | |
| 128 | - reducers: { | |
| 129 | - add: (state, { payload }) => { | |
| 130 | - if (Array.isArray(payload)) state.data = [...payload, ...state.data]; | |
| 131 | - else state.data.unshift(payload); | |
| 132 | - }, | |
| 133 | - load: (state, { payload }) => { | |
| 134 | - state.data = payload; | |
| 135 | - }, | |
| 136 | - addUnpublished: (state, { payload }) => { | |
| 137 | - state.unpublishedData.unshift(payload); | |
| 138 | - }, | |
| 139 | - removeUnpublished: (state, { payload }) => { | |
| 140 | - const uidsToRemove = Array.isArray(payload) ? payload : [payload]; | |
| 141 | - state.unpublishedData = state.unpublishedData.filter((component) => !uidsToRemove.includes(component.uid)); | |
| 142 | - }, | |
| 143 | - resetUnpublished: (state) => { | |
| 144 | - state.unpublishedData = []; | |
| 145 | - }, | |
| 146 | - addCreatedThisSession: (state, { payload }) => { | |
| 147 | - state.createdThisSession.push(payload); | |
| 148 | - }, | |
| 149 | - removeCreatedThisSession: (state, { payload }) => { | |
| 150 | - state.createdThisSession = state.createdThisSession.filter((uid) => uid !== payload); | |
| 151 | - }, | |
| 152 | - archive: (state, { payload }) => { | |
| 153 | - const component = state.data.find((comp) => comp.id === payload); | |
| 154 | - if (component) { | |
| 155 | - component.isArchived = true; | |
| 156 | - state.archivedThisSession.push(payload); | |
| 157 | - } | |
| 158 | - }, | |
| 159 | - setCurrentComponentId: (state, { payload }) => { | |
| 160 | - state.currentComponentId = payload; | |
| 161 | - }, | |
| 162 | - setPath: (state, { payload }) => { | |
| 163 | - state.path = payload; | |
| 164 | - }, | |
| 165 | - setOverridableProps: (state, { payload }) => { | |
| 166 | - const component = state.data.find((comp) => comp.id === payload.componentId); | |
| 167 | - if (!component) return; | |
| 168 | - component.overridableProps = payload.overridableProps; | |
| 169 | - }, | |
| 170 | - loadOverridableProps: (state, { payload }) => { | |
| 171 | - Object.keys(payload).forEach((id) => { | |
| 172 | - const componentId = Number(id); | |
| 173 | - const overridableProps = payload[componentId]; | |
| 174 | - const component = state.data.find((comp) => comp.id === componentId); | |
| 175 | - if (!component || !overridableProps) return; | |
| 176 | - component.overridableProps = overridableProps; | |
| 177 | - }); | |
| 178 | - }, | |
| 179 | - rename: (state, { payload }) => { | |
| 180 | - const component = state.data.find((comp) => comp.uid === payload.componentUid); | |
| 181 | - if (!component) return; | |
| 182 | - if (component.id) state.updatedComponentNames[component.id] = payload.name; | |
| 183 | - component.name = payload.name; | |
| 184 | - }, | |
| 185 | - cleanUpdatedComponentNames: (state) => { | |
| 186 | - state.updatedComponentNames = {}; | |
| 187 | - }, | |
| 188 | - updateComponentSanitizedAttribute: (state, { payload: { componentId, attribute } }) => { | |
| 189 | - if (!state.sanitized[componentId]) state.sanitized[componentId] = {}; | |
| 190 | - state.sanitized[componentId][attribute] = true; | |
| 191 | - }, | |
| 192 | - resetSanitizedComponents: (state) => { | |
| 193 | - state.sanitized = {}; | |
| 194 | - } | |
| 195 | - }, | |
| 196 | - extraReducers: (builder) => { | |
| 197 | - builder.addCase(loadComponents.fulfilled, (state, { payload }) => { | |
| 198 | - state.data = payload; | |
| 199 | - state.loadStatus = "idle"; | |
| 200 | - }); | |
| 201 | - builder.addCase(loadComponents.pending, (state) => { | |
| 202 | - state.loadStatus = "pending"; | |
| 203 | - }); | |
| 204 | - builder.addCase(loadComponents.rejected, (state) => { | |
| 205 | - state.loadStatus = "error"; | |
| 206 | - }); | |
| 207 | - } | |
| 208 | - }); | |
| 209 | - var slice = { | |
| 210 | - ...baseSlice, | |
| 211 | - reducer(state, action) { | |
| 212 | - const nextState = baseSlice.reducer(state, action); | |
| 213 | - const extraReducer = extraReducersMap.get(action.type); | |
| 214 | - if (!extraReducer || !nextState) return nextState; | |
| 215 | - const clonedState = structuredClone(nextState); | |
| 216 | - extraReducer(clonedState, action); | |
| 217 | - return clonedState; | |
| 218 | - } | |
| 219 | - }; | |
| 220 | - | |
| 221 | -//#endregion | |
| 222 | -//#region packages/packages/core/editor-components/src/store/store.ts | |
| 223 | - var selectData = (state) => state[SLICE_NAME].data; | |
| 224 | - var selectArchivedThisSession = (state) => state[SLICE_NAME].archivedThisSession; | |
| 225 | - var selectLoadStatus = (state) => state[SLICE_NAME].loadStatus; | |
| 226 | - var selectUnpublishedData = (state) => state[SLICE_NAME].unpublishedData; | |
| 227 | - var getCreatedThisSession = (state) => state[SLICE_NAME].createdThisSession; | |
| 228 | - var getPath = (state) => state[SLICE_NAME].path; | |
| 229 | - var getCurrentComponentId = (state) => state[SLICE_NAME].currentComponentId; | |
| 230 | - var selectComponent = (state, componentId) => state[SLICE_NAME].data.find((component) => component.id === componentId); | |
| 231 | - var useComponent = (componentId) => { | |
| 232 | - return (0, _elementor_store.__useSelector)((state) => componentId ? selectComponent(state, componentId) : null); | |
| 233 | - }; | |
| 234 | - var selectComponentByUid = (state, componentUid) => state["components"].data.find((component) => component.uid === componentUid) ?? state["components"].unpublishedData.find((component) => component.uid === componentUid); | |
| 235 | - var selectComponents = (0, _elementor_store.__createSelector)(selectData, selectUnpublishedData, (data, unpublishedData) => [...unpublishedData.map((item) => ({ | |
| 236 | - uid: item.uid, | |
| 237 | - name: item.name, | |
| 238 | - overridableProps: item.overridableProps | |
| 239 | - })), ...data.filter((component) => !component.isArchived)]); | |
| 240 | - var selectUnpublishedComponents = (0, _elementor_store.__createSelector)(selectUnpublishedData, (unpublishedData) => unpublishedData); | |
| 241 | - var selectLoadIsPending = (0, _elementor_store.__createSelector)(selectLoadStatus, (status) => status === "pending"); | |
| 242 | - var selectLoadIsError = (0, _elementor_store.__createSelector)(selectLoadStatus, (status) => status === "error"); | |
| 243 | - var selectCreatedThisSession = (0, _elementor_store.__createSelector)(getCreatedThisSession, (createdThisSession) => createdThisSession); | |
| 244 | - var DEFAULT_OVERRIDABLE_PROPS = { | |
| 245 | - props: {}, | |
| 246 | - groups: { | |
| 247 | - items: {}, | |
| 248 | - order: [] | |
| 249 | - } | |
| 250 | - }; | |
| 251 | - var selectOverridableProps = (0, _elementor_store.__createSelector)(selectComponent, (component) => { | |
| 252 | - if (!component) return; | |
| 253 | - return component.overridableProps ?? DEFAULT_OVERRIDABLE_PROPS; | |
| 254 | - }); | |
| 255 | - var useOverridableProps = (componentId) => { | |
| 256 | - return (0, _elementor_store.__useSelector)((state) => componentId ? selectOverridableProps(state, componentId) : null); | |
| 257 | - }; | |
| 258 | - var selectIsOverridablePropsLoaded = (0, _elementor_store.__createSelector)(selectComponent, (component) => { | |
| 259 | - return !!component?.overridableProps; | |
| 260 | - }); | |
| 261 | - var selectPath = (0, _elementor_store.__createSelector)(getPath, (path) => path); | |
| 262 | - var selectCurrentComponentId = (0, _elementor_store.__createSelector)(getCurrentComponentId, (currentComponentId) => currentComponentId); | |
| 263 | - var selectCurrentComponent = (0, _elementor_store.__createSelector)(selectData, getCurrentComponentId, (data, currentComponentId) => data.find((component) => component.id === currentComponentId)); | |
| 264 | - var useCurrentComponentId = () => { | |
| 265 | - return (0, _elementor_store.__useSelector)(selectCurrentComponentId); | |
| 266 | - }; | |
| 267 | - var useCurrentComponent = () => { | |
| 268 | - return (0, _elementor_store.__useSelector)(selectCurrentComponent); | |
| 269 | - }; | |
| 270 | - var selectUpdatedComponentNames = (0, _elementor_store.__createSelector)((state) => state[SLICE_NAME].updatedComponentNames, (updatedComponentNames) => Object.entries(updatedComponentNames).map(([componentId, title]) => ({ | |
| 271 | - componentId: Number(componentId), | |
| 272 | - title | |
| 273 | - }))); | |
| 274 | - var useSanitizedComponents = () => { | |
| 275 | - return (0, _elementor_store.__useSelector)((state) => state[SLICE_NAME].sanitized); | |
| 276 | - }; | |
| 277 | - var useIsSanitizedComponent = (componentId, key) => { | |
| 278 | - const sanitizedComponents = useSanitizedComponents(); | |
| 279 | - if (!componentId) return false; | |
| 280 | - return !!sanitizedComponents[componentId]?.[key]; | |
| 281 | - }; | |
| 282 | - | |
| 283 | -//#endregion | |
| 284 | -//#region packages/packages/core/editor-components/src/utils/component-document-data.ts | |
| 285 | - var getComponentDocumentParams = (id) => ({ | |
| 286 | - action: "get_document_config", | |
| 287 | - unique_id: `document-${id}`, | |
| 288 | - data: { id } | |
| 289 | - }); | |
| 290 | - var pendingRequests = /* @__PURE__ */ new Map(); | |
| 291 | - var getComponentDocumentData = (id) => { | |
| 292 | - const pendingRequest = pendingRequests.get(id); | |
| 293 | - if (pendingRequest) return pendingRequest; | |
| 294 | - const request = _elementor_editor_v1_adapters.ajax.load(getComponentDocumentParams(id)).catch(() => null).finally(() => pendingRequests.delete(id)); | |
| 295 | - pendingRequests.set(id, request); | |
| 296 | - return request; | |
| 297 | - }; | |
| 298 | - | |
| 299 | -//#endregion | |
| 300 | -//#region packages/packages/core/editor-components/src/component-instance-transformer.ts | |
| 301 | - var componentInstanceTransformer = (0, _elementor_editor_canvas.createTransformer)(async ({ component_id: id, overrides: overridesValue }) => { | |
| 302 | - const unpublishedComponent = selectUnpublishedComponents((0, _elementor_store.__getState)()).find(({ uid }) => uid === id); | |
| 303 | - const overrides = overridesValue?.reduce((acc, override) => ({ | |
| 304 | - ...acc, | |
| 305 | - ...override | |
| 306 | - }), {}); | |
| 307 | - if (unpublishedComponent) return { | |
| 308 | - elements: structuredClone(unpublishedComponent.elements), | |
| 309 | - overrides | |
| 310 | - }; | |
| 311 | - if (typeof id !== "number") throw new Error(`Component ID "${id}" not valid.`); | |
| 312 | - return { | |
| 313 | - elements: (await getComponentDocumentData(id))?.elements ?? [], | |
| 314 | - overrides | |
| 315 | - }; | |
| 316 | - }); | |
| 317 | - | |
| 318 | -//#endregion | |
| 319 | -//#region packages/packages/core/editor-components/src/component-overridable-transformer.ts | |
| 320 | - var componentOverridableTransformer = (0, _elementor_editor_canvas.createTransformer)((value, options) => { | |
| 321 | - const { overrides } = options.renderContext ?? {}; | |
| 322 | - const overrideValue = overrides?.[value.override_key]; | |
| 323 | - if (overrideValue) { | |
| 324 | - if (isOriginValueOverride(value.origin_value)) return transformOverride(value, options, overrideValue); | |
| 325 | - return overrideValue; | |
| 326 | - } | |
| 327 | - return value.origin_value; | |
| 328 | - }); | |
| 329 | - function transformOverride(value, options, overrideValue) { | |
| 330 | - const transformer = _elementor_editor_canvas.settingsTransformersRegistry.get("override"); | |
| 331 | - if (!transformer) return null; | |
| 332 | - const transformedValue = transformer(value.origin_value.value, options); | |
| 333 | - if (!transformedValue) return null; | |
| 334 | - const [key] = Object.keys(transformedValue); | |
| 335 | - return { [key]: overrideValue }; | |
| 336 | - } | |
| 337 | - function isOriginValueOverride(originValue) { | |
| 338 | - return originValue.$$type === "override"; | |
| 339 | - } | |
| 340 | - | |
| 341 | -//#endregion | |
| 342 | -//#region packages/packages/core/editor-components/src/component-override-transformer.ts | |
| 343 | - var componentOverrideTransformer = (0, _elementor_editor_canvas.createTransformer)((override) => { | |
| 344 | - const { override_key: key, override_value: overrideValue } = override; | |
| 345 | - return { [key]: overrideValue }; | |
| 346 | - }); | |
| 347 | - | |
| 348 | -//#endregion | |
| 349 | -//#region packages/packages/core/editor-components/src/hooks/use-components.ts | |
| 350 | - var useComponents = () => { | |
| 351 | - return { | |
| 352 | - components: (0, _elementor_store.__useSelector)(selectComponents), | |
| 353 | - isLoading: (0, _elementor_store.__useSelector)(selectLoadIsPending) | |
| 354 | - }; | |
| 355 | - }; | |
| 356 | - | |
| 357 | -//#endregion | |
| 358 | -//#region packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts | |
| 359 | - var MIN_PRO_VERSION_FOR_COMPONENTS = "4.0"; | |
| 360 | - function isProComponentsSupported() { | |
| 361 | - return (0, _elementor_utils.hasProInstalled)() && (0, _elementor_utils.isProAtLeast)(MIN_PRO_VERSION_FOR_COMPONENTS); | |
| 362 | - } | |
| 363 | - function isProOutdatedForComponents() { | |
| 364 | - return (0, _elementor_utils.hasProInstalled)() && !(0, _elementor_utils.isProAtLeast)(MIN_PRO_VERSION_FOR_COMPONENTS); | |
| 365 | - } | |
| 366 | - | |
| 367 | -//#endregion | |
| 368 | -//#region packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx | |
| 369 | - var SearchContext = (0, react.createContext)(void 0); | |
| 370 | - var SearchProvider = ({ children, localStorageKey }) => { | |
| 371 | - const { debouncedValue, handleChange, inputValue } = (0, _elementor_utils.useSearchState)({ localStorageKey }); | |
| 372 | - const clearSearch = () => { | |
| 373 | - handleChange(""); | |
| 374 | - }; | |
| 375 | - return /* @__PURE__ */ react.createElement(SearchContext.Provider, { value: { | |
| 376 | - handleChange, | |
| 377 | - clearSearch, | |
| 378 | - searchValue: debouncedValue, | |
| 379 | - inputValue | |
| 380 | - } }, children); | |
| 381 | - }; | |
| 382 | - var useSearch = () => { | |
| 383 | - const context = (0, react.useContext)(SearchContext); | |
| 384 | - if (!context) throw new Error("useSearch must be used within a SearchProvider"); | |
| 385 | - return context; | |
| 386 | - }; | |
| 387 | - | |
| 388 | -//#endregion | |
| 389 | -//#region packages/packages/core/editor-components/src/components/components-tab/component-search.tsx | |
| 390 | - var ComponentSearch = () => { | |
| 391 | - const { inputValue, handleChange } = useSearch(); | |
| 392 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 393 | - direction: "row", | |
| 394 | - gap: .5, | |
| 395 | - sx: { | |
| 396 | - width: "100%", | |
| 397 | - px: 2, | |
| 398 | - py: 1.5 | |
| 399 | - } | |
| 400 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: { flexGrow: 1 } }, /* @__PURE__ */ react.createElement(_elementor_ui.TextField, { | |
| 401 | - role: "search", | |
| 402 | - fullWidth: true, | |
| 403 | - size: "tiny", | |
| 404 | - value: inputValue, | |
| 405 | - placeholder: (0, _wordpress_i18n.__)("Search", "elementor"), | |
| 406 | - onChange: (e) => handleChange(e.target.value), | |
| 407 | - InputProps: { startAdornment: /* @__PURE__ */ react.createElement(_elementor_ui.InputAdornment, { position: "start" }, /* @__PURE__ */ react.createElement(_elementor_icons.SearchIcon, { fontSize: "tiny" })) } | |
| 408 | - }))); | |
| 409 | - }; | |
| 410 | - | |
| 411 | -//#endregion | |
| 412 | -//#region packages/packages/core/editor-components/src/hooks/use-components-permissions.ts | |
| 413 | - var useComponentsPermissions = () => { | |
| 414 | - const { isAdmin } = (0, _elementor_editor_current_user.useCurrentUserCapabilities)(); | |
| 415 | - return { | |
| 416 | - canCreate: isAdmin, | |
| 417 | - canEdit: isAdmin, | |
| 418 | - canDelete: isAdmin, | |
| 419 | - canRename: isAdmin | |
| 420 | - }; | |
| 421 | - }; | |
| 422 | - | |
| 423 | -//#endregion | |
| 424 | -//#region packages/packages/core/editor-components/src/components/components-tab/components-item.tsx | |
| 425 | - var ComponentItem = (0, react.forwardRef)(({ component, disabled = true, draggable, onDragStart, onDragEnd, onClick, isEditing = false, error = null, nameSlot, endSlot, ...props }, ref) => { | |
| 426 | - return /* @__PURE__ */ react.createElement(_elementor_ui.ListItemButton, { | |
| 427 | - disabled, | |
| 428 | - draggable, | |
| 429 | - onDragStart, | |
| 430 | - onDragEnd, | |
| 431 | - shape: "rounded", | |
| 432 | - ref, | |
| 433 | - sx: { | |
| 434 | - border: "solid 1px", | |
| 435 | - borderColor: "divider", | |
| 436 | - py: .5, | |
| 437 | - px: 1, | |
| 438 | - display: "flex", | |
| 439 | - width: "100%", | |
| 440 | - alignItems: "center", | |
| 441 | - gap: 1 | |
| 442 | - }, | |
| 443 | - ...props | |
| 444 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { | |
| 445 | - display: "flex", | |
| 446 | - alignItems: "center", | |
| 447 | - gap: 1, | |
| 448 | - minWidth: 0, | |
| 449 | - flexGrow: 1, | |
| 450 | - onClick | |
| 451 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.ListItemIcon, { size: "tiny" }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, { fontSize: "tiny" })), /* @__PURE__ */ react.createElement(Indicator, { | |
| 452 | - isActive: isEditing, | |
| 453 | - isError: !!error | |
| 454 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { | |
| 455 | - display: "flex", | |
| 456 | - flex: 1, | |
| 457 | - minWidth: 0, | |
| 458 | - flexGrow: 1 | |
| 459 | - }, nameSlot ?? /* @__PURE__ */ react.createElement(ComponentName, { name: component.name })))), endSlot); | |
| 460 | - }); | |
| 461 | - var Indicator = (0, _elementor_ui.styled)(_elementor_ui.Box, { shouldForwardProp: (prop) => prop !== "isActive" && prop !== "isError" })(({ theme, isActive, isError }) => ({ | |
| 462 | - display: "flex", | |
| 463 | - width: "100%", | |
| 464 | - flexGrow: 1, | |
| 465 | - borderRadius: theme.spacing(.5), | |
| 466 | - border: getIndicatorBorder({ | |
| 467 | - isActive, | |
| 468 | - isError, | |
| 469 | - theme | |
| 470 | - }), | |
| 471 | - padding: `0 ${theme.spacing(1)}`, | |
| 472 | - marginLeft: isActive ? theme.spacing(1) : 0, | |
| 473 | - minWidth: 0 | |
| 474 | - })); | |
| 475 | - var getIndicatorBorder = ({ isActive, isError, theme }) => { | |
| 476 | - if (isError) return `2px solid ${theme.palette.error.main}`; | |
| 477 | - if (isActive) return `2px solid ${theme.palette.secondary.main}`; | |
| 478 | - return "none"; | |
| 479 | - }; | |
| 480 | - function ComponentName({ name, editable }) { | |
| 481 | - if (editable?.isEditing) return /* @__PURE__ */ react.createElement(_elementor_editor_ui.EditableField, { | |
| 482 | - ref: editable.ref, | |
| 483 | - as: _elementor_ui.Typography, | |
| 484 | - variant: "caption", | |
| 485 | - ...editable.getProps() | |
| 486 | - }); | |
| 487 | - return /* @__PURE__ */ react.createElement(_elementor_editor_ui.EllipsisWithTooltip, { | |
| 488 | - title: name, | |
| 489 | - as: _elementor_ui.Typography, | |
| 490 | - variant: "caption", | |
| 491 | - color: "text.primary" | |
| 492 | - }); | |
| 493 | - } | |
| 494 | - | |
| 495 | -//#endregion | |
| 496 | -//#region packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx | |
| 497 | - var ROWS = Array.from({ length: 3 }, (_, index) => index); | |
| 498 | - var STAGGER_DELAY_MS = 80; | |
| 499 | - var LoadingComponents = () => { | |
| 500 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 501 | - "aria-label": "Loading components", | |
| 502 | - gap: 1.5, | |
| 503 | - sx: { | |
| 504 | - pointerEvents: "none", | |
| 505 | - position: "relative", | |
| 506 | - maxHeight: "300px", | |
| 507 | - overflow: "hidden", | |
| 508 | - px: 1, | |
| 509 | - "&:after": { | |
| 510 | - position: "absolute", | |
| 511 | - bottom: 0, | |
| 512 | - content: "\"\"", | |
| 513 | - left: 0, | |
| 514 | - width: "100%", | |
| 515 | - height: "40%", | |
| 516 | - pointerEvents: "none", | |
| 517 | - zIndex: 1 | |
| 518 | - } | |
| 519 | - } | |
| 520 | - }, ROWS.map((row) => /* @__PURE__ */ react.createElement(_elementor_ui.Box, { | |
| 521 | - key: row, | |
| 522 | - display: "flex", | |
| 523 | - alignItems: "center", | |
| 524 | - gap: 1.5, | |
| 525 | - sx: { | |
| 526 | - py: .75, | |
| 527 | - px: 1.5, | |
| 528 | - opacity: 0, | |
| 529 | - animation: `e-loading-fade-in 0.4s ease-out ${row * STAGGER_DELAY_MS}ms forwards`, | |
| 530 | - "@keyframes e-loading-fade-in": { | |
| 531 | - from: { | |
| 532 | - opacity: 0, | |
| 533 | - transform: "translateY(4px)" | |
| 534 | - }, | |
| 535 | - to: { | |
| 536 | - opacity: 1, | |
| 537 | - transform: "translateY(0)" | |
| 538 | - } | |
| 539 | - } | |
| 540 | - } | |
| 541 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Skeleton, { | |
| 542 | - animation: "wave", | |
| 543 | - variant: "rounded", | |
| 544 | - width: 24, | |
| 545 | - height: 24 | |
| 546 | - }), /* @__PURE__ */ react.createElement(_elementor_ui.Skeleton, { | |
| 547 | - animation: "wave", | |
| 548 | - variant: "rounded", | |
| 549 | - width: "60%", | |
| 550 | - height: 14 | |
| 551 | - })))); | |
| 552 | - }; | |
| 553 | - | |
| 554 | -//#endregion | |
| 555 | -//#region packages/packages/core/editor-components/src/components/components-tab/components-list.tsx | |
| 556 | - var LEARN_MORE_URL = "http://go.elementor.com/components-guide-article"; | |
| 557 | - var UPGRADE_URL$1 = "https://go.elementor.com/go-pro-components/"; | |
| 558 | - var UPDATE_PLUGINS_URL$2 = "/wp-admin/plugins.php"; | |
| 559 | - var SUBTITLE_OVERRIDE_SX = { | |
| 560 | - fontSize: "0.875rem !important", | |
| 561 | - fontWeight: "500 !important" | |
| 562 | - }; | |
| 563 | - function ComponentsList() { | |
| 564 | - const { components, isLoading, searchValue } = useFilteredComponents(); | |
| 565 | - if (isLoading) return /* @__PURE__ */ react.createElement(LoadingComponents, null); | |
| 566 | - if (!components?.length) { | |
| 567 | - if (searchValue.length) return /* @__PURE__ */ react.createElement(EmptySearchResult, null); | |
| 568 | - if (isProOutdatedForComponents()) return /* @__PURE__ */ react.createElement(ProOutdatedEmptyState, null); | |
| 569 | - return isProComponentsSupported() ? /* @__PURE__ */ react.createElement(EmptyState$1, null) : /* @__PURE__ */ react.createElement(ProUpgradeEmptyState, null); | |
| 570 | - } | |
| 571 | - return /* @__PURE__ */ react.createElement(_elementor_ui.List, { sx: { | |
| 572 | - display: "flex", | |
| 573 | - flexDirection: "column", | |
| 574 | - gap: 1, | |
| 575 | - px: 2 | |
| 576 | - } }, components.map((component) => /* @__PURE__ */ react.createElement(ComponentItem, { | |
| 577 | - key: component.uid, | |
| 578 | - component | |
| 579 | - }))); | |
| 580 | - } | |
| 581 | - var ProUpgradeEmptyState = () => { | |
| 582 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 583 | - alignItems: "center", | |
| 584 | - justifyContent: "start", | |
| 585 | - height: "100%", | |
| 586 | - sx: { | |
| 587 | - px: 2, | |
| 588 | - py: 4 | |
| 589 | - }, | |
| 590 | - gap: 2, | |
| 591 | - overflow: "hidden" | |
| 592 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 593 | - alignItems: "center", | |
| 594 | - gap: 1 | |
| 595 | - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, { | |
| 596 | - fontSize: "large", | |
| 597 | - sx: { color: "text.secondary" } | |
| 598 | - }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 599 | - align: "center", | |
| 600 | - variant: "subtitle2", | |
| 601 | - color: "text.secondary", | |
| 602 | - sx: SUBTITLE_OVERRIDE_SX | |
| 603 | - }, (0, _wordpress_i18n.__)("Create Reusable Components", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 604 | - align: "center", | |
| 605 | - variant: "caption", | |
| 606 | - color: "secondary", | |
| 607 | - sx: { maxWidth: 200 } | |
| 608 | - }, (0, _wordpress_i18n.__)("Create design elements that sync across your entire site.", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_ui.Button, { | |
| 609 | - variant: "contained", | |
| 610 | - color: "promotion", | |
| 611 | - size: "small", | |
| 612 | - startIcon: /* @__PURE__ */ react.createElement(_elementor_icons.CrownFilledIcon, null), | |
| 613 | - href: UPGRADE_URL$1, | |
| 614 | - target: "_blank", | |
| 615 | - rel: "noopener noreferrer" | |
| 616 | - }, (0, _wordpress_i18n.__)("Upgrade now", "elementor"))); | |
| 617 | - }; | |
| 618 | - var ProOutdatedEmptyState = () => { | |
| 619 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 620 | - alignItems: "center", | |
| 621 | - justifyContent: "start", | |
| 622 | - height: "100%", | |
| 623 | - sx: { | |
| 624 | - px: 2, | |
| 625 | - py: 4, | |
| 626 | - maxWidth: 268, | |
| 627 | - m: "auto" | |
| 628 | - }, | |
| 629 | - gap: 2, | |
| 630 | - overflow: "hidden" | |
| 631 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 632 | - alignItems: "center", | |
| 633 | - gap: 1 | |
| 634 | - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, { | |
| 635 | - fontSize: "large", | |
| 636 | - sx: { color: "text.secondary" } | |
| 637 | - }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 638 | - align: "center", | |
| 639 | - variant: "subtitle2", | |
| 640 | - color: "text.secondary", | |
| 641 | - sx: SUBTITLE_OVERRIDE_SX | |
| 642 | - }, (0, _wordpress_i18n.__)("Create Reusable Components", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 643 | - align: "center", | |
| 644 | - variant: "caption", | |
| 645 | - color: "secondary" | |
| 646 | - }, (0, _wordpress_i18n.__)("Create design elements that sync across your entire site.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 647 | - align: "center", | |
| 648 | - variant: "caption", | |
| 649 | - color: "secondary", | |
| 650 | - sx: { mt: 1 } | |
| 651 | - }, (0, _wordpress_i18n.__)("To create components, update Elementor Pro to the latest version.", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_ui.Button, { | |
| 652 | - variant: "text", | |
| 653 | - color: "info", | |
| 654 | - size: "small", | |
| 655 | - href: UPDATE_PLUGINS_URL$2, | |
| 656 | - target: "_blank", | |
| 657 | - rel: "noopener noreferrer" | |
| 658 | - }, (0, _wordpress_i18n.__)("Update Elementor Pro", "elementor"))); | |
| 659 | - }; | |
| 660 | - var EmptyState$1 = /* @__PURE__ */ __name(() => { | |
| 661 | - const { canCreate } = useComponentsPermissions(); | |
| 662 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 663 | - alignItems: "center", | |
| 664 | - justifyContent: "start", | |
| 665 | - height: "100%", | |
| 666 | - sx: { | |
| 667 | - px: 2, | |
| 668 | - py: 4 | |
| 669 | - }, | |
| 670 | - gap: 2, | |
| 671 | - overflow: "hidden" | |
| 672 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 673 | - alignItems: "center", | |
| 674 | - gap: 1 | |
| 675 | - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, { | |
| 676 | - fontSize: "large", | |
| 677 | - sx: { color: "text.secondary" } | |
| 678 | - }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 679 | - align: "center", | |
| 680 | - variant: "subtitle2", | |
| 681 | - color: "text.secondary", | |
| 682 | - sx: SUBTITLE_OVERRIDE_SX | |
| 683 | - }, (0, _wordpress_i18n.__)("No components yet", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 684 | - align: "center", | |
| 685 | - variant: "caption", | |
| 686 | - color: "secondary", | |
| 687 | - sx: { maxWidth: 200 } | |
| 688 | - }, (0, _wordpress_i18n.__)("Components are reusable blocks that sync across your site.", "elementor"), /* @__PURE__ */ react.createElement("br", null), canCreate ? (0, _wordpress_i18n.__)("Create once, use everywhere.", "elementor") : (0, _wordpress_i18n.__)("With your current role, you cannot create components. Contact an administrator to create one.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Link, { | |
| 689 | - href: LEARN_MORE_URL, | |
| 690 | - target: "_blank", | |
| 691 | - rel: "noopener noreferrer", | |
| 692 | - variant: "caption", | |
| 693 | - color: "info.main" | |
| 694 | - }, (0, _wordpress_i18n.__)("Learn more about components", "elementor"))), canCreate && /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_ui.Divider, { sx: { width: "100%" } }), /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 695 | - alignItems: "center", | |
| 696 | - gap: 1, | |
| 697 | - width: "100%" | |
| 698 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 699 | - align: "center", | |
| 700 | - variant: "subtitle2", | |
| 701 | - color: "text.secondary", | |
| 702 | - sx: SUBTITLE_OVERRIDE_SX | |
| 703 | - }, (0, _wordpress_i18n.__)("Create your first one:", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 704 | - align: "center", | |
| 705 | - variant: "caption", | |
| 706 | - color: "secondary", | |
| 707 | - sx: { maxWidth: 228 } | |
| 708 | - }, (0, _wordpress_i18n.__)("Right-click any div-block or flexbox on your canvas or structure and select \"Create component\"", "elementor"))))); | |
| 709 | - }, "EmptyState"); | |
| 710 | - var EmptySearchResult = () => { | |
| 711 | - const { searchValue, clearSearch } = useSearch(); | |
| 712 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 713 | - color: "text.secondary", | |
| 714 | - pt: 5, | |
| 715 | - alignItems: "center", | |
| 716 | - gap: 1, | |
| 717 | - overflow: "hidden", | |
| 718 | - justifySelf: "center" | |
| 719 | - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, null), /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: { width: "100%" } }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 720 | - align: "center", | |
| 721 | - variant: "subtitle2", | |
| 722 | - color: "inherit", | |
| 723 | - sx: SUBTITLE_OVERRIDE_SX | |
| 724 | - }, (0, _wordpress_i18n.__)("Sorry, nothing matched", "elementor")), searchValue && /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 725 | - variant: "subtitle2", | |
| 726 | - color: "inherit", | |
| 727 | - sx: { | |
| 728 | - ...SUBTITLE_OVERRIDE_SX, | |
| 729 | - display: "flex", | |
| 730 | - width: "100%", | |
| 731 | - justifyContent: "center" | |
| 732 | - } | |
| 733 | - }, /* @__PURE__ */ react.createElement("span", null, "“"), /* @__PURE__ */ react.createElement("span", { style: { | |
| 734 | - maxWidth: "80%", | |
| 735 | - overflow: "hidden", | |
| 736 | - textOverflow: "ellipsis" | |
| 737 | - } }, searchValue), /* @__PURE__ */ react.createElement("span", null, "”."))), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 738 | - align: "center", | |
| 739 | - variant: "caption", | |
| 740 | - color: "inherit" | |
| 741 | - }, (0, _wordpress_i18n.__)("Try something else.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 742 | - align: "center", | |
| 743 | - variant: "caption", | |
| 744 | - color: "inherit" | |
| 745 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Link, { | |
| 746 | - color: "secondary", | |
| 747 | - variant: "caption", | |
| 748 | - component: "button", | |
| 749 | - onClick: clearSearch | |
| 750 | - }, (0, _wordpress_i18n.__)("Clear & try again", "elementor")))); | |
| 751 | - }; | |
| 752 | - var useFilteredComponents = () => { | |
| 753 | - const { components, isLoading } = useComponents(); | |
| 754 | - const { searchValue } = useSearch(); | |
| 755 | - return { | |
| 756 | - components: components.filter((component) => component.name.toLowerCase().includes(searchValue.toLowerCase())), | |
| 757 | - isLoading, | |
| 758 | - searchValue | |
| 759 | - }; | |
| 760 | - }; | |
| 761 | - | |
| 762 | -//#endregion | |
| 763 | -//#region packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx | |
| 764 | - function ComponentsUpgradeAlert({ title, description, upgradeUrl }) { | |
| 765 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: { | |
| 766 | - mt: "auto", | |
| 767 | - position: "sticky", | |
| 768 | - bottom: 0 | |
| 769 | - } }, /* @__PURE__ */ react.createElement(_elementor_ui.Alert, { | |
| 770 | - variant: "standard", | |
| 771 | - color: "promotion", | |
| 772 | - icon: /* @__PURE__ */ react.createElement(_elementor_icons.CrownFilledIcon, { fontSize: "tiny" }), | |
| 773 | - role: "status", | |
| 774 | - size: "small", | |
| 775 | - action: /* @__PURE__ */ react.createElement(_elementor_ui.AlertAction, { | |
| 776 | - variant: "contained", | |
| 777 | - color: "promotion", | |
| 778 | - href: upgradeUrl, | |
| 779 | - target: "_blank", | |
| 780 | - rel: "noopener noreferrer" | |
| 781 | - }, (0, _wordpress_i18n.__)("Upgrade now", "elementor")), | |
| 782 | - sx: { | |
| 783 | - m: 2, | |
| 784 | - mt: 1 | |
| 785 | - } | |
| 786 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.AlertTitle, null, title), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "caption" }, description))); | |
| 787 | - } | |
| 788 | - | |
| 789 | -//#endregion | |
| 790 | -//#region packages/packages/core/editor-components/src/components/components-tab/components-pro-notification.tsx | |
| 791 | - var UPGRADE_URL = "https://go.elementor.com/go-pro-components-exist-footer/"; | |
| 792 | - function ComponentsProNotification() { | |
| 793 | - return /* @__PURE__ */ react.createElement(ComponentsUpgradeAlert, { | |
| 794 | - title: (0, _wordpress_i18n.__)("Create new components", "elementor"), | |
| 795 | - description: (0, _wordpress_i18n.__)("Creating new components requires an active Pro subscription.", "elementor"), | |
| 796 | - upgradeUrl: UPGRADE_URL | |
| 797 | - }); | |
| 798 | - } | |
| 799 | - | |
| 800 | -//#endregion | |
| 801 | -//#region packages/packages/core/editor-components/src/components/components-update-alert.tsx | |
| 802 | - var UPDATE_PLUGINS_URL$1 = "/wp-admin/plugins.php"; | |
| 803 | - function ComponentsUpdateAlert({ title, description }) { | |
| 804 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: { | |
| 805 | - mt: "auto", | |
| 806 | - position: "sticky", | |
| 807 | - bottom: 0 | |
| 808 | - } }, /* @__PURE__ */ react.createElement(_elementor_ui.Alert, { | |
| 809 | - variant: "standard", | |
| 810 | - color: "info", | |
| 811 | - icon: /* @__PURE__ */ react.createElement(_elementor_icons.InfoCircleFilledIcon, { fontSize: "tiny" }), | |
| 812 | - role: "status", | |
| 813 | - size: "small", | |
| 814 | - action: /* @__PURE__ */ react.createElement(_elementor_ui.AlertAction, { | |
| 815 | - variant: "contained", | |
| 816 | - color: "info", | |
| 817 | - href: UPDATE_PLUGINS_URL$1, | |
| 818 | - target: "_blank", | |
| 819 | - rel: "noopener noreferrer" | |
| 820 | - }, (0, _wordpress_i18n.__)("Upgrade Now", "elementor")), | |
| 821 | - sx: { | |
| 822 | - m: 2, | |
| 823 | - mt: 1 | |
| 824 | - } | |
| 825 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.AlertTitle, null, title), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "caption" }, description))); | |
| 826 | - } | |
| 827 | - | |
| 828 | -//#endregion | |
| 829 | -//#region packages/packages/core/editor-components/src/components/components-tab/components-update-notification.tsx | |
| 830 | - function ComponentsUpdateNotification() { | |
| 831 | - return /* @__PURE__ */ react.createElement(ComponentsUpdateAlert, { | |
| 832 | - title: (0, _wordpress_i18n.__)("Create new Components", "elementor"), | |
| 833 | - description: (0, _wordpress_i18n.__)("To create new components, update Elementor Pro to the latest version.", "elementor") | |
| 834 | - }); | |
| 835 | - } | |
| 836 | - | |
| 837 | -//#endregion | |
| 838 | -//#region packages/packages/core/editor-components/src/components/components-tab/components.tsx | |
| 839 | - var FULL_HEIGHT_STYLE_ID = "components-full-height-panel"; | |
| 840 | - var FULL_HEIGHT_CSS = ` | |
| 841 | -#elementor-panel-page-elements { | |
| 842 | - display: flex; | |
| 843 | - flex-direction: column; | |
| 844 | - height: 100%; | |
| 845 | -} | |
| 846 | - | |
| 847 | -#elementor-panel-elements { | |
| 848 | - display: flex; | |
| 849 | - flex-direction: column; | |
| 850 | - flex: 1; | |
| 851 | - min-height: 0; | |
| 852 | -} | |
| 853 | - | |
| 854 | -#elementor-panel-elements-wrapper { | |
| 855 | - display: flex; | |
| 856 | - flex-direction: column; | |
| 857 | - flex: 1; | |
| 858 | - min-height: 0; | |
| 859 | -} | |
| 860 | -`; | |
| 861 | - var useFullHeightPanel = () => { | |
| 862 | - (0, react.useLayoutEffect)(() => { | |
| 863 | - let style = document.getElementById(FULL_HEIGHT_STYLE_ID); | |
| 864 | - if (!style) { | |
| 865 | - style = document.createElement("style"); | |
| 866 | - style.id = FULL_HEIGHT_STYLE_ID; | |
| 867 | - style.textContent = FULL_HEIGHT_CSS; | |
| 868 | - document.head.appendChild(style); | |
| 869 | - } | |
| 870 | - return () => { | |
| 871 | - document.getElementById(FULL_HEIGHT_STYLE_ID)?.remove(); | |
| 872 | - }; | |
| 873 | - }, []); | |
| 874 | - }; | |
| 875 | - var ComponentsContent = () => { | |
| 876 | - const { components, isLoading } = useComponents(); | |
| 877 | - const hasComponents = !isLoading && components.length > 0; | |
| 878 | - const showProNotification = !isProComponentsSupported() && hasComponents; | |
| 879 | - const isOutdated = isProOutdatedForComponents(); | |
| 880 | - useFullHeightPanel(); | |
| 881 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 882 | - justifyContent: "space-between", | |
| 883 | - sx: { | |
| 884 | - flex: 1, | |
| 885 | - minHeight: 0 | |
| 886 | - } | |
| 887 | - }, hasComponents && /* @__PURE__ */ react.createElement(ComponentSearch, null), /* @__PURE__ */ react.createElement(ComponentsList, null), showProNotification && (isOutdated ? /* @__PURE__ */ react.createElement(ComponentsUpdateNotification, null) : /* @__PURE__ */ react.createElement(ComponentsProNotification, null))); | |
| 888 | - }; | |
| 889 | - var Components = () => { | |
| 890 | - return /* @__PURE__ */ react.createElement(_elementor_editor_ui.ThemeProvider, null, /* @__PURE__ */ react.createElement(SearchProvider, { localStorageKey: "elementor-components-search" }, /* @__PURE__ */ react.createElement(ComponentsContent, null))); | |
| 891 | - }; | |
| 892 | - | |
| 893 | -//#endregion | |
| 894 | -//#region packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx | |
| 895 | - function DetachInstanceConfirmationDialog({ open, onClose, onConfirm }) { | |
| 896 | - return /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog, { | |
| 897 | - open, | |
| 898 | - onClose | |
| 899 | - }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Title, { | |
| 900 | - icon: _elementor_icons.AlertTriangleFilledIcon, | |
| 901 | - iconColor: "secondary" | |
| 902 | - }, (0, _wordpress_i18n.__)("Detach from Component?", "elementor")), /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Content, null, /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.ContentText, null, (0, _wordpress_i18n.__)("Detaching this instance will break its link to the Component. Changes to the Component will no longer apply. Continue?", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Actions, { | |
| 903 | - onClose, | |
| 904 | - onConfirm, | |
| 905 | - confirmLabel: (0, _wordpress_i18n.__)("Detach", "elementor"), | |
| 906 | - color: "primary" | |
| 907 | - })); | |
| 908 | - } | |
| 909 | - function openDetachConfirmDialog(onConfirm) { | |
| 910 | - const handleConfirm = () => { | |
| 911 | - (0, _elementor_editor_ui.closeDialog)(); | |
| 912 | - onConfirm(); | |
| 913 | - }; | |
| 914 | - (0, _elementor_editor_ui.openDialog)({ component: /* @__PURE__ */ react.createElement(DetachInstanceConfirmationDialog, { | |
| 915 | - open: true, | |
| 916 | - onClose: _elementor_editor_ui.closeDialog, | |
| 917 | - onConfirm: handleConfirm | |
| 918 | - }) }); | |
| 919 | - } | |
| 920 | - | |
| 921 | -//#endregion | |
| 922 | -//#region packages/packages/core/editor-components/src/components/in-edit-mode.tsx | |
| 923 | - var openEditModeDialog = (lockedBy) => { | |
| 924 | - (0, _elementor_editor_ui.openDialog)({ component: /* @__PURE__ */ react.createElement(EditModeDialog, { lockedBy }) }); | |
| 925 | - }; | |
| 926 | - var EditModeDialog = ({ lockedBy }) => { | |
| 927 | - const content = (0, _wordpress_i18n.__)("%s is currently editing this document", "elementor").replace("%s", lockedBy); | |
| 928 | - return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_ui.DialogHeader, { logo: false }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { | |
| 929 | - display: "flex", | |
| 930 | - alignItems: "center", | |
| 931 | - gap: 1 | |
| 932 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Icon, { color: "secondary" }, /* @__PURE__ */ react.createElement(_elementor_icons.InfoCircleFilledIcon, { fontSize: "medium" })), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "subtitle1" }, content))), /* @__PURE__ */ react.createElement(_elementor_ui.DialogContent, null, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 933 | - spacing: 2, | |
| 934 | - direction: "column" | |
| 935 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "body2" }, (0, _wordpress_i18n.__)("You can wait for them to finish or reach out to coordinate your changes together.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.DialogActions, null, /* @__PURE__ */ react.createElement(_elementor_ui.Button, { | |
| 936 | - color: "secondary", | |
| 937 | - variant: "contained", | |
| 938 | - onClick: _elementor_editor_ui.closeDialog | |
| 939 | - }, (0, _wordpress_i18n.__)("Close", "elementor")))))); | |
| 940 | - }; | |
| 941 | - | |
| 942 | -//#endregion | |
| 943 | -//#region packages/packages/core/editor-components/src/provider/component-instance-context.tsx | |
| 944 | - var ComponentInstanceContext = (0, react.createContext)(null); | |
| 945 | - function ComponentInstanceProvider({ children, ...props }) { | |
| 946 | - return /* @__PURE__ */ react.createElement(ComponentInstanceContext.Provider, { value: props }, children); | |
| 947 | - } | |
| 948 | - function useComponentInstanceContext() { | |
| 949 | - const context = (0, react.useContext)(ComponentInstanceContext); | |
| 950 | - if (!context) throw new Error("useComponentInstanceContext must be used within a ComponentInstanceProvider"); | |
| 951 | - return context; | |
| 952 | - } | |
| 953 | - var useComponentId = () => useComponentInstanceContext().componentId; | |
| 954 | - var useComponentInstanceOverrides = () => useComponentInstanceContext().overrides; | |
| 955 | - var useComponentOverridableProps = () => useComponentInstanceContext().overridableProps; | |
| 956 | - | |
| 957 | -//#endregion | |
| 958 | -//#region packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts | |
| 959 | - var componentInstanceOverridePropTypeUtil = (0, _elementor_editor_props.createPropUtils)("override", _elementor_schema.z.object({ | |
| 960 | - override_key: _elementor_schema.z.string(), | |
| 961 | - override_value: _elementor_schema.z.unknown(), | |
| 962 | - schema_source: _elementor_schema.z.object({ | |
| 963 | - type: _elementor_schema.z.literal("component"), | |
| 964 | - id: _elementor_schema.z.number() | |
| 965 | - }) | |
| 966 | - })); | |
| 967 | - | |
| 968 | -//#endregion | |
| 969 | -//#region packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts | |
| 970 | - var componentOverridablePropTypeUtil = (0, _elementor_editor_props.createPropUtils)("overridable", _elementor_schema.z.object({ | |
| 971 | - override_key: _elementor_schema.z.string(), | |
| 972 | - origin_value: _elementor_schema.z.object({ | |
| 973 | - $$type: _elementor_schema.z.string(), | |
| 974 | - value: _elementor_schema.z.unknown() | |
| 975 | - }).nullable() | |
| 976 | - })); | |
| 977 | - | |
| 978 | -//#endregion | |
| 979 | -//#region packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts | |
| 980 | - var componentInstanceOverridesPropTypeUtil = (0, _elementor_editor_props.createPropUtils)("overrides", _elementor_schema.z.array(_elementor_schema.z.union([componentInstanceOverridePropTypeUtil.schema, componentOverridablePropTypeUtil.schema])).optional().default([])); | |
| 981 | - | |
| 982 | -//#endregion | |
| 983 | -//#region packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts | |
| 984 | - var componentInstancePropTypeUtil = (0, _elementor_editor_props.createPropUtils)("component-instance", _elementor_schema.z.object({ | |
| 985 | - component_id: _elementor_editor_props.numberPropTypeUtil.schema, | |
| 986 | - overrides: _elementor_schema.z.optional(componentInstanceOverridesPropTypeUtil.schema) | |
| 987 | - })); | |
| 988 | - | |
| 989 | -//#endregion | |
| 990 | -//#region packages/packages/core/editor-components/src/utils/tracking.ts | |
| 991 | - var FEATURE_NAME = "Components"; | |
| 992 | - var trackComponentEvent = ({ action, source, executedBy, ...data }) => { | |
| 993 | - if (source === "system" || executedBy === "system") return; | |
| 994 | - const { dispatchEvent, config } = (0, _elementor_events.getMixpanel)(); | |
| 995 | - if (!config?.names?.components?.[action]) return; | |
| 996 | - const name = config.names.components[action]; | |
| 997 | - dispatchEvent?.(name, { | |
| 998 | - ...data, | |
| 999 | - executed_by: executedBy ?? source, | |
| 1000 | - "Feature name": FEATURE_NAME | |
| 1001 | - }); | |
| 1002 | - }; | |
| 1003 | - var onElementDrop = (_args, element) => { | |
| 1004 | - if (!(element?.model?.get("widgetType") === "e-component")) return; | |
| 1005 | - const editorSettings = element.model.get("editor_settings"); | |
| 1006 | - const componentName = editorSettings?.title; | |
| 1007 | - const componentUID = editorSettings?.component_uid; | |
| 1008 | - const instanceId = element.id; | |
| 1009 | - const createdThisSession = selectCreatedThisSession((0, _elementor_store.__getState)()); | |
| 1010 | - const isSameSessionReuse = componentUID && createdThisSession.includes(componentUID); | |
| 1011 | - const { locations, secondaryLocations } = window.elementorCommon.eventsManager.config; | |
| 1012 | - trackComponentEvent({ | |
| 1013 | - action: "instanceAdded", | |
| 1014 | - executedBy: "user", | |
| 1015 | - instance_id: instanceId, | |
| 1016 | - component_uid: componentUID, | |
| 1017 | - component_name: componentName, | |
| 1018 | - is_same_session_reuse: isSameSessionReuse, | |
| 1019 | - location: locations.widgetPanel, | |
| 1020 | - secondary_location: secondaryLocations.componentsTab | |
| 1021 | - }); | |
| 1022 | - }; | |
| 1023 | - | |
| 1024 | -//#endregion | |
| 1025 | -//#region packages/packages/core/editor-components/src/utils/detach-component-instance/regenerate-local-style-ids.ts | |
| 1026 | - function regenerateLocalStyleIds(element) { | |
| 1027 | - const originalStyles = element.styles; | |
| 1028 | - if (!originalStyles || Object.keys(originalStyles).length === 0) return { | |
| 1029 | - styles: void 0, | |
| 1030 | - settings: void 0 | |
| 1031 | - }; | |
| 1032 | - const newStyles = {}; | |
| 1033 | - const styleIdMapping = {}; | |
| 1034 | - for (const [originalStyleId, style] of Object.entries(originalStyles)) { | |
| 1035 | - const newStyleId = generateLocalStyleId(element.id); | |
| 1036 | - newStyles[newStyleId] = { | |
| 1037 | - ...style, | |
| 1038 | - id: newStyleId | |
| 1039 | - }; | |
| 1040 | - styleIdMapping[originalStyleId] = newStyleId; | |
| 1041 | - } | |
| 1042 | - const settings = element.settings; | |
| 1043 | - if (!settings || Object.keys(settings).length === 0) return { | |
| 1044 | - styles: newStyles, | |
| 1045 | - settings: void 0 | |
| 1046 | - }; | |
| 1047 | - const updatedSettings = { ...settings }; | |
| 1048 | - for (const [propKey, propValue] of Object.entries(updatedSettings)) if (isClassesProp(propValue) && propValue.value.length > 0) { | |
| 1049 | - const updatedClasses = propValue.value.map((classId) => styleIdMapping[classId] ?? classId); | |
| 1050 | - updatedSettings[propKey] = _elementor_editor_props.classesPropTypeUtil.create(updatedClasses); | |
| 1051 | - } | |
| 1052 | - return { | |
| 1053 | - styles: newStyles, | |
| 1054 | - settings: updatedSettings | |
| 1055 | - }; | |
| 1056 | - } | |
| 1057 | - function isClassesProp(prop) { | |
| 1058 | - return _elementor_editor_props.classesPropTypeUtil.isValid(prop); | |
| 1059 | - } | |
| 1060 | - function generateLocalStyleId(elementId) { | |
| 1061 | - return `e-${elementId}-${(0, _elementor_editor_elements.generateElementId)()}`; | |
| 1062 | - } | |
| 1063 | - | |
| 1064 | -//#endregion | |
| 1065 | -//#region packages/packages/core/editor-components/src/consts.ts | |
| 1066 | - var COMPONENT_WIDGET_TYPE$1 = "e-component"; | |
| 1067 | - | |
| 1068 | -//#endregion | |
| 1069 | -//#region packages/packages/core/editor-components/src/utils/is-component-instance.ts | |
| 1070 | - function isComponentInstance(elementModel) { | |
| 1071 | - return [elementModel.widgetType, elementModel.elType].includes(COMPONENT_WIDGET_TYPE$1); | |
| 1072 | - } | |
| 1073 | - | |
| 1074 | -//#endregion | |
| 1075 | -//#region packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-overridable-settings.ts | |
| 1076 | - function resolveOverridableSettings(element, overrideMap) { | |
| 1077 | - if (isComponentInstance({ | |
| 1078 | - widgetType: element.widgetType, | |
| 1079 | - elType: element.elType | |
| 1080 | - })) return resolveOverridableSettingsForComponentInstance(element, overrideMap); | |
| 1081 | - return resolveOverridableSettingsForElement(element, overrideMap); | |
| 1082 | - } | |
| 1083 | - function resolveOverridableSettingsForElement(element, overrideMap) { | |
| 1084 | - const updatedSettings = element.settings ? { ...element.settings } : {}; | |
| 1085 | - for (const [settingKey, settingValue] of Object.entries(element.settings ?? {})) updatedSettings[settingKey] = resolvePropValue(settingValue, overrideMap); | |
| 1086 | - return updatedSettings; | |
| 1087 | - } | |
| 1088 | - function resolveOverridableSettingsForComponentInstance(element, overrideMap) { | |
| 1089 | - const componentInstance = element.settings?.component_instance; | |
| 1090 | - if (!componentInstancePropTypeUtil.isValid(componentInstance)) return element.settings ?? {}; | |
| 1091 | - const instanceOverrides = componentInstance.value.overrides?.value; | |
| 1092 | - if (!instanceOverrides?.length) return element.settings ?? {}; | |
| 1093 | - const updatedOverrides = instanceOverrides.map((item) => resolvePropValue(item, overrideMap, { isOverridableOverride: true })); | |
| 1094 | - return { | |
| 1095 | - ...element.settings, | |
| 1096 | - component_instance: { | |
| 1097 | - ...componentInstance, | |
| 1098 | - value: { | |
| 1099 | - ...componentInstance.value, | |
| 1100 | - overrides: { | |
| 1101 | - ...componentInstance.value.overrides, | |
| 1102 | - value: updatedOverrides | |
| 1103 | - } | |
| 1104 | - } | |
| 1105 | - } | |
| 1106 | - }; | |
| 1107 | - } | |
| 1108 | - function resolvePropValue(propValue, overrideMap, options) { | |
| 1109 | - const { isOverridableOverride = false } = options ?? {}; | |
| 1110 | - if (!componentOverridablePropTypeUtil.isValid(propValue)) return propValue; | |
| 1111 | - const overridableKey = propValue.value.override_key; | |
| 1112 | - const matchingOverride = overrideMap.get(overridableKey); | |
| 1113 | - const originValue = componentOverridablePropTypeUtil.extract(propValue)?.origin_value; | |
| 1114 | - if (!matchingOverride) return originValue; | |
| 1115 | - if (isOverridableOverride) return resolveOverridableOverride(matchingOverride, originValue); | |
| 1116 | - return componentInstanceOverridePropTypeUtil.extract(matchingOverride)?.override_value ?? originValue; | |
| 1117 | - } | |
| 1118 | - function resolveOverridableOverride(matchingOverride, originValue) { | |
| 1119 | - if (!originValue || !componentInstanceOverridePropTypeUtil.isValid(originValue)) return null; | |
| 1120 | - return componentInstanceOverridePropTypeUtil.create({ | |
| 1121 | - override_value: matchingOverride.value.override_value, | |
| 1122 | - override_key: originValue.value.override_key, | |
| 1123 | - schema_source: originValue.value.schema_source | |
| 1124 | - }); | |
| 1125 | - } | |
| 1126 | - | |
| 1127 | -//#endregion | |
| 1128 | -//#region packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-detached-instance.ts | |
| 1129 | - function resolveDetachedInstance(element, overrides) { | |
| 1130 | - const overrideMap = createOverrideMap(overrides); | |
| 1131 | - return resolveElementRecursive(structuredClone(element), overrideMap); | |
| 1132 | - } | |
| 1133 | - function resolveElementRecursive(element, overrideMap) { | |
| 1134 | - element.id = (0, _elementor_editor_elements.generateElementId)(); | |
| 1135 | - if (element.styles) { | |
| 1136 | - const { styles, settings } = regenerateLocalStyleIds(element); | |
| 1137 | - element.styles = styles; | |
| 1138 | - if (settings) element.settings = { | |
| 1139 | - ...element.settings, | |
| 1140 | - ...settings | |
| 1141 | - }; | |
| 1142 | - } | |
| 1143 | - if (element.settings) element.settings = resolveOverridableSettings(element, overrideMap); | |
| 1144 | - if (element.elements?.length) element.elements = element.elements.map((child) => resolveElementRecursive(child, overrideMap)); | |
| 1145 | - return element; | |
| 1146 | - } | |
| 1147 | - function createOverrideMap(overrides) { | |
| 1148 | - const map = /* @__PURE__ */ new Map(); | |
| 1149 | - overrides.forEach((item) => { | |
| 1150 | - let override = null; | |
| 1151 | - if (componentInstanceOverridePropTypeUtil.isValid(item)) override = item; | |
| 1152 | - else if (componentOverridablePropTypeUtil.isValid(item)) override = getOverridableOverride(item); | |
| 1153 | - if (override) { | |
| 1154 | - const overrideKey = override.value.override_key; | |
| 1155 | - map.set(overrideKey, override); | |
| 1156 | - } | |
| 1157 | - }); | |
| 1158 | - return map; | |
| 1159 | - } | |
| 1160 | - function getOverridableOverride(propValue) { | |
| 1161 | - if (!componentOverridablePropTypeUtil.isValid(propValue)) return null; | |
| 1162 | - const originValue = componentOverridablePropTypeUtil.extract(propValue)?.origin_value; | |
| 1163 | - if (!componentInstanceOverridePropTypeUtil.isValid(originValue)) return null; | |
| 1164 | - return originValue; | |
| 1165 | - } | |
| 1166 | - | |
| 1167 | -//#endregion | |
| 1168 | -//#region packages/packages/core/editor-components/src/utils/detach-component-instance/detach-component-instance.ts | |
| 1169 | - var DETACH_EVENT = "elementor/components/detach-instance"; | |
| 1170 | - var DETACH_UNDO_EVENT = "elementor/components/undo-detach-instance"; | |
| 1171 | - var DETACH_REDO_EVENT = "elementor/components/redo-detach-instance"; | |
| 1172 | - async function detachComponentInstance({ instanceId, componentId, trackingInfo }) { | |
| 1173 | - const instanceContainer = (0, _elementor_editor_elements.getContainer)(instanceId); | |
| 1174 | - if (!instanceContainer) throw new Error(`Instance container with ID "${instanceId}" not found.`); | |
| 1175 | - const componentData = await getComponentDocumentData(componentId); | |
| 1176 | - if (!componentData) throw new Error(`Component with ID "${componentId}" not found.`); | |
| 1177 | - const rootElement = componentData.elements?.[0]; | |
| 1178 | - if (!rootElement) throw new Error(`Component with ID "${componentId}" has no root element.`); | |
| 1179 | - return (0, _elementor_editor_v1_adapters.undoable)({ | |
| 1180 | - do: () => { | |
| 1181 | - const overrides = extractInstanceOverrides(instanceContainer); | |
| 1182 | - const detachedInstanceElementData = resolveDetachedInstance(rootElement, overrides); | |
| 1183 | - const originalInstanceModel = instanceContainer.model.toJSON(); | |
| 1184 | - const actionId = (/* @__PURE__ */ new Date()).getTime(); | |
| 1185 | - window.dispatchEvent(new CustomEvent(DETACH_EVENT, { detail: { | |
| 1186 | - detachedInstanceId: instanceId, | |
| 1187 | - detachActionId: actionId | |
| 1188 | - } })); | |
| 1189 | - const detachedElement = (0, _elementor_editor_elements.replaceElement)({ | |
| 1190 | - currentElementId: instanceId, | |
| 1191 | - newElement: detachedInstanceElementData, | |
| 1192 | - withHistory: false | |
| 1193 | - }); | |
| 1194 | - (0, _elementor_editor_elements.selectElement)(detachedElement.id); | |
| 1195 | - const componentUid = selectComponent((0, _elementor_store.__getState)(), componentId)?.uid; | |
| 1196 | - trackComponentEvent({ | |
| 1197 | - action: "detached", | |
| 1198 | - executedBy: "user", | |
| 1199 | - component_uid: componentUid, | |
| 1200 | - instance_id: instanceId, | |
| 1201 | - location: trackingInfo.location, | |
| 1202 | - secondary_location: trackingInfo.secondaryLocation, | |
| 1203 | - trigger: trackingInfo.trigger | |
| 1204 | - }); | |
| 1205 | - return { | |
| 1206 | - detachedElement, | |
| 1207 | - detachedInstanceElementData, | |
| 1208 | - originalInstanceModel, | |
| 1209 | - actionId | |
| 1210 | - }; | |
| 1211 | - }, | |
| 1212 | - undo: (_, { detachedElement, originalInstanceModel, actionId }) => { | |
| 1213 | - const restoredInstance = (0, _elementor_editor_elements.replaceElement)({ | |
| 1214 | - currentElementId: detachedElement.id, | |
| 1215 | - newElement: originalInstanceModel, | |
| 1216 | - withHistory: false | |
| 1217 | - }); | |
| 1218 | - window.dispatchEvent(new CustomEvent(DETACH_UNDO_EVENT, { detail: { | |
| 1219 | - restoredInstanceId: restoredInstance.id, | |
| 1220 | - detachActionId: actionId | |
| 1221 | - } })); | |
| 1222 | - (0, _elementor_editor_canvas.doAfterRender)([restoredInstance.id], () => { | |
| 1223 | - (0, _elementor_editor_elements.selectElement)(restoredInstance.id); | |
| 1224 | - }); | |
| 1225 | - return restoredInstance; | |
| 1226 | - }, | |
| 1227 | - redo: (_, doReturn, restoredInstance) => { | |
| 1228 | - const { detachedInstanceElementData, actionId } = doReturn; | |
| 1229 | - const detachedElement = (0, _elementor_editor_elements.replaceElement)({ | |
| 1230 | - currentElementId: restoredInstance.id, | |
| 1231 | - newElement: detachedInstanceElementData, | |
| 1232 | - withHistory: false | |
| 1233 | - }); | |
| 1234 | - window.dispatchEvent(new CustomEvent(DETACH_REDO_EVENT, { detail: { | |
| 1235 | - detachedInstanceId: detachedElement.id, | |
| 1236 | - detachActionId: actionId | |
| 1237 | - } })); | |
| 1238 | - (0, _elementor_editor_elements.selectElement)(detachedElement.id); | |
| 1239 | - return { | |
| 1240 | - ...doReturn, | |
| 1241 | - detachedElement | |
| 1242 | - }; | |
| 1243 | - } | |
| 1244 | - }, { | |
| 1245 | - title: (0, _wordpress_i18n.__)("Detach from Component", "elementor"), | |
| 1246 | - subtitle: (0, _wordpress_i18n.__)("Instance detached", "elementor") | |
| 1247 | - })(); | |
| 1248 | - } | |
| 1249 | - function extractInstanceOverrides(instanceContainer) { | |
| 1250 | - const settings = instanceContainer.model.toJSON().settings; | |
| 1251 | - const componentInstance = componentInstancePropTypeUtil.extract(settings?.component_instance); | |
| 1252 | - return componentInstanceOverridesPropTypeUtil.extract(componentInstance?.overrides) ?? []; | |
| 1253 | - } | |
| 1254 | - | |
| 1255 | -//#endregion | |
| 1256 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx | |
| 1257 | - function InstancePanelHeader({ componentName, actions }) { | |
| 1258 | - return /* @__PURE__ */ react.createElement(_elementor_editor_panels.PanelHeader, { sx: { | |
| 1259 | - justifyContent: "start", | |
| 1260 | - px: 2 | |
| 1261 | - } }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 1262 | - direction: "row", | |
| 1263 | - alignItems: "center", | |
| 1264 | - flexGrow: 1, | |
| 1265 | - gap: 1, | |
| 1266 | - maxWidth: "100%" | |
| 1267 | - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, { | |
| 1268 | - fontSize: "small", | |
| 1269 | - sx: { color: "text.tertiary" } | |
| 1270 | - }), /* @__PURE__ */ react.createElement(_elementor_editor_ui.EllipsisWithTooltip, { | |
| 1271 | - title: componentName, | |
| 1272 | - as: _elementor_editor_panels.PanelHeaderTitle, | |
| 1273 | - sx: { flexGrow: 1 } | |
| 1274 | - }), actions)); | |
| 1275 | - } | |
| 1276 | - function EditComponentAction({ label, onClick, disabled = false, icon: Icon }) { | |
| 1277 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Tooltip, { title: label }, /* @__PURE__ */ react.createElement(_elementor_ui.IconButton, { | |
| 1278 | - size: "tiny", | |
| 1279 | - onClick, | |
| 1280 | - "aria-label": label, | |
| 1281 | - disabled | |
| 1282 | - }, /* @__PURE__ */ react.createElement(Icon, { fontSize: "tiny" }))); | |
| 1283 | - } | |
| 1284 | - | |
| 1285 | -//#endregion | |
| 1286 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx | |
| 1287 | - var DetachAction = ({ componentInstanceId, componentId }) => { | |
| 1288 | - const [isDetachDialogOpen, setIsDetachDialogOpen] = (0, react.useState)(false); | |
| 1289 | - const handleDetachConfirm = async () => { | |
| 1290 | - setIsDetachDialogOpen(false); | |
| 1291 | - try { | |
| 1292 | - await detachComponentInstance({ | |
| 1293 | - instanceId: componentInstanceId, | |
| 1294 | - componentId, | |
| 1295 | - trackingInfo: getDetachTrackingInfo() | |
| 1296 | - }); | |
| 1297 | - } catch { | |
| 1298 | - (0, _elementor_editor_notifications.notify)({ | |
| 1299 | - type: "error", | |
| 1300 | - message: (0, _wordpress_i18n.__)("Failed to detach component instance.", "elementor"), | |
| 1301 | - id: "detach-component-instance-failed" | |
| 1302 | - }); | |
| 1303 | - } | |
| 1304 | - }; | |
| 1305 | - const handleDetachCancel = () => { | |
| 1306 | - setIsDetachDialogOpen(false); | |
| 1307 | - }; | |
| 1308 | - const handleDetachClick = () => { | |
| 1309 | - setIsDetachDialogOpen(true); | |
| 1310 | - }; | |
| 1311 | - const detachLabel = (0, _wordpress_i18n.__)("Detach from Component", "elementor"); | |
| 1312 | - return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(EditComponentAction, { | |
| 1313 | - label: detachLabel, | |
| 1314 | - icon: _elementor_icons.DetachIcon, | |
| 1315 | - onClick: handleDetachClick | |
| 1316 | - }), /* @__PURE__ */ react.createElement(DetachInstanceConfirmationDialog, { | |
| 1317 | - open: isDetachDialogOpen, | |
| 1318 | - onClose: handleDetachCancel, | |
| 1319 | - onConfirm: handleDetachConfirm | |
| 1320 | - })); | |
| 1321 | - }; | |
| 1322 | - function getDetachTrackingInfo() { | |
| 1323 | - const config = window?.elementorCommon?.eventsManager?.config; | |
| 1324 | - if (!config) return { | |
| 1325 | - location: "", | |
| 1326 | - trigger: "" | |
| 1327 | - }; | |
| 1328 | - return { | |
| 1329 | - location: config.locations.components.instanceEditingPanel, | |
| 1330 | - trigger: config.triggers.click | |
| 1331 | - }; | |
| 1332 | - } | |
| 1333 | - | |
| 1334 | -//#endregion | |
| 1335 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx | |
| 1336 | - var EmptyState = ({ onEditComponent }) => { | |
| 1337 | - const { canEdit } = useComponentsPermissions(); | |
| 1338 | - const message = canEdit ? (0, _wordpress_i18n.__)("Edit the component to add properties, manage them or update the design across all instances.", "elementor") : (0, _wordpress_i18n.__)("With your current role, you cannot edit this component. Contact an administrator to add properties.", "elementor"); | |
| 1339 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 1340 | - alignItems: "center", | |
| 1341 | - justifyContent: "start", | |
| 1342 | - height: "100%", | |
| 1343 | - color: "text.secondary", | |
| 1344 | - sx: { | |
| 1345 | - p: 2.5, | |
| 1346 | - pt: 8, | |
| 1347 | - pb: 5.5, | |
| 1348 | - mt: 1 | |
| 1349 | - }, | |
| 1350 | - gap: 1.5 | |
| 1351 | - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentPropListIcon, { fontSize: "large" }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 1352 | - align: "center", | |
| 1353 | - variant: "subtitle2" | |
| 1354 | - }, (0, _wordpress_i18n.__)("No properties yet", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { | |
| 1355 | - align: "center", | |
| 1356 | - variant: "caption", | |
| 1357 | - maxWidth: "170px" | |
| 1358 | - }, message), canEdit && /* @__PURE__ */ react.createElement(_elementor_ui.Button, { | |
| 1359 | - variant: "outlined", | |
| 1360 | - color: "secondary", | |
| 1361 | - size: "small", | |
| 1362 | - sx: { mt: 1 }, | |
| 1363 | - disabled: !onEditComponent, | |
| 1364 | - onClick: onEditComponent | |
| 1365 | - }, /* @__PURE__ */ react.createElement(_elementor_icons.PencilIcon, { fontSize: "small" }), (0, _wordpress_i18n.__)("Edit component", "elementor"))); | |
| 1366 | - }; | |
| 1367 | - | |
| 1368 | -//#endregion | |
| 1369 | -//#region packages/packages/core/editor-components/src/hooks/use-controls-by-widget-type.ts | |
| 1370 | - function useControlsByWidgetType(type) { | |
| 1371 | - const elementType = (0, _elementor_editor_elements.getElementType)(type); | |
| 1372 | - if (!elementType) return {}; | |
| 1373 | - return getControlsByBind(iterateControls(elementType.controls)); | |
| 1374 | - } | |
| 1375 | - function iterateControls(controls) { | |
| 1376 | - return controls.map((control) => { | |
| 1377 | - if (control.type === "control" && "bind" in control.value) return control; | |
| 1378 | - if (control.type === "section") return iterateControls(control.value.items); | |
| 1379 | - return null; | |
| 1380 | - }).filter(Boolean).flat(); | |
| 1381 | - } | |
| 1382 | - function getControlsByBind(controls) { | |
| 1383 | - return controls.reduce((controlsByBind, control) => ({ | |
| 1384 | - ...controlsByBind, | |
| 1385 | - [control.value.bind]: control | |
| 1386 | - }), {}); | |
| 1387 | - } | |
| 1388 | - | |
| 1389 | -//#endregion | |
| 1390 | -//#region packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx | |
| 1391 | - var OverridablePropContext = (0, react.createContext)(null); | |
| 1392 | - function OverridablePropProvider({ children, ...props }) { | |
| 1393 | - return /* @__PURE__ */ react.createElement(OverridablePropContext.Provider, { value: props }, children); | |
| 1394 | - } | |
| 1395 | - var useOverridablePropValue = () => (0, react.useContext)(OverridablePropContext)?.value; | |
| 1396 | - var useComponentInstanceElement = () => (0, react.useContext)(OverridablePropContext)?.componentInstanceElement; | |
| 1397 | - | |
| 1398 | -//#endregion | |
| 1399 | -//#region packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts | |
| 1400 | - var resolveOverridePropValue = (originalPropValue) => { | |
| 1401 | - if (componentOverridablePropTypeUtil.isValid(originalPropValue)) return getOverridableValue(originalPropValue); | |
| 1402 | - if (componentInstanceOverridePropTypeUtil.isValid(originalPropValue)) return getOverrideValue(originalPropValue); | |
| 1403 | - return originalPropValue; | |
| 1404 | - }; | |
| 1405 | - function getOverridableValue(overridableProp) { | |
| 1406 | - const overridableValue = componentOverridablePropTypeUtil.extract(overridableProp); | |
| 1407 | - if (!overridableValue) return null; | |
| 1408 | - if (componentInstanceOverridePropTypeUtil.isValid(overridableValue.origin_value)) return getOverrideValue(overridableValue.origin_value); | |
| 1409 | - return overridableValue.origin_value; | |
| 1410 | - } | |
| 1411 | - function getOverrideValue(overrideProp) { | |
| 1412 | - const overrideValue = componentInstanceOverridePropTypeUtil.extract(overrideProp); | |
| 1413 | - if (!overrideValue) return null; | |
| 1414 | - return overrideValue.override_value; | |
| 1415 | - } | |
| 1416 | - | |
| 1417 | -//#endregion | |
| 1418 | -//#region packages/packages/core/editor-components/src/store/dispatchers.ts | |
| 1419 | - function safeDispatch() { | |
| 1420 | - return (0, _elementor_store.__getStore)()?.dispatch; | |
| 1421 | - } | |
| 1422 | - var componentsActions = { | |
| 1423 | - add(components) { | |
| 1424 | - (0, _elementor_store.__dispatch)(slice.actions.add(components)); | |
| 1425 | - }, | |
| 1426 | - load(components) { | |
| 1427 | - (0, _elementor_store.__dispatch)(slice.actions.load(components)); | |
| 1428 | - }, | |
| 1429 | - addUnpublished(component) { | |
| 1430 | - (0, _elementor_store.__dispatch)(slice.actions.addUnpublished(component)); | |
| 1431 | - }, | |
| 1432 | - removeUnpublished(uids) { | |
| 1433 | - (0, _elementor_store.__dispatch)(slice.actions.removeUnpublished(uids)); | |
| 1434 | - }, | |
| 1435 | - resetUnpublished() { | |
| 1436 | - (0, _elementor_store.__dispatch)(slice.actions.resetUnpublished()); | |
| 1437 | - }, | |
| 1438 | - addCreatedThisSession(uid) { | |
| 1439 | - (0, _elementor_store.__dispatch)(slice.actions.addCreatedThisSession(uid)); | |
| 1440 | - }, | |
| 1441 | - removeCreatedThisSession(uid) { | |
| 1442 | - (0, _elementor_store.__dispatch)(slice.actions.removeCreatedThisSession(uid)); | |
| 1443 | - }, | |
| 1444 | - archive(componentId) { | |
| 1445 | - (0, _elementor_store.__dispatch)(slice.actions.archive(componentId)); | |
| 1446 | - }, | |
| 1447 | - setCurrentComponentId(id) { | |
| 1448 | - safeDispatch()?.(slice.actions.setCurrentComponentId(id)); | |
| 1449 | - }, | |
| 1450 | - setPath(path) { | |
| 1451 | - safeDispatch()?.(slice.actions.setPath(path)); | |
| 1452 | - }, | |
| 1453 | - setOverridableProps(componentId, overridableProps) { | |
| 1454 | - (0, _elementor_store.__dispatch)(slice.actions.setOverridableProps({ | |
| 1455 | - componentId, | |
| 1456 | - overridableProps | |
| 1457 | - })); | |
| 1458 | - }, | |
| 1459 | - rename(componentUid, name) { | |
| 1460 | - (0, _elementor_store.__dispatch)(slice.actions.rename({ | |
| 1461 | - componentUid, | |
| 1462 | - name | |
| 1463 | - })); | |
| 1464 | - }, | |
| 1465 | - cleanUpdatedComponentNames() { | |
| 1466 | - (0, _elementor_store.__dispatch)(slice.actions.cleanUpdatedComponentNames()); | |
| 1467 | - }, | |
| 1468 | - updateComponentSanitizedAttribute(componentId, attribute) { | |
| 1469 | - (0, _elementor_store.__dispatch)(slice.actions.updateComponentSanitizedAttribute({ | |
| 1470 | - componentId, | |
| 1471 | - attribute | |
| 1472 | - })); | |
| 1473 | - }, | |
| 1474 | - resetSanitizedComponents() { | |
| 1475 | - (0, _elementor_store.__dispatch)(slice.actions.resetSanitizedComponents()); | |
| 1476 | - } | |
| 1477 | - }; | |
| 1478 | - | |
| 1479 | -//#endregion | |
| 1480 | -//#region packages/packages/core/editor-components/src/store/selectors.ts | |
| 1481 | - function safeGetState() { | |
| 1482 | - return (0, _elementor_store.__getStore)()?.getState(); | |
| 1483 | - } | |
| 1484 | - var componentsSelectors = { | |
| 1485 | - getOverridableProps(componentId) { | |
| 1486 | - return selectOverridableProps((0, _elementor_store.__getState)(), componentId); | |
| 1487 | - }, | |
| 1488 | - getCurrentComponent() { | |
| 1489 | - return selectCurrentComponent((0, _elementor_store.__getState)()); | |
| 1490 | - }, | |
| 1491 | - getCurrentComponentId() { | |
| 1492 | - const state = safeGetState(); | |
| 1493 | - if (!state) return null; | |
| 1494 | - return selectCurrentComponentId(state); | |
| 1495 | - }, | |
| 1496 | - getUnpublishedComponents() { | |
| 1497 | - return selectUnpublishedComponents((0, _elementor_store.__getState)()); | |
| 1498 | - }, | |
| 1499 | - getUpdatedComponentNames() { | |
| 1500 | - return selectUpdatedComponentNames((0, _elementor_store.__getState)()); | |
| 1501 | - }, | |
| 1502 | - getArchivedThisSession() { | |
| 1503 | - return selectArchivedThisSession((0, _elementor_store.__getState)()); | |
| 1504 | - }, | |
| 1505 | - getCreatedThisSession() { | |
| 1506 | - return selectCreatedThisSession((0, _elementor_store.__getState)()); | |
| 1507 | - }, | |
| 1508 | - getComponents() { | |
| 1509 | - return selectComponents((0, _elementor_store.__getState)()); | |
| 1510 | - }, | |
| 1511 | - getComponentByUid(componentUid) { | |
| 1512 | - return selectComponentByUid((0, _elementor_store.__getState)(), componentUid); | |
| 1513 | - } | |
| 1514 | - }; | |
| 1515 | - | |
| 1516 | -//#endregion | |
| 1517 | -//#region packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts | |
| 1518 | - function updateOverridableProp(componentId, propValue, originPropFields) { | |
| 1519 | - const overridableProps = componentsSelectors.getOverridableProps(componentId); | |
| 1520 | - if (!overridableProps) return; | |
| 1521 | - const existingOverridableProp = overridableProps.props[propValue.override_key]; | |
| 1522 | - if (!existingOverridableProp) return; | |
| 1523 | - const originValue = resolveOverridePropValue(propValue.origin_value); | |
| 1524 | - const newOverridableProp = originPropFields ? { | |
| 1525 | - originValue, | |
| 1526 | - originPropFields | |
| 1527 | - } : { originValue }; | |
| 1528 | - const newOverridableProps = { | |
| 1529 | - ...overridableProps, | |
| 1530 | - props: { | |
| 1531 | - ...overridableProps.props, | |
| 1532 | - [existingOverridableProp.overrideKey]: { | |
| 1533 | - ...existingOverridableProp, | |
| 1534 | - ...newOverridableProp | |
| 1535 | - } | |
| 1536 | - } | |
| 1537 | - }; | |
| 1538 | - componentsActions.setOverridableProps(componentId, newOverridableProps); | |
| 1539 | - } | |
| 1540 | - | |
| 1541 | -//#endregion | |
| 1542 | -//#region packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts | |
| 1543 | - var getPropTypeForComponentOverride = (overridableProp) => { | |
| 1544 | - if (overridableProp.originPropFields) return getPropType(overridableProp.originPropFields); | |
| 1545 | - const { widgetType, propKey } = overridableProp; | |
| 1546 | - return getPropType({ | |
| 1547 | - widgetType, | |
| 1548 | - propKey | |
| 1549 | - }); | |
| 1550 | - }; | |
| 1551 | - function getPropType({ widgetType, propKey }) { | |
| 1552 | - return ((0, _elementor_editor_elements.getWidgetsCache)()?.[widgetType]?.atomic_props_schema)?.[propKey]; | |
| 1553 | - } | |
| 1554 | - | |
| 1555 | -//#endregion | |
| 1556 | -//#region packages/packages/core/editor-components/src/utils/overridable-props-utils.ts | |
| 1557 | - function getMatchingOverride(overrides, overrideKey) { | |
| 1558 | - return overrides?.find((override) => { | |
| 1559 | - const overridableValue = componentOverridablePropTypeUtil.extract(override); | |
| 1560 | - if (overridableValue) return componentInstanceOverridePropTypeUtil.extract(overridableValue.origin_value)?.override_key === overrideKey; | |
| 1561 | - return override.value.override_key === overrideKey; | |
| 1562 | - }) ?? null; | |
| 1563 | - } | |
| 1564 | - | |
| 1565 | -//#endregion | |
| 1566 | -//#region packages/packages/core/editor-components/src/components/control-label.tsx | |
| 1567 | - var ControlLabel = ({ children, ...props }) => { | |
| 1568 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 1569 | - direction: "row", | |
| 1570 | - alignItems: "center", | |
| 1571 | - justifyItems: "start", | |
| 1572 | - gap: .25 | |
| 1573 | - }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlFormLabel, { ...props }, children), /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlAdornments, null)); | |
| 1574 | - }; | |
| 1575 | - | |
| 1576 | -//#endregion | |
| 1577 | -//#region packages/packages/core/editor-components/src/components/errors.ts | |
| 1578 | - var OverrideControlInnerElementNotFoundError = (0, _elementor_utils.createError)({ | |
| 1579 | - code: "override_control_inner_element_not_found", | |
| 1580 | - message: `Component inner element not found for override control. The element may have been deleted without updating the overridable props, or the component has not finished rendering yet.` | |
| 1581 | - }); | |
| 1582 | - var OverrideControlPropTypeNotFoundError = (0, _elementor_utils.createError)({ | |
| 1583 | - code: "override_control_prop_type_not_found", | |
| 1584 | - message: "Prop type not found for override control." | |
| 1585 | - }); | |
| 1586 | - | |
| 1587 | -//#endregion | |
| 1588 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/correct-exposed-empty-override.ts | |
| 1589 | - function correctExposedEmptyOverride(newPropValue, matchingOverride) { | |
| 1590 | - const newOverridableValue = componentOverridablePropTypeUtil.extract(newPropValue); | |
| 1591 | - if (!(newOverridableValue && matchingOverride === null)) return newPropValue; | |
| 1592 | - return componentOverridablePropTypeUtil.create({ | |
| 1593 | - override_key: newOverridableValue.override_key, | |
| 1594 | - origin_value: null | |
| 1595 | - }); | |
| 1596 | - } | |
| 1597 | - | |
| 1598 | -//#endregion | |
| 1599 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/resolve-element-settings.ts | |
| 1600 | - function applyOverridesToSettings(elementSettings, overrides) { | |
| 1601 | - const result = {}; | |
| 1602 | - for (const [propKey, propValue] of Object.entries(elementSettings)) { | |
| 1603 | - const overridable = componentOverridablePropTypeUtil.extract(propValue); | |
| 1604 | - if (!overridable) { | |
| 1605 | - result[propKey] = propValue; | |
| 1606 | - continue; | |
| 1607 | - } | |
| 1608 | - const override = overrides[overridable.override_key]; | |
| 1609 | - if (!override) { | |
| 1610 | - result[propKey] = propValue; | |
| 1611 | - continue; | |
| 1612 | - } | |
| 1613 | - if (override.outermostKey && override.outermostKey !== overridable.override_key) { | |
| 1614 | - const originValue = overridable.origin_value; | |
| 1615 | - result[propKey] = componentOverridablePropTypeUtil.create({ | |
| 1616 | - override_key: override.outermostKey, | |
| 1617 | - origin_value: override.value ?? originValue | |
| 1618 | - }); | |
| 1619 | - } else result[propKey] = override.value ?? propValue; | |
| 1620 | - } | |
| 1621 | - return result; | |
| 1622 | - } | |
| 1623 | - function unwrapOverridableSettings(elementSettings) { | |
| 1624 | - const result = {}; | |
| 1625 | - for (const [propKey, propValue] of Object.entries(elementSettings)) { | |
| 1626 | - const overridable = componentOverridablePropTypeUtil.extract(propValue); | |
| 1627 | - if (!overridable) { | |
| 1628 | - result[propKey] = propValue; | |
| 1629 | - continue; | |
| 1630 | - } | |
| 1631 | - result[propKey] = overridable.origin_value; | |
| 1632 | - } | |
| 1633 | - return result; | |
| 1634 | - } | |
| 1635 | - | |
| 1636 | -//#endregion | |
| 1637 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/use-override-dependencies.ts | |
| 1638 | - function useOverrideControlDependencies({ existingOverride, resolvedElementSettings, elementId, elementType, propKey }) { | |
| 1639 | - return (0, react.useMemo)(() => { | |
| 1640 | - const { isDisabled, isHidden } = (0, _elementor_editor_editing_panel.extractDependencyEffect)(propKey, elementType.propsSchema, resolvedElementSettings); | |
| 1641 | - const existingOverrideValue = existingOverride ? resolveOverridePropValue(existingOverride) : null; | |
| 1642 | - const settingsForDepsNewValuesCalculation = { | |
| 1643 | - ...resolvedElementSettings, | |
| 1644 | - [propKey]: existingOverrideValue | |
| 1645 | - }; | |
| 1646 | - const resolvedSettingsWithDefaults = (0, _elementor_editor_editing_panel.getElementSettingsWithDefaults)(elementType.propsSchema, settingsForDepsNewValuesCalculation); | |
| 1647 | - const dependents = (0, _elementor_editor_editing_panel.extractOrderedDependencies)(elementType.dependenciesPerTargetMapping ?? {}); | |
| 1648 | - return { | |
| 1649 | - overrideValue: (0, _elementor_editor_editing_panel.getUpdatedValues)({ [propKey]: existingOverrideValue }, dependents, elementType.propsSchema, resolvedSettingsWithDefaults, elementId)[propKey], | |
| 1650 | - isDisabled, | |
| 1651 | - isHidden | |
| 1652 | - }; | |
| 1653 | - }, [ | |
| 1654 | - existingOverride, | |
| 1655 | - resolvedElementSettings, | |
| 1656 | - propKey, | |
| 1657 | - elementType.propsSchema, | |
| 1658 | - elementType.dependenciesPerTargetMapping, | |
| 1659 | - elementId | |
| 1660 | - ]); | |
| 1661 | - } | |
| 1662 | - | |
| 1663 | -//#endregion | |
| 1664 | -//#region packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts | |
| 1665 | - function getContainerByOriginId(originElementId, instanceElementId) { | |
| 1666 | - if (!instanceElementId) return (0, _elementor_editor_elements.getContainer)(originElementId); | |
| 1667 | - const instanceContainer = (0, _elementor_editor_elements.getContainer)(instanceElementId); | |
| 1668 | - if (!instanceContainer) return null; | |
| 1669 | - return window.elementor?.getContainerByKeyValue?.({ | |
| 1670 | - key: "originId", | |
| 1671 | - value: originElementId, | |
| 1672 | - parent: instanceContainer.view | |
| 1673 | - }) ?? null; | |
| 1674 | - } | |
| 1675 | - | |
| 1676 | -//#endregion | |
| 1677 | -//#region packages/packages/core/editor-components/src/utils/get-overridable-prop.ts | |
| 1678 | - function getOverridableProp({ componentId, overrideKey }) { | |
| 1679 | - const overridableProps = selectOverridableProps((0, _elementor_store.__getState)(), componentId); | |
| 1680 | - if (!overridableProps) return; | |
| 1681 | - return overridableProps.props[overrideKey]; | |
| 1682 | - } | |
| 1683 | - | |
| 1684 | -//#endregion | |
| 1685 | -//#region packages/packages/core/editor-components/src/utils/resolve-overrides-chain.ts | |
| 1686 | - function resolveOverridesChain({ outerOverridableProp, outerInstanceId, overridesMapping = {} }) { | |
| 1687 | - if (!outerOverridableProp.originPropFields) { | |
| 1688 | - const innerElement = getContainerByOriginId(outerOverridableProp.elementId, outerInstanceId); | |
| 1689 | - if (!innerElement) throw new Error(`Inner element not found inside instance. elementId: ${outerOverridableProp.elementId}, instanceId: ${outerInstanceId}`); | |
| 1690 | - return { | |
| 1691 | - isChainBroken: false, | |
| 1692 | - innerElement, | |
| 1693 | - overridesMapping | |
| 1694 | - }; | |
| 1695 | - } | |
| 1696 | - const currentInstance = getContainerByOriginId(outerOverridableProp.elementId, outerInstanceId); | |
| 1697 | - if (!currentInstance) return { isChainBroken: true }; | |
| 1698 | - const { componentId, overrides } = extractComponentInstanceSettings(currentInstance); | |
| 1699 | - if (!componentId) throw new Error(`Component ID not found for current instance. currentInstanceId: ${currentInstance.id}. outerInstanceId: ${outerInstanceId}`); | |
| 1700 | - const mergedOverrides = buildOverridesMap(overridesMapping, overrides ?? []); | |
| 1701 | - const override = findOverrideByOuterKey(overrides, outerOverridableProp.overrideKey); | |
| 1702 | - const overrideKey = componentInstanceOverridePropTypeUtil.extract(override)?.override_key; | |
| 1703 | - if (!override || !overrideKey) return { isChainBroken: true }; | |
| 1704 | - const overridableProp = getOverridableProp({ | |
| 1705 | - componentId, | |
| 1706 | - overrideKey | |
| 1707 | - }); | |
| 1708 | - if (!overridableProp) throw new Error(`Overridable prop not found. componentId: ${componentId}, overrideKey: ${overrideKey}`); | |
| 1709 | - return resolveOverridesChain({ | |
| 1710 | - outerOverridableProp: overridableProp, | |
| 1711 | - outerInstanceId: currentInstance.id, | |
| 1712 | - overridesMapping: mergedOverrides | |
| 1713 | - }); | |
| 1714 | - } | |
| 1715 | - function buildOverridesMap(existing, levelOverrides) { | |
| 1716 | - const result = { ...existing }; | |
| 1717 | - for (const item of levelOverrides) { | |
| 1718 | - const overridableValue = componentOverridablePropTypeUtil.extract(item); | |
| 1719 | - if (overridableValue) { | |
| 1720 | - const override = componentInstanceOverridePropTypeUtil.extract(overridableValue.origin_value); | |
| 1721 | - if (!override) continue; | |
| 1722 | - const outerKey = overridableValue.override_key; | |
| 1723 | - const innerKey = override.override_key; | |
| 1724 | - const innerValue = override.override_value; | |
| 1725 | - const higherLevelOverride = existing[outerKey]; | |
| 1726 | - if (higherLevelOverride) { | |
| 1727 | - result[innerKey] = { | |
| 1728 | - value: higherLevelOverride.value ?? innerValue, | |
| 1729 | - outermostKey: higherLevelOverride.outermostKey ?? outerKey | |
| 1730 | - }; | |
| 1731 | - continue; | |
| 1732 | - } | |
| 1733 | - result[innerKey] = { | |
| 1734 | - value: innerValue, | |
| 1735 | - outermostKey: outerKey | |
| 1736 | - }; | |
| 1737 | - } else { | |
| 1738 | - const override = componentInstanceOverridePropTypeUtil.extract(item); | |
| 1739 | - if (!override) continue; | |
| 1740 | - const key = override.override_key; | |
| 1741 | - result[key] = { value: override.override_value }; | |
| 1742 | - } | |
| 1743 | - } | |
| 1744 | - return result; | |
| 1745 | - } | |
| 1746 | - function extractComponentInstanceSettings(element) { | |
| 1747 | - const instanceSetting = element.settings?.get("component_instance"); | |
| 1748 | - const instanceValue = componentInstancePropTypeUtil.extract(instanceSetting); | |
| 1749 | - return { | |
| 1750 | - componentId: instanceValue?.component_id?.value, | |
| 1751 | - overrides: componentInstanceOverridesPropTypeUtil.extract(instanceValue?.overrides) | |
| 1752 | - }; | |
| 1753 | - } | |
| 1754 | - function findOverrideByOuterKey(overrides, outerKey) { | |
| 1755 | - if (!overrides) return null; | |
| 1756 | - const overridableOverride = overrides.find((item) => { | |
| 1757 | - const overridableValue = componentOverridablePropTypeUtil.extract(item); | |
| 1758 | - if (!overridableValue) return false; | |
| 1759 | - return overridableValue.override_key === outerKey; | |
| 1760 | - }); | |
| 1761 | - const override = componentOverridablePropTypeUtil.extract(overridableOverride)?.origin_value; | |
| 1762 | - if (!override || !componentInstanceOverridePropTypeUtil.isValid(override)) return null; | |
| 1763 | - return override; | |
| 1764 | - } | |
| 1765 | - | |
| 1766 | -//#endregion | |
| 1767 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/use-resolved-inner-element.ts | |
| 1768 | - function useResolvedInnerElement(overridableProp) { | |
| 1769 | - const componentInstanceElement = (0, _elementor_editor_editing_panel.useElement)(); | |
| 1770 | - const componentId = useComponentId(); | |
| 1771 | - const overrides = useComponentInstanceOverrides(); | |
| 1772 | - const { elementId: originElementId, widgetType, elType } = overridableProp.originPropFields ?? overridableProp; | |
| 1773 | - const type = elType === "widget" ? widgetType : elType; | |
| 1774 | - const elementType = (0, _elementor_editor_elements.getElementType)(type); | |
| 1775 | - if (!elementType) throw new Error(`Element type not found for ${type}`); | |
| 1776 | - const { elementId, overridesMapping } = (0, react.useMemo)(() => { | |
| 1777 | - const overridesChainResult = resolveOverridesChain({ | |
| 1778 | - outerOverridableProp: overridableProp, | |
| 1779 | - outerInstanceId: componentInstanceElement.element.id | |
| 1780 | - }); | |
| 1781 | - if (overridesChainResult.isChainBroken) throw new OverrideControlInnerElementNotFoundError({ context: { | |
| 1782 | - componentId, | |
| 1783 | - elementId: originElementId | |
| 1784 | - } }); | |
| 1785 | - return { | |
| 1786 | - elementId: overridesChainResult.innerElement.id, | |
| 1787 | - overridesMapping: overridesChainResult.overridesMapping | |
| 1788 | - }; | |
| 1789 | - }, [ | |
| 1790 | - overridableProp, | |
| 1791 | - componentInstanceElement.element.id, | |
| 1792 | - componentId, | |
| 1793 | - originElementId | |
| 1794 | - ]); | |
| 1795 | - const settingsWithInnerOverrides = (0, react.useMemo)(() => { | |
| 1796 | - return applyOverridesToSettings((0, _elementor_editor_elements.getElementSettings)(elementId, Object.keys(elementType?.propsSchema ?? {})), overridesMapping); | |
| 1797 | - }, [ | |
| 1798 | - elementId, | |
| 1799 | - elementType?.propsSchema, | |
| 1800 | - overridesMapping | |
| 1801 | - ]); | |
| 1802 | - return { | |
| 1803 | - elementId, | |
| 1804 | - elementType, | |
| 1805 | - resolvedOriginValues: settingsWithInnerOverrides, | |
| 1806 | - resolvedElementSettings: (0, react.useMemo)(() => { | |
| 1807 | - return unwrapOverridableSettings(applyOverridesToSettings(settingsWithInnerOverrides, formatOverridesToApply(overrides))); | |
| 1808 | - }, [settingsWithInnerOverrides, overrides]) | |
| 1809 | - }; | |
| 1810 | - } | |
| 1811 | - function formatOverridesToApply(overrides) { | |
| 1812 | - if (!overrides) return {}; | |
| 1813 | - const result = {}; | |
| 1814 | - for (const item of overrides) { | |
| 1815 | - const overridable = componentOverridablePropTypeUtil.extract(item); | |
| 1816 | - let override = item; | |
| 1817 | - if (overridable) override = overridable.origin_value; | |
| 1818 | - const extractedOverride = componentInstanceOverridePropTypeUtil.extract(override); | |
| 1819 | - if (!extractedOverride) continue; | |
| 1820 | - result[extractedOverride.override_key] = { value: extractedOverride.override_value }; | |
| 1821 | - } | |
| 1822 | - return result; | |
| 1823 | - } | |
| 1824 | - | |
| 1825 | -//#endregion | |
| 1826 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/override-prop-control.tsx | |
| 1827 | - function OverridePropControl({ overrideKey }) { | |
| 1828 | - const overridableProp = useComponentOverridableProps().props[overrideKey]; | |
| 1829 | - if (!overridableProp) return null; | |
| 1830 | - return /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.SettingsField, { | |
| 1831 | - bind: "component_instance", | |
| 1832 | - propDisplayName: overridableProp.label | |
| 1833 | - }, /* @__PURE__ */ react.createElement(OverrideControl, { overridableProp })); | |
| 1834 | - } | |
| 1835 | - function OverrideControl({ overridableProp }) { | |
| 1836 | - const componentInstanceElement = (0, _elementor_editor_editing_panel.useElement)(); | |
| 1837 | - const { value: instanceValue, setValue: setInstanceValue } = (0, _elementor_editor_controls.useBoundProp)(componentInstancePropTypeUtil); | |
| 1838 | - const wrappingComponentId = useCurrentComponentId(); | |
| 1839 | - const componentId = useComponentId(); | |
| 1840 | - const overridableProps = useComponentOverridableProps(); | |
| 1841 | - const overrides = useComponentInstanceOverrides(); | |
| 1842 | - const controls = useControlsByWidgetType(overridableProp.originPropFields?.widgetType ?? overridableProp.widgetType); | |
| 1843 | - const controlReplacements = (0, _elementor_editor_controls.getControlReplacements)(); | |
| 1844 | - const matchingOverride = getMatchingOverride(overrides, overridableProp.overrideKey); | |
| 1845 | - const { propKey } = overridableProp.originPropFields ?? overridableProp; | |
| 1846 | - const propType = getPropTypeForComponentOverride(overridableProp); | |
| 1847 | - if (!propType) throw new OverrideControlPropTypeNotFoundError({ context: { overridableProp } }); | |
| 1848 | - const { elementId, elementType, resolvedElementSettings, resolvedOriginValues } = useResolvedInnerElement(overridableProp); | |
| 1849 | - const { overrideValue, isDisabled, isHidden } = useOverrideControlDependencies({ | |
| 1850 | - existingOverride: matchingOverride, | |
| 1851 | - resolvedElementSettings, | |
| 1852 | - elementType, | |
| 1853 | - elementId, | |
| 1854 | - propKey | |
| 1855 | - }); | |
| 1856 | - if (isHidden) return null; | |
| 1857 | - const { propValue, baseValue: resolvedBaseValue } = resolveOverrideValues(overrideValue, resolvedOriginValues, propKey); | |
| 1858 | - const value = { [overridableProp.overrideKey]: propValue }; | |
| 1859 | - const baseValue = { [overridableProp.overrideKey]: resolvedBaseValue }; | |
| 1860 | - const { control, controlProps, layout } = getControlParams(controls, overridableProp.originPropFields ?? overridableProp, overridableProp.label); | |
| 1861 | - const propTypeSchema = (0, _elementor_editor_editing_panel.createTopLevelObjectType)({ schema: { [overridableProp.overrideKey]: propType } }); | |
| 1862 | - const setValue = (newValue, options, meta) => { | |
| 1863 | - let newPropValue = getTempNewValueForDynamicProp(propType, propValue, newValue[overridableProp.overrideKey]); | |
| 1864 | - newPropValue = correctExposedEmptyOverride(newPropValue, matchingOverride); | |
| 1865 | - const newOverrideValue = createOverrideValue({ | |
| 1866 | - matchingOverride, | |
| 1867 | - overrideKey: overridableProp.overrideKey, | |
| 1868 | - overrideValue: newPropValue, | |
| 1869 | - componentId | |
| 1870 | - }); | |
| 1871 | - let newOverrides = (overrides ?? []).filter((override) => isValidOverride(overridableProps, override)).map((override) => override === matchingOverride ? newOverrideValue : override); | |
| 1872 | - if (!matchingOverride) newOverrides = [...newOverrides, newOverrideValue]; | |
| 1873 | - setInstanceValue({ | |
| 1874 | - ...instanceValue, | |
| 1875 | - overrides: componentInstanceOverridesPropTypeUtil.create(newOverrides) | |
| 1876 | - }, options, meta); | |
| 1877 | - const overridableValue = componentOverridablePropTypeUtil.extract(newOverrideValue); | |
| 1878 | - if (overridableValue && wrappingComponentId) { | |
| 1879 | - if (overridableProp.originPropFields) { | |
| 1880 | - updateOverridableProp(wrappingComponentId, overridableValue, overridableProp.originPropFields); | |
| 1881 | - return; | |
| 1882 | - } | |
| 1883 | - const originPropFields = { | |
| 1884 | - elType: overridableProp.elType, | |
| 1885 | - widgetType: overridableProp.widgetType, | |
| 1886 | - propKey: overridableProp.propKey, | |
| 1887 | - elementId: overridableProp.elementId | |
| 1888 | - }; | |
| 1889 | - updateOverridableProp(wrappingComponentId, overridableValue, originPropFields); | |
| 1890 | - } | |
| 1891 | - }; | |
| 1892 | - return /* @__PURE__ */ react.createElement(OverridablePropProvider, { | |
| 1893 | - value: componentOverridablePropTypeUtil.extract(matchingOverride) ?? void 0, | |
| 1894 | - componentInstanceElement | |
| 1895 | - }, /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.ElementProvider, { | |
| 1896 | - element: { | |
| 1897 | - id: elementId, | |
| 1898 | - type: elementType.key | |
| 1899 | - }, | |
| 1900 | - elementType, | |
| 1901 | - settings: resolvedElementSettings | |
| 1902 | - }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.PropProvider, { | |
| 1903 | - propType: propTypeSchema, | |
| 1904 | - value, | |
| 1905 | - setValue, | |
| 1906 | - baseValue, | |
| 1907 | - isDisabled | |
| 1908 | - }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.PropKeyProvider, { bind: overridableProp.overrideKey }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlReplacementsProvider, { replacements: controlReplacements }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { mb: 1.5 }, /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.ControlTypeContainer, { layout }, layout !== "custom" && /* @__PURE__ */ react.createElement(ControlLabel, null, overridableProp.label), /* @__PURE__ */ react.createElement(OriginalControl, { | |
| 1909 | - control, | |
| 1910 | - controlProps | |
| 1911 | - })))))))); | |
| 1912 | - } | |
| 1913 | - function resolveOverrideValues(overrideValue, resolvedOriginValues, propKey) { | |
| 1914 | - const inheritedValue = unwrapOverridableSettings(resolvedOriginValues)[propKey] ?? null; | |
| 1915 | - const isInheritedDynamic = (0, _elementor_editor_editing_panel.isDynamicPropValue)(inheritedValue); | |
| 1916 | - return { | |
| 1917 | - propValue: isInheritedDynamic && !overrideValue ? inheritedValue : overrideValue, | |
| 1918 | - baseValue: overrideValue || isInheritedDynamic ? null : inheritedValue | |
| 1919 | - }; | |
| 1920 | - } | |
| 1921 | - function getTempNewValueForDynamicProp(propType, propValue, newPropValue) { | |
| 1922 | - if (newPropValue === null && (0, _elementor_editor_editing_panel.isDynamicPropValue)(propValue)) return propType.default ?? null; | |
| 1923 | - return newPropValue; | |
| 1924 | - } | |
| 1925 | - function createOverrideValue({ matchingOverride, overrideKey, overrideValue, componentId }) { | |
| 1926 | - const overridableValue = componentOverridablePropTypeUtil.extract(matchingOverride); | |
| 1927 | - const anyOverridable = componentOverridablePropTypeUtil.extract(overrideValue) ?? overridableValue; | |
| 1928 | - if (anyOverridable) { | |
| 1929 | - const innerOverride = componentInstanceOverridePropTypeUtil.create({ | |
| 1930 | - override_key: overrideKey, | |
| 1931 | - override_value: resolveOverridePropValue(overrideValue), | |
| 1932 | - schema_source: { | |
| 1933 | - type: "component", | |
| 1934 | - id: componentId | |
| 1935 | - } | |
| 1936 | - }); | |
| 1937 | - return componentOverridablePropTypeUtil.create({ | |
| 1938 | - override_key: anyOverridable.override_key, | |
| 1939 | - origin_value: innerOverride | |
| 1940 | - }); | |
| 1941 | - } | |
| 1942 | - return componentInstanceOverridePropTypeUtil.create({ | |
| 1943 | - override_key: overrideKey, | |
| 1944 | - override_value: overrideValue, | |
| 1945 | - schema_source: { | |
| 1946 | - type: "component", | |
| 1947 | - id: componentId | |
| 1948 | - } | |
| 1949 | - }); | |
| 1950 | - } | |
| 1951 | - function getControlParams(controls, originPropFields, label) { | |
| 1952 | - const control = controls[originPropFields.propKey]; | |
| 1953 | - const { value } = control; | |
| 1954 | - const layout = getControlLayout(control); | |
| 1955 | - const controlProps = populateChildControlProps(value.props); | |
| 1956 | - if (layout === "custom") controlProps.label = label ?? value.label; | |
| 1957 | - return { | |
| 1958 | - control, | |
| 1959 | - controlProps, | |
| 1960 | - layout | |
| 1961 | - }; | |
| 1962 | - } | |
| 1963 | - function OriginalControl({ control, controlProps }) { | |
| 1964 | - const { value } = control; | |
| 1965 | - return /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.BaseControl, { | |
| 1966 | - type: value.type, | |
| 1967 | - props: controlProps | |
| 1968 | - }); | |
| 1969 | - } | |
| 1970 | - function getControlLayout(control) { | |
| 1971 | - return control.value.meta?.layout || _elementor_editor_editing_panel.controlsRegistry.getLayout(control.value.type); | |
| 1972 | - } | |
| 1973 | - function populateChildControlProps(props) { | |
| 1974 | - if (props.childControlType) { | |
| 1975 | - const childComponent = _elementor_editor_editing_panel.controlsRegistry.get(props.childControlType); | |
| 1976 | - const childPropType = _elementor_editor_editing_panel.controlsRegistry.getPropTypeUtil(props.childControlType); | |
| 1977 | - props = { | |
| 1978 | - ...props, | |
| 1979 | - childControlConfig: { | |
| 1980 | - component: childComponent, | |
| 1981 | - props: props.childControlProps || {}, | |
| 1982 | - propTypeUtil: childPropType | |
| 1983 | - } | |
| 1984 | - }; | |
| 1985 | - } | |
| 1986 | - return props; | |
| 1987 | - } | |
| 1988 | - function isValidOverride(overridableProps, override) { | |
| 1989 | - const overridableKey = componentOverridablePropTypeUtil.isValid(override) ? override.value.origin_value?.value.override_key : override.value.override_key; | |
| 1990 | - return !!overridableProps.props[overridableKey]; | |
| 1991 | - } | |
| 1992 | - | |
| 1993 | -//#endregion | |
| 1994 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/override-props-group.tsx | |
| 1995 | - function OverridePropsGroup({ group }) { | |
| 1996 | - const [isOpen, setIsOpen] = (0, _elementor_editor_editing_panel.useStateByElement)(group.id, true); | |
| 1997 | - const handleClick = () => { | |
| 1998 | - setIsOpen(!isOpen); | |
| 1999 | - }; | |
| 2000 | - const id = (0, react.useId)(); | |
| 2001 | - const labelId = `label-${id}`; | |
| 2002 | - const contentId = `content-${id}`; | |
| 2003 | - const title = group.label; | |
| 2004 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Box, { "aria-label": `${title} section` }, /* @__PURE__ */ react.createElement(_elementor_ui.ListItemButton, { | |
| 2005 | - id: labelId, | |
| 2006 | - "aria-controls": contentId, | |
| 2007 | - "aria-label": `${title} section`, | |
| 2008 | - onClick: handleClick, | |
| 2009 | - p: 0, | |
| 2010 | - sx: { "&:hover": { backgroundColor: "transparent" } } | |
| 2011 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 2012 | - direction: "row", | |
| 2013 | - alignItems: "center", | |
| 2014 | - justifyItems: "start", | |
| 2015 | - flexGrow: 1, | |
| 2016 | - gap: .5 | |
| 2017 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.ListItemText, { | |
| 2018 | - secondary: title, | |
| 2019 | - secondaryTypographyProps: { | |
| 2020 | - color: "text.primary", | |
| 2021 | - variant: "caption", | |
| 2022 | - fontWeight: "bold" | |
| 2023 | - }, | |
| 2024 | - sx: { | |
| 2025 | - flexGrow: 0, | |
| 2026 | - flexShrink: 1, | |
| 2027 | - marginInlineEnd: 1 | |
| 2028 | - } | |
| 2029 | - })), /* @__PURE__ */ react.createElement(_elementor_editor_ui.CollapseIcon, { | |
| 2030 | - open: isOpen, | |
| 2031 | - color: "secondary", | |
| 2032 | - fontSize: "tiny" | |
| 2033 | - })), /* @__PURE__ */ react.createElement(_elementor_ui.Collapse, { | |
| 2034 | - id: contentId, | |
| 2035 | - "aria-labelledby": labelId, | |
| 2036 | - in: isOpen, | |
| 2037 | - timeout: "auto" | |
| 2038 | - }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 2039 | - direction: "column", | |
| 2040 | - gap: 1, | |
| 2041 | - p: 2 | |
| 2042 | - }, group.props.map((overrideKey) => /* @__PURE__ */ react.createElement(OverridePropControl, { | |
| 2043 | - key: overrideKey, | |
| 2044 | - overrideKey | |
| 2045 | - }))))); | |
| 2046 | - } | |
| 2047 | - | |
| 2048 | -//#endregion | |
| 2049 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx | |
| 2050 | - function InstancePanelBody({ groups, isEmpty, emptyState, componentInstanceId }) { | |
| 2051 | - return /* @__PURE__ */ react.createElement(_elementor_editor_panels.PanelBody, null, /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlAdornmentsProvider, { items: (0, _elementor_editor_editing_panel.getFieldIndicators)("settings") }, isEmpty ? emptyState : /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 2052 | - direction: "column", | |
| 2053 | - alignItems: "stretch" | |
| 2054 | - }, groups.map((group) => /* @__PURE__ */ react.createElement(react.Fragment, { key: group.id + componentInstanceId }, /* @__PURE__ */ react.createElement(OverridePropsGroup, { group }), /* @__PURE__ */ react.createElement(_elementor_ui.Divider, null)))))); | |
| 2055 | - } | |
| 2056 | - | |
| 2057 | -//#endregion | |
| 2058 | -//#region packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts | |
| 2059 | - function filterValidOverridableProps(overridableProps, instanceElementId) { | |
| 2060 | - const validProps = {}; | |
| 2061 | - for (const [key, prop] of Object.entries(overridableProps.props)) if (isExposedPropValid(prop, instanceElementId)) validProps[key] = prop; | |
| 2062 | - const validPropKeys = new Set(Object.keys(validProps)); | |
| 2063 | - return { | |
| 2064 | - props: validProps, | |
| 2065 | - groups: { | |
| 2066 | - items: Object.fromEntries(Object.entries(overridableProps.groups.items).map(([groupId, group]) => [groupId, { | |
| 2067 | - ...group, | |
| 2068 | - props: group.props.filter((propKey) => validPropKeys.has(propKey)) | |
| 2069 | - }])), | |
| 2070 | - order: overridableProps.groups.order | |
| 2071 | - } | |
| 2072 | - }; | |
| 2073 | - } | |
| 2074 | - function isExposedPropValid(prop, instanceElementId) { | |
| 2075 | - const { isChainBroken } = resolveOverridesChain({ | |
| 2076 | - outerOverridableProp: prop, | |
| 2077 | - outerInstanceId: instanceElementId | |
| 2078 | - }); | |
| 2079 | - return !isChainBroken; | |
| 2080 | - } | |
| 2081 | - | |
| 2082 | -//#endregion | |
| 2083 | -//#region packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts | |
| 2084 | - function useSanitizeOverridableProps(componentId, instanceElementId) { | |
| 2085 | - const overridableProps = useOverridableProps(componentId); | |
| 2086 | - const isSanitized = useIsSanitizedComponent(componentId, "overridableProps"); | |
| 2087 | - if (!overridableProps || !componentId) return; | |
| 2088 | - if (isSanitized) return overridableProps; | |
| 2089 | - return filterValidOverridableProps(overridableProps, instanceElementId); | |
| 2090 | - } | |
| 2091 | - | |
| 2092 | -//#endregion | |
| 2093 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts | |
| 2094 | - function useInstancePanelData() { | |
| 2095 | - const { element, settings } = useComponentInstanceSettings(); | |
| 2096 | - const componentId = settings?.component_id?.value; | |
| 2097 | - const overrides = settings?.overrides?.value; | |
| 2098 | - const component = useComponent(componentId ?? null); | |
| 2099 | - const componentInstanceId = element?.id; | |
| 2100 | - const overridableProps = useSanitizeOverridableProps(componentId ?? null, componentInstanceId); | |
| 2101 | - if (!componentId || !overridableProps || !component || !componentInstanceId) return null; | |
| 2102 | - const isNonEmptyGroup = (group) => group !== null && group.props.length > 0; | |
| 2103 | - const groups = overridableProps.groups.order.map((groupId) => overridableProps.groups.items[groupId] ?? null).filter(isNonEmptyGroup); | |
| 2104 | - return { | |
| 2105 | - componentId, | |
| 2106 | - component, | |
| 2107 | - overrides, | |
| 2108 | - overridableProps, | |
| 2109 | - groups, | |
| 2110 | - isEmpty: groups.length === 0 || Object.keys(overridableProps.props).length === 0, | |
| 2111 | - componentInstanceId | |
| 2112 | - }; | |
| 2113 | - } | |
| 2114 | - function useComponentInstanceSettings() { | |
| 2115 | - const { element, settings } = (0, _elementor_editor_editing_panel.useElement)(); | |
| 2116 | - return { | |
| 2117 | - element, | |
| 2118 | - settings: componentInstancePropTypeUtil.extract(settings.component_instance) | |
| 2119 | - }; | |
| 2120 | - } | |
| 2121 | - | |
| 2122 | -//#endregion | |
| 2123 | -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/instance-editing-panel.tsx | |
| 2124 | - var EDIT_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-edit-footer/"; | |
| 2125 | - function InstanceEditingPanel() { | |
| 2126 | - const { canEdit } = useComponentsPermissions(); | |
| 2127 | - const data = useInstancePanelData(); | |
| 2128 | - if (!data) return null; | |
| 2129 | - const { componentId, component, overrides, overridableProps, groups, isEmpty, componentInstanceId } = data; | |
| 2130 | - const panelTitle = (0, _wordpress_i18n.__)("Edit %s", "elementor").replace("%s", component.name); | |
| 2131 | - const actions = /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { | |
| 2132 | - direction: "row", | |
| 2133 | - gap: .5 | |
| 2134 | - }, /* @__PURE__ */ react.createElement(DetachAction, { | |
| 2135 | - componentInstanceId, | |
| 2136 | - componentId | |
| 2137 | - }), canEdit && /* @__PURE__ */ react.createElement(EditComponentAction, { | |
| 2138 | - disabled: true, | |
| 2139 | - label: panelTitle, | |
| 2140 | - icon: _elementor_icons.PencilIcon | |
| 2141 | - })); | |
| 2142 | - return /* @__PURE__ */ react.createElement(_elementor_ui.Box, { | |
| 2143 | - "data-testid": "instance-editing-panel", | |
| 2144 | - sx: { | |
| 2145 | - display: "flex", | |
| 2146 | - flexDirection: "column", | |
| 2147 | - height: "100%" | |
| 2148 | - } | |
| 2149 | - }, /* @__PURE__ */ react.createElement(ComponentInstanceProvider, { | |
| 2150 | - componentId, | |
| 2151 | - overrides, | |
| 2152 | - overridableProps | |
| 2153 | - }, /* @__PURE__ */ react.createElement(InstancePanelHeader, { | |
| 2154 | - componentName: component.name, | |
| 2155 | - actions | |
| 2156 | - }), /* @__PURE__ */ react.createElement(InstancePanelBody, { | |
| 2157 | - groups, | |
| 2158 | - isEmpty, | |
| 2159 | - emptyState: /* @__PURE__ */ react.createElement(EmptyState, null), | |
| 2160 | - componentInstanceId | |
| 2161 | - })), !isProComponentsSupported() && (isProOutdatedForComponents() ? /* @__PURE__ */ react.createElement(ComponentsUpdateAlert, { | |
| 2162 | - title: (0, _wordpress_i18n.__)("Edit Component", "elementor"), | |
| 2163 | - description: (0, _wordpress_i18n.__)("To edit components, update Elementor Pro to the latest version.", "elementor") | |
| 2164 | - }) : /* @__PURE__ */ react.createElement(ComponentsUpgradeAlert, { | |
| 2165 | - title: (0, _wordpress_i18n.__)("Edit components", "elementor"), | |
| 2166 | - description: (0, _wordpress_i18n.__)("Editing components requires an active Pro subscription.", "elementor"), | |
| 2167 | - upgradeUrl: EDIT_UPGRADE_URL | |
| 2168 | - }))); | |
| 2169 | - } | |
| 2170 | - | |
| 2171 | -//#endregion | |
| 2172 | -//#region packages/packages/core/editor-components/src/utils/get-component-documents.ts | |
| 2173 | - async function getComponentDocuments({ elements, cache = /* @__PURE__ */ new Map(), isRecursive = true }) { | |
| 2174 | - return getDocumentsMap(await getComponentIds(elements, cache, isRecursive), cache); | |
| 2175 | - } | |
| 2176 | - async function getComponentIds(elements, cache, isRecursive) { | |
| 2177 | - const results = await Promise.all(elements.filter(Boolean).map(async ({ widgetType, elType, elements: childElements, settings }) => { | |
| 2178 | - const ids = []; | |
| 2179 | - if (isComponentInstance({ | |
| 2180 | - widgetType, | |
| 2181 | - elType | |
| 2182 | - })) { | |
| 2183 | - const componentId = settings?.component_instance?.value?.component_id.value; | |
| 2184 | - if (!componentId) return ids; | |
| 2185 | - ids.push(componentId); | |
| 2186 | - if (!cache.has(componentId)) cache.set(componentId, getComponentDocumentData(componentId)); | |
| 2187 | - if (isRecursive) childElements = (await cache.get(componentId))?.elements; | |
| 2188 | - } | |
| 2189 | - if (childElements?.length) { | |
| 2190 | - const childIds = await getComponentIds(childElements, cache, isRecursive); | |
| 2191 | - ids.push(...childIds); | |
| 2192 | - } | |
| 2193 | - return ids; | |
| 2194 | - })); | |
| 2195 | - return [...new Set(results.flat())]; | |
| 2196 | - } | |
| 2197 | - async function getDocumentsMap(ids, cache) { | |
| 2198 | - const documents = await Promise.all(ids.map(async (id) => { | |
| 2199 | - const document = await cache.get(id); | |
| 2200 | - if (!document) return null; | |
| 2201 | - return [id, document]; | |
| 2202 | - })); | |
| 2203 | - return new Map(documents.filter((document) => document !== null)); | |
| 2204 | - } | |
| 2205 | - | |
| 2206 | -//#endregion | |
| 2207 | -//#region packages/packages/core/editor-components/src/store/actions/load-components-overridable-props.ts | |
| 2208 | - async function loadComponentsOverridableProps(componentIds, { force = false } = {}) { | |
| 2209 | - const idsToLoad = force ? componentIds : componentIds.filter((id) => !selectIsOverridablePropsLoaded((0, _elementor_store.__getState)(), id)); | |
| 2210 | - if (!idsToLoad.length) return; | |
| 2211 | - const { data } = await apiClient.getOverridableProps(idsToLoad); | |
| 2212 | - (0, _elementor_store.__dispatch)(slice.actions.loadOverridableProps(data)); | |
| 2213 | - } | |
| 2214 | - | |
| 2215 | -//#endregion | |
| 2216 | -//#region packages/packages/core/editor-components/src/store/actions/load-components-assets.ts | |
| 2217 | - async function loadComponentsAssets(elements) { | |
| 2218 | - if (!elements.length) return; | |
| 2219 | - const documents = await getComponentDocuments({ | |
| 2220 | - elements, | |
| 2221 | - isRecursive: false | |
| 2222 | - }); | |
| 2223 | - updateDocumentState(documents); | |
| 2224 | - documents.forEach((document, id) => { | |
| 2225 | - _elementor_editor_embedded_documents_manager.embeddedDocumentsManager.setDocument(id, document); | |
| 2226 | - }); | |
| 2227 | - await loadComponentsOverridableProps([...documents.keys()]); | |
| 2228 | - } | |
| 2229 | - function updateDocumentState(documents) { | |
| 2230 | - if ([...documents.values()].some(_elementor_editor_documents.isDocumentDirty)) (0, _elementor_editor_documents.setDocumentModifiedStatus)(true); | |
| 2231 | - } | |
| 2232 | - | |
| 2233 | -//#endregion | |
| 2234 | -//#region packages/packages/core/editor-components/src/components/load-template-components.tsx | |
| 2235 | - var LoadTemplateComponents = () => { | |
| 2236 | - if ((0, _elementor_editor_templates.isHandlingTemplateStyles)()) return /* @__PURE__ */ react.createElement(LoadTemplateComponentsInternal, null); | |
| 2237 | - return null; | |
| 2238 | - }; | |
| 2239 | - function LoadTemplateComponentsInternal() { | |
| 2240 | - const templates = (0, _elementor_editor_templates.useLoadedTemplates)(); | |
| 2241 | - (0, react.useEffect)(() => { | |
| 2242 | - loadComponentsAssets(templates.flatMap((elements) => elements ?? [])); | |
| 2243 | - }, [templates]); | |
| 2244 | - return null; | |
| 2245 | - } | |
| 2246 | - | |
| 2247 | -//#endregion | |
| 2248 | -//#region packages/packages/core/editor-components/src/utils/format-component-elements-id.ts | |
| 2249 | - var ELEMENT_ID_LENGTH$1 = 7; | |
| 2250 | - function formatComponentElementsId(elements, path) { | |
| 2251 | - return elements.map((element) => { | |
| 2252 | - const nestingPath = [...path, element.id]; | |
| 2253 | - const id = (0, _elementor_utils.hashString)(nestingPath.join("_"), ELEMENT_ID_LENGTH$1); | |
| 2254 | - return { | |
| 2255 | - ...element, | |
| 2256 | - id, | |
| 2257 | - originId: element.id, | |
| 2258 | - elements: element.elements ? formatComponentElementsId(element.elements, nestingPath) : void 0 | |
| 2259 | - }; | |
| 2260 | - }); | |
| 2261 | - } | |
| 2262 | - | |
| 2263 | -//#endregion | |
| 2264 | -//#region packages/packages/core/editor-components/src/utils/reconcile-component-instance-elements.ts | |
| 2265 | - var ELEMENT_ID_LENGTH = 7; | |
| 2266 | - function overridesRecordToMapping(overrides) { | |
| 2267 | - const mapping = {}; | |
| 2268 | - for (const [key, value] of Object.entries(overrides)) mapping[key] = { value }; | |
| 2269 | - return mapping; | |
| 2270 | - } | |
| 2271 | - function getElementConfig(element) { | |
| 2272 | - const type = element.elType === "widget" ? element.widgetType : element.elType; | |
| 2273 | - if (!type) return; | |
| 2274 | - return (0, _elementor_editor_elements.getWidgetsCache)()?.[type]; | |
| 2275 | - } | |
| 2276 | - function deriveIds(element, seed) { | |
| 2277 | - const id = (0, _elementor_utils.hashString)(seed, ELEMENT_ID_LENGTH); | |
| 2278 | - return { | |
| 2279 | - ...element, | |
| 2280 | - id, | |
| 2281 | - elements: (element.elements ?? []).map((child, index) => deriveIds(child, `${id}_${index}`)) | |
| 2282 | - }; | |
| 2283 | - } | |
| 2284 | - function reconcileElementTree(element, overridesMapping) { | |
| 2285 | - const elementConfig = getElementConfig(element); | |
| 2286 | - const effectiveSettings = unwrapOverridableSettings(applyOverridesToSettings(element.settings ?? {}, overridesMapping)); | |
| 2287 | - const originalChildren = element.elements ?? []; | |
| 2288 | - const originalChildIds = new Set(originalChildren.map((child) => child.id)); | |
| 2289 | - const attributes = { | |
| 2290 | - elements: [...originalChildren], | |
| 2291 | - settings: effectiveSettings | |
| 2292 | - }; | |
| 2293 | - if (elementConfig?.children_dependencies?.length) (0, _elementor_editor_elements.reconcileInitialChildren)({ | |
| 2294 | - elementId: element.id, | |
| 2295 | - elementConfig, | |
| 2296 | - attributes | |
| 2297 | - }); | |
| 2298 | - const reconciledChildren = (attributes.elements ?? []).map((child) => originalChildIds.has(child.id) ? child : deriveIds(child, `${element.id}_${child.elType}`)).map((child) => reconcileElementTree(child, overridesMapping)); | |
| 2299 | - return { | |
| 2300 | - ...element, | |
| 2301 | - elements: reconciledChildren | |
| 2302 | - }; | |
| 2303 | - } | |
| 2304 | - function reconcileComponentInstanceElements(elements, overrides = {}) { | |
| 2305 | - const overridesMapping = overridesRecordToMapping(overrides); | |
| 2306 | - return elements.map((element) => reconcileElementTree(element, overridesMapping)); | |
| 2307 | - } | |
| 2308 | - | |
| 2309 | -//#endregion | |
| 2310 | -//#region packages/packages/core/editor-components/src/utils/switch-to-component.ts | |
| 2311 | - async function switchToComponent(componentId, componentInstanceId, element) { | |
| 2312 | - const selector = getSelector(element, componentInstanceId); | |
| 2313 | - (0, _elementor_editor_documents.invalidateDocumentData)(componentId); | |
| 2314 | - await (0, _elementor_editor_documents.switchToDocument)(componentId, { | |
| 2315 | - selector, | |
| 2316 | - mode: "autosave", | |
| 2317 | - setAsInitial: false, | |
| 2318 | - shouldScroll: false | |
| 2319 | - }); | |
| 2320 | - await loadComponentsOverridableProps([componentId], { force: true }); | |
| 2321 | - const topLevelElement = (0, _elementor_editor_elements.getCurrentDocumentContainer)()?.children?.[0]; | |
| 2322 | - if (topLevelElement) { | |
| 2323 | - (0, _elementor_editor_elements.selectElement)(topLevelElement.id); | |
| 2324 | - expandNavigator(); | |
| 2325 | - } | |
| 2326 | - } | |
| 2327 | - async function expandNavigator() { | |
| 2328 | - await (0, _elementor_editor_v1_adapters.__privateRunCommand)("navigator/expand-all"); | |
| 2329 | - } | |
| 2330 | - function getSelector(element, componentInstanceId) { | |
| 2331 | - if (element) return buildUniqueSelector(element); | |
| 2332 | - if (componentInstanceId) return `[data-id="${componentInstanceId}"]`; | |
| 2333 | - } | |
| 2334 | - function buildUniqueSelector(element) { | |
| 2335 | - const selectors = []; | |
| 2336 | - let current = element.closest("[data-id]"); | |
| 2337 | - while (current) { | |
| 2338 | - const dataId = current.dataset.id; | |
| 2339 | - if (current.hasAttribute("data-elementor-id")) selectors.unshift(`[data-id="${dataId}"]`); | |
| 2340 | - current = current.parentElement?.closest("[data-id]") ?? null; | |
| 2341 | - } | |
| 2342 | - if (selectors.length === 0) { | |
| 2343 | - const closestElement = element.closest("[data-id]"); | |
| 2344 | - if (closestElement?.dataset?.id) return `[data-id="${closestElement.dataset.id}"]`; | |
| 2345 | - } | |
| 2346 | - return selectors.join(" "); | |
| 2347 | - } | |
| 2348 | - | |
| 2349 | -//#endregion | |
| 2350 | -//#region packages/packages/core/editor-components/src/create-component-type.ts | |
| 2351 | - var __defProp = Object.defineProperty; | |
| 2352 | - var __typeError = (msg) => { | |
| 2353 | - throw TypeError(msg); | |
| 2354 | - }; | |
| 2355 | - var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { | |
| 2356 | - enumerable: true, | |
| 2357 | - configurable: true, | |
| 2358 | - writable: true, | |
| 2359 | - value | |
| 2360 | - }) : obj[key] = value; | |
| 2361 | - var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); | |
| 2362 | - var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg); | |
| 2363 | - var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)); | |
| 2364 | - var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value); | |
| 2365 | - var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value); | |
| 2366 | - var COMPONENT_WIDGET_TYPE = "e-component"; | |
| 2367 | - var EDIT_COMPONENT_DB_CLICK_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-edit-canvas-double-click/"; | |
| 2368 | - var EDIT_COMPONENT_CONTEXT_MENU_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-edit-context-menu/"; | |
| 2369 | - var UPDATE_PLUGINS_URL = "/wp-admin/plugins.php"; | |
| 2370 | - var COMPONENT_EDIT_UPGRADE_NOTIFICATION_ID = "component-edit-upgrade"; | |
| 2371 | - var COMPONENT_EDIT_UPDATE_NOTIFICATION_ID = "component-edit-update"; | |
| 2372 | - var COMPONENT_EDIT_UPGRADE_AUTO_HIDE_DURATION = 2e3; | |
| 2373 | - function notifyComponentEditUpgrade() { | |
| 2374 | - (0, _elementor_editor_notifications.notify)({ | |
| 2375 | - type: "promotion", | |
| 2376 | - id: COMPONENT_EDIT_UPGRADE_NOTIFICATION_ID, | |
| 2377 | - message: (0, _wordpress_i18n.__)("Editing components requires an active Pro subscription.", "elementor"), | |
| 2378 | - autoHideDuration: COMPONENT_EDIT_UPGRADE_AUTO_HIDE_DURATION, | |
| 2379 | - additionalActionProps: [{ | |
| 2380 | - size: "small", | |
| 2381 | - variant: "contained", | |
| 2382 | - color: "promotion", | |
| 2383 | - href: EDIT_COMPONENT_DB_CLICK_UPGRADE_URL, | |
| 2384 | - target: "_blank", | |
| 2385 | - children: (0, _wordpress_i18n.__)("Upgrade Now", "elementor") | |
| 2386 | - }] | |
| 2387 | - }); | |
| 2388 | - } | |
| 2389 | - function notifyComponentEditUpdate() { | |
| 2390 | - (0, _elementor_editor_notifications.notify)({ | |
| 2391 | - type: "info", | |
| 2392 | - id: COMPONENT_EDIT_UPDATE_NOTIFICATION_ID, | |
| 2393 | - message: (0, _wordpress_i18n.__)("To edit components, update Elementor Pro to the latest version.", "elementor"), | |
| 2394 | - additionalActionProps: [{ | |
| 2395 | - size: "small", | |
| 2396 | - variant: "contained", | |
| 2397 | - color: "info", | |
| 2398 | - href: UPDATE_PLUGINS_URL, | |
| 2399 | - target: "_blank", | |
| 2400 | - children: (0, _wordpress_i18n.__)("Update Now", "elementor") | |
| 2401 | - }] | |
| 2402 | - }); | |
| 2403 | - } | |
| 2404 | - var updateGroups = (groups, config) => { | |
| 2405 | - const disableMap = new Map(Object.entries(config.disable ?? {})); | |
| 2406 | - const addMap = new Map(Object.entries(config.add ?? {})); | |
| 2407 | - return groups.map((group) => { | |
| 2408 | - const disabledActions = disableMap.get(group.name) ?? []; | |
| 2409 | - const addConfig = addMap.get(group.name); | |
| 2410 | - const updatedActions = group.actions.map((action) => disabledActions.includes(action.name) ? { | |
| 2411 | - ...action, | |
| 2412 | - isEnabled: () => false | |
| 2413 | - } : action); | |
| 2414 | - if (addConfig) updatedActions.splice(addConfig.index, 0, ...addConfig.actions); | |
| 2415 | - return { | |
| 2416 | - ...group, | |
| 2417 | - actions: updatedActions | |
| 2418 | - }; | |
| 2419 | - }); | |
| 2420 | - }; | |
| 2421 | - function createComponentType(options) { | |
| 2422 | - const WidgetType = window.elementor.modules.elements.types.Widget; | |
| 2423 | - const view = createComponentView({ ...options }); | |
| 2424 | - return class extends WidgetType { | |
| 2425 | - getType() { | |
| 2426 | - return options.type; | |
| 2427 | - } | |
| 2428 | - getView() { | |
| 2429 | - return view; | |
| 2430 | - } | |
| 2431 | - getModel() { | |
| 2432 | - return createComponentModel(); | |
| 2433 | - } | |
| 2434 | - }; | |
| 2435 | - } | |
| 2436 | - function createComponentView(options) { | |
| 2437 | - var _componentRenderContext; | |
| 2438 | - var _a; | |
| 2439 | - const legacyWindow = window; | |
| 2440 | - return _a = class extends (0, _elementor_editor_canvas.createTemplatedElementView)(options) { | |
| 2441 | - constructor() { | |
| 2442 | - super(...arguments); | |
| 2443 | - __publicField(this, "eventsManagerConfig", legacyWindow.elementorCommon.eventsManager.config); | |
| 2444 | - __privateAdd(this, _componentRenderContext); | |
| 2445 | - } | |
| 2446 | - isComponentCurrentlyEdited() { | |
| 2447 | - return (0, _elementor_editor_documents.getCurrentDocument)()?.id === this.getComponentId(); | |
| 2448 | - } | |
| 2449 | - getRenderContext() { | |
| 2450 | - const namespaceKey = this.getNamespaceKey(); | |
| 2451 | - const parentContext = this._parent?.getRenderContext?.(); | |
| 2452 | - const parentComponentContext = parentContext?.[namespaceKey]; | |
| 2453 | - if (!__privateGet(this, _componentRenderContext)) return parentContext; | |
| 2454 | - const ownOverrides = __privateGet(this, _componentRenderContext).overrides ?? {}; | |
| 2455 | - const parentOverrides = parentComponentContext?.overrides ?? {}; | |
| 2456 | - return { | |
| 2457 | - ...parentContext, | |
| 2458 | - [namespaceKey]: { overrides: { | |
| 2459 | - ...parentOverrides, | |
| 2460 | - ...ownOverrides | |
| 2461 | - } } | |
| 2462 | - }; | |
| 2463 | - } | |
| 2464 | - getResolverRenderContext() { | |
| 2465 | - const namespaceKey = this.getNamespaceKey(); | |
| 2466 | - const ownContext = this.getRenderContext()?.[namespaceKey]; | |
| 2467 | - if (!ownContext) return this._parent?.getResolverRenderContext?.(); | |
| 2468 | - return { | |
| 2469 | - ...this._parent?.getResolverRenderContext?.(), | |
| 2470 | - ...ownContext | |
| 2471 | - }; | |
| 2472 | - } | |
| 2473 | - afterSettingsResolve(settings) { | |
| 2474 | - const componentInstance = settings.component_instance; | |
| 2475 | - if (componentInstance) { | |
| 2476 | - __privateSet(this, _componentRenderContext, { overrides: componentInstance.overrides ?? {} }); | |
| 2477 | - const instanceId = this.model.get("id"); | |
| 2478 | - const formattedElements = formatComponentElementsId(reconcileComponentInstanceElements(componentInstance.elements ?? [], componentInstance.overrides ?? {}), [instanceId]); | |
| 2479 | - this.collection = legacyWindow.elementor.createBackboneElementsCollection(formattedElements); | |
| 2480 | - this.collection.models.forEach(setInactiveRecursively); | |
| 2481 | - settings.component_instance = "<template data-children-placeholder></template>"; | |
| 2482 | - } | |
| 2483 | - return settings; | |
| 2484 | - } | |
| 2485 | - getDomElement() { | |
| 2486 | - return this.children.findByIndex(0)?.getDomElement() ?? this.$el; | |
| 2487 | - } | |
| 2488 | - attachBuffer(collectionView, buffer) { | |
| 2489 | - const childrenPlaceholder = collectionView.$el.find("[data-children-placeholder]").get(0); | |
| 2490 | - if (!childrenPlaceholder) { | |
| 2491 | - super.attachBuffer(collectionView, buffer); | |
| 2492 | - return; | |
| 2493 | - } | |
| 2494 | - childrenPlaceholder.replaceWith(buffer); | |
| 2495 | - } | |
| 2496 | - getComponentId() { | |
| 2497 | - return (this.options?.model?.get("settings")?.get("component_instance")?.value).component_id.value; | |
| 2498 | - } | |
| 2499 | - getContextMenuGroups() { | |
| 2500 | - const filteredGroups = super.getContextMenuGroups().filter((group) => group.name !== "save"); | |
| 2501 | - if (!this.getComponentId()) return filteredGroups; | |
| 2502 | - return updateGroups(filteredGroups, this._getContextMenuConfig()); | |
| 2503 | - } | |
| 2504 | - _getContextMenuConfig() { | |
| 2505 | - const isAdministrator = isUserAdministrator(); | |
| 2506 | - const hasPro = (0, _elementor_utils.hasProInstalled)(); | |
| 2507 | - const isOutdated = isProOutdatedForComponents(); | |
| 2508 | - const editComponentAction = { | |
| 2509 | - name: "edit component", | |
| 2510 | - icon: "eicon-edit", | |
| 2511 | - title: () => (0, _wordpress_i18n.__)("Edit Component", "elementor"), | |
| 2512 | - ...!hasPro && !isOutdated && { | |
| 2513 | - shortcut: `<a href="${EDIT_COMPONENT_CONTEXT_MENU_UPGRADE_URL}" target="_blank" onclick="event.stopPropagation()" class="elementor-context-menu-list__item__shortcut__promotion-badge"><i class="eicon-upgrade-crown"></i></a>`, | |
| 2514 | - hasShortcutAction: true | |
| 2515 | - }, | |
| 2516 | - isEnabled: () => isProComponentsSupported() || isOutdated, | |
| 2517 | - callback: (_, eventData) => this.editComponent(eventData) | |
| 2518 | - }; | |
| 2519 | - const detachInstanceAction = { | |
| 2520 | - name: "detach instance", | |
| 2521 | - icon: "eicon-chain-broken", | |
| 2522 | - title: () => (0, _wordpress_i18n.__)("Detach from Component", "elementor"), | |
| 2523 | - isEnabled: () => true, | |
| 2524 | - callback: (_, eventData) => this.detachInstance(eventData) | |
| 2525 | - }; | |
| 2526 | - return { | |
| 2527 | - add: { general: { | |
| 2528 | - index: 1, | |
| 2529 | - actions: isAdministrator ? [editComponentAction, detachInstanceAction] : [detachInstanceAction] | |
| 2530 | - } }, | |
| 2531 | - disable: { clipboard: ["pasteStyle", "resetStyle"] } | |
| 2532 | - }; | |
| 2533 | - } | |
| 2534 | - async switchDocument() { | |
| 2535 | - const { isAllowedToSwitchDocument, lockedBy } = await apiClient.getComponentLockStatus(this.getComponentId()); | |
| 2536 | - if (!isAllowedToSwitchDocument) options.showLockedByModal?.(lockedBy || ""); | |
| 2537 | - else switchToComponent(this.getComponentId(), this.model.get("id"), this.el); | |
| 2538 | - } | |
| 2539 | - editComponent({ trigger, location, secondaryLocation }) { | |
| 2540 | - if (isProOutdatedForComponents()) { | |
| 2541 | - notifyComponentEditUpdate(); | |
| 2542 | - return; | |
| 2543 | - } | |
| 2544 | - if (!isProComponentsSupported() || this.isComponentCurrentlyEdited()) return; | |
| 2545 | - this.switchDocument(); | |
| 2546 | - const editorSettings = this.model.get("editor_settings"); | |
| 2547 | - trackComponentEvent({ | |
| 2548 | - action: "edited", | |
| 2549 | - executedBy: "user", | |
| 2550 | - component_uid: editorSettings?.component_uid, | |
| 2551 | - component_name: editorSettings?.title, | |
| 2552 | - location, | |
| 2553 | - secondary_location: secondaryLocation, | |
| 2554 | - trigger | |
| 2555 | - }); | |
| 2556 | - } | |
| 2557 | - detachInstance({ trigger, location, secondaryLocation }) { | |
| 2558 | - const componentId = this.getComponentId(); | |
| 2559 | - const instanceId = this.model.get("id"); | |
| 2560 | - if (!componentId || !instanceId) return; | |
| 2561 | - const handleConfirm = async () => { | |
| 2562 | - try { | |
| 2563 | - await detachComponentInstance({ | |
| 2564 | - instanceId, | |
| 2565 | - componentId, | |
| 2566 | - trackingInfo: { | |
| 2567 | - location, | |
| 2568 | - secondaryLocation, | |
| 2569 | - trigger | |
| 2570 | - } | |
| 2571 | - }); | |
| 2572 | - } catch { | |
| 2573 | - (0, _elementor_editor_notifications.notify)({ | |
| 2574 | - type: "error", | |
| 2575 | - message: (0, _wordpress_i18n.__)("Failed to detach component instance.", "elementor"), | |
| 2576 | - id: "detach-component-instance-failed" | |
| 2577 | - }); | |
| 2578 | - } | |
| 2579 | - }; | |
| 2580 | - options.showDetachConfirmDialog?.(handleConfirm); | |
| 2581 | - } | |
| 2582 | - handleDblClick(e) { | |
| 2583 | - e.stopPropagation(); | |
| 2584 | - if (!isUserAdministrator()) return; | |
| 2585 | - if (isProOutdatedForComponents()) { | |
| 2586 | - notifyComponentEditUpdate(); | |
| 2587 | - return; | |
| 2588 | - } | |
| 2589 | - if (!(0, _elementor_utils.hasProInstalled)()) { | |
| 2590 | - notifyComponentEditUpgrade(); | |
| 2591 | - return; | |
| 2592 | - } | |
| 2593 | - const { triggers, locations, secondaryLocations } = this.eventsManagerConfig; | |
| 2594 | - this.editComponent({ | |
| 2595 | - trigger: triggers.doubleClick, | |
| 2596 | - location: locations.canvas, | |
| 2597 | - secondaryLocation: secondaryLocations.canvasElement | |
| 2598 | - }); | |
| 2599 | - } | |
| 2600 | - events() { | |
| 2601 | - return { | |
| 2602 | - ...super.events(), | |
| 2603 | - dblclick: this.handleDblClick | |
| 2604 | - }; | |
| 2605 | - } | |
| 2606 | - attributes() { | |
| 2607 | - return { | |
| 2608 | - ...super.attributes(), | |
| 2609 | - "data-elementor-id": this.getComponentId() | |
| 2610 | - }; | |
| 2611 | - } | |
| 2612 | - }, _componentRenderContext = /* @__PURE__ */ new WeakMap(), _a; | |
| 2613 | - } | |
| 2614 | - function setInactiveRecursively(model) { | |
| 2615 | - const editSettings = model.get("editSettings"); | |
| 2616 | - if (editSettings) editSettings.set("inactive", true); | |
| 2617 | - const elements = model.get("elements"); | |
| 2618 | - if (elements) elements.forEach((childModel) => { | |
| 2619 | - setInactiveRecursively(childModel); | |
| 2620 | - }); | |
| 2621 | - } | |
| 2622 | - function isUserAdministrator() { | |
| 2623 | - return window.elementor.config?.user?.is_administrator ?? false; | |
| 2624 | - } | |
| 2625 | - function createComponentModel() { | |
| 2626 | - const WidgetType = window.elementor.modules.elements.types.Widget; | |
| 2627 | - const BaseWidgetModel = new WidgetType().getModel(); | |
| 2628 | - return BaseWidgetModel.extend({ | |
| 2629 | - initialize(attributes, options) { | |
| 2630 | - BaseWidgetModel.prototype.initialize.call(this, attributes, options); | |
| 2631 | - const componentInstance = this.get("settings")?.get("component_instance"); | |
| 2632 | - if (componentInstance?.value) { | |
| 2633 | - const componentId = componentInstance.value.component_id?.value; | |
| 2634 | - if (componentId && typeof componentId === "number") this.set("componentId", componentId); | |
| 2635 | - } | |
| 2636 | - this.set("isGlobal", true); | |
| 2637 | - }, | |
| 2638 | - getTitle() { | |
| 2639 | - const editorSettings = this.get("editor_settings"); | |
| 2640 | - const instanceTitle = editorSettings?.title; | |
| 2641 | - if (instanceTitle) return instanceTitle; | |
| 2642 | - const componentUid = editorSettings?.component_uid; | |
| 2643 | - if (componentUid) { | |
| 2644 | - const component = selectComponentByUid((0, _elementor_store.__getState)(), componentUid); | |
| 2645 | - if (component?.name) return component.name; | |
| 2646 | - } | |
| 2647 | - return window.elementor.getElementData(this).title; | |
| 2648 | - }, | |
| 2649 | - getComponentId() { | |
| 2650 | - return this.get("componentId") || null; | |
| 2651 | - }, | |
| 2652 | - getComponentName() { | |
| 2653 | - return this.getTitle(); | |
| 2654 | - }, | |
| 2655 | - getComponentUid() { | |
| 2656 | - return this.get("editor_settings")?.component_uid || null; | |
| 2657 | - } | |
| 2658 | - }); | |
| 2659 | - } | |
| 2660 | - | |
| 2661 | -//#endregion | |
| 2662 | -//#region packages/packages/core/editor-components/src/populate-store.ts | |
| 2663 | - function PopulateStore() { | |
| 2664 | - (0, react.useEffect)(() => { | |
| 2665 | - (0, _elementor_store.__dispatch)(loadComponents()); | |
| 2666 | - }, []); | |
| 2667 | - return null; | |
| 2668 | - } | |
| 2669 | - | |
| 2670 | -//#endregion | |
| 2671 | -//#region packages/packages/core/editor-components/src/prevent-circular-nesting.ts | |
| 2672 | - var COMPONENT_TYPE = "e-component"; | |
| 2673 | - var COMPONENT_CIRCULAR_NESTING_ALERT = { | |
| 2674 | - type: "default", | |
| 2675 | - message: (0, _wordpress_i18n.__)("Can't add this component - components that contain each other can't be nested.", "elementor"), | |
| 2676 | - id: "circular-component-nesting-blocked" | |
| 2677 | - }; | |
| 2678 | - function initCircularNestingPrevention() { | |
| 2679 | - (0, _elementor_editor_v1_adapters.blockCommand)({ | |
| 2680 | - command: "document/elements/create", | |
| 2681 | - condition: blockCircularCreate | |
| 2682 | - }); | |
| 2683 | - (0, _elementor_editor_v1_adapters.blockCommand)({ | |
| 2684 | - command: "document/elements/move", | |
| 2685 | - condition: blockCircularMove | |
| 2686 | - }); | |
| 2687 | - (0, _elementor_editor_v1_adapters.blockCommand)({ | |
| 2688 | - command: "document/elements/paste", | |
| 2689 | - condition: blockCircularPaste | |
| 2690 | - }); | |
| 2691 | - } | |
| 2692 | - function wouldCreateCircularNesting(componentIdToAdd) { | |
| 2693 | - if (componentIdToAdd === void 0) return false; | |
| 2694 | - const state = (0, _elementor_store.__getState)(); | |
| 2695 | - const currentComponentId = selectCurrentComponentId(state); | |
| 2696 | - const path = selectPath(state); | |
| 2697 | - if (currentComponentId === null) return false; | |
| 2698 | - if (componentIdToAdd === currentComponentId) return true; | |
| 2699 | - return path.some((item) => item.componentId === componentIdToAdd); | |
| 2700 | - } | |
| 2701 | - function extractComponentIdFromModel(model) { | |
| 2702 | - if (!model) return null; | |
| 2703 | - if (!(model.widgetType === COMPONENT_TYPE)) return null; | |
| 2704 | - return model.settings?.component_instance?.value?.component_id?.value ?? null; | |
| 2705 | - } | |
| 2706 | - function extractComponentIdFromElement(element) { | |
| 2707 | - if (element.widgetType !== COMPONENT_TYPE) return null; | |
| 2708 | - return element.settings?.component_instance?.value?.component_id?.value ?? null; | |
| 2709 | - } | |
| 2710 | - function extractComponentIdsFromElements(elements) { | |
| 2711 | - const ids = []; | |
| 2712 | - for (const element of elements) { | |
| 2713 | - const componentId = extractComponentIdFromElement(element); | |
| 2714 | - if (componentId !== null) ids.push(componentId); | |
| 2715 | - if (element.elements?.length) ids.push(...extractComponentIdsFromElements(element.elements)); | |
| 2716 | - } | |
| 2717 | - return ids; | |
| 2718 | - } | |
| 2719 | - function extractComponentIdFromContainer(container) { | |
| 2720 | - if (container.model?.get?.("widgetType") !== COMPONENT_TYPE) return null; | |
| 2721 | - return ((container.model?.get?.("settings"))?.get?.("component_instance"))?.value?.component_id?.value ?? null; | |
| 2722 | - } | |
| 2723 | - function blockCircularCreate(args) { | |
| 2724 | - const componentId = extractComponentIdFromModel(args.model); | |
| 2725 | - if (componentId === null) return false; | |
| 2726 | - const isBlocked = wouldCreateCircularNesting(componentId); | |
| 2727 | - if (isBlocked) (0, _elementor_editor_notifications.notify)(COMPONENT_CIRCULAR_NESTING_ALERT); | |
| 2728 | - return isBlocked; | |
| 2729 | - } | |
| 2730 | - function blockCircularMove(args) { | |
| 2731 | - const { containers = [args.container] } = args; | |
| 2732 | - const hasCircularComponent = containers.some((container) => { | |
| 2733 | - if (!container) return false; | |
| 2734 | - return (0, _elementor_editor_elements.getAllDescendants)(container).some((element) => { | |
| 2735 | - const componentId = extractComponentIdFromContainer(element); | |
| 2736 | - if (componentId === null) return false; | |
| 2737 | - return wouldCreateCircularNesting(componentId); | |
| 2738 | - }); | |
| 2739 | - }); | |
| 2740 | - if (hasCircularComponent) (0, _elementor_editor_notifications.notify)(COMPONENT_CIRCULAR_NESTING_ALERT); | |
| 2741 | - return hasCircularComponent; | |
| 2742 | - } | |
| 2743 | - function blockCircularPaste(args) { | |
| 2744 | - const { storageType } = args; | |
| 2745 | - if (storageType !== "localstorage") return false; | |
| 2746 | - const data = window?.elementorCommon?.storage?.get(); | |
| 2747 | - if (!data?.clipboard?.elements) return false; | |
| 2748 | - const hasCircularComponent = extractComponentIdsFromElements(data.clipboard.elements).some(wouldCreateCircularNesting); | |
| 2749 | - if (hasCircularComponent) (0, _elementor_editor_notifications.notify)(COMPONENT_CIRCULAR_NESTING_ALERT); | |
| 2750 | - return hasCircularComponent; | |
| 2751 | - } | |
| 2752 | - | |
| 2753 | -//#endregion | |
| 2754 | -//#region packages/packages/core/editor-components/src/store/actions/remove-component-styles.ts | |
| 2755 | - function removeComponentStyles(id) { | |
| 2756 | - apiClient.invalidateComponentConfigCache(id); | |
| 2757 | - } | |
| 2758 | - | |
| 2759 | -//#endregion | |
| 2760 | -//#region packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts | |
| 2761 | - var INSUFFICIENT_PERMISSIONS_ERROR_CODE = "insufficient_permissions"; | |
| 2762 | - var PUBLISH_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-draft-failure/"; | |
| 2763 | - var PUBLISH_UPGRADE_NOTIFICATION_ID = "component-publish-upgrade"; | |
| 2764 | - async function publishDraftComponentsInPageBeforeSave({ status, elements }) { | |
| 2765 | - if (status !== "publish") return; | |
| 2766 | - const draftIds = [...(await getComponentDocuments({ elements })).values()].filter(_elementor_editor_documents.isDocumentDirty).map((document) => document.id); | |
| 2767 | - if (draftIds.length === 0) return; | |
| 2768 | - try { | |
| 2769 | - await apiClient.updateStatuses(draftIds, "publish"); | |
| 2770 | - } catch (error) { | |
| 2771 | - if (isInsufficientPermissionsError(error)) { | |
| 2772 | - notifyPublishUpgrade(); | |
| 2773 | - return; | |
| 2774 | - } | |
| 2775 | - throw error; | |
| 2776 | - } | |
| 2777 | - draftIds.forEach((id) => (0, _elementor_editor_documents.invalidateDocumentData)(id)); | |
| 2778 | - } | |
| 2779 | - function isInsufficientPermissionsError(error) { | |
| 2780 | - return error instanceof _elementor_http_client.AxiosError && error.response?.data?.code === INSUFFICIENT_PERMISSIONS_ERROR_CODE; | |
| 2781 | - } | |
| 2782 | - function notifyPublishUpgrade() { | |
| 2783 | - (0, _elementor_editor_notifications.notify)({ | |
| 2784 | - type: "promotion", | |
| 2785 | - id: PUBLISH_UPGRADE_NOTIFICATION_ID, | |
| 2786 | - message: (0, _wordpress_i18n.__)("You have unpublished component on this page. You need a pro version to publish it.", "elementor"), | |
| 2787 | - additionalActionProps: [{ | |
| 2788 | - size: "small", | |
| 2789 | - variant: "contained", | |
| 2790 | - color: "promotion", | |
| 2791 | - href: PUBLISH_UPGRADE_URL, | |
| 2792 | - target: "_blank", | |
| 2793 | - children: (0, _wordpress_i18n.__)("Upgrade Now", "elementor") | |
| 2794 | - }] | |
| 2795 | - }); | |
| 2796 | - } | |
| 2797 | - | |
| 2798 | -//#endregion | |
| 2799 | -//#region packages/packages/core/editor-components/src/sync/before-save.ts | |
| 2800 | - var beforeSave = ({ container, status }) => { | |
| 2801 | - return publishDraftComponentsInPageBeforeSave({ | |
| 2802 | - elements: container?.model.get("elements").toJSON?.() ?? [], | |
| 2803 | - status | |
| 2804 | - }); | |
| 2805 | - }; | |
| 2806 | - | |
| 2807 | -//#endregion | |
| 2808 | -//#region packages/packages/core/editor-components/src/sync/load-component-data-after-instance-added.ts | |
| 2809 | - function initLoadComponentDataAfterInstanceAdded() { | |
| 2810 | - (0, _elementor_editor_v1_adapters.registerDataHook)("after", "document/elements/paste", (_args, result) => { | |
| 2811 | - load(result); | |
| 2812 | - }); | |
| 2813 | - (0, _elementor_editor_v1_adapters.registerDataHook)("after", "document/elements/import", (_args, result) => { | |
| 2814 | - load(result); | |
| 2815 | - }); | |
| 2816 | - } | |
| 2817 | - function load(result) { | |
| 2818 | - if (!result) return; | |
| 2819 | - loadComponentsAssets((Array.isArray(result) ? result : [result]).map((container) => container.model?.toJSON()).filter((element) => !!element)); | |
| 2820 | - } | |
| 2821 | - | |
| 2822 | -//#endregion | |
| 2823 | -//#region packages/packages/core/editor-components/src/init.ts | |
| 2824 | - function init() { | |
| 2825 | - (0, _elementor_store.__registerSlice)(slice); | |
| 2826 | - (0, _elementor_editor_canvas.registerElementType)(COMPONENT_WIDGET_TYPE, (options) => createComponentType({ | |
| 2827 | - ...options, | |
| 2828 | - showLockedByModal: openEditModeDialog, | |
| 2829 | - showDetachConfirmDialog: openDetachConfirmDialog | |
| 2830 | - })); | |
| 2831 | - window.elementorCommon.__beforeSave = beforeSave; | |
| 2832 | - (0, _elementor_editor_elements_panel.injectTab)({ | |
| 2833 | - id: "components", | |
| 2834 | - label: (0, _wordpress_i18n.__)("Components", "elementor"), | |
| 2835 | - component: Components, | |
| 2836 | - position: 1 | |
| 2837 | - }); | |
| 2838 | - (0, _elementor_editor.injectIntoLogic)({ | |
| 2839 | - id: "components-populate-store", | |
| 2840 | - component: PopulateStore | |
| 2841 | - }); | |
| 2842 | - (0, _elementor_editor_v1_adapters.registerDataHook)("after", "editor/documents/attach-preview", () => { | |
| 2843 | - const { id, config } = (0, _elementor_editor_documents.getV1CurrentDocument)() ?? {}; | |
| 2844 | - if (!id) return; | |
| 2845 | - removeComponentStyles(id); | |
| 2846 | - loadComponentsAssets(config?.elements ?? []); | |
| 2847 | - }); | |
| 2848 | - _elementor_editor_embedded_documents_manager.embeddedDocumentsManager.onDocumentLoad((_documentId, data) => { | |
| 2849 | - loadComponentsAssets(data.elements ?? []); | |
| 2850 | - }); | |
| 2851 | - (0, _elementor_editor.injectIntoLogic)({ | |
| 2852 | - id: "templates", | |
| 2853 | - component: LoadTemplateComponents | |
| 2854 | - }); | |
| 2855 | - (0, _elementor_editor_editing_panel.registerEditingPanelReplacement)({ | |
| 2856 | - id: "component-instance-edit-panel", | |
| 2857 | - condition: (_, elementType) => elementType.key === "e-component", | |
| 2858 | - component: InstanceEditingPanel | |
| 2859 | - }); | |
| 2860 | - _elementor_editor_canvas.settingsTransformersRegistry.register("component-instance", componentInstanceTransformer); | |
| 2861 | - _elementor_editor_canvas.settingsTransformersRegistry.register("overridable", componentOverridableTransformer); | |
| 2862 | - _elementor_editor_canvas.settingsTransformersRegistry.register("override", componentOverrideTransformer); | |
| 2863 | - initCircularNestingPrevention(); | |
| 2864 | - initLoadComponentDataAfterInstanceAdded(); | |
| 2865 | - } | |
| 2866 | - | |
| 2867 | -//#endregion | |
| 2868 | -//#region packages/packages/core/editor-components/src/index.ts | |
| 2869 | - var src_exports = /* @__PURE__ */ __exportAll({ | |
| 2870 | - COMPONENT_WIDGET_TYPE: () => COMPONENT_WIDGET_TYPE, | |
| 2871 | - ComponentInstanceProvider: () => ComponentInstanceProvider, | |
| 2872 | - ComponentItem: () => ComponentItem, | |
| 2873 | - ComponentName: () => ComponentName, | |
| 2874 | - ComponentSearch: () => ComponentSearch, | |
| 2875 | - ComponentsList: () => ComponentsList, | |
| 2876 | - DetachAction: () => DetachAction, | |
| 2877 | - EditComponentAction: () => EditComponentAction, | |
| 2878 | - EmptySearchResult: () => EmptySearchResult, | |
| 2879 | - InstanceEmptyState: () => EmptyState, | |
| 2880 | - InstancePanelBody: () => InstancePanelBody, | |
| 2881 | - InstancePanelHeader: () => InstancePanelHeader, | |
| 2882 | - LoadingComponents: () => LoadingComponents, | |
| 2883 | - OverridablePropProvider: () => OverridablePropProvider, | |
| 2884 | - SLICE_NAME: () => SLICE_NAME, | |
| 2885 | - SearchProvider: () => SearchProvider, | |
| 2886 | - apiClient: () => apiClient, | |
| 2887 | - componentInstanceOverridePropTypeUtil: () => componentInstanceOverridePropTypeUtil, | |
| 2888 | - componentInstanceOverridesPropTypeUtil: () => componentInstanceOverridesPropTypeUtil, | |
| 2889 | - componentInstancePropTypeUtil: () => componentInstancePropTypeUtil, | |
| 2890 | - componentOverridablePropTypeUtil: () => componentOverridablePropTypeUtil, | |
| 2891 | - componentsActions: () => componentsActions, | |
| 2892 | - componentsSelectors: () => componentsSelectors, | |
| 2893 | - createComponentsAction: () => createComponentsAction, | |
| 2894 | - filterValidOverridableProps: () => filterValidOverridableProps, | |
| 2895 | - getComponentDocumentData: () => getComponentDocumentData, | |
| 2896 | - getContainerByOriginId: () => getContainerByOriginId, | |
| 2897 | - getOverridableProp: () => getOverridableProp, | |
| 2898 | - getPropTypeForComponentOverride: () => getPropTypeForComponentOverride, | |
| 2899 | - init: () => init, | |
| 2900 | - isComponentInstance: () => isComponentInstance, | |
| 2901 | - loadComponentsAssets: () => loadComponentsAssets, | |
| 2902 | - onElementDrop: () => onElementDrop, | |
| 2903 | - publishDraftComponentsInPageBeforeSave: () => publishDraftComponentsInPageBeforeSave, | |
| 2904 | - registerComponentsReducer: () => registerComponentsReducer, | |
| 2905 | - resolveOverridePropValue: () => resolveOverridePropValue, | |
| 2906 | - selectComponentByUid: () => selectComponentByUid, | |
| 2907 | - selectCreatedThisSession: () => selectCreatedThisSession, | |
| 2908 | - selectOverridableProps: () => selectOverridableProps, | |
| 2909 | - selectPath: () => selectPath, | |
| 2910 | - slice: () => slice, | |
| 2911 | - switchToComponent: () => switchToComponent, | |
| 2912 | - trackComponentEvent: () => trackComponentEvent, | |
| 2913 | - updateOverridableProp: () => updateOverridableProp, | |
| 2914 | - useComponentInstanceElement: () => useComponentInstanceElement, | |
| 2915 | - useComponents: () => useComponents, | |
| 2916 | - useComponentsPermissions: () => useComponentsPermissions, | |
| 2917 | - useCurrentComponent: () => useCurrentComponent, | |
| 2918 | - useCurrentComponentId: () => useCurrentComponentId, | |
| 2919 | - useFilteredComponents: () => useFilteredComponents, | |
| 2920 | - useInstancePanelData: () => useInstancePanelData, | |
| 2921 | - useIsSanitizedComponent: () => useIsSanitizedComponent, | |
| 2922 | - useOverridablePropValue: () => useOverridablePropValue, | |
| 2923 | - useOverridableProps: () => useOverridableProps, | |
| 2924 | - useSanitizeOverridableProps: () => useSanitizeOverridableProps | |
| 2925 | - }); | |
| 2926 | - | |
| 2927 | -//#endregion | |
| 2928 | -//#region \0elementor-package-library-entry | |
| 2929 | - (window.elementorV2 = window.elementorV2 || {}).editorComponents = src_exports; | |
| 2930 | - | |
| 2931 | -//#endregion | |
| 2932 | -})(elementorV2.editor, elementorV2.editorCanvas, elementorV2.editorDocuments, elementorV2.editorEditingPanel, elementorV2.editorElementsPanel, elementorV2.editorEmbeddedDocumentsManager, elementorV2.editorV1Adapters, elementorV2.store, wp.i18n, elementorV2.httpClient, React, elementorV2.editorUi, elementorV2.ui, elementorV2.utils, elementorV2.icons, elementorV2.editorCurrentUser, elementorV2.editorNotifications, elementorV2.editorElements, elementorV2.editorProps, elementorV2.schema, elementorV2.events, elementorV2.editorPanels, elementorV2.editorControls, elementorV2.editorTemplates); | |
| 2933 | -window.elementorV2.editorComponents?.init?.(); | |
| 1 | +/*! For license information please see editor-components.js.LICENSE.txt */ | |
| 2 | +!function(){"use strict";var e={"./packages/packages/core/editor-components/src/api.ts":function(e,t,n){n.r(t),n.d(t,{apiClient:function(){return a},getParams:function(){return getParams}});var o=n("@elementor/editor-v1-adapters"),r=n("@elementor/http-client");const s="elementor/v1/components",getParams=e=>({action:"get_document_config",unique_id:`document-config-${e}`,data:{id:e}}),a={get:()=>(0,r.httpService)().get(`${s}`).then(e=>e.data.data),create:e=>(0,r.httpService)().post(`${s}`,e).then(e=>e.data.data),updateStatuses:(e,t)=>(0,r.httpService)().put(`${s}/status`,{ids:e,status:t}),getComponentConfig:e=>o.ajax.load(getParams(e)),invalidateComponentConfigCache:e=>o.ajax.invalidateCache(getParams(e)),getComponentLockStatus:async e=>await(0,r.httpService)().get(`${s}/lock-status`,{params:{componentId:e}}).then(e=>{const{is_current_user_allow_to_edit:t,locked_by:n}=e.data.data;return{isAllowedToSwitchDocument:t,lockedBy:n||""}}),lockComponent:async e=>await(0,r.httpService)().post(`${s}/lock`,{componentId:e}).then(e=>e.data),unlockComponent:async e=>await(0,r.httpService)().post(`${s}/unlock`,{componentId:e}).then(e=>e.data),getOverridableProps:async e=>await(0,r.httpService)().get(`${s}/overridable-props`,{params:{componentId:e.toString()}}).then(e=>e.data.data),updateArchivedComponents:async(e,t)=>await(0,r.httpService)().post(`${s}/archive`,{componentIds:e,status:t}).then(e=>e.data.data),updateComponentTitle:(e,t)=>(0,r.httpService)().post(`${s}/update-titles`,{components:e,status:t}).then(e=>e.data.data),validate:async e=>await(0,r.httpService)().post(`${s}/create-validate`,e).then(e=>e.data)}},"./packages/packages/core/editor-components/src/component-instance-transformer.ts":function(e,t,n){n.r(t),n.d(t,{componentInstanceTransformer:function(){return c}});var o=n("@elementor/editor-canvas"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts"),a=n("./packages/packages/core/editor-components/src/utils/component-document-data.ts");const c=(0,o.createTransformer)(async({component_id:e,overrides:t})=>{const n=(0,s.selectUnpublishedComponents)((0,r.__getState)()).find(({uid:t})=>t===e),o=t?.reduce((e,t)=>({...e,...t}),{});if(n)return{elements:structuredClone(n.elements),overrides:o};if("number"!=typeof e)throw new Error(`Component ID "${e}" not valid.`);const c=await(0,a.getComponentDocumentData)(e);return{elements:c?.elements??[],overrides:o}})},"./packages/packages/core/editor-components/src/component-overridable-transformer.ts":function(e,t,n){n.r(t),n.d(t,{componentOverridableTransformer:function(){return r}});var o=n("@elementor/editor-canvas");const r=(0,o.createTransformer)((e,t)=>{const{overrides:n}=t.renderContext??{},r=n?.[e.override_key];if(r){return function isOriginValueOverride(e){return"override"===e.$$type}(e.origin_value)?function transformOverride(e,t,n){const r=o.settingsTransformersRegistry.get("override");if(!r)return null;const s=r(e.origin_value.value,t);if(!s)return null;const[a]=Object.keys(s);return{[a]:n}}(e,t,r):r}return e.origin_value})},"./packages/packages/core/editor-components/src/component-override-transformer.ts":function(e,t,n){n.r(t),n.d(t,{componentOverrideTransformer:function(){return r}});var o=n("@elementor/editor-canvas");const r=(0,o.createTransformer)(e=>{const{override_key:t,override_value:n}=e;return{[t]:n}})},"./packages/packages/core/editor-components/src/components/components-tab/component-search.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentSearch:function(){return ComponentSearch}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx");const ComponentSearch=()=>{const{inputValue:e,handleChange:t}=(0,c.useSearch)();return o.createElement(s.Stack,{direction:"row",gap:.5,sx:{width:"100%",px:2,py:1.5}},o.createElement(s.Box,{sx:{flexGrow:1}},o.createElement(s.TextField,{role:"search",fullWidth:!0,size:"tiny",value:e,placeholder:(0,a.__)("Search","elementor"),onChange:e=>t(e.target.value),InputProps:{startAdornment:o.createElement(s.InputAdornment,{position:"start"},o.createElement(r.SearchIcon,{fontSize:"tiny"}))}})))}},"./packages/packages/core/editor-components/src/components/components-tab/components-item.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentItem:function(){return c},ComponentName:function(){return ComponentName}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/icons"),a=n("@elementor/ui");function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},_extends.apply(null,arguments)}const c=(0,o.forwardRef)(({component:e,disabled:t=!0,draggable:n,onDragStart:r,onDragEnd:c,onClick:p,isEditing:l=!1,error:d=null,nameSlot:m,endSlot:u,...g},f)=>o.createElement(a.ListItemButton,_extends({disabled:t,draggable:n,onDragStart:r,onDragEnd:c,shape:"rounded",ref:f,sx:{border:"solid 1px",borderColor:"divider",py:.5,px:1,display:"flex",width:"100%",alignItems:"center",gap:1}},g),o.createElement(a.Box,{display:"flex",alignItems:"center",gap:1,minWidth:0,flexGrow:1,onClick:p},o.createElement(a.ListItemIcon,{size:"tiny"},o.createElement(s.ComponentsIcon,{fontSize:"tiny"})),o.createElement(i,{isActive:l,isError:!!d},o.createElement(a.Box,{display:"flex",flex:1,minWidth:0,flexGrow:1},m??o.createElement(ComponentName,{name:e.name})))),u)),i=(0,a.styled)(a.Box,{shouldForwardProp:e=>"isActive"!==e&&"isError"!==e})(({theme:e,isActive:t,isError:n})=>({display:"flex",width:"100%",flexGrow:1,borderRadius:e.spacing(.5),border:getIndicatorBorder({isActive:t,isError:n,theme:e}),padding:`0 ${e.spacing(1)}`,marginLeft:t?e.spacing(1):0,minWidth:0})),getIndicatorBorder=({isActive:e,isError:t,theme:n})=>t?`2px solid ${n.palette.error.main}`:e?`2px solid ${n.palette.secondary.main}`:"none";function ComponentName({name:e,editable:t}){return t?.isEditing?o.createElement(r.EditableField,_extends({ref:t.ref,as:a.Typography,variant:"caption"},t.getProps())):o.createElement(r.EllipsisWithTooltip,{title:e,as:a.Typography,variant:"caption",color:"text.primary"})}},"./packages/packages/core/editor-components/src/components/components-tab/components-list.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsList:function(){return ComponentsList},EmptySearchResult:function(){return EmptySearchResult},useFilteredComponents:function(){return useFilteredComponents}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/hooks/use-components.ts"),i=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),p=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),l=n("./packages/packages/core/editor-components/src/components/components-tab/components-item.tsx"),d=n("./packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx"),m=n("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx");const u={fontSize:"0.875rem !important",fontWeight:"500 !important"};function ComponentsList(){const{components:e,isLoading:t,searchValue:n}=useFilteredComponents();if(t)return o.createElement(d.LoadingComponents,null);return!e?.length?n.length?o.createElement(EmptySearchResult,null):(0,p.isProOutdatedForComponents)()?o.createElement(ProOutdatedEmptyState,null):(0,p.isProComponentsSupported)()?o.createElement(EmptyState,null):o.createElement(ProUpgradeEmptyState,null):o.createElement(s.List,{sx:{display:"flex",flexDirection:"column",gap:1,px:2}},e.map(e=>o.createElement(l.ComponentItem,{key:e.uid,component:e})))}const ProUpgradeEmptyState=()=>o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",sx:{px:2,py:4},gap:2,overflow:"hidden"},o.createElement(s.Stack,{alignItems:"center",gap:1},o.createElement(r.ComponentsIcon,{fontSize:"large",sx:{color:"text.secondary"}}),o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,a.__)("Create Reusable Components","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{maxWidth:200}},(0,a.__)("Create design elements that sync across your entire site.","elementor"))),o.createElement(s.Button,{variant:"contained",color:"promotion",size:"small",startIcon:o.createElement(r.CrownFilledIcon,null),href:"https://go.elementor.com/go-pro-components/",target:"_blank",rel:"noopener noreferrer"},(0,a.__)("Upgrade now","elementor"))),ProOutdatedEmptyState=()=>o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",sx:{px:2,py:4,maxWidth:268,m:"auto"},gap:2,overflow:"hidden"},o.createElement(s.Stack,{alignItems:"center",gap:1},o.createElement(r.ComponentsIcon,{fontSize:"large",sx:{color:"text.secondary"}}),o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,a.__)("Create Reusable Components","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary"},(0,a.__)("Create design elements that sync across your entire site.","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{mt:1}},(0,a.__)("To create components, update Elementor Pro to the latest version.","elementor"))),o.createElement(s.Button,{variant:"text",color:"info",size:"small",href:"/wp-admin/plugins.php",target:"_blank",rel:"noopener noreferrer"},(0,a.__)("Update Elementor Pro","elementor"))),EmptyState=()=>{const{canCreate:e}=(0,i.useComponentsPermissions)();return o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",sx:{px:2,py:4},gap:2,overflow:"hidden"},o.createElement(s.Stack,{alignItems:"center",gap:1},o.createElement(r.ComponentsIcon,{fontSize:"large",sx:{color:"text.secondary"}}),o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,a.__)("No components yet","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{maxWidth:200}},(0,a.__)("Components are reusable blocks that sync across your site.","elementor"),o.createElement("br",null),e?(0,a.__)("Create once, use everywhere.","elementor"):(0,a.__)("With your current role, you cannot create components. Contact an administrator to create one.","elementor")),o.createElement(s.Link,{href:"http://go.elementor.com/components-guide-article",target:"_blank",rel:"noopener noreferrer",variant:"caption",color:"info.main"},(0,a.__)("Learn more about components","elementor"))),e&&o.createElement(o.Fragment,null,o.createElement(s.Divider,{sx:{width:"100%"}}),o.createElement(s.Stack,{alignItems:"center",gap:1,width:"100%"},o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,a.__)("Create your first one:","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{maxWidth:228}},(0,a.__)('Right-click any div-block or flexbox on your canvas or structure and select "Create component"',"elementor")))))},EmptySearchResult=()=>{const{searchValue:e,clearSearch:t}=(0,m.useSearch)();return o.createElement(s.Stack,{color:"text.secondary",pt:5,alignItems:"center",gap:1,overflow:"hidden",justifySelf:"center"},o.createElement(r.ComponentsIcon,null),o.createElement(s.Box,{sx:{width:"100%"}},o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"inherit",sx:u},(0,a.__)("Sorry, nothing matched","elementor")),e&&o.createElement(s.Typography,{variant:"subtitle2",color:"inherit",sx:{...u,display:"flex",width:"100%",justifyContent:"center"}},o.createElement("span",null,"“"),o.createElement("span",{style:{maxWidth:"80%",overflow:"hidden",textOverflow:"ellipsis"}},e),o.createElement("span",null,"”."))),o.createElement(s.Typography,{align:"center",variant:"caption",color:"inherit"},(0,a.__)("Try something else.","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"inherit"},o.createElement(s.Link,{color:"secondary",variant:"caption",component:"button",onClick:t},(0,a.__)("Clear & try again","elementor"))))},useFilteredComponents=()=>{const{components:e,isLoading:t}=(0,c.useComponents)(),{searchValue:n}=(0,m.useSearch)();return{components:e.filter(e=>e.name.toLowerCase().includes(n.toLowerCase())),isLoading:t,searchValue:n}}},"./packages/packages/core/editor-components/src/components/components-tab/components-pro-notification.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsProNotification:function(){return ComponentsProNotification},UPGRADE_URL:function(){return a}});var o=n("react"),r=n("@wordpress/i18n"),s=n("./packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx");const a="https://go.elementor.com/go-pro-components-exist-footer/";function ComponentsProNotification(){return o.createElement(s.ComponentsUpgradeAlert,{title:(0,r.__)("Create new components","elementor"),description:(0,r.__)("Creating new components requires an active Pro subscription.","elementor"),upgradeUrl:a})}},"./packages/packages/core/editor-components/src/components/components-tab/components-update-notification.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsUpdateNotification:function(){return ComponentsUpdateNotification}});var o=n("react"),r=n("@wordpress/i18n"),s=n("./packages/packages/core/editor-components/src/components/components-update-alert.tsx");function ComponentsUpdateNotification(){return o.createElement(s.ComponentsUpdateAlert,{title:(0,r.__)("Create new Components","elementor"),description:(0,r.__)("To create new components, update Elementor Pro to the latest version.","elementor")})}},"./packages/packages/core/editor-components/src/components/components-tab/components.tsx":function(e,t,n){n.r(t),n.d(t,{Components:function(){return Components}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/ui"),a=n("./packages/packages/core/editor-components/src/hooks/use-components.ts"),c=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),i=n("./packages/packages/core/editor-components/src/components/components-tab/component-search.tsx"),p=n("./packages/packages/core/editor-components/src/components/components-tab/components-list.tsx"),l=n("./packages/packages/core/editor-components/src/components/components-tab/components-pro-notification.tsx"),d=n("./packages/packages/core/editor-components/src/components/components-tab/components-update-notification.tsx"),m=n("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx");const u="components-full-height-panel",ComponentsContent=()=>{const{components:e,isLoading:t}=(0,a.useComponents)(),n=!t&&e.length>0,r=!(0,c.isProComponentsSupported)()&&n,m=(0,c.isProOutdatedForComponents)();return(0,o.useLayoutEffect)(()=>{let e=document.getElementById(u);return e||(e=document.createElement("style"),e.id=u,e.textContent="\n#elementor-panel-page-elements {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100%;\n}\n\n#elementor-panel-elements {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n}\n\n#elementor-panel-elements-wrapper {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n}\n",document.head.appendChild(e)),()=>{document.getElementById(u)?.remove()}},[]),o.createElement(s.Stack,{justifyContent:"space-between",sx:{flex:1,minHeight:0}},n&&o.createElement(i.ComponentSearch,null),o.createElement(p.ComponentsList,null),r&&(m?o.createElement(d.ComponentsUpdateNotification,null):o.createElement(l.ComponentsProNotification,null)))},Components=()=>o.createElement(r.ThemeProvider,null,o.createElement(m.SearchProvider,{localStorageKey:"elementor-components-search"},o.createElement(ComponentsContent,null)))},"./packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx":function(e,t,n){n.r(t),n.d(t,{LoadingComponents:function(){return LoadingComponents}});var o=n("react"),r=n("@elementor/ui");const s=Array.from({length:3},(e,t)=>t),LoadingComponents=()=>o.createElement(r.Stack,{"aria-label":"Loading components",gap:1.5,sx:{pointerEvents:"none",position:"relative",maxHeight:"300px",overflow:"hidden",px:1,"&:after":{position:"absolute",bottom:0,content:'""',left:0,width:"100%",height:"40%",pointerEvents:"none",zIndex:1}}},s.map(e=>o.createElement(r.Box,{key:e,display:"flex",alignItems:"center",gap:1.5,sx:{py:.75,px:1.5,opacity:0,animation:`e-loading-fade-in 0.4s ease-out ${80*e}ms forwards`,"@keyframes e-loading-fade-in":{from:{opacity:0,transform:"translateY(4px)"},to:{opacity:1,transform:"translateY(0)"}}}},o.createElement(r.Skeleton,{animation:"wave",variant:"rounded",width:24,height:24}),o.createElement(r.Skeleton,{animation:"wave",variant:"rounded",width:"60%",height:14}))))},"./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx":function(e,t,n){n.r(t),n.d(t,{SearchProvider:function(){return SearchProvider},useSearch:function(){return useSearch}});var o=n("react"),r=n("@elementor/utils");const s=(0,o.createContext)(void 0),SearchProvider=({children:e,localStorageKey:t})=>{const{debouncedValue:n,handleChange:a,inputValue:c}=(0,r.useSearchState)({localStorageKey:t});return o.createElement(s.Provider,{value:{handleChange:a,clearSearch:()=>{a("")},searchValue:n,inputValue:c}},e)},useSearch=()=>{const e=(0,o.useContext)(s);if(!e)throw new Error("useSearch must be used within a SearchProvider");return e}},"./packages/packages/core/editor-components/src/components/components-update-alert.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsUpdateAlert:function(){return ComponentsUpdateAlert}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n");const c="/wp-admin/plugins.php";function ComponentsUpdateAlert({title:e,description:t}){return o.createElement(s.Box,{sx:{mt:"auto",position:"sticky",bottom:0}},o.createElement(s.Alert,{variant:"standard",color:"info",icon:o.createElement(r.InfoCircleFilledIcon,{fontSize:"tiny"}),role:"status",size:"small",action:o.createElement(s.AlertAction,{variant:"contained",color:"info",href:c,target:"_blank",rel:"noopener noreferrer"},(0,a.__)("Upgrade Now","elementor")),sx:{m:2,mt:1}},o.createElement(s.AlertTitle,null,e),o.createElement(s.Typography,{variant:"caption"},t)))}},"./packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsUpgradeAlert:function(){return ComponentsUpgradeAlert}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n");function ComponentsUpgradeAlert({title:e,description:t,upgradeUrl:n}){return o.createElement(s.Box,{sx:{mt:"auto",position:"sticky",bottom:0}},o.createElement(s.Alert,{variant:"standard",color:"promotion",icon:o.createElement(r.CrownFilledIcon,{fontSize:"tiny"}),role:"status",size:"small",action:o.createElement(s.AlertAction,{variant:"contained",color:"promotion",href:n,target:"_blank",rel:"noopener noreferrer"},(0,a.__)("Upgrade now","elementor")),sx:{m:2,mt:1}},o.createElement(s.AlertTitle,null,e),o.createElement(s.Typography,{variant:"caption"},t)))}},"./packages/packages/core/editor-components/src/components/control-label.tsx":function(e,t,n){n.r(t),n.d(t,{ControlLabel:function(){return ControlLabel}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/ui");const ControlLabel=({children:e,...t})=>o.createElement(s.Stack,{direction:"row",alignItems:"center",justifyItems:"start",gap:.25},o.createElement(r.ControlFormLabel,t,e),o.createElement(r.ControlAdornments,null))},"./packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx":function(e,t,n){n.r(t),n.d(t,{DetachInstanceConfirmationDialog:function(){return DetachInstanceConfirmationDialog},openDetachConfirmDialog:function(){return openDetachConfirmDialog}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/icons"),a=n("@wordpress/i18n");function DetachInstanceConfirmationDialog({open:e,onClose:t,onConfirm:n}){return o.createElement(r.ConfirmationDialog,{open:e,onClose:t},o.createElement(r.ConfirmationDialog.Title,{icon:s.AlertTriangleFilledIcon,iconColor:"secondary"},(0,a.__)("Detach from Component?","elementor")),o.createElement(r.ConfirmationDialog.Content,null,o.createElement(r.ConfirmationDialog.ContentText,null,(0,a.__)("Detaching this instance will break its link to the Component. Changes to the Component will no longer apply. Continue?","elementor"))),o.createElement(r.ConfirmationDialog.Actions,{onClose:t,onConfirm:n,confirmLabel:(0,a.__)("Detach","elementor"),color:"primary"}))}function openDetachConfirmDialog(e){(0,r.openDialog)({component:o.createElement(DetachInstanceConfirmationDialog,{open:!0,onClose:r.closeDialog,onConfirm:()=>{(0,r.closeDialog)(),e()}})})}},"./packages/packages/core/editor-components/src/components/errors.ts":function(e,t,n){n.r(t),n.d(t,{OverrideControlInnerElementNotFoundError:function(){return r}});var o=n("@elementor/utils");const r=(0,o.createError)({code:"override_control_inner_element_not_found",message:"Component inner element not found for override control. The element may have been deleted without updating the overridable props, or the component has not finished rendering yet."})},"./packages/packages/core/editor-components/src/components/in-edit-mode.tsx":function(e,t,n){n.r(t),n.d(t,{openEditModeDialog:function(){return openEditModeDialog}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/icons"),a=n("@elementor/ui"),c=n("@wordpress/i18n");const openEditModeDialog=e=>{(0,r.openDialog)({component:o.createElement(EditModeDialog,{lockedBy:e})})},EditModeDialog=({lockedBy:e})=>{const t=(0,c.__)("%s is currently editing this document","elementor").replace("%s",e);return o.createElement(o.Fragment,null,o.createElement(a.DialogHeader,{logo:!1},o.createElement(a.Box,{display:"flex",alignItems:"center",gap:1},o.createElement(a.Icon,{color:"secondary"},o.createElement(s.InfoCircleFilledIcon,{fontSize:"medium"})),o.createElement(a.Typography,{variant:"subtitle1"},t))),o.createElement(a.DialogContent,null,o.createElement(a.Stack,{spacing:2,direction:"column"},o.createElement(a.Typography,{variant:"body2"},(0,c.__)("You can wait for them to finish or reach out to coordinate your changes together.","elementor")),o.createElement(a.DialogActions,null,o.createElement(a.Button,{color:"secondary",variant:"contained",onClick:r.closeDialog},(0,c.__)("Close","elementor"))))))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx":function(e,t,n){n.r(t),n.d(t,{DetachAction:function(){return DetachAction}});var o=n("react"),r=n("@elementor/editor-notifications"),s=n("@elementor/icons"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/index.ts"),i=n("./packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx"),p=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx");const DetachAction=({componentInstanceId:e,componentId:t})=>{const[n,l]=(0,o.useState)(!1),d=(0,a.__)("Detach from Component","elementor");return o.createElement(o.Fragment,null,o.createElement(p.EditComponentAction,{label:d,icon:s.DetachIcon,onClick:()=>{l(!0)}}),o.createElement(i.DetachInstanceConfirmationDialog,{open:n,onClose:()=>{l(!1)},onConfirm:async()=>{l(!1);try{await(0,c.detachComponentInstance)({instanceId:e,componentId:t,trackingInfo:getDetachTrackingInfo()})}catch{(0,r.notify)({type:"error",message:(0,a.__)("Failed to detach component instance.","elementor"),id:"detach-component-instance-failed"})}}}))};function getDetachTrackingInfo(){const e=window,t=e?.elementorCommon?.eventsManager?.config;return t?{location:t.locations.components.instanceEditingPanel,trigger:t.triggers.click}:{location:"",trigger:""}}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx":function(e,t,n){n.r(t),n.d(t,{EmptyState:function(){return EmptyState}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts");const EmptyState=({onEditComponent:e})=>{const{canEdit:t}=(0,c.useComponentsPermissions)(),n=t?(0,a.__)("Edit the component to add properties, manage them or update the design across all instances.","elementor"):(0,a.__)("With your current role, you cannot edit this component. Contact an administrator to add properties.","elementor");return o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",color:"text.secondary",sx:{p:2.5,pt:8,pb:5.5,mt:1},gap:1.5},o.createElement(r.ComponentPropListIcon,{fontSize:"large"}),o.createElement(s.Typography,{align:"center",variant:"subtitle2"},(0,a.__)("No properties yet","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",maxWidth:"170px"},n),t&&o.createElement(s.Button,{variant:"outlined",color:"secondary",size:"small",sx:{mt:1},disabled:!e,onClick:e},o.createElement(r.PencilIcon,{fontSize:"small"}),(0,a.__)("Edit component","elementor")))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-editing-panel.tsx":function(e,t,n){n.r(t),n.d(t,{InstanceEditingPanel:function(){return InstanceEditingPanel}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),i=n("./packages/packages/core/editor-components/src/provider/component-instance-context.tsx"),p=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),l=n("./packages/packages/core/editor-components/src/components/components-update-alert.tsx"),d=n("./packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx"),m=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx"),u=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx"),g=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx"),f=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx"),v=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts");const k="https://go.elementor.com/go-pro-components-Instance-edit-footer/";function InstanceEditingPanel(){const{canEdit:e}=(0,c.useComponentsPermissions)(),t=(0,v.useInstancePanelData)();if(!t)return null;const{componentId:n,component:y,overrides:_,overridableProps:C,groups:h,isEmpty:b,componentInstanceId:E}=t,I=(0,a.__)("Edit %s","elementor").replace("%s",y.name),P=o.createElement(s.Stack,{direction:"row",gap:.5},o.createElement(m.DetachAction,{componentInstanceId:E,componentId:n}),e&&o.createElement(f.EditComponentAction,{disabled:!0,label:I,icon:r.PencilIcon}));return o.createElement(s.Box,{"data-testid":"instance-editing-panel",sx:{display:"flex",flexDirection:"column",height:"100%"}},o.createElement(i.ComponentInstanceProvider,{componentId:n,overrides:_,overridableProps:C},o.createElement(f.InstancePanelHeader,{componentName:y.name,actions:P}),o.createElement(g.InstancePanelBody,{groups:h,isEmpty:b,emptyState:o.createElement(u.EmptyState,null),componentInstanceId:E})),!(0,p.isProComponentsSupported)()&&((0,p.isProOutdatedForComponents)()?o.createElement(l.ComponentsUpdateAlert,{title:(0,a.__)("Edit Component","elementor"),description:(0,a.__)("To edit components, update Elementor Pro to the latest version.","elementor")}):o.createElement(d.ComponentsUpgradeAlert,{title:(0,a.__)("Edit components","elementor"),description:(0,a.__)("Editing components requires an active Pro subscription.","elementor"),upgradeUrl:k})))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx":function(e,t,n){n.r(t),n.d(t,{InstancePanelBody:function(){return InstancePanelBody}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/editor-editing-panel"),a=n("@elementor/editor-panels"),c=n("@elementor/ui"),i=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/override-props-group.tsx");function InstancePanelBody({groups:e,isEmpty:t,emptyState:n,componentInstanceId:p}){return o.createElement(a.PanelBody,null,o.createElement(r.ControlAdornmentsProvider,{items:(0,s.getFieldIndicators)("settings")},t?n:o.createElement(c.Stack,{direction:"column",alignItems:"stretch"},e.map(e=>o.createElement(o.Fragment,{key:e.id+p},o.createElement(i.OverridePropsGroup,{group:e}),o.createElement(c.Divider,null))))))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx":function(e,t,n){n.r(t),n.d(t,{EditComponentAction:function(){return EditComponentAction},InstancePanelHeader:function(){return InstancePanelHeader}});var o=n("react"),r=n("@elementor/editor-panels"),s=n("@elementor/editor-ui"),a=n("@elementor/icons"),c=n("@elementor/ui");function InstancePanelHeader({componentName:e,actions:t}){return o.createElement(r.PanelHeader,{sx:{justifyContent:"start",px:2}},o.createElement(c.Stack,{direction:"row",alignItems:"center",flexGrow:1,gap:1,maxWidth:"100%"},o.createElement(a.ComponentsIcon,{fontSize:"small",sx:{color:"text.tertiary"}}),o.createElement(s.EllipsisWithTooltip,{title:e,as:r.PanelHeaderTitle,sx:{flexGrow:1}}),t))}function EditComponentAction({label:e,onClick:t,disabled:n=!1,icon:r}){return o.createElement(c.Tooltip,{title:e},o.createElement(c.IconButton,{size:"tiny",onClick:t,"aria-label":e,disabled:n},o.createElement(r,{fontSize:"tiny"})))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/override-prop-control.tsx":function(e,t,n){n.r(t),n.d(t,{OverridePropControl:function(){return OverridePropControl}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/editor-editing-panel"),a=n("@elementor/editor-elements"),c=n("@elementor/ui"),i=n("./packages/packages/core/editor-components/src/hooks/use-controls-by-widget-type.ts"),p=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),l=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),d=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),m=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),u=n("./packages/packages/core/editor-components/src/provider/component-instance-context.tsx"),g=n("./packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx"),f=n("./packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts"),v=n("./packages/packages/core/editor-components/src/store/store.ts"),k=n("./packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts"),y=n("./packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts"),_=n("./packages/packages/core/editor-components/src/utils/overridable-props-utils.ts"),C=n("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),h=n("./packages/packages/core/editor-components/src/components/control-label.tsx"),b=n("./packages/packages/core/editor-components/src/components/errors.ts"),E=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/use-resolved-origin-value.tsx");function OverridePropControl({overrideKey:e}){const t=(0,u.useComponentOverridableProps)(),n=t?.props[e];return n?o.createElement(s.SettingsField,{bind:"component_instance",propDisplayName:n.label},o.createElement(OverrideControl,{overridableProp:n})):null}function OverrideControl({overridableProp:e}){const t=(0,s.useElement)(),{value:n,setValue:I}=(0,r.useBoundProp)(d.componentInstancePropTypeUtil),P=(0,v.useCurrentComponentId)(),x=(0,u.useComponentId)(),w=(0,u.useComponentOverridableProps)(),S=(0,u.useComponentInstanceOverrides)(),O=(0,i.useControlsByWidgetType)(e?.originPropFields?.widgetType??e.widgetType),T=(0,r.getControlReplacements)(),D=(0,_.getMatchingOverride)(S,e.overrideKey),U=(0,E.useResolvedOriginValue)(D,e);if(!x)throw new Error("Component ID is required");if(!w)throw new Error("Component has no overridable props");const A=(0,y.getPropTypeForComponentOverride)(e);if(!A)return null;const V=(D?(0,C.resolveOverridePropValue)(D):null)??U??e.originValue,N={[e.overrideKey]:V},{control:L,controlProps:F,layout:B}=function getControlParams(e,t,n){const o=e[t.propKey],{value:r}=o,a=function getControlLayout(e){return e.value.meta?.layout||s.controlsRegistry.getLayout(e.value.type)}(o),c=function populateChildControlProps(e){if(e.childControlType){const t=s.controlsRegistry.get(e.childControlType),n=s.controlsRegistry.getPropTypeUtil(e.childControlType);e={...e,childControlConfig:{component:t,props:e.childControlProps||{},propTypeUtil:n}}}return e}(r.props);"custom"===a&&(c.label=n??r.label);return{control:o,controlProps:c,layout:a}}(O,e?.originPropFields??e,e.label),{elementId:M,widgetType:z,elType:R,propKey:q}=e.originPropFields??e,j=(0,k.getContainerByOriginId)(M,t.element.id);if(!j)throw new b.OverrideControlInnerElementNotFoundError({context:{componentId:x,elementId:M}});const $=j.id,K="widget"===R?z:R,W=(0,a.getElementType)(K);if(!W)return null;const G=(0,a.getElementSettings)($,Object.keys(W.propsSchema)),H=(0,s.createTopLevelObjectType)({schema:{[e.overrideKey]:A}});return o.createElement(g.OverridablePropProvider,{value:m.componentOverridablePropTypeUtil.extract(D)??void 0,componentInstanceElement:t},o.createElement(s.ElementProvider,{element:{id:$,type:K},elementType:W,settings:G},o.createElement(s.SettingsField,{bind:q,propDisplayName:e.label},o.createElement(r.PropProvider,{propType:H,value:N,setValue:t=>{if(!w)return void I({...n,overrides:void 0});const o=function getTempNewValueForDynamicProp(e,t,n){const o=null===n;if(o&&(0,s.isDynamicPropValue)(t))return e.default??null;return n}(A,V,t[e.overrideKey]),r=function createOverrideValue({matchingOverride:e,overrideKey:t,overrideValue:n,componentId:o}){const r=m.componentOverridablePropTypeUtil.extract(e),s=m.componentOverridablePropTypeUtil.extract(n)??r;if(s){const e=p.componentInstanceOverridePropTypeUtil.create({override_key:t,override_value:(0,C.resolveOverridePropValue)(n),schema_source:{type:"component",id:o}});return m.componentOverridablePropTypeUtil.create({override_key:s.override_key,origin_value:e})}return p.componentInstanceOverridePropTypeUtil.create({override_key:t,override_value:n,schema_source:{type:"component",id:o}})}({matchingOverride:D,overrideKey:e.overrideKey,overrideValue:o,componentId:x});let a=(S??[]).filter(e=>function isValidOverride(e,t){const n=m.componentOverridablePropTypeUtil.isValid(t)?t.value.origin_value?.value.override_key:t.value.override_key;return!!e.props[n]}(w,e)).map(e=>e===D?r:e);D||(a=[...a,r]),I({...n,overrides:l.componentInstanceOverridesPropTypeUtil.create(a)});const c=m.componentOverridablePropTypeUtil.extract(r);if(c&&P){if(e.originPropFields)return void(0,f.updateOverridableProp)(P,c,e.originPropFields);const{elType:t,widgetType:n,propKey:o,elementId:r}=e;(0,f.updateOverridableProp)(P,c,{elType:t,widgetType:n,propKey:o,elementId:r})}},isDisabled:()=>!1},o.createElement(r.PropKeyProvider,{bind:e.overrideKey},o.createElement(r.ControlReplacementsProvider,{replacements:T},o.createElement(c.Box,{mb:1.5},o.createElement(s.ControlTypeContainer,{layout:B},"custom"!==B&&o.createElement(h.ControlLabel,null,e.label),o.createElement(OriginalControl,{control:L,controlProps:F})))))))))}function OriginalControl({control:e,controlProps:t}){const{value:n}=e;return o.createElement(s.BaseControl,{type:n.type,props:t})}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/override-props-group.tsx":function(e,t,n){n.r(t),n.d(t,{OverridePropsGroup:function(){return OverridePropsGroup}});var o=n("react"),r=n("@elementor/editor-editing-panel"),s=n("@elementor/editor-ui"),a=n("@elementor/ui"),c=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/override-prop-control.tsx");function OverridePropsGroup({group:e}){const[t,n]=(0,r.useStateByElement)(e.id,!0),i=(0,o.useId)(),p=`label-${i}`,l=`content-${i}`,d=e.label;return o.createElement(a.Box,{"aria-label":`${d} section`},o.createElement(a.ListItemButton,{id:p,"aria-controls":l,"aria-label":`${d} section`,onClick:()=>{n(!t)},p:0,sx:{"&:hover":{backgroundColor:"transparent"}}},o.createElement(a.Stack,{direction:"row",alignItems:"center",justifyItems:"start",flexGrow:1,gap:.5},o.createElement(a.ListItemText,{secondary:d,secondaryTypographyProps:{color:"text.primary",variant:"caption",fontWeight:"bold"},sx:{flexGrow:0,flexShrink:1,marginInlineEnd:1}})),o.createElement(s.CollapseIcon,{open:t,color:"secondary",fontSize:"tiny"})),o.createElement(a.Collapse,{id:l,"aria-labelledby":p,in:t,timeout:"auto"},o.createElement(a.Stack,{direction:"column",gap:1,p:2},e.props.map(e=>o.createElement(c.OverridePropControl,{key:e,overrideKey:e})))))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts":function(e,t,n){n.r(t),n.d(t,{useInstancePanelData:function(){return useInstancePanelData}});var o=n("@elementor/editor-editing-panel"),r=n("./packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/store/store.ts");function useInstancePanelData(){const{element:e,settings:t}=function useComponentInstanceSettings(){const{element:e,settings:t}=(0,o.useElement)();return{element:e,settings:s.componentInstancePropTypeUtil.extract(t.component_instance)}}(),n=t?.component_id?.value,c=t?.overrides?.value,i=(0,a.useComponent)(n??null),p=e?.id,l=(0,r.useSanitizeOverridableProps)(n??null,p);if(!(n&&l&&i&&p))return null;const d=l.groups.order.map(e=>l.groups.items[e]??null).filter(e=>null!==e&&e.props.length>0),m=0===d.length||0===Object.keys(l.props).length;return{componentId:n,component:i,overrides:c,overridableProps:l,groups:d,isEmpty:m,componentInstanceId:p}}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/use-resolved-origin-value.tsx":function(e,t,n){n.r(t),n.d(t,{useResolvedOriginValue:function(){return useResolvedOriginValue}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts"),a=n("./packages/packages/core/editor-components/src/utils/get-overridable-prop.ts"),c=n("./packages/packages/core/editor-components/src/utils/overridable-props-utils.ts");function useResolvedOriginValue(e,t){return function resolveOriginValue(e,t,n){const{originValue:o,originPropFields:r}=n;if(hasValue(o))return o;if(t){const n=getOriginFromOverride(e,t);if(hasValue(n))return n}const{elementId:s,propKey:a}=r??{};if(s&&a)return findOriginValueByElementId(e,s,a);return null}((0,o.__useSelector)(s.selectData),e,t)}function getOriginFromOverride(e,t){const n=(0,c.extractInnerOverrideInfo)(t);if(!n)return null;const{componentId:o,innerOverrideKey:s,overrideValue:i}=n,p=(0,a.getOverridableProp)({componentId:o,overrideKey:s});if(hasValue(p?.originValue))return p.originValue;if(p?.originPropFields?.elementId){const t=p.originPropFields.propKey??p.propKey,n=findOriginValueByElementId(e,p.originPropFields.elementId,t);if(hasValue(n))return n}const l=r.componentOverridablePropTypeUtil.extract(i);return l?getOriginFromOverride(e,r.componentOverridablePropTypeUtil.create(l)):null}function findOriginValueByElementId(e,t,n,o=new Set){for(const r of e){if(o.has(r.id))continue;o.add(r.id);const s=Object.values(r.overridableProps?.props??{}).find(({elementId:e,propKey:o})=>e===t&&o===n);if(s){if(hasValue(s.originValue))return s.originValue;if(s.originPropFields?.elementId){const t=s.originPropFields.propKey??n;return findOriginValueByElementId(e,s.originPropFields.elementId,t,o)}}}return null}function hasValue(e){return null!=e}},"./packages/packages/core/editor-components/src/components/load-template-components.tsx":function(e,t,n){n.r(t),n.d(t,{LoadTemplateComponents:function(){return LoadTemplateComponents}});var o=n("react"),r=n("@elementor/editor-templates"),s=n("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts");const LoadTemplateComponents=()=>{const e=(0,r.useLoadedTemplates)();return(0,o.useEffect)(()=>{(0,s.loadComponentsAssets)(e.flatMap(e=>e??[]))},[e]),null}},"./packages/packages/core/editor-components/src/consts.ts":function(e,t,n){n.r(t),n.d(t,{COMPONENT_WIDGET_TYPE:function(){return o}});const o="e-component"},"./packages/packages/core/editor-components/src/create-component-type.ts":function(e,t,n){n.r(t),n.d(t,{COMPONENT_WIDGET_TYPE:function(){return v},createComponentType:function(){return createComponentType}});var o=n("@elementor/editor-canvas"),r=n("@elementor/editor-documents"),s=n("@elementor/editor-notifications"),a=n("@elementor/store"),c=n("@elementor/utils"),i=n("@wordpress/i18n"),p=n("./packages/packages/core/editor-components/src/api.ts"),l=n("./packages/packages/core/editor-components/src/store/store.ts"),d=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/index.ts"),m=n("./packages/packages/core/editor-components/src/utils/format-component-elements-id.ts"),u=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),g=n("./packages/packages/core/editor-components/src/utils/switch-to-component.ts"),f=n("./packages/packages/core/editor-components/src/utils/tracking.ts");const v="e-component",k="https://go.elementor.com/go-pro-components-Instance-edit-canvas-double-click/",y="https://go.elementor.com/go-pro-components-Instance-edit-context-menu/",_="/wp-admin/plugins.php",C="component-edit-upgrade",h="component-edit-update",b=2e3;function notifyComponentEditUpdate(){(0,s.notify)({type:"info",id:h,message:(0,i.__)("To edit components, update Elementor Pro to the latest version.","elementor"),additionalActionProps:[{size:"small",variant:"contained",color:"info",href:_,target:"_blank",children:(0,i.__)("Update Now","elementor")}]})}const updateGroups=(e,t)=>{const n=new Map(Object.entries(t.disable??{})),o=new Map(Object.entries(t.add??{}));return e.map(e=>{const t=n.get(e.name)??[],r=o.get(e.name),s=e.actions.map(e=>t.includes(e.name)?{...e,isEnabled:()=>!1}:e);return r&&s.splice(r.index,0,...r.actions),{...e,actions:s}})};function createComponentType(e){const t=window.elementor.modules.elements.types.Widget,n=function createComponentView(e){const t=window;return class extends((0,o.createTemplatedElementView)(e)){eventsManagerConfig=t.elementorCommon.eventsManager.config;#e;isComponentCurrentlyEdited(){const e=(0,r.getCurrentDocument)();return e?.id===this.getComponentId()}getRenderContext(){const e=this.getNamespaceKey(),t=this._parent?.getRenderContext?.(),n=t?.[e];if(!this.#e)return t;const o=this.#e.overrides??{},r=n?.overrides??{};return{...t,[e]:{overrides:{...r,...o}}}}getResolverRenderContext(){const e=this.getNamespaceKey(),t=this.getRenderContext();return t?.[e]}afterSettingsResolve(e){const n=e.component_instance;if(n){this.#e={overrides:n.overrides??{}};const o=this.model.get("id"),r=n.elements??[],s=(0,m.formatComponentElementsId)(r,[o]);this.collection=t.elementor.createBackboneElementsCollection(s),this.collection.models.forEach(setInactiveRecursively),e.component_instance="<template data-children-placeholder></template>"}return e}getDomElement(){return this.children.findByIndex(0)?.getDomElement()??this.$el}attachBuffer(e,t){const n=e.$el.find("[data-children-placeholder]").get(0);n?n.replaceWith(t):super.attachBuffer(e,t)}getComponentId(){const e=this.options?.model?.get("settings")?.get("component_instance")?.value;return e.component_id.value}getContextMenuGroups(){const e=super.getContextMenuGroups().filter(e=>"save"!==e.name);if(!this.getComponentId())return e;return updateGroups(e,this._getContextMenuConfig())}_getContextMenuConfig(){const e=isUserAdministrator(),t=(0,c.hasProInstalled)(),n=(0,u.isProOutdatedForComponents)(),o={name:"edit component",icon:"eicon-edit",title:()=>(0,i.__)("Edit Component","elementor"),...!t&&!n&&{shortcut:`<a href="${y}" target="_blank" onclick="event.stopPropagation()" class="${"elementor-context-menu-list__item__shortcut__promotion-badge"}"><i class="eicon-upgrade-crown"></i></a>`,hasShortcutAction:!0},isEnabled:()=>(0,u.isProComponentsSupported)()||n,callback:(e,t)=>this.editComponent(t)},r={name:"detach instance",icon:"eicon-chain-broken",title:()=>(0,i.__)("Detach from Component","elementor"),isEnabled:()=>!0,callback:(e,t)=>this.detachInstance(t)};return{add:{general:{index:1,actions:e?[o,r]:[r]}},disable:{clipboard:["pasteStyle","resetStyle"]}}}async switchDocument(){const{isAllowedToSwitchDocument:t,lockedBy:n}=await p.apiClient.getComponentLockStatus(this.getComponentId());t?(0,g.switchToComponent)(this.getComponentId(),this.model.get("id"),this.el):e.showLockedByModal?.(n||"")}editComponent({trigger:e,location:t,secondaryLocation:n}){if((0,u.isProOutdatedForComponents)())return void notifyComponentEditUpdate();if(!(0,u.isProComponentsSupported)()||this.isComponentCurrentlyEdited())return;this.switchDocument();const o=this.model.get("editor_settings");(0,f.trackComponentEvent)({action:"edited",source:"user",component_uid:o?.component_uid,component_name:o?.title,location:t,secondary_location:n,trigger:e})}detachInstance({trigger:t,location:n,secondaryLocation:o}){const r=this.getComponentId(),a=this.model.get("id");if(!r||!a)return;const handleConfirm=async()=>{try{await(0,d.detachComponentInstance)({instanceId:a,componentId:r,trackingInfo:{location:n,secondaryLocation:o,trigger:t}})}catch{(0,s.notify)({type:"error",message:(0,i.__)("Failed to detach component instance.","elementor"),id:"detach-component-instance-failed"})}};e.showDetachConfirmDialog?.(handleConfirm)}handleDblClick(e){if(e.stopPropagation(),!isUserAdministrator())return;if((0,u.isProOutdatedForComponents)())return void notifyComponentEditUpdate();if(!(0,c.hasProInstalled)())return void function notifyComponentEditUpgrade(){(0,s.notify)({type:"promotion",id:C,message:(0,i.__)("Editing components requires an active Pro subscription.","elementor"),autoHideDuration:b,additionalActionProps:[{size:"small",variant:"contained",color:"promotion",href:k,target:"_blank",children:(0,i.__)("Upgrade Now","elementor")}]})}();const{triggers:t,locations:n,secondaryLocations:o}=this.eventsManagerConfig;this.editComponent({trigger:t.doubleClick,location:n.canvas,secondaryLocation:o.canvasElement})}events(){return{...super.events(),dblclick:this.handleDblClick}}attributes(){return{...super.attributes(),"data-elementor-id":this.getComponentId()}}}}({...e});return class extends t{getType(){return e.type}getView(){return n}getModel(){return function createComponentModel(){const e=window,t=e.elementor.modules.elements.types.Widget,n=new t,o=n.getModel();return o.extend({initialize(e,t){o.prototype.initialize.call(this,e,t);const n=this.get("settings")?.get("component_instance");if(n?.value){const e=n.value.component_id?.value;e&&"number"==typeof e&&this.set("componentId",e)}this.set("isGlobal",!0)},getTitle(){const e=this.get("editor_settings"),t=e?.title;if(t)return t;const n=e?.component_uid;if(n){const e=(0,l.selectComponentByUid)((0,a.__getState)(),n);if(e?.name)return e.name}return window.elementor.getElementData(this).title},getComponentId(){return this.get("componentId")||null},getComponentName(){return this.getTitle()},getComponentUid(){const e=this.get("editor_settings");return e?.component_uid||null}})}()}}}function setInactiveRecursively(e){const t=e.get("editSettings");t&&t.set("inactive",!0);const n=e.get("elements");n&&n.forEach(e=>{setInactiveRecursively(e)})}function isUserAdministrator(){const e=window;return e.elementor.config?.user?.is_administrator??!1}},"./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts":function(e,t,n){n.r(t),n.d(t,{useComponentsPermissions:function(){return useComponentsPermissions}});var o=n("@elementor/editor-current-user");const useComponentsPermissions=()=>{const{isAdmin:e}=(0,o.useCurrentUserCapabilities)();return{canCreate:e,canEdit:e,canDelete:e,canRename:e}}},"./packages/packages/core/editor-components/src/hooks/use-components.ts":function(e,t,n){n.r(t),n.d(t,{useComponents:function(){return useComponents}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");const useComponents=()=>({components:(0,o.__useSelector)(r.selectComponents),isLoading:(0,o.__useSelector)(r.selectLoadIsPending)})},"./packages/packages/core/editor-components/src/hooks/use-controls-by-widget-type.ts":function(e,t,n){n.r(t),n.d(t,{useControlsByWidgetType:function(){return useControlsByWidgetType}});var o=n("@elementor/editor-elements");function useControlsByWidgetType(e){const t=(0,o.getElementType)(e);if(!t)return{};return function getControlsByBind(e){return e.reduce((e,t)=>({...e,[t.value.bind]:t}),{})}(iterateControls(t.controls))}function iterateControls(e){return e.map(e=>"control"===e.type&&"bind"in e.value?e:"section"===e.type?iterateControls(e.value.items):null).filter(Boolean).flat()}},"./packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts":function(e,t,n){n.r(t),n.d(t,{useSanitizeOverridableProps:function(){return useSanitizeOverridableProps}});var o=n("./packages/packages/core/editor-components/src/store/store.ts"),r=n("./packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts");function useSanitizeOverridableProps(e,t){const n=(0,o.useOverridableProps)(e),s=(0,o.useIsSanitizedComponent)(e,"overridableProps");if(n&&e)return s?n:(0,r.filterValidOverridableProps)(n,t)}},"./packages/packages/core/editor-components/src/init.ts":function(e,t,n){n.r(t),n.d(t,{init:function(){return init}});var o=n("@elementor/editor"),r=n("@elementor/editor-canvas"),s=n("@elementor/editor-documents"),a=n("@elementor/editor-editing-panel"),c=n("@elementor/editor-elements-panel"),i=n("@elementor/editor-styles-repository"),p=n("@elementor/editor-v1-adapters"),l=n("@elementor/store"),d=n("@wordpress/i18n"),m=n("./packages/packages/core/editor-components/src/component-instance-transformer.ts"),u=n("./packages/packages/core/editor-components/src/component-overridable-transformer.ts"),g=n("./packages/packages/core/editor-components/src/component-override-transformer.ts"),f=n("./packages/packages/core/editor-components/src/components/components-tab/components.tsx"),v=n("./packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx"),k=n("./packages/packages/core/editor-components/src/components/in-edit-mode.tsx"),y=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-editing-panel.tsx"),_=n("./packages/packages/core/editor-components/src/components/load-template-components.tsx"),C=n("./packages/packages/core/editor-components/src/create-component-type.ts"),h=n("./packages/packages/core/editor-components/src/populate-store.ts"),b=n("./packages/packages/core/editor-components/src/prevent-circular-nesting.ts"),E=n("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts"),I=n("./packages/packages/core/editor-components/src/store/actions/remove-component-styles.ts"),P=n("./packages/packages/core/editor-components/src/store/components-styles-provider.ts"),x=n("./packages/packages/core/editor-components/src/store/store.ts"),w=n("./packages/packages/core/editor-components/src/sync/before-save.ts"),S=n("./packages/packages/core/editor-components/src/sync/load-component-data-after-instance-added.ts");function init(){i.stylesRepository.register(P.componentsStylesProvider),(0,l.__registerSlice)(x.slice),(0,r.registerElementType)(C.COMPONENT_WIDGET_TYPE,e=>(0,C.createComponentType)({...e,showLockedByModal:k.openEditModeDialog,showDetachConfirmDialog:v.openDetachConfirmDialog})),window.elementorCommon.__beforeSave=w.beforeSave,(0,c.injectTab)({id:"components",label:(0,d.__)("Components","elementor"),component:f.Components,position:1}),(0,o.injectIntoLogic)({id:"components-populate-store",component:h.PopulateStore}),(0,p.registerDataHook)("after","editor/documents/attach-preview",async()=>{const{id:e,config:t}=(0,s.getV1CurrentDocument)();e&&(0,I.removeComponentStyles)(e),await(0,E.loadComponentsAssets)(t?.elements??[])}),(0,o.injectIntoLogic)({id:"templates",component:_.LoadTemplateComponents}),(0,a.registerEditingPanelReplacement)({id:"component-instance-edit-panel",condition:(e,t)=>"e-component"===t.key,component:y.InstanceEditingPanel}),r.settingsTransformersRegistry.register("component-instance",m.componentInstanceTransformer),r.settingsTransformersRegistry.register("overridable",u.componentOverridableTransformer),r.settingsTransformersRegistry.register("override",g.componentOverrideTransformer),(0,b.initCircularNestingPrevention)(),(0,S.initLoadComponentDataAfterInstanceAdded)()}},"./packages/packages/core/editor-components/src/populate-store.ts":function(e,t,n){n.r(t),n.d(t,{PopulateStore:function(){return PopulateStore}});var o=n("react"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/thunks.ts");function PopulateStore(){return(0,o.useEffect)(()=>{(0,r.__dispatch)((0,s.loadComponents)())},[]),null}},"./packages/packages/core/editor-components/src/prevent-circular-nesting.ts":function(e,t,n){n.r(t),n.d(t,{extractComponentIdsFromElements:function(){return extractComponentIdsFromElements},initCircularNestingPrevention:function(){return initCircularNestingPrevention},wouldCreateCircularNesting:function(){return wouldCreateCircularNesting}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-notifications"),s=n("@elementor/editor-v1-adapters"),a=n("@elementor/store"),c=n("@wordpress/i18n"),i=n("./packages/packages/core/editor-components/src/store/store.ts");const p="e-component",l={type:"default",message:(0,c.__)("Can't add this component - components that contain each other can't be nested.","elementor"),id:"circular-component-nesting-blocked"};function initCircularNestingPrevention(){(0,s.blockCommand)({command:"document/elements/create",condition:blockCircularCreate}),(0,s.blockCommand)({command:"document/elements/move",condition:blockCircularMove}),(0,s.blockCommand)({command:"document/elements/paste",condition:blockCircularPaste})}function wouldCreateCircularNesting(e){if(void 0===e)return!1;const t=(0,a.__getState)(),n=(0,i.selectCurrentComponentId)(t),o=(0,i.selectPath)(t);return null!==n&&(e===n||o.some(t=>t.componentId===e))}function extractComponentIdFromElement(e){return e.widgetType!==p?null:e.settings?.component_instance?.value?.component_id?.value??null}function extractComponentIdsFromElements(e){const t=[];for(const n of e){const e=extractComponentIdFromElement(n);null!==e&&t.push(e),n.elements?.length&&t.push(...extractComponentIdsFromElements(n.elements))}return t}function blockCircularCreate(e){const t=function extractComponentIdFromModel(e){return e&&e.widgetType===p?e.settings?.component_instance?.value?.component_id?.value??null:null}(e.model);if(null===t)return!1;const n=wouldCreateCircularNesting(t);return n&&(0,r.notify)(l),n}function blockCircularMove(e){const{containers:t=[e.container]}=e,n=t.some(e=>{if(!e)return!1;return(0,o.getAllDescendants)(e).some(e=>{const t=function extractComponentIdFromContainer(e){const t=e.model?.get?.("widgetType");if(t!==p)return null;const n=e.model?.get?.("settings"),o=n?.get?.("component_instance");return o?.value?.component_id?.value??null}(e);return null!==t&&wouldCreateCircularNesting(t)})});return n&&(0,r.notify)(l),n}function blockCircularPaste(e){const{storageType:t}=e;if("localstorage"!==t)return!1;const n=window?.elementorCommon?.storage?.get();if(!n?.clipboard?.elements)return!1;const o=extractComponentIdsFromElements(n.clipboard.elements).some(wouldCreateCircularNesting);return o&&(0,r.notify)(l),o}},"./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentInstanceOverridePropTypeUtil:function(){return s}});var o=n("@elementor/editor-props"),r=n("@elementor/schema");const s=(0,o.createPropUtils)("override",r.z.object({override_key:r.z.string(),override_value:r.z.unknown(),schema_source:r.z.object({type:r.z.literal("component"),id:r.z.number()})}))},"./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentInstanceOverridesPropTypeUtil:function(){return c}});var o=n("@elementor/editor-props"),r=n("@elementor/schema"),s=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");const c=(0,o.createPropUtils)("overrides",r.z.array(r.z.union([s.componentInstanceOverridePropTypeUtil.schema,a.componentOverridablePropTypeUtil.schema])).optional().default([]))},"./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentInstancePropTypeUtil:function(){return a}});var o=n("@elementor/editor-props"),r=n("@elementor/schema"),s=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts");const a=(0,o.createPropUtils)("component-instance",r.z.object({component_id:o.numberPropTypeUtil.schema,overrides:r.z.optional(s.componentInstanceOverridesPropTypeUtil.schema)}))},"./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentOverridablePropTypeUtil:function(){return s}});var o=n("@elementor/editor-props"),r=n("@elementor/schema");const s=(0,o.createPropUtils)("overridable",r.z.object({override_key:r.z.string(),origin_value:r.z.object({$$type:r.z.string(),value:r.z.unknown()}).nullable()}))},"./packages/packages/core/editor-components/src/provider/component-instance-context.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentInstanceProvider:function(){return ComponentInstanceProvider},useComponentId:function(){return useComponentId},useComponentInstanceOverrides:function(){return useComponentInstanceOverrides},useComponentOverridableProps:function(){return useComponentOverridableProps}});var o=n("react");const r=(0,o.createContext)(null);function ComponentInstanceProvider({children:e,...t}){return o.createElement(r.Provider,{value:t},e)}const useComponentId=()=>(0,o.useContext)(r)?.componentId,useComponentInstanceOverrides=()=>(0,o.useContext)(r)?.overrides,useComponentOverridableProps=()=>(0,o.useContext)(r)?.overridableProps},"./packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx":function(e,t,n){n.r(t),n.d(t,{OverridablePropProvider:function(){return OverridablePropProvider},useComponentInstanceElement:function(){return useComponentInstanceElement},useOverridablePropValue:function(){return useOverridablePropValue}});var o=n("react");const r=(0,o.createContext)(null);function OverridablePropProvider({children:e,...t}){return o.createElement(r.Provider,{value:t},e)}const useOverridablePropValue=()=>(0,o.useContext)(r)?.value,useComponentInstanceElement=()=>(0,o.useContext)(r)?.componentInstanceElement},"./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts":function(e,t,n){n.r(t),n.d(t,{loadComponentsAssets:function(){return loadComponentsAssets}});var o=n("@elementor/editor-documents"),r=n("./packages/packages/core/editor-components/src/utils/get-component-documents.ts"),s=n("./packages/packages/core/editor-components/src/store/actions/load-components-overridable-props.ts"),a=n("./packages/packages/core/editor-components/src/store/actions/load-components-styles.ts");async function loadComponentsAssets(e){const t=await(0,r.getComponentDocuments)(e);!function updateDocumentState(e){const t=[...e.values()].some(o.isDocumentDirty);t&&(0,o.setDocumentModifiedStatus)(!0)}(t),(0,a.loadComponentsStyles)(t),await(0,s.loadComponentsOverridableProps)([...t.keys()])}},"./packages/packages/core/editor-components/src/store/actions/load-components-overridable-props.ts":function(e,t,n){n.r(t),n.d(t,{loadComponentsOverridableProps:function(){return loadComponentsOverridableProps}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/api.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts");function loadComponentsOverridableProps(e){if(e.length)return Promise.all(e.map(loadComponentOverrides))}async function loadComponentOverrides(e){if((0,s.selectIsOverridablePropsLoaded)((0,o.__getState)(),e))return;const t=await r.apiClient.getOverridableProps(e);t&&(0,o.__dispatch)(s.slice.actions.setOverridableProps({componentId:e,overridableProps:t}))}},"./packages/packages/core/editor-components/src/store/actions/load-components-styles.ts":function(e,t,n){n.r(t),n.d(t,{loadComponentsStyles:function(){return loadComponentsStyles}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function loadComponentsStyles(e){if(!e.size)return;const t=(0,r.selectStyles)((0,o.__getState)()),n=new Map([...e.entries()].filter(([e])=>!t[e]));n.size&&function addStyles(e){const t=Object.fromEntries([...e.entries()].map(([e,t])=>[e,extractStylesFromDocument(t)]));(0,o.__dispatch)(r.slice.actions.addStyles(t))}(n)}function extractStylesFromDocument(e){return e.elements?.length?e.elements.flatMap(extractStylesFromElement):[]}function extractStylesFromElement(e){return[...Object.values(e.styles??{}),...(e.elements??[]).flatMap(extractStylesFromElement)]}},"./packages/packages/core/editor-components/src/store/actions/remove-component-styles.ts":function(e,t,n){n.r(t),n.d(t,{removeComponentStyles:function(){return removeComponentStyles}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/api.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts");function removeComponentStyles(e){r.apiClient.invalidateComponentConfigCache(e),(0,o.__dispatch)(s.slice.actions.removeStyles({id:e}))}},"./packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts":function(e,t,n){n.r(t),n.d(t,{updateOverridableProp:function(){return updateOverridableProp}});var o=n("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),r=n("./packages/packages/core/editor-components/src/store/dispatchers.ts"),s=n("./packages/packages/core/editor-components/src/store/selectors.ts");function updateOverridableProp(e,t,n){const a=s.componentsSelectors.getOverridableProps(e);if(!a)return;const c=a.props[t.override_key];if(!c)return;const i=(0,o.resolveOverridePropValue)(t.origin_value),p=n?{originValue:i,originPropFields:n}:{originValue:i},l={...a,props:{...a.props,[c.overrideKey]:{...c,...p}}};r.componentsActions.setOverridableProps(e,l)}},"./packages/packages/core/editor-components/src/store/components-styles-provider.ts":function(e,t,n){n.r(t),n.d(t,{componentsStylesProvider:function(){return a}});var o=n("@elementor/editor-styles-repository"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts");const a=(0,o.createStylesProvider)({key:"components-styles",priority:100,subscribe:e=>(0,r.__subscribeWithSelector)(e=>e[s.SLICE_NAME],()=>{e()}),actions:{all:()=>(0,s.selectFlatStyles)((0,r.__getState)()),get:e=>(0,s.selectFlatStyles)((0,r.__getState)()).find(t=>t.id===e)??null}})},"./packages/packages/core/editor-components/src/store/dispatchers.ts":function(e,t,n){n.r(t),n.d(t,{componentsActions:function(){return s}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function safeDispatch(){return(0,o.__getStore)()?.dispatch}const s={add(e){(0,o.__dispatch)(r.slice.actions.add(e))},load(e){(0,o.__dispatch)(r.slice.actions.load(e))},addUnpublished(e){(0,o.__dispatch)(r.slice.actions.addUnpublished(e))},removeUnpublished(e){(0,o.__dispatch)(r.slice.actions.removeUnpublished(e))},resetUnpublished(){(0,o.__dispatch)(r.slice.actions.resetUnpublished())},removeStyles(e){(0,o.__dispatch)(r.slice.actions.removeStyles({id:e}))},addStyles(e){(0,o.__dispatch)(r.slice.actions.addStyles(e))},addCreatedThisSession(e){(0,o.__dispatch)(r.slice.actions.addCreatedThisSession(e))},removeCreatedThisSession(e){(0,o.__dispatch)(r.slice.actions.removeCreatedThisSession(e))},archive(e){(0,o.__dispatch)(r.slice.actions.archive(e))},setCurrentComponentId(e){safeDispatch()?.(r.slice.actions.setCurrentComponentId(e))},setPath(e){safeDispatch()?.(r.slice.actions.setPath(e))},setOverridableProps(e,t){(0,o.__dispatch)(r.slice.actions.setOverridableProps({componentId:e,overridableProps:t}))},rename(e,t){(0,o.__dispatch)(r.slice.actions.rename({componentUid:e,name:t}))},cleanUpdatedComponentNames(){(0,o.__dispatch)(r.slice.actions.cleanUpdatedComponentNames())},updateComponentSanitizedAttribute(e,t){(0,o.__dispatch)(r.slice.actions.updateComponentSanitizedAttribute({componentId:e,attribute:t}))},resetSanitizedComponents(){(0,o.__dispatch)(r.slice.actions.resetSanitizedComponents())}}},"./packages/packages/core/editor-components/src/store/extensible-slice.ts":function(e,t,n){n.r(t),n.d(t,{__resetExtraReducers:function(){return __resetExtraReducers},createComponentsAction:function(){return createComponentsAction},registerComponentsReducer:function(){return registerComponentsReducer},slice:function(){return i}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store-types.ts"),s=n("./packages/packages/core/editor-components/src/store/thunks.ts");const a=new Map;function registerComponentsReducer(e,t){a.set(`${r.SLICE_NAME}/${e}`,t)}function createComponentsAction(e){const t=(0,o.__createAction)(`${r.SLICE_NAME}/${e}`);return{action:t,register(t){registerComponentsReducer(e,t)},dispatch(e){(0,o.__dispatch)(t(e))}}}function __resetExtraReducers(){a.clear()}const c=(0,o.__createSlice)({name:r.SLICE_NAME,initialState:r.initialState,reducers:{add:(e,{payload:t})=>{Array.isArray(t)?e.data=[...t,...e.data]:e.data.unshift(t)},load:(e,{payload:t})=>{e.data=t},addUnpublished:(e,{payload:t})=>{e.unpublishedData.unshift(t)},removeUnpublished:(e,{payload:t})=>{const n=Array.isArray(t)?t:[t];e.unpublishedData=e.unpublishedData.filter(e=>!n.includes(e.uid))},resetUnpublished:e=>{e.unpublishedData=[]},removeStyles(e,{payload:t}){const{[t.id]:n,...o}=e.styles;e.styles=o},addStyles:(e,{payload:t})=>{e.styles={...e.styles,...t}},addCreatedThisSession:(e,{payload:t})=>{e.createdThisSession.push(t)},removeCreatedThisSession:(e,{payload:t})=>{e.createdThisSession=e.createdThisSession.filter(e=>e!==t)},archive:(e,{payload:t})=>{const n=e.data.find(e=>e.id===t);n&&(n.isArchived=!0,e.archivedThisSession.push(t))},setCurrentComponentId:(e,{payload:t})=>{e.currentComponentId=t},setPath:(e,{payload:t})=>{e.path=t},setOverridableProps:(e,{payload:t})=>{const n=e.data.find(e=>e.id===t.componentId);n&&(n.overridableProps=t.overridableProps)},rename:(e,{payload:t})=>{const n=e.data.find(e=>e.uid===t.componentUid);n&&(n.id&&(e.updatedComponentNames[n.id]=t.name),n.name=t.name)},cleanUpdatedComponentNames:e=>{e.updatedComponentNames={}},updateComponentSanitizedAttribute:(e,{payload:{componentId:t,attribute:n}})=>{e.sanitized[t]||(e.sanitized[t]={}),e.sanitized[t][n]=!0},resetSanitizedComponents:e=>{e.sanitized={}}},extraReducers:e=>{e.addCase(s.loadComponents.fulfilled,(e,{payload:t})=>{e.data=t,e.loadStatus="idle"}),e.addCase(s.loadComponents.pending,e=>{e.loadStatus="pending"}),e.addCase(s.loadComponents.rejected,e=>{e.loadStatus="error"})}}),i={...c,reducer(e,t){const n=c.reducer(e,t),o=a.get(t.type);if(!o||!n)return n;const r=structuredClone(n);return o(r,t),r}}},"./packages/packages/core/editor-components/src/store/selectors.ts":function(e,t,n){n.r(t),n.d(t,{componentsSelectors:function(){return s}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");const s={getOverridableProps(e){return(0,r.selectOverridableProps)((0,o.__getState)(),e)},getCurrentComponent(){return(0,r.selectCurrentComponent)((0,o.__getState)())},getCurrentComponentId(){const e=function safeGetState(){return(0,o.__getStore)()?.getState()}();return e?(0,r.selectCurrentComponentId)(e):null},getUnpublishedComponents(){return(0,r.selectUnpublishedComponents)((0,o.__getState)())},getUpdatedComponentNames(){return(0,r.selectUpdatedComponentNames)((0,o.__getState)())},getArchivedThisSession(){return(0,r.selectArchivedThisSession)((0,o.__getState)())},getCreatedThisSession(){return(0,r.selectCreatedThisSession)((0,o.__getState)())},getComponents(){return(0,r.selectComponents)((0,o.__getState)())},getComponentByUid(e){return(0,r.selectComponentByUid)((0,o.__getState)(),e)}}},"./packages/packages/core/editor-components/src/store/store-types.ts":function(e,t,n){n.r(t),n.d(t,{SLICE_NAME:function(){return r},initialState:function(){return o}});const o={data:[],unpublishedData:[],loadStatus:"idle",styles:{},createdThisSession:[],archivedThisSession:[],path:[],currentComponentId:null,updatedComponentNames:{},sanitized:{}},r="components"},"./packages/packages/core/editor-components/src/store/store.ts":function(e,t,n){n.r(t),n.d(t,{SLICE_NAME:function(){return r.SLICE_NAME},__resetExtraReducers:function(){return s.__resetExtraReducers},createComponentsAction:function(){return s.createComponentsAction},initialState:function(){return r.initialState},registerComponentsReducer:function(){return s.registerComponentsReducer},selectArchivedThisSession:function(){return selectArchivedThisSession},selectComponent:function(){return selectComponent},selectComponentByUid:function(){return selectComponentByUid},selectComponents:function(){return a},selectCreatedThisSession:function(){return d},selectCurrentComponent:function(){return k},selectCurrentComponentId:function(){return v},selectData:function(){return selectData},selectFlatStyles:function(){return l},selectIsOverridablePropsLoaded:function(){return g},selectLoadIsError:function(){return p},selectLoadIsPending:function(){return i},selectOverridableProps:function(){return u},selectPath:function(){return f},selectStyles:function(){return selectStyles},selectUnpublishedComponents:function(){return c},selectUpdatedComponentNames:function(){return y},slice:function(){return s.slice},useComponent:function(){return useComponent},useCurrentComponent:function(){return useCurrentComponent},useCurrentComponentId:function(){return useCurrentComponentId},useIsSanitizedComponent:function(){return useIsSanitizedComponent},useOverridableProps:function(){return useOverridableProps}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store-types.ts"),s=n("./packages/packages/core/editor-components/src/store/extensible-slice.ts");const selectData=e=>e[r.SLICE_NAME].data,selectArchivedThisSession=e=>e[r.SLICE_NAME].archivedThisSession,selectLoadStatus=e=>e[r.SLICE_NAME].loadStatus,selectUnpublishedData=e=>e[r.SLICE_NAME].unpublishedData,getCurrentComponentId=e=>e[r.SLICE_NAME].currentComponentId,selectComponent=(e,t)=>e[r.SLICE_NAME].data.find(e=>e.id===t),useComponent=e=>(0,o.__useSelector)(t=>e?selectComponent(t,e):null),selectComponentByUid=(e,t)=>e[r.SLICE_NAME].data.find(e=>e.uid===t)??e[r.SLICE_NAME].unpublishedData.find(e=>e.uid===t),a=(0,o.__createSelector)(selectData,selectUnpublishedData,(e,t)=>[...t.map(e=>({uid:e.uid,name:e.name,overridableProps:e.overridableProps})),...e.filter(e=>!e.isArchived)]),c=(0,o.__createSelector)(selectUnpublishedData,e=>e),i=(0,o.__createSelector)(selectLoadStatus,e=>"pending"===e),p=(0,o.__createSelector)(selectLoadStatus,e=>"error"===e),selectStyles=e=>e[r.SLICE_NAME].styles??{},l=(0,o.__createSelector)(e=>e[r.SLICE_NAME].styles??{},e=>Object.values(e).flat()),d=(0,o.__createSelector)(e=>e[r.SLICE_NAME].createdThisSession,e=>e),m={props:{},groups:{items:{},order:[]}},u=(0,o.__createSelector)(selectComponent,e=>{if(e)return e.overridableProps??m}),useOverridableProps=e=>(0,o.__useSelector)(t=>e?u(t,e):null),g=(0,o.__createSelector)(selectComponent,e=>!!e?.overridableProps),f=(0,o.__createSelector)(e=>e[r.SLICE_NAME].path,e=>e),v=(0,o.__createSelector)(getCurrentComponentId,e=>e),k=(0,o.__createSelector)(selectData,getCurrentComponentId,(e,t)=>e.find(e=>e.id===t)),useCurrentComponentId=()=>(0,o.__useSelector)(v),useCurrentComponent=()=>(0,o.__useSelector)(k),y=(0,o.__createSelector)(e=>e[r.SLICE_NAME].updatedComponentNames,e=>Object.entries(e).map(([e,t])=>({componentId:Number(e),title:t}))),useIsSanitizedComponent=(e,t)=>{const n=(0,o.__useSelector)(e=>e[r.SLICE_NAME].sanitized);return!!e&&!!n[e]?.[t]}},"./packages/packages/core/editor-components/src/store/thunks.ts":function(e,t,n){n.r(t),n.d(t,{loadComponents:function(){return s}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/api.ts");const s=(0,o.__createAsyncThunk)("components/load",async()=>await r.apiClient.get())},"./packages/packages/core/editor-components/src/sync/before-save.ts":function(e,t,n){n.r(t),n.d(t,{beforeSave:function(){return beforeSave}});var o=n("./packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts");const beforeSave=({container:e,status:t})=>{const n=e?.model.get("elements").toJSON?.()??[];return(0,o.publishDraftComponentsInPageBeforeSave)({elements:n,status:t})}},"./packages/packages/core/editor-components/src/sync/load-component-data-after-instance-added.ts":function(e,t,n){n.r(t),n.d(t,{initLoadComponentDataAfterInstanceAdded:function(){return initLoadComponentDataAfterInstanceAdded}});var o=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts");function initLoadComponentDataAfterInstanceAdded(){(0,o.registerDataHook)("after","document/elements/paste",(e,t)=>{load(t)}),(0,o.registerDataHook)("after","document/elements/import",(e,t)=>{load(t)})}function load(e){const t=Array.isArray(e)?e:[e];(0,r.loadComponentsAssets)(t.map(e=>e.model.toJSON()))}},"./packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts":function(e,t,n){n.r(t),n.d(t,{publishDraftComponentsInPageBeforeSave:function(){return publishDraftComponentsInPageBeforeSave}});var o=n("@elementor/editor-documents"),r=n("@elementor/editor-notifications"),s=n("@elementor/http-client"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/api.ts"),i=n("./packages/packages/core/editor-components/src/utils/get-component-documents.ts");const p="insufficient_permissions",l="https://go.elementor.com/go-pro-components-Instance-draft-failure/",d="component-publish-upgrade";async function publishDraftComponentsInPageBeforeSave({status:e,elements:t}){if("publish"!==e)return;const n=[...(await(0,i.getComponentDocuments)(t)).values()].filter(o.isDocumentDirty).map(e=>e.id);if(0!==n.length){try{await c.apiClient.updateStatuses(n,"publish")}catch(e){if(function isInsufficientPermissionsError(e){return e instanceof s.AxiosError&&e.response?.data?.code===p}(e))return void function notifyPublishUpgrade(){(0,r.notify)({type:"promotion",id:d,message:(0,a.__)("You have unpublished component on this page. You need a pro version to publish it.","elementor"),additionalActionProps:[{size:"small",variant:"contained",color:"promotion",href:l,target:"_blank",children:(0,a.__)("Upgrade Now","elementor")}]})}();throw e}n.forEach(e=>(0,o.invalidateDocumentData)(e))}}},"./packages/packages/core/editor-components/src/utils/component-document-data.ts":function(e,t,n){n.r(t),n.d(t,{getComponentDocumentData:function(){return getComponentDocumentData}});var o=n("@elementor/editor-documents");const getComponentDocumentData=async e=>{const t=(0,o.getV1DocumentsManager)();try{return await t.request(e)}catch{return null}}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/detach-component-instance.ts":function(e,t,n){n.r(t),n.d(t,{detachComponentInstance:function(){return detachComponentInstance}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-v1-adapters"),s=n("@elementor/store"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),i=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),p=n("./packages/packages/core/editor-components/src/store/store.ts"),l=n("./packages/packages/core/editor-components/src/utils/component-document-data.ts"),d=n("./packages/packages/core/editor-components/src/utils/tracking.ts"),m=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-detached-instance.ts");async function detachComponentInstance({instanceId:e,componentId:t,trackingInfo:n}){const u=(0,o.getContainer)(e);if(!u)throw new Error(`Instance container with ID "${e}" not found.`);const g=await(0,l.getComponentDocumentData)(t);if(!g)throw new Error(`Component with ID "${t}" not found.`);const f=g.elements?.[0];if(!f)throw new Error(`Component with ID "${t}" has no root element.`);const v=(0,r.undoable)({do:()=>{const r=function extractInstanceOverrides(e){const t=e.model.toJSON().settings,n=i.componentInstancePropTypeUtil.extract(t?.component_instance),o=c.componentInstanceOverridesPropTypeUtil.extract(n?.overrides);return o??[]}(u),a=(0,m.resolveDetachedInstance)(f,r),l=(0,p.selectCurrentComponentId)((0,s.__getState)()),g=l?(0,p.selectOverridableProps)((0,s.__getState)(),l)??null:null,v=u.model.toJSON(),k=(0,o.replaceElement)({currentElementId:e,newElement:a,withHistory:!1}),y=(0,p.selectComponent)((0,s.__getState)(),t)?.uid;return(0,d.trackComponentEvent)({action:"detached",source:"user",component_uid:y,instance_id:e,location:n.location,secondary_location:n.secondaryLocation,trigger:n.trigger}),{detachedElement:k,detachedInstanceElementData:a,editedComponentOnDetach:l,overridablePropsBeforeDetach:g,originalInstanceModel:v}},undo:(e,{detachedElement:t,originalInstanceModel:n,overridablePropsBeforeDetach:r,editedComponentOnDetach:a})=>{const c=(0,o.replaceElement)({currentElementId:t.id,newElement:n,withHistory:!1}),i=(0,p.selectCurrentComponentId)((0,s.__getState)());return i&&i===a&&r&&(0,s.__dispatch)(p.slice.actions.setOverridableProps({componentId:i,overridableProps:r})),c},redo:(e,t,n)=>{const{detachedInstanceElementData:r}=t,a=(0,p.selectCurrentComponentId)((0,s.__getState)()),c=a?(0,p.selectOverridableProps)((0,s.__getState)(),a)??null:null,i=(0,o.replaceElement)({currentElementId:n.id,newElement:r,withHistory:!1});return{...t,detachedElement:i,editedComponentOnDetach:a,overridablePropsBeforeDetach:c}}},{title:(0,a.__)("Detach from Component","elementor"),subtitle:(0,a.__)("Instance detached","elementor")});return v()}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/index.ts":function(e,t,n){n.r(t),n.d(t,{detachComponentInstance:function(){return o.detachComponentInstance}});var o=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/detach-component-instance.ts")},"./packages/packages/core/editor-components/src/utils/detach-component-instance/regenerate-local-style-ids.ts":function(e,t,n){n.r(t),n.d(t,{regenerateLocalStyleIds:function(){return regenerateLocalStyleIds}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-props");function regenerateLocalStyleIds(e){const t=e.styles;if(!t||0===Object.keys(t).length)return{styles:void 0,settings:void 0};const n={},o={};for(const[r,s]of Object.entries(t)){const t=generateLocalStyleId(e.id);n[t]={...s,id:t},o[r]=t}const s=e.settings;if(!s||0===Object.keys(s).length)return{styles:n,settings:void 0};const a={...s};for(const[e,t]of Object.entries(a))if(isClassesProp(t)&&t.value.length>0){const n=t.value.map(e=>o[e]??e);a[e]=r.classesPropTypeUtil.create(n)}return{styles:n,settings:a}}function isClassesProp(e){return r.classesPropTypeUtil.isValid(e)}function generateLocalStyleId(e){return`e-${e}-${(0,o.generateElementId)()}`}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-detached-instance.ts":function(e,t,n){n.r(t),n.d(t,{getOverridableOverride:function(){return getOverridableOverride},resolveDetachedInstance:function(){return resolveDetachedInstance}});var o=n("@elementor/editor-elements"),r=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/regenerate-local-style-ids.ts"),c=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-overridable-settings.ts");function resolveDetachedInstance(e,t){const n=function createOverrideMap(e){const t=new Map;return e.forEach(e=>{let n=null;if(r.componentInstanceOverridePropTypeUtil.isValid(e)?n=e:s.componentOverridablePropTypeUtil.isValid(e)&&(n=getOverridableOverride(e)),n){const e=n.value.override_key;t.set(e,n)}}),t}(t);return resolveElementRecursive(structuredClone(e),n)}function resolveElementRecursive(e,t){if(e.id=(0,o.generateElementId)(),e.styles){const{styles:t,settings:n}=(0,a.regenerateLocalStyleIds)(e);e.styles=t,n&&(e.settings={...e.settings,...n})}return e.settings&&(e.settings=(0,c.resolveOverridableSettings)(e,t)),e.elements?.length&&(e.elements=e.elements.map(e=>resolveElementRecursive(e,t))),e}function getOverridableOverride(e){if(!s.componentOverridablePropTypeUtil.isValid(e))return null;const t=s.componentOverridablePropTypeUtil.extract(e)?.origin_value;return r.componentInstanceOverridePropTypeUtil.isValid(t)?t:null}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-overridable-settings.ts":function(e,t,n){n.r(t),n.d(t,{resolveOverridableSettings:function(){return resolveOverridableSettings}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/utils/is-component-instance.ts");function resolveOverridableSettings(e,t){return(0,a.isComponentInstance)({widgetType:e.widgetType,elType:e.elType})?function resolveOverridableSettingsForComponentInstance(e,t){const n=e.settings?.component_instance;if(!r.componentInstancePropTypeUtil.isValid(n))return e.settings??{};const o=n.value.overrides?.value;if(!o?.length)return e.settings??{};const s=o.map(e=>resolvePropValue(e,t,{isOverridableOverride:!0}));return{...e.settings,component_instance:{...n,value:{...n.value,overrides:{...n.value.overrides,value:s}}}}}(e,t):function resolveOverridableSettingsForElement(e,t){const n=e.settings?{...e.settings}:{};for(const[o,r]of Object.entries(e.settings??{}))n[o]=resolvePropValue(r,t);return n}(e,t)}function resolvePropValue(e,t,n){const{isOverridableOverride:r=!1}=n??{};if(!s.componentOverridablePropTypeUtil.isValid(e))return e;const a=e.value.override_key,c=t.get(a),i=s.componentOverridablePropTypeUtil.extract(e)?.origin_value;if(!c)return i;if(r)return function resolveOverridableOverride(e,t){if(!t||!o.componentInstanceOverridePropTypeUtil.isValid(t))return null;return o.componentInstanceOverridePropTypeUtil.create({override_value:e.value.override_value,override_key:t.value.override_key,schema_source:t.value.schema_source})}(c,i);const p=o.componentInstanceOverridePropTypeUtil.extract(c)?.override_value;return p}},"./packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts":function(e,t,n){n.r(t),n.d(t,{filterValidOverridableProps:function(){return filterValidOverridableProps},isExposedPropValid:function(){return isExposedPropValid}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts"),c=n("./packages/packages/core/editor-components/src/utils/get-overridable-prop.ts"),i=n("./packages/packages/core/editor-components/src/utils/overridable-props-utils.ts");function filterValidOverridableProps(e,t){const n={};for(const[o,r]of Object.entries(e.props))isExposedPropValid(r,t)&&(n[o]=r);const o=new Set(Object.keys(n));return{props:n,groups:{items:Object.fromEntries(Object.entries(e.groups.items).map(([e,t])=>[e,{...t,props:t.props.filter(e=>o.has(e))}])),order:e.groups.order}}}function isExposedPropValid(e,t){if(!e.originPropFields)return!0;const n=(0,a.getContainerByOriginId)(e.elementId,t);if(!n)return!1;const p=n.settings?.get("component_instance")??null,l=r.componentInstancePropTypeUtil.extract(p);if(!l?.component_id?.value)return!1;const d=function findOverrideByOuterKey(e,t){if(!e)return null;return e.find(e=>{const n=s.componentOverridablePropTypeUtil.extract(e);return n?n.override_key===t:e.value.override_key===t})??null}(o.componentInstanceOverridesPropTypeUtil.extract(l.overrides)??void 0,e.overrideKey),m=(0,i.extractInnerOverrideInfo)(d);if(!m)return!1;const{componentId:u,innerOverrideKey:g}=m,f=(0,c.getOverridableProp)({componentId:u,overrideKey:g});return!!f&&isExposedPropValid(f,n.id)}},"./packages/packages/core/editor-components/src/utils/format-component-elements-id.ts":function(e,t,n){n.r(t),n.d(t,{formatComponentElementsId:function(){return formatComponentElementsId}});var o=n("@elementor/utils");const r=7;function formatComponentElementsId(e,t){return e.map(e=>{const n=[...t,e.id],s=(0,o.hashString)(n.join("_"),r);return{...e,id:s,originId:e.id,elements:e.elements?formatComponentElementsId(e.elements,n):void 0}})}},"./packages/packages/core/editor-components/src/utils/get-component-documents.ts":function(e,t,n){n.r(t),n.d(t,{getComponentDocuments:function(){return getComponentDocuments}});var o=n("./packages/packages/core/editor-components/src/utils/component-document-data.ts"),r=n("./packages/packages/core/editor-components/src/utils/is-component-instance.ts");async function getComponentDocuments(e,t=new Map){return async function getDocumentsMap(e,t){const n=await Promise.all(e.map(async e=>{const n=await t.get(e);return n?[e,n]:null}));return new Map(n.filter(e=>null!==e))}(await getComponentIds(e,t),t)}async function getComponentIds(e,t){const n=await Promise.all(e.map(async({widgetType:e,elType:n,elements:s,settings:a})=>{const c=[];if((0,r.isComponentInstance)({widgetType:e,elType:n})){const e=a?.component_instance?.value?.component_id.value;if(!e)return c;c.push(e),t.has(e)||t.set(e,(0,o.getComponentDocumentData)(e));const n=await t.get(e);s=n?.elements}if(s?.length){const e=await getComponentIds(s,t);c.push(...e)}return c}));return[...new Set(n.flat())]}},"./packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts":function(e,t,n){n.r(t),n.d(t,{getContainerByOriginId:function(){return getContainerByOriginId}});var o=n("@elementor/editor-elements");function getContainerByOriginId(e,t){if(!t)return(0,o.getContainer)(e);const n=(0,o.getContainer)(t);if(!n)return null;const r=window;return r.elementor?.getContainerByKeyValue?.({key:"originId",value:e,parent:n.view})??null}},"./packages/packages/core/editor-components/src/utils/get-overridable-prop.ts":function(e,t,n){n.r(t),n.d(t,{getOverridableProp:function(){return getOverridableProp}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function getOverridableProp({componentId:e,overrideKey:t}){const n=(0,r.selectOverridableProps)((0,o.__getState)(),e);if(n)return n.props[t]}},"./packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts":function(e,t,n){n.r(t),n.d(t,{getPropTypeForComponentOverride:function(){return getPropTypeForComponentOverride}});var o=n("@elementor/editor-elements");const getPropTypeForComponentOverride=e=>{if(e.originPropFields)return getPropType(e.originPropFields);const{widgetType:t,propKey:n}=e;return getPropType({widgetType:t,propKey:n})};function getPropType({widgetType:e,propKey:t}){const n=(0,o.getWidgetsCache)()?.[e]?.atomic_props_schema;return n?.[t]}},"./packages/packages/core/editor-components/src/utils/is-component-instance.ts":function(e,t,n){n.r(t),n.d(t,{isComponentInstance:function(){return isComponentInstance}});var o=n("./packages/packages/core/editor-components/src/consts.ts");function isComponentInstance(e){return[e.widgetType,e.elType].includes(o.COMPONENT_WIDGET_TYPE)}},"./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts":function(e,t,n){n.r(t),n.d(t,{isProComponentsSupported:function(){return isProComponentsSupported},isProOutdatedForComponents:function(){return isProOutdatedForComponents}});var o=n("@elementor/utils");const r="4.0";function isProComponentsSupported(){return(0,o.hasProInstalled)()&&(0,o.isProAtLeast)(r)}function isProOutdatedForComponents(){return(0,o.hasProInstalled)()&&!(0,o.isProAtLeast)(r)}},"./packages/packages/core/editor-components/src/utils/overridable-props-utils.ts":function(e,t,n){n.r(t),n.d(t,{extractInnerOverrideInfo:function(){return extractInnerOverrideInfo},getMatchingOverride:function(){return getMatchingOverride}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");function getMatchingOverride(e,t){return e?.find(e=>{const n=r.componentOverridablePropTypeUtil.extract(e);if(n){const e=o.componentInstanceOverridePropTypeUtil.extract(n.origin_value);return e?.override_key===t}return e.value.override_key===t})??null}function extractInnerOverrideInfo(e){if(!e)return null;const t=r.componentOverridablePropTypeUtil.extract(e),n=t?o.componentInstanceOverridePropTypeUtil.extract(t.origin_value):o.componentInstanceOverridePropTypeUtil.extract(e);if(!n)return null;const{schema_source:s,override_key:a,override_value:c}=n,i=s?.id;return i&&a?{componentId:i,innerOverrideKey:a,overrideValue:c}:null}},"./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts":function(e,t,n){n.r(t),n.d(t,{resolveOverridePropValue:function(){return resolveOverridePropValue}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");const resolveOverridePropValue=e=>{if(r.componentOverridablePropTypeUtil.isValid(e))return function getOverridableValue(e){const t=r.componentOverridablePropTypeUtil.extract(e);if(!t)return null;const n=o.componentInstanceOverridePropTypeUtil.isValid(t.origin_value);if(n)return getOverrideValue(t.origin_value);return t.origin_value}(e);return o.componentInstanceOverridePropTypeUtil.isValid(e)?getOverrideValue(e):e};function getOverrideValue(e){const t=o.componentInstanceOverridePropTypeUtil.extract(e);return t?t.override_value:null}},"./packages/packages/core/editor-components/src/utils/switch-to-component.ts":function(e,t,n){n.r(t),n.d(t,{buildUniqueSelector:function(){return buildUniqueSelector},expandNavigator:function(){return expandNavigator},switchToComponent:function(){return switchToComponent}});var o=n("@elementor/editor-documents"),r=n("@elementor/editor-elements"),s=n("@elementor/editor-v1-adapters");async function switchToComponent(e,t,n){const s=function getSelector(e,t){if(e)return buildUniqueSelector(e);if(t)return`[data-id="${t}"]`;return}(n,t);(0,o.invalidateDocumentData)(e),await(0,o.switchToDocument)(e,{selector:s,mode:"autosave",setAsInitial:!1,shouldScroll:!1});const a=(0,r.getCurrentDocumentContainer)(),c=a?.children?.[0];c&&((0,r.selectElement)(c.id),expandNavigator())}async function expandNavigator(){await(0,s.__privateRunCommand)("navigator/expand-all")}function buildUniqueSelector(e){const t=[];let n=e.closest("[data-id]");for(;n;){const e=n.dataset.id;n.hasAttribute("data-elementor-id")&&t.unshift(`[data-id="${e}"]`),n=n.parentElement?.closest("[data-id]")??null}if(0===t.length){const t=e.closest("[data-id]");if(t?.dataset?.id)return`[data-id="${t.dataset.id}"]`}return t.join(" ")}},"./packages/packages/core/editor-components/src/utils/tracking.ts":function(e,t,n){n.r(t),n.d(t,{onElementDrop:function(){return onElementDrop},trackComponentEvent:function(){return trackComponentEvent}});var o=n("@elementor/events"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts");const trackComponentEvent=({action:e,source:t,...n})=>{if("system"===t)return;const{dispatchEvent:r,config:s}=(0,o.getMixpanel)();if(!s?.names?.components?.[e])return;const a=s.names.components[e];r?.(a,{...n,source:t,"Feature name":"Components"})},onElementDrop=(e,t)=>{if("e-component"!==t?.model?.get("widgetType"))return;const n=t.model.get("editor_settings"),o=n?.title,a=n?.component_uid,c=t.id,i=(0,s.selectCreatedThisSession)((0,r.__getState)()),p=a&&i.includes(a),l=window.elementorCommon.eventsManager.config,{locations:d,secondaryLocations:m}=l;trackComponentEvent({action:"instanceAdded",source:"user",instance_id:c,component_uid:a,component_name:o,is_same_session_reuse:p,location:d.widgetPanel,secondary_location:m.componentsTab})}},"@elementor/editor":function(e){e.exports=window.elementorV2.editor},"@elementor/editor-canvas":function(e){e.exports=window.elementorV2.editorCanvas},"@elementor/editor-controls":function(e){e.exports=window.elementorV2.editorControls},"@elementor/editor-current-user":function(e){e.exports=window.elementorV2.editorCurrentUser},"@elementor/editor-documents":function(e){e.exports=window.elementorV2.editorDocuments},"@elementor/editor-editing-panel":function(e){e.exports=window.elementorV2.editorEditingPanel},"@elementor/editor-elements":function(e){e.exports=window.elementorV2.editorElements},"@elementor/editor-elements-panel":function(e){e.exports=window.elementorV2.editorElementsPanel},"@elementor/editor-notifications":function(e){e.exports=window.elementorV2.editorNotifications},"@elementor/editor-panels":function(e){e.exports=window.elementorV2.editorPanels},"@elementor/editor-props":function(e){e.exports=window.elementorV2.editorProps},"@elementor/editor-styles-repository":function(e){e.exports=window.elementorV2.editorStylesRepository},"@elementor/editor-templates":function(e){e.exports=window.elementorV2.editorTemplates},"@elementor/editor-ui":function(e){e.exports=window.elementorV2.editorUi},"@elementor/editor-v1-adapters":function(e){e.exports=window.elementorV2.editorV1Adapters},"@elementor/events":function(e){e.exports=window.elementorV2.events},"@elementor/http-client":function(e){e.exports=window.elementorV2.httpClient},"@elementor/icons":function(e){e.exports=window.elementorV2.icons},"@elementor/schema":function(e){e.exports=window.elementorV2.schema},"@elementor/store":function(e){e.exports=window.elementorV2.store},"@elementor/ui":function(e){e.exports=window.elementorV2.ui},"@elementor/utils":function(e){e.exports=window.elementorV2.utils},"@wordpress/i18n":function(e){e.exports=window.wp.i18n},react:function(e){e.exports=window.React}},t={};function __webpack_require__(n){var o=t[n];if(void 0!==o)return o.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,__webpack_require__),r.exports}__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(e,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};!function(){__webpack_require__.r(n),__webpack_require__.d(n,{COMPONENT_WIDGET_TYPE:function(){return u.COMPONENT_WIDGET_TYPE},ComponentInstanceProvider:function(){return h.ComponentInstanceProvider},ComponentItem:function(){return r.ComponentItem},ComponentName:function(){return r.ComponentName},ComponentSearch:function(){return o.ComponentSearch},ComponentsList:function(){return s.ComponentsList},DetachAction:function(){return m.DetachAction},EditComponentAction:function(){return l.EditComponentAction},EmptySearchResult:function(){return s.EmptySearchResult},InstanceEmptyState:function(){return i.EmptyState},InstancePanelBody:function(){return p.InstancePanelBody},InstancePanelHeader:function(){return l.InstancePanelHeader},LoadingComponents:function(){return a.LoadingComponents},OverridablePropProvider:function(){return b.OverridablePropProvider},SLICE_NAME:function(){return w.SLICE_NAME},SearchProvider:function(){return c.SearchProvider},apiClient:function(){return t.apiClient},componentInstanceOverridePropTypeUtil:function(){return k.componentInstanceOverridePropTypeUtil},componentInstanceOverridesPropTypeUtil:function(){return y.componentInstanceOverridesPropTypeUtil},componentInstancePropTypeUtil:function(){return _.componentInstancePropTypeUtil},componentOverridablePropTypeUtil:function(){return C.componentOverridablePropTypeUtil},componentsActions:function(){return P.componentsActions},componentsSelectors:function(){return x.componentsSelectors},createComponentsAction:function(){return w.createComponentsAction},filterValidOverridableProps:function(){return O.filterValidOverridableProps},getContainerByOriginId:function(){return T.getContainerByOriginId},getOverridableProp:function(){return D.getOverridableProp},getPropTypeForComponentOverride:function(){return U.getPropTypeForComponentOverride},init:function(){return e.init},isComponentInstance:function(){return A.isComponentInstance},loadComponentsAssets:function(){return E.loadComponentsAssets},onElementDrop:function(){return L.onElementDrop},publishDraftComponentsInPageBeforeSave:function(){return S.publishDraftComponentsInPageBeforeSave},registerComponentsReducer:function(){return w.registerComponentsReducer},resolveOverridePropValue:function(){return V.resolveOverridePropValue},selectOverridableProps:function(){return w.selectOverridableProps},selectPath:function(){return w.selectPath},slice:function(){return w.slice},switchToComponent:function(){return N.switchToComponent},trackComponentEvent:function(){return L.trackComponentEvent},updateOverridableProp:function(){return I.updateOverridableProp},useComponentInstanceElement:function(){return b.useComponentInstanceElement},useComponents:function(){return g.useComponents},useComponentsPermissions:function(){return f.useComponentsPermissions},useCurrentComponent:function(){return w.useCurrentComponent},useCurrentComponentId:function(){return w.useCurrentComponentId},useFilteredComponents:function(){return s.useFilteredComponents},useInstancePanelData:function(){return d.useInstancePanelData},useIsSanitizedComponent:function(){return w.useIsSanitizedComponent},useOverridablePropValue:function(){return b.useOverridablePropValue},useOverridableProps:function(){return w.useOverridableProps},useSanitizeOverridableProps:function(){return v.useSanitizeOverridableProps}});var e=__webpack_require__("./packages/packages/core/editor-components/src/init.ts"),t=__webpack_require__("./packages/packages/core/editor-components/src/api.ts"),o=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/component-search.tsx"),r=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/components-item.tsx"),s=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/components-list.tsx"),a=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx"),c=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx"),i=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx"),p=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx"),l=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx"),d=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts"),m=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx"),u=__webpack_require__("./packages/packages/core/editor-components/src/create-component-type.ts"),g=__webpack_require__("./packages/packages/core/editor-components/src/hooks/use-components.ts"),f=__webpack_require__("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),v=__webpack_require__("./packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts"),k=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),y=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),_=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),C=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),h=__webpack_require__("./packages/packages/core/editor-components/src/provider/component-instance-context.tsx"),b=__webpack_require__("./packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx"),E=__webpack_require__("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts"),I=__webpack_require__("./packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts"),P=__webpack_require__("./packages/packages/core/editor-components/src/store/dispatchers.ts"),x=__webpack_require__("./packages/packages/core/editor-components/src/store/selectors.ts"),w=__webpack_require__("./packages/packages/core/editor-components/src/store/store.ts"),S=__webpack_require__("./packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts"),O=__webpack_require__("./packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts"),T=__webpack_require__("./packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts"),D=__webpack_require__("./packages/packages/core/editor-components/src/utils/get-overridable-prop.ts"),U=__webpack_require__("./packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts"),A=__webpack_require__("./packages/packages/core/editor-components/src/utils/is-component-instance.ts"),V=__webpack_require__("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),N=__webpack_require__("./packages/packages/core/editor-components/src/utils/switch-to-component.ts"),L=__webpack_require__("./packages/packages/core/editor-components/src/utils/tracking.ts")}(),(window.elementorV2=window.elementorV2||{}).editorComponents=n}(),window.elementorV2.editorComponents?.init?.(); | |
| 2934 | 3 | //# sourceMappingURL=editor-components.js.map |