@elementor/editor-editing-panel 1.8.1 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -30,10 +30,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
+ injectIntoClassSelectorActions: () => injectIntoClassSelectorActions,
33
34
  registerGlobalClassMenuItem: () => registerGlobalClassMenuItem,
34
35
  registerStateMenuItem: () => registerStateMenuItem,
35
36
  replaceControl: () => replaceControl,
36
- useBoundProp: () => import_editor_controls47.useBoundProp
37
+ useBoundProp: () => import_editor_controls47.useBoundProp,
38
+ usePanelActions: () => usePanelActions,
39
+ usePanelStatus: () => usePanelStatus
37
40
  });
38
41
  module.exports = __toCommonJS(index_exports);
39
42
  var import_editor_controls47 = require("@elementor/editor-controls");
@@ -61,7 +64,7 @@ function CssClassItemProvider({ styleId, isGlobal, isActive, children }) {
61
64
  return /* @__PURE__ */ React.createElement(ClassItemContext.Provider, { value: { styleId, isGlobal, isActive } }, children);
62
65
  }
63
66
  function useCssClassItem() {
64
- const context = React.useContext(ClassItemContext);
67
+ const context = (0, import_react.useContext)(ClassItemContext);
65
68
  if (!context) {
66
69
  throw new Error("useCssClassItem must be used within a CssClassItemProvider");
67
70
  }
@@ -151,307 +154,55 @@ var StyledMenuItem = (0, import_ui.styled)(import_ui.MenuItem)({
151
154
  }
152
155
  });
153
156
 
154
- // src/init.ts
155
- var import_editor = require("@elementor/editor");
156
- var import_editor_panels3 = require("@elementor/editor-panels");
157
- var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
158
-
159
- // src/hooks/use-close-editor-panel.ts
160
- var import_react17 = require("react");
161
- var import_editor_elements8 = require("@elementor/editor-elements");
162
- var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
163
-
164
- // src/panel.ts
165
- var import_editor_panels2 = require("@elementor/editor-panels");
166
-
167
- // src/components/editing-panel.tsx
168
- var React62 = __toESM(require("react"));
169
- var import_editor_controls41 = require("@elementor/editor-controls");
170
- var import_editor_elements6 = require("@elementor/editor-elements");
171
- var import_editor_panels = require("@elementor/editor-panels");
172
- var import_session3 = require("@elementor/session");
173
- var import_ui51 = require("@elementor/ui");
174
- var import_i18n40 = require("@wordpress/i18n");
157
+ // src/components/css-class-selector.tsx
158
+ var React9 = __toESM(require("react"));
159
+ var import_react8 = require("react");
160
+ var import_editor_elements = require("@elementor/editor-elements");
161
+ var import_editor_props = require("@elementor/editor-props");
162
+ var import_editor_styles_repository = require("@elementor/editor-styles-repository");
163
+ var import_icons2 = require("@elementor/icons");
164
+ var import_locations = require("@elementor/locations");
165
+ var import_ui5 = require("@elementor/ui");
166
+ var import_i18n2 = require("@wordpress/i18n");
175
167
 
176
- // src/contexts/element-context.tsx
168
+ // src/contexts/classes-prop-context.tsx
177
169
  var React4 = __toESM(require("react"));
178
170
  var import_react3 = require("react");
179
171
  var Context2 = (0, import_react3.createContext)(null);
180
- function ElementProvider({ children, element, elementType }) {
181
- return /* @__PURE__ */ React4.createElement(Context2.Provider, { value: { element, elementType } }, children);
172
+ function ClassesPropProvider({ children, prop }) {
173
+ return /* @__PURE__ */ React4.createElement(Context2.Provider, { value: { prop } }, children);
182
174
  }
183
- function useElement() {
175
+ function useClassesProp() {
184
176
  const context = (0, import_react3.useContext)(Context2);
185
177
  if (!context) {
186
- throw new Error("useElement must be used within a ElementProvider");
178
+ throw new Error("useClassesProp must be used within a ClassesPropProvider");
187
179
  }
188
- return context;
180
+ return context.prop;
189
181
  }
190
182
 
191
- // src/controls-actions.ts
192
- var import_menus2 = require("@elementor/menus");
193
-
194
- // src/popover-action.tsx
183
+ // src/contexts/element-context.tsx
195
184
  var React5 = __toESM(require("react"));
196
185
  var import_react4 = require("react");
197
- var import_icons2 = require("@elementor/icons");
198
- var import_ui2 = require("@elementor/ui");
199
- var SIZE = "tiny";
200
- function PopoverAction({
201
- title,
202
- visible = true,
203
- icon: Icon,
204
- popoverContent: PopoverContent
205
- }) {
206
- const id = (0, import_react4.useId)();
207
- const popupState = (0, import_ui2.usePopupState)({
208
- variant: "popover",
209
- popupId: `elementor-popover-action-${id}`
210
- });
211
- if (!visible) {
212
- return null;
213
- }
214
- return /* @__PURE__ */ React5.createElement(React5.Fragment, null, /* @__PURE__ */ React5.createElement(import_ui2.Tooltip, { placement: "top", title }, /* @__PURE__ */ React5.createElement(import_ui2.IconButton, { "aria-label": title, key: id, size: SIZE, ...(0, import_ui2.bindToggle)(popupState) }, /* @__PURE__ */ React5.createElement(Icon, { fontSize: SIZE }))), /* @__PURE__ */ React5.createElement(
215
- import_ui2.Popover,
216
- {
217
- disablePortal: true,
218
- disableScrollLock: true,
219
- anchorOrigin: {
220
- vertical: "bottom",
221
- horizontal: "center"
222
- },
223
- ...(0, import_ui2.bindPopover)(popupState)
224
- },
225
- /* @__PURE__ */ React5.createElement(import_ui2.Stack, { direction: "row", alignItems: "center", pl: 1.5, pr: 0.5, py: 1.5 }, /* @__PURE__ */ React5.createElement(Icon, { fontSize: SIZE, sx: { mr: 0.5 } }), /* @__PURE__ */ React5.createElement(import_ui2.Typography, { variant: "subtitle2" }, title), /* @__PURE__ */ React5.createElement(import_ui2.IconButton, { sx: { ml: "auto" }, size: SIZE, onClick: popupState.close }, /* @__PURE__ */ React5.createElement(import_icons2.XIcon, { fontSize: SIZE }))),
226
- /* @__PURE__ */ React5.createElement(PopoverContent, { closePopover: popupState.close })
227
- ));
228
- }
229
-
230
- // src/controls-actions.ts
231
- var controlActionsMenu = (0, import_menus2.createMenu)({
232
- components: {
233
- PopoverAction
234
- }
235
- });
236
-
237
- // src/components/editing-panel-error-fallback.tsx
238
- var React6 = __toESM(require("react"));
239
- var import_ui3 = require("@elementor/ui");
240
- function EditorPanelErrorFallback() {
241
- return /* @__PURE__ */ React6.createElement(import_ui3.Box, { role: "alert", sx: { minHeight: "100%", p: 2 } }, /* @__PURE__ */ React6.createElement(import_ui3.Alert, { severity: "error", sx: { mb: 2, maxWidth: 400, textAlign: "center" } }, /* @__PURE__ */ React6.createElement("strong", null, "Something went wrong")));
242
- }
243
-
244
- // src/components/editing-panel-tabs.tsx
245
- var React61 = __toESM(require("react"));
246
- var import_react16 = require("react");
247
- var import_ui50 = require("@elementor/ui");
248
- var import_i18n39 = require("@wordpress/i18n");
249
-
250
- // src/components/settings-tab.tsx
251
- var React12 = __toESM(require("react"));
252
- var import_editor_controls4 = require("@elementor/editor-controls");
253
- var import_session = require("@elementor/session");
254
-
255
- // src/controls-registry/control.tsx
256
- var React7 = __toESM(require("react"));
257
- var import_utils = require("@elementor/utils");
258
-
259
- // src/controls-registry/controls-registry.tsx
260
- var import_editor_controls2 = require("@elementor/editor-controls");
261
- var controlTypes = {
262
- image: { component: import_editor_controls2.ImageControl, layout: "full" },
263
- text: { component: import_editor_controls2.TextControl, layout: "two-columns" },
264
- textarea: { component: import_editor_controls2.TextAreaControl, layout: "full" },
265
- size: { component: import_editor_controls2.SizeControl, layout: "two-columns" },
266
- select: { component: import_editor_controls2.SelectControl, layout: "two-columns" },
267
- link: { component: import_editor_controls2.LinkControl, layout: "full" },
268
- url: { component: import_editor_controls2.UrlControl, layout: "full" }
269
- };
270
- var getControlByType = (type) => controlTypes[type]?.component;
271
- var getLayoutByType = (type) => controlTypes[type].layout;
272
-
273
- // src/controls-registry/control.tsx
274
- var ControlTypeError = (0, import_utils.createError)({
275
- code: "CONTROL_TYPE_NOT_FOUND",
276
- message: `Control type not found.`
277
- });
278
- var Control = ({ props, type }) => {
279
- const ControlByType = getControlByType(type);
280
- if (!ControlByType) {
281
- throw new ControlTypeError({
282
- context: { type }
283
- });
284
- }
285
- return /* @__PURE__ */ React7.createElement(ControlByType, { ...props });
286
- };
287
-
288
- // src/controls-registry/control-type-container.tsx
289
- var React8 = __toESM(require("react"));
290
- var import_ui4 = require("@elementor/ui");
291
- var ControlTypeContainer = ({
292
- controlType,
293
- children
294
- }) => {
295
- const layout = getLayoutByType(controlType);
296
- return /* @__PURE__ */ React8.createElement(StyledContainer, { layout }, children);
297
- };
298
- var StyledContainer = (0, import_ui4.styled)(import_ui4.Box, {
299
- shouldForwardProp: (prop) => !["layout"].includes(prop)
300
- })(({ layout, theme }) => ({
301
- display: "grid",
302
- gridGap: theme.spacing(1),
303
- ...getGridLayout(layout)
304
- }));
305
- var getGridLayout = (layout) => ({
306
- justifyContent: "space-between",
307
- gridTemplateColumns: {
308
- full: "1fr",
309
- "two-columns": "repeat(2, 1fr)"
310
- }[layout]
311
- });
312
-
313
- // src/controls-registry/settings-field.tsx
314
- var React9 = __toESM(require("react"));
315
- var import_editor_controls3 = require("@elementor/editor-controls");
316
- var import_editor_elements = require("@elementor/editor-elements");
317
-
318
- // src/controls-registry/create-top-level-object-type.ts
319
- var createTopLevelOjectType = ({ schema }) => {
320
- const schemaPropType = {
321
- key: "",
322
- kind: "object",
323
- meta: {},
324
- settings: {},
325
- default: null,
326
- shape: schema
327
- };
328
- return schemaPropType;
329
- };
330
-
331
- // src/controls-registry/settings-field.tsx
332
- var SettingsField = ({ bind, children }) => {
333
- const { element, elementType } = useElement();
334
- const settingsValue = (0, import_editor_elements.useElementSetting)(element.id, bind);
335
- const value = { [bind]: settingsValue };
336
- const propType = createTopLevelOjectType({ schema: elementType.propsSchema });
337
- const setValue = (newValue) => {
338
- (0, import_editor_elements.updateSettings)({
339
- id: element.id,
340
- props: { ...newValue }
341
- });
342
- };
343
- return /* @__PURE__ */ React9.createElement(import_editor_controls3.PropProvider, { propType, value, setValue }, /* @__PURE__ */ React9.createElement(import_editor_controls3.PropKeyProvider, { bind }, children));
344
- };
345
-
346
- // src/components/section.tsx
347
- var React10 = __toESM(require("react"));
348
- var import_react5 = require("react");
349
- var import_ui6 = require("@elementor/ui");
350
-
351
- // src/components/collapse-icon.tsx
352
- var import_icons3 = require("@elementor/icons");
353
- var import_ui5 = require("@elementor/ui");
354
- var CollapseIcon = (0, import_ui5.styled)(import_icons3.ChevronDownIcon, {
355
- shouldForwardProp: (prop) => prop !== "open"
356
- })(({ theme, open }) => ({
357
- transform: open ? "rotate(180deg)" : "rotate(0deg)",
358
- transition: theme.transitions.create("transform", {
359
- duration: theme.transitions.duration.standard
360
- })
361
- }));
362
-
363
- // src/components/section.tsx
364
- function Section({ title, children, defaultExpanded = false }) {
365
- const [isOpen, setIsOpen] = (0, import_react5.useState)(!!defaultExpanded);
366
- const id = (0, import_react5.useId)();
367
- const labelId = `label-${id}`;
368
- const contentId = `content-${id}`;
369
- return /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement(
370
- import_ui6.ListItemButton,
371
- {
372
- id: labelId,
373
- "aria-controls": contentId,
374
- onClick: () => setIsOpen((prev) => !prev)
375
- },
376
- /* @__PURE__ */ React10.createElement(import_ui6.ListItemText, { secondary: title }),
377
- /* @__PURE__ */ React10.createElement(CollapseIcon, { open: isOpen, color: "secondary" })
378
- ), /* @__PURE__ */ React10.createElement(import_ui6.Collapse, { id: contentId, "aria-labelledby": labelId, in: isOpen, timeout: "auto", unmountOnExit: true }, /* @__PURE__ */ React10.createElement(import_ui6.Stack, { gap: 2.5, p: 2 }, children)), /* @__PURE__ */ React10.createElement(import_ui6.Divider, null));
379
- }
380
-
381
- // src/components/sections-list.tsx
382
- var React11 = __toESM(require("react"));
383
- var import_ui7 = require("@elementor/ui");
384
- function SectionsList(props) {
385
- return /* @__PURE__ */ React11.createElement(import_ui7.List, { disablePadding: true, component: "div", ...props });
386
- }
387
-
388
- // src/components/settings-tab.tsx
389
- var SettingsTab = () => {
390
- const { elementType, element } = useElement();
391
- return /* @__PURE__ */ React12.createElement(import_session.SessionStorageProvider, { prefix: element.id }, /* @__PURE__ */ React12.createElement(SectionsList, null, elementType.controls.map(({ type, value }, index) => {
392
- if (type === "control") {
393
- return /* @__PURE__ */ React12.createElement(Control2, { key: value.bind, control: value });
394
- }
395
- if (type === "section") {
396
- return /* @__PURE__ */ React12.createElement(Section, { title: value.label, key: type + "." + index, defaultExpanded: true }, value.items?.map((item) => {
397
- if (item.type === "control") {
398
- return /* @__PURE__ */ React12.createElement(Control2, { key: item.value.bind, control: item.value });
399
- }
400
- return null;
401
- }));
402
- }
403
- return null;
404
- })));
405
- };
406
- var Control2 = ({ control }) => {
407
- if (!getControlByType(control.type)) {
408
- return null;
409
- }
410
- return /* @__PURE__ */ React12.createElement(SettingsField, { bind: control.bind }, /* @__PURE__ */ React12.createElement(ControlTypeContainer, { controlType: control.type }, control.label ? /* @__PURE__ */ React12.createElement(import_editor_controls4.ControlLabel, null, control.label) : null, /* @__PURE__ */ React12.createElement(Control, { type: control.type, props: control.props })));
411
- };
412
-
413
- // src/components/style-tab.tsx
414
- var React60 = __toESM(require("react"));
415
- var import_react15 = require("react");
416
- var import_editor_elements5 = require("@elementor/editor-elements");
417
- var import_editor_responsive = require("@elementor/editor-responsive");
418
- var import_session2 = require("@elementor/session");
419
- var import_ui49 = require("@elementor/ui");
420
- var import_i18n38 = require("@wordpress/i18n");
421
-
422
- // src/contexts/classes-prop-context.tsx
423
- var React13 = __toESM(require("react"));
424
- var import_react6 = require("react");
425
- var Context3 = (0, import_react6.createContext)(null);
426
- function ClassesPropProvider({ children, prop }) {
427
- return /* @__PURE__ */ React13.createElement(Context3.Provider, { value: { prop } }, children);
186
+ var Context3 = (0, import_react4.createContext)(null);
187
+ function ElementProvider({ children, element, elementType }) {
188
+ return /* @__PURE__ */ React5.createElement(Context3.Provider, { value: { element, elementType } }, children);
428
189
  }
429
- function useClassesProp() {
430
- const context = (0, import_react6.useContext)(Context3);
190
+ function useElement() {
191
+ const context = (0, import_react4.useContext)(Context3);
431
192
  if (!context) {
432
- throw new Error("useClassesProp must be used within a ClassesPropProvider");
193
+ throw new Error("useElement must be used within a ElementProvider");
433
194
  }
434
- return context.prop;
195
+ return context;
435
196
  }
436
197
 
437
- // src/components/css-class-selector.tsx
438
- var React17 = __toESM(require("react"));
439
- var import_react10 = require("react");
440
- var import_editor_elements2 = require("@elementor/editor-elements");
441
- var import_editor_props = require("@elementor/editor-props");
442
- var import_editor_styles_repository = require("@elementor/editor-styles-repository");
443
- var import_icons4 = require("@elementor/icons");
444
- var import_ui11 = require("@elementor/ui");
445
- var import_i18n2 = require("@wordpress/i18n");
446
-
447
198
  // src/components/conditional-tooltip-wrapper.tsx
448
- var import_react7 = require("react");
449
- var React14 = __toESM(require("react"));
450
- var import_ui8 = require("@elementor/ui");
199
+ var import_react5 = require("react");
200
+ var React6 = __toESM(require("react"));
201
+ var import_ui2 = require("@elementor/ui");
451
202
  var ConditionalTooltipWrapper = ({ maxWidth, title }) => {
452
- const elRef = (0, import_react7.useRef)(null);
453
- const [isOverflown, setIsOverflown] = (0, import_react7.useState)(false);
454
- (0, import_react7.useEffect)(() => {
203
+ const elRef = (0, import_react5.useRef)(null);
204
+ const [isOverflown, setIsOverflown] = (0, import_react5.useState)(false);
205
+ (0, import_react5.useEffect)(() => {
455
206
  const onResize = () => {
456
207
  const element = elRef.current;
457
208
  if (element) {
@@ -465,12 +216,12 @@ var ConditionalTooltipWrapper = ({ maxWidth, title }) => {
465
216
  };
466
217
  }, []);
467
218
  if (isOverflown) {
468
- return /* @__PURE__ */ React14.createElement(import_ui8.Tooltip, { title, placement: "top" }, /* @__PURE__ */ React14.createElement(Content, { maxWidth, ref: elRef }, title));
219
+ return /* @__PURE__ */ React6.createElement(import_ui2.Tooltip, { title, placement: "top" }, /* @__PURE__ */ React6.createElement(Content, { maxWidth, ref: elRef }, title));
469
220
  }
470
- return /* @__PURE__ */ React14.createElement(Content, { maxWidth, ref: elRef }, title);
221
+ return /* @__PURE__ */ React6.createElement(Content, { maxWidth, ref: elRef }, title);
471
222
  };
472
- var Content = React14.forwardRef(({ maxWidth, ...tooltipProps }, ref) => /* @__PURE__ */ React14.createElement(
473
- import_ui8.Box,
223
+ var Content = React6.forwardRef(({ maxWidth, ...tooltipProps }, ref) => /* @__PURE__ */ React6.createElement(
224
+ import_ui2.Box,
474
225
  {
475
226
  ref,
476
227
  position: "relative",
@@ -478,12 +229,12 @@ var Content = React14.forwardRef(({ maxWidth, ...tooltipProps }, ref) => /* @__P
478
229
  ...tooltipProps
479
230
  }
480
231
  ));
481
-
482
- // src/components/editable-field.tsx
483
- var React15 = __toESM(require("react"));
484
- var import_react8 = require("react");
485
- var import_ui9 = require("@elementor/ui");
486
- var Context4 = (0, import_react8.createContext)(null);
232
+
233
+ // src/components/editable-field.tsx
234
+ var React7 = __toESM(require("react"));
235
+ var import_react6 = require("react");
236
+ var import_ui3 = require("@elementor/ui");
237
+ var Context4 = (0, import_react6.createContext)(null);
487
238
  var EditableFieldProvider = ({
488
239
  children,
489
240
  value,
@@ -491,9 +242,9 @@ var EditableFieldProvider = ({
491
242
  validation,
492
243
  editable
493
244
  }) => {
494
- const [isEditing, setIsEditing] = (0, import_react8.useState)(false);
495
- const [submitting, setSubmitting] = (0, import_react8.useState)(false);
496
- const [error, setError] = (0, import_react8.useState)(null);
245
+ const [isEditing, setIsEditing] = (0, import_react6.useState)(false);
246
+ const [submitting, setSubmitting] = (0, import_react6.useState)(false);
247
+ const [error, setError] = (0, import_react6.useState)(null);
497
248
  const openEditMode = () => {
498
249
  setIsEditing(true);
499
250
  };
@@ -518,7 +269,7 @@ var EditableFieldProvider = ({
518
269
  setError(validation(newValue));
519
270
  }
520
271
  };
521
- return /* @__PURE__ */ React15.createElement(
272
+ return /* @__PURE__ */ React7.createElement(
522
273
  Context4.Provider,
523
274
  {
524
275
  value: {
@@ -536,10 +287,10 @@ var EditableFieldProvider = ({
536
287
  children
537
288
  );
538
289
  };
539
- var EditableField = ({ children, ...props }) => {
540
- const ref = (0, import_react8.useRef)(null);
290
+ var EditableField = ({ children, onClick, ...props }) => {
291
+ const ref = (0, import_react6.useRef)(null);
541
292
  const { isEditing, closeEditMode, value, onChange, error, submit, editable } = useEditableField();
542
- (0, import_react8.useEffect)(() => {
293
+ (0, import_react6.useEffect)(() => {
543
294
  if (isEditing) {
544
295
  ref.current?.focus();
545
296
  selectAll();
@@ -555,6 +306,12 @@ var EditableField = ({ children, ...props }) => {
555
306
  return submit(event.target.innerText);
556
307
  }
557
308
  };
309
+ const handleClick = (event) => {
310
+ if (isEditing) {
311
+ event.stopPropagation();
312
+ }
313
+ onClick?.(event);
314
+ };
558
315
  const selectAll = () => {
559
316
  const selection = getSelection();
560
317
  if (!selection || !ref.current) {
@@ -568,7 +325,7 @@ var EditableField = ({ children, ...props }) => {
568
325
  if (!editable) {
569
326
  return children;
570
327
  }
571
- return /* @__PURE__ */ React15.createElement(import_ui9.Tooltip, { open: !!error, title: error, placement: "top" }, /* @__PURE__ */ React15.createElement("div", { onKeyDown: handleKeyDown, ...props }, /* @__PURE__ */ React15.createElement(
328
+ return /* @__PURE__ */ React7.createElement(import_ui3.Tooltip, { open: !!error, title: error, placement: "top" }, /* @__PURE__ */ React7.createElement("div", { onKeyDown: handleKeyDown, onClick: handleClick, ...props }, /* @__PURE__ */ React7.createElement(
572
329
  "span",
573
330
  {
574
331
  ref,
@@ -582,7 +339,7 @@ var EditableField = ({ children, ...props }) => {
582
339
  )));
583
340
  };
584
341
  var useEditableField = () => {
585
- const contextValue = (0, import_react8.useContext)(Context4);
342
+ const contextValue = (0, import_react6.useContext)(Context4);
586
343
  if (!contextValue) {
587
344
  throw new Error("useEditableField must be used within a EditableFieldProvider");
588
345
  }
@@ -590,9 +347,9 @@ var useEditableField = () => {
590
347
  };
591
348
 
592
349
  // src/components/multi-combobox.tsx
593
- var React16 = __toESM(require("react"));
594
- var import_react9 = require("react");
595
- var import_ui10 = require("@elementor/ui");
350
+ var React8 = __toESM(require("react"));
351
+ var import_react7 = require("react");
352
+ var import_ui4 = require("@elementor/ui");
596
353
  function MultiCombobox({
597
354
  actions = [],
598
355
  selected,
@@ -602,8 +359,8 @@ function MultiCombobox({
602
359
  }) {
603
360
  const filter = useFilterOptions();
604
361
  const { run, loading } = useActionRunner();
605
- return /* @__PURE__ */ React16.createElement(
606
- import_ui10.Autocomplete,
362
+ return /* @__PURE__ */ React8.createElement(
363
+ import_ui4.Autocomplete,
607
364
  {
608
365
  ...props,
609
366
  freeSolo: true,
@@ -615,8 +372,8 @@ function MultiCombobox({
615
372
  disabled: loading,
616
373
  value: selected,
617
374
  options: options10,
618
- renderGroup: (params) => /* @__PURE__ */ React16.createElement(Group, { ...params }),
619
- renderInput: (params) => /* @__PURE__ */ React16.createElement(import_ui10.TextField, { ...params }),
375
+ renderGroup: (params) => /* @__PURE__ */ React8.createElement(Group, { ...params }),
376
+ renderInput: (params) => /* @__PURE__ */ React8.createElement(import_ui4.TextField, { ...params }),
620
377
  onChange: (_, selectedOrInputValue, reason) => {
621
378
  const inputValue = selectedOrInputValue.find((option) => typeof option === "string");
622
379
  const optionsAndActions = selectedOrInputValue.filter((option) => typeof option !== "string");
@@ -655,28 +412,28 @@ function MultiCombobox({
655
412
  );
656
413
  }
657
414
  var Group = (params) => {
658
- const id = `combobox-group-${(0, import_react9.useId)().replace(/:/g, "_")}`;
659
- return /* @__PURE__ */ React16.createElement(StyledGroup, { role: "group", "aria-labelledby": id }, /* @__PURE__ */ React16.createElement(StyledGroupHeader, { id }, " ", params.group), /* @__PURE__ */ React16.createElement(StyledGroupItems, { role: "listbox" }, params.children));
415
+ const id = `combobox-group-${(0, import_react7.useId)().replace(/:/g, "_")}`;
416
+ return /* @__PURE__ */ React8.createElement(StyledGroup, { role: "group", "aria-labelledby": id }, /* @__PURE__ */ React8.createElement(StyledGroupHeader, { id }, " ", params.group), /* @__PURE__ */ React8.createElement(StyledGroupItems, { role: "listbox" }, params.children));
660
417
  };
661
- var StyledGroup = (0, import_ui10.styled)("li")`
418
+ var StyledGroup = (0, import_ui4.styled)("li")`
662
419
  &:not( :last-of-type ) {
663
420
  border-bottom: 1px solid ${({ theme }) => theme.palette.divider};
664
421
  }
665
422
  `;
666
- var StyledGroupHeader = (0, import_ui10.styled)(import_ui10.Box)(({ theme }) => ({
423
+ var StyledGroupHeader = (0, import_ui4.styled)(import_ui4.Box)(({ theme }) => ({
667
424
  position: "sticky",
668
425
  top: "-8px",
669
426
  padding: theme.spacing(1, 2),
670
427
  color: theme.palette.text.tertiary
671
428
  }));
672
- var StyledGroupItems = (0, import_ui10.styled)("ul")`
429
+ var StyledGroupItems = (0, import_ui4.styled)("ul")`
673
430
  padding: 0;
674
431
  `;
675
432
  function useFilterOptions() {
676
- return (0, import_react9.useState)(() => (0, import_ui10.createFilterOptions)())[0];
433
+ return (0, import_react7.useState)(() => (0, import_ui4.createFilterOptions)())[0];
677
434
  }
678
435
  function useActionRunner() {
679
- const [loading, setLoading] = (0, import_react9.useState)(false);
436
+ const [loading, setLoading] = (0, import_react7.useState)(false);
680
437
  const run = async (apply, value) => {
681
438
  setLoading(true);
682
439
  try {
@@ -711,6 +468,7 @@ var EMPTY_OPTION = {
711
468
  color: "primary",
712
469
  provider: import_editor_styles_repository.ELEMENTS_STYLES_PROVIDER_KEY
713
470
  };
471
+ var { Slot: ClassSelectorActionsSlot, inject: injectIntoClassSelectorActions } = (0, import_locations.createLocation)();
714
472
  function CssClassSelector() {
715
473
  const options10 = useOptions();
716
474
  const { value: appliedIds, setValue: setAppliedIds, pushValue: pushAppliedId } = useAppliedClassesIds();
@@ -720,7 +478,7 @@ function CssClassSelector() {
720
478
  const handleActivate = ({ value }) => setActiveId(value);
721
479
  const applied = useAppliedOptions(options10, appliedIds);
722
480
  const active = applied.find((option) => option.value === activeId) ?? EMPTY_OPTION;
723
- return /* @__PURE__ */ React17.createElement(import_ui11.Stack, { gap: 1, p: 2 }, /* @__PURE__ */ React17.createElement(import_ui11.Typography, { component: "label", variant: "caption", htmlFor: ID }, (0, import_i18n2.__)("CSS Classes", "elementor")), /* @__PURE__ */ React17.createElement(
481
+ return /* @__PURE__ */ React9.createElement(import_ui5.Stack, { gap: 1, p: 2 }, /* @__PURE__ */ React9.createElement(import_ui5.Stack, { direction: "row", gap: 1, alignItems: "baseline", justifyContent: "space-between" }, /* @__PURE__ */ React9.createElement(import_ui5.Typography, { component: "label", variant: "caption", htmlFor: ID }, (0, import_i18n2.__)("CSS Classes", "elementor")), /* @__PURE__ */ React9.createElement(import_ui5.Stack, { direction: "row", gap: 1 }, /* @__PURE__ */ React9.createElement(ClassSelectorActionsSlot, null))), /* @__PURE__ */ React9.createElement(
724
482
  MultiCombobox,
725
483
  {
726
484
  id: ID,
@@ -730,14 +488,14 @@ function CssClassSelector() {
730
488
  onSelect: handleApply,
731
489
  limitTags: TAGS_LIMIT,
732
490
  actions,
733
- getLimitTagsText: (more) => /* @__PURE__ */ React17.createElement(import_ui11.Chip, { size: "tiny", variant: "standard", label: `+${more}`, clickable: true }),
491
+ getLimitTagsText: (more) => /* @__PURE__ */ React9.createElement(import_ui5.Chip, { size: "tiny", variant: "standard", label: `+${more}`, clickable: true }),
734
492
  renderTags: (values, getTagProps) => values.map((value, index) => {
735
493
  const chipProps = getTagProps({ index });
736
494
  const isActive = value.value === active?.value;
737
495
  const renameLabel = (newLabel) => {
738
496
  return updateClassByProvider(value.provider, { label: newLabel, id: value.value });
739
497
  };
740
- return /* @__PURE__ */ React17.createElement(
498
+ return /* @__PURE__ */ React9.createElement(
741
499
  EditableFieldProvider,
742
500
  {
743
501
  key: chipProps.key,
@@ -749,7 +507,7 @@ function CssClassSelector() {
749
507
  options10.filter((option) => option.value !== value.value)
750
508
  )
751
509
  },
752
- /* @__PURE__ */ React17.createElement(
510
+ /* @__PURE__ */ React9.createElement(
753
511
  CssClassItem,
754
512
  {
755
513
  label: value.label,
@@ -777,18 +535,18 @@ function CssClassItem({
777
535
  onClickActive
778
536
  }) {
779
537
  const { meta } = useStyle();
780
- const popupId = (0, import_react10.useId)().replace(/:/g, "_");
781
- const popupState = (0, import_ui11.usePopupState)({ variant: "popover", popupId });
782
- const chipRef = (0, import_react10.useRef)(null);
538
+ const popupId = (0, import_react8.useId)().replace(/:/g, "_");
539
+ const popupState = (0, import_ui5.usePopupState)({ variant: "popover", popupId });
540
+ const chipRef = (0, import_react8.useRef)(null);
783
541
  const { onDelete, ...chipGroupProps } = chipProps;
784
542
  const { isEditing, openEditMode, error, submitting } = useEditableField();
785
543
  const color = error ? "error" : colorProp;
786
- return /* @__PURE__ */ React17.createElement(CssClassItemProvider, { styleId: id, isActive, isGlobal }, /* @__PURE__ */ React17.createElement(import_ui11.UnstableChipGroup, { ref: chipRef, ...chipGroupProps, "aria-label": `Edit ${label}`, role: "group" }, /* @__PURE__ */ React17.createElement(
787
- import_ui11.Chip,
544
+ return /* @__PURE__ */ React9.createElement(CssClassItemProvider, { styleId: id, isActive, isGlobal }, /* @__PURE__ */ React9.createElement(import_ui5.UnstableChipGroup, { ref: chipRef, ...chipGroupProps, "aria-label": `Edit ${label}`, role: "group" }, /* @__PURE__ */ React9.createElement(
545
+ import_ui5.Chip,
788
546
  {
789
547
  disabled: submitting,
790
548
  size: CHIP_SIZE,
791
- label: /* @__PURE__ */ React17.createElement(
549
+ label: /* @__PURE__ */ React9.createElement(
792
550
  EditableField,
793
551
  {
794
552
  onDoubleClick: () => {
@@ -802,7 +560,7 @@ function CssClassItem({
802
560
  }
803
561
  }
804
562
  },
805
- /* @__PURE__ */ React17.createElement(ConditionalTooltipWrapper, { maxWidth: "10ch", title: label })
563
+ /* @__PURE__ */ React9.createElement(ConditionalTooltipWrapper, { maxWidth: "10ch", title: label })
806
564
  ),
807
565
  variant: isActive && !meta.state ? "filled" : "standard",
808
566
  color,
@@ -814,18 +572,18 @@ function CssClassItem({
814
572
  }
815
573
  }
816
574
  }
817
- ), !isEditing && /* @__PURE__ */ React17.createElement(
818
- import_ui11.Chip,
575
+ ), !isEditing && /* @__PURE__ */ React9.createElement(
576
+ import_ui5.Chip,
819
577
  {
820
578
  disabled: submitting,
821
579
  size: CHIP_SIZE,
822
- label: /* @__PURE__ */ React17.createElement(import_ui11.Stack, { direction: "row", gap: 0.5, alignItems: "center" }, isActive && meta.state && /* @__PURE__ */ React17.createElement(import_ui11.Typography, { variant: "inherit" }, meta.state), /* @__PURE__ */ React17.createElement(import_icons4.DotsVerticalIcon, { fontSize: "inherit" })),
580
+ label: /* @__PURE__ */ React9.createElement(import_ui5.Stack, { direction: "row", gap: 0.5, alignItems: "center" }, isActive && meta.state && /* @__PURE__ */ React9.createElement(import_ui5.Typography, { variant: "inherit" }, meta.state), /* @__PURE__ */ React9.createElement(import_icons2.DotsVerticalIcon, { fontSize: "inherit" })),
823
581
  variant: "filled",
824
582
  color,
825
- ...(0, import_ui11.bindTrigger)(popupState),
583
+ ...(0, import_ui5.bindTrigger)(popupState),
826
584
  "aria-label": (0, import_i18n2.__)("Open CSS Class Menu", "elementor")
827
585
  }
828
- )), /* @__PURE__ */ React17.createElement(CssClassMenu, { popupState, containerRef: chipRef }));
586
+ )), /* @__PURE__ */ React9.createElement(CssClassMenu, { popupState, containerRef: chipRef }));
829
587
  }
830
588
  var updateClassByProvider = (provider, data) => {
831
589
  const providerInstance = import_editor_styles_repository.stylesRepository.getProviderByKey(provider);
@@ -911,9 +669,9 @@ function useAppliedOptions(options10, appliedIds) {
911
669
  function useAppliedClassesIds() {
912
670
  const { element } = useElement();
913
671
  const currentClassesProp = useClassesProp();
914
- const value = (0, import_editor_elements2.useElementSetting)(element.id, currentClassesProp)?.value || [];
672
+ const value = (0, import_editor_elements.useElementSetting)(element.id, currentClassesProp)?.value || [];
915
673
  const setValue = (ids) => {
916
- (0, import_editor_elements2.updateSettings)({
674
+ (0, import_editor_elements.updateElementSettings)({
917
675
  id: element.id,
918
676
  props: {
919
677
  [currentClassesProp]: import_editor_props.classesPropTypeUtil.create(ids)
@@ -921,7 +679,7 @@ function useAppliedClassesIds() {
921
679
  });
922
680
  };
923
681
  const pushValue = (id) => {
924
- const ids = (0, import_editor_elements2.getElementSetting)(element.id, currentClassesProp)?.value || [];
682
+ const ids = (0, import_editor_elements.getElementSetting)(element.id, currentClassesProp)?.value || [];
925
683
  setValue([...ids, id]);
926
684
  };
927
685
  return {
@@ -951,6 +709,249 @@ function useHandleApply(appliedIds, setAppliedIds) {
951
709
  };
952
710
  }
953
711
 
712
+ // src/panel.ts
713
+ var import_editor_panels2 = require("@elementor/editor-panels");
714
+
715
+ // src/components/editing-panel.tsx
716
+ var React62 = __toESM(require("react"));
717
+ var import_editor_controls41 = require("@elementor/editor-controls");
718
+ var import_editor_elements6 = require("@elementor/editor-elements");
719
+ var import_editor_panels = require("@elementor/editor-panels");
720
+ var import_session3 = require("@elementor/session");
721
+ var import_ui51 = require("@elementor/ui");
722
+ var import_i18n40 = require("@wordpress/i18n");
723
+
724
+ // src/controls-actions.ts
725
+ var import_menus2 = require("@elementor/menus");
726
+
727
+ // src/popover-action.tsx
728
+ var React10 = __toESM(require("react"));
729
+ var import_react9 = require("react");
730
+ var import_icons3 = require("@elementor/icons");
731
+ var import_ui6 = require("@elementor/ui");
732
+ var SIZE = "tiny";
733
+ function PopoverAction({
734
+ title,
735
+ visible = true,
736
+ icon: Icon,
737
+ popoverContent: PopoverContent
738
+ }) {
739
+ const id = (0, import_react9.useId)();
740
+ const popupState = (0, import_ui6.usePopupState)({
741
+ variant: "popover",
742
+ popupId: `elementor-popover-action-${id}`
743
+ });
744
+ if (!visible) {
745
+ return null;
746
+ }
747
+ return /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement(import_ui6.Tooltip, { placement: "top", title }, /* @__PURE__ */ React10.createElement(import_ui6.IconButton, { "aria-label": title, key: id, size: SIZE, ...(0, import_ui6.bindToggle)(popupState) }, /* @__PURE__ */ React10.createElement(Icon, { fontSize: SIZE }))), /* @__PURE__ */ React10.createElement(
748
+ import_ui6.Popover,
749
+ {
750
+ disablePortal: true,
751
+ disableScrollLock: true,
752
+ anchorOrigin: {
753
+ vertical: "bottom",
754
+ horizontal: "center"
755
+ },
756
+ ...(0, import_ui6.bindPopover)(popupState)
757
+ },
758
+ /* @__PURE__ */ React10.createElement(import_ui6.Stack, { direction: "row", alignItems: "center", pl: 1.5, pr: 0.5, py: 1.5 }, /* @__PURE__ */ React10.createElement(Icon, { fontSize: SIZE, sx: { mr: 0.5 } }), /* @__PURE__ */ React10.createElement(import_ui6.Typography, { variant: "subtitle2" }, title), /* @__PURE__ */ React10.createElement(import_ui6.IconButton, { sx: { ml: "auto" }, size: SIZE, onClick: popupState.close }, /* @__PURE__ */ React10.createElement(import_icons3.XIcon, { fontSize: SIZE }))),
759
+ /* @__PURE__ */ React10.createElement(PopoverContent, { closePopover: popupState.close })
760
+ ));
761
+ }
762
+
763
+ // src/controls-actions.ts
764
+ var controlActionsMenu = (0, import_menus2.createMenu)({
765
+ components: {
766
+ PopoverAction
767
+ }
768
+ });
769
+
770
+ // src/components/editing-panel-error-fallback.tsx
771
+ var React11 = __toESM(require("react"));
772
+ var import_ui7 = require("@elementor/ui");
773
+ function EditorPanelErrorFallback() {
774
+ return /* @__PURE__ */ React11.createElement(import_ui7.Box, { role: "alert", sx: { minHeight: "100%", p: 2 } }, /* @__PURE__ */ React11.createElement(import_ui7.Alert, { severity: "error", sx: { mb: 2, maxWidth: 400, textAlign: "center" } }, /* @__PURE__ */ React11.createElement("strong", null, "Something went wrong")));
775
+ }
776
+
777
+ // src/components/editing-panel-tabs.tsx
778
+ var React61 = __toESM(require("react"));
779
+ var import_react17 = require("react");
780
+ var import_ui50 = require("@elementor/ui");
781
+ var import_i18n39 = require("@wordpress/i18n");
782
+
783
+ // src/components/settings-tab.tsx
784
+ var React17 = __toESM(require("react"));
785
+ var import_editor_controls4 = require("@elementor/editor-controls");
786
+ var import_session = require("@elementor/session");
787
+
788
+ // src/controls-registry/control.tsx
789
+ var React12 = __toESM(require("react"));
790
+ var import_utils = require("@elementor/utils");
791
+
792
+ // src/controls-registry/controls-registry.tsx
793
+ var import_editor_controls2 = require("@elementor/editor-controls");
794
+ var controlTypes = {
795
+ image: { component: import_editor_controls2.ImageControl, layout: "full" },
796
+ text: { component: import_editor_controls2.TextControl, layout: "two-columns" },
797
+ textarea: { component: import_editor_controls2.TextAreaControl, layout: "full" },
798
+ size: { component: import_editor_controls2.SizeControl, layout: "two-columns" },
799
+ select: { component: import_editor_controls2.SelectControl, layout: "two-columns" },
800
+ link: { component: import_editor_controls2.LinkControl, layout: "full" },
801
+ url: { component: import_editor_controls2.UrlControl, layout: "full" }
802
+ };
803
+ var getControlByType = (type) => controlTypes[type]?.component;
804
+ var getLayoutByType = (type) => controlTypes[type].layout;
805
+
806
+ // src/controls-registry/control.tsx
807
+ var ControlTypeError = (0, import_utils.createError)({
808
+ code: "CONTROL_TYPE_NOT_FOUND",
809
+ message: `Control type not found.`
810
+ });
811
+ var Control = ({ props, type }) => {
812
+ const ControlByType = getControlByType(type);
813
+ if (!ControlByType) {
814
+ throw new ControlTypeError({
815
+ context: { type }
816
+ });
817
+ }
818
+ return /* @__PURE__ */ React12.createElement(ControlByType, { ...props });
819
+ };
820
+
821
+ // src/controls-registry/control-type-container.tsx
822
+ var React13 = __toESM(require("react"));
823
+ var import_ui8 = require("@elementor/ui");
824
+ var ControlTypeContainer = ({
825
+ controlType,
826
+ children
827
+ }) => {
828
+ const layout = getLayoutByType(controlType);
829
+ return /* @__PURE__ */ React13.createElement(StyledContainer, { layout }, children);
830
+ };
831
+ var StyledContainer = (0, import_ui8.styled)(import_ui8.Box, {
832
+ shouldForwardProp: (prop) => !["layout"].includes(prop)
833
+ })(({ layout, theme }) => ({
834
+ display: "grid",
835
+ gridGap: theme.spacing(1),
836
+ ...getGridLayout(layout)
837
+ }));
838
+ var getGridLayout = (layout) => ({
839
+ justifyContent: "space-between",
840
+ gridTemplateColumns: {
841
+ full: "1fr",
842
+ "two-columns": "repeat(2, 1fr)"
843
+ }[layout]
844
+ });
845
+
846
+ // src/controls-registry/settings-field.tsx
847
+ var React14 = __toESM(require("react"));
848
+ var import_editor_controls3 = require("@elementor/editor-controls");
849
+ var import_editor_elements2 = require("@elementor/editor-elements");
850
+
851
+ // src/controls-registry/create-top-level-object-type.ts
852
+ var createTopLevelOjectType = ({ schema }) => {
853
+ const schemaPropType = {
854
+ key: "",
855
+ kind: "object",
856
+ meta: {},
857
+ settings: {},
858
+ default: null,
859
+ shape: schema
860
+ };
861
+ return schemaPropType;
862
+ };
863
+
864
+ // src/controls-registry/settings-field.tsx
865
+ var SettingsField = ({ bind, children }) => {
866
+ const { element, elementType } = useElement();
867
+ const settingsValue = (0, import_editor_elements2.useElementSetting)(element.id, bind);
868
+ const value = { [bind]: settingsValue };
869
+ const propType = createTopLevelOjectType({ schema: elementType.propsSchema });
870
+ const setValue = (newValue) => {
871
+ (0, import_editor_elements2.updateElementSettings)({
872
+ id: element.id,
873
+ props: { ...newValue }
874
+ });
875
+ };
876
+ return /* @__PURE__ */ React14.createElement(import_editor_controls3.PropProvider, { propType, value, setValue }, /* @__PURE__ */ React14.createElement(import_editor_controls3.PropKeyProvider, { bind }, children));
877
+ };
878
+
879
+ // src/components/section.tsx
880
+ var React15 = __toESM(require("react"));
881
+ var import_react10 = require("react");
882
+ var import_ui10 = require("@elementor/ui");
883
+
884
+ // src/components/collapse-icon.tsx
885
+ var import_icons4 = require("@elementor/icons");
886
+ var import_ui9 = require("@elementor/ui");
887
+ var CollapseIcon = (0, import_ui9.styled)(import_icons4.ChevronDownIcon, {
888
+ shouldForwardProp: (prop) => prop !== "open"
889
+ })(({ theme, open }) => ({
890
+ transform: open ? "rotate(180deg)" : "rotate(0deg)",
891
+ transition: theme.transitions.create("transform", {
892
+ duration: theme.transitions.duration.standard
893
+ })
894
+ }));
895
+
896
+ // src/components/section.tsx
897
+ function Section({ title, children, defaultExpanded = false }) {
898
+ const [isOpen, setIsOpen] = (0, import_react10.useState)(!!defaultExpanded);
899
+ const id = (0, import_react10.useId)();
900
+ const labelId = `label-${id}`;
901
+ const contentId = `content-${id}`;
902
+ return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(
903
+ import_ui10.ListItemButton,
904
+ {
905
+ id: labelId,
906
+ "aria-controls": contentId,
907
+ onClick: () => setIsOpen((prev) => !prev)
908
+ },
909
+ /* @__PURE__ */ React15.createElement(import_ui10.ListItemText, { secondary: title }),
910
+ /* @__PURE__ */ React15.createElement(CollapseIcon, { open: isOpen, color: "secondary" })
911
+ ), /* @__PURE__ */ React15.createElement(import_ui10.Collapse, { id: contentId, "aria-labelledby": labelId, in: isOpen, timeout: "auto", unmountOnExit: true }, /* @__PURE__ */ React15.createElement(import_ui10.Stack, { gap: 2.5, p: 2 }, children)), /* @__PURE__ */ React15.createElement(import_ui10.Divider, null));
912
+ }
913
+
914
+ // src/components/sections-list.tsx
915
+ var React16 = __toESM(require("react"));
916
+ var import_ui11 = require("@elementor/ui");
917
+ function SectionsList(props) {
918
+ return /* @__PURE__ */ React16.createElement(import_ui11.List, { disablePadding: true, component: "div", ...props });
919
+ }
920
+
921
+ // src/components/settings-tab.tsx
922
+ var SettingsTab = () => {
923
+ const { elementType, element } = useElement();
924
+ return /* @__PURE__ */ React17.createElement(import_session.SessionStorageProvider, { prefix: element.id }, /* @__PURE__ */ React17.createElement(SectionsList, null, elementType.controls.map(({ type, value }, index) => {
925
+ if (type === "control") {
926
+ return /* @__PURE__ */ React17.createElement(Control2, { key: value.bind, control: value });
927
+ }
928
+ if (type === "section") {
929
+ return /* @__PURE__ */ React17.createElement(Section, { title: value.label, key: type + "." + index, defaultExpanded: true }, value.items?.map((item) => {
930
+ if (item.type === "control") {
931
+ return /* @__PURE__ */ React17.createElement(Control2, { key: item.value.bind, control: item.value });
932
+ }
933
+ return null;
934
+ }));
935
+ }
936
+ return null;
937
+ })));
938
+ };
939
+ var Control2 = ({ control }) => {
940
+ if (!getControlByType(control.type)) {
941
+ return null;
942
+ }
943
+ return /* @__PURE__ */ React17.createElement(SettingsField, { bind: control.bind }, /* @__PURE__ */ React17.createElement(ControlTypeContainer, { controlType: control.type }, control.label ? /* @__PURE__ */ React17.createElement(import_editor_controls4.ControlLabel, null, control.label) : null, /* @__PURE__ */ React17.createElement(Control, { type: control.type, props: control.props })));
944
+ };
945
+
946
+ // src/components/style-tab.tsx
947
+ var React60 = __toESM(require("react"));
948
+ var import_react16 = require("react");
949
+ var import_editor_elements5 = require("@elementor/editor-elements");
950
+ var import_editor_responsive = require("@elementor/editor-responsive");
951
+ var import_session2 = require("@elementor/session");
952
+ var import_ui49 = require("@elementor/ui");
953
+ var import_i18n38 = require("@wordpress/i18n");
954
+
954
955
  // src/components/style-sections/background-section/background-section.tsx
955
956
  var React19 = __toESM(require("react"));
956
957
  var import_editor_controls6 = require("@elementor/editor-controls");
@@ -973,14 +974,22 @@ function useStylesFields(propNames) {
973
974
  meta,
974
975
  propNames
975
976
  });
976
- const setValue = (newValues) => {
977
- (0, import_editor_elements3.updateStyle)({
978
- elementID: element.id,
979
- styleDefID: id,
980
- props: newValues,
981
- meta,
982
- bind: classesProp,
983
- label: (0, import_i18n3.__)("local", "elementor")
977
+ const setValue = (props) => {
978
+ if (id === null) {
979
+ (0, import_editor_elements3.createElementStyle)({
980
+ elementId: element.id,
981
+ classesProp,
982
+ meta,
983
+ props,
984
+ label: (0, import_i18n3.__)("local", "elementor")
985
+ });
986
+ return;
987
+ }
988
+ (0, import_editor_elements3.updateElementStyle)({
989
+ elementId: element.id,
990
+ styleId: id,
991
+ props,
992
+ meta
984
993
  });
985
994
  };
986
995
  return [value, setValue];
@@ -1498,6 +1507,7 @@ var getGroupControlValue = (order) => {
1498
1507
 
1499
1508
  // src/components/style-sections/layout-section/flex-size-field.tsx
1500
1509
  var React34 = __toESM(require("react"));
1510
+ var import_react13 = require("react");
1501
1511
  var import_editor_controls18 = require("@elementor/editor-controls");
1502
1512
  var import_icons12 = require("@elementor/icons");
1503
1513
  var import_ui24 = require("@elementor/ui");
@@ -1526,7 +1536,7 @@ var items2 = [
1526
1536
  var FlexSizeField = () => {
1527
1537
  const { isSiteRtl } = useDirection(), [growField, setGrowField] = useStylesField("flex-grow"), [shrinkField, setShrinkField] = useStylesField("flex-shrink"), [basisField, setBasisField] = useStylesField("flex-basis");
1528
1538
  const grow = growField?.value || null, shrink = shrinkField?.value || null, basis = basisField?.value || null;
1529
- const currentGroup = React34.useMemo(() => getActiveGroup({ grow, shrink, basis }), [grow, shrink, basis]), [activeGroup, setActiveGroup] = React34.useState(currentGroup);
1539
+ const currentGroup = (0, import_react13.useMemo)(() => getActiveGroup({ grow, shrink, basis }), [grow, shrink, basis]), [activeGroup, setActiveGroup] = (0, import_react13.useState)(currentGroup);
1530
1540
  const onChangeGroup = (group = null) => {
1531
1541
  setActiveGroup(group);
1532
1542
  setBasisField(null);
@@ -1685,12 +1695,12 @@ var React42 = __toESM(require("react"));
1685
1695
  var import_ui32 = require("@elementor/ui");
1686
1696
 
1687
1697
  // src/hooks/use-session-storage.ts
1688
- var import_react13 = require("react");
1698
+ var import_react14 = require("react");
1689
1699
  var import_utils2 = require("@elementor/utils");
1690
1700
  var useSessionStorage = (key) => {
1691
1701
  const prefixedKey = `elementor/${key}`;
1692
- const [value, setValue] = (0, import_react13.useState)();
1693
- (0, import_react13.useEffect)(() => {
1702
+ const [value, setValue] = (0, import_react14.useState)();
1703
+ (0, import_react14.useEffect)(() => {
1694
1704
  return subscribeToSessionStorage(prefixedKey, (newValue) => {
1695
1705
  setValue(newValue ?? null);
1696
1706
  });
@@ -1862,11 +1872,11 @@ var import_ui48 = require("@elementor/ui");
1862
1872
 
1863
1873
  // src/components/collapsible-content.tsx
1864
1874
  var React46 = __toESM(require("react"));
1865
- var import_react14 = require("react");
1875
+ var import_react15 = require("react");
1866
1876
  var import_ui36 = require("@elementor/ui");
1867
1877
  var import_i18n25 = require("@wordpress/i18n");
1868
1878
  var CollapsibleContent = ({ children, defaultOpen = false }) => {
1869
- const [open, setOpen] = (0, import_react14.useState)(defaultOpen);
1879
+ const [open, setOpen] = (0, import_react15.useState)(defaultOpen);
1870
1880
  const handleToggle = () => {
1871
1881
  setOpen((prevOpen) => !prevOpen);
1872
1882
  };
@@ -2187,7 +2197,7 @@ var CLASSES_PROP_KEY = "classes";
2187
2197
  var StyleTab = () => {
2188
2198
  const currentClassesProp = useCurrentClassesProp();
2189
2199
  const [activeStyleDefId, setActiveStyleDefId] = useActiveStyleDefId(currentClassesProp);
2190
- const [activeStyleState, setActiveStyleState] = (0, import_react15.useState)(null);
2200
+ const [activeStyleState, setActiveStyleState] = (0, import_react16.useState)(null);
2191
2201
  const breakpoint = (0, import_editor_responsive.useActiveBreakpoint)();
2192
2202
  return /* @__PURE__ */ React60.createElement(ClassesPropProvider, { prop: currentClassesProp }, /* @__PURE__ */ React60.createElement(
2193
2203
  StyleProvider,
@@ -2204,7 +2214,7 @@ var StyleTab = () => {
2204
2214
  ));
2205
2215
  };
2206
2216
  function useActiveStyleDefId(currentClassesProp) {
2207
- const [activeStyledDefId, setActiveStyledDefId] = (0, import_react15.useState)(null);
2217
+ const [activeStyledDefId, setActiveStyledDefId] = (0, import_react16.useState)(null);
2208
2218
  const fallback = useFirstElementStyleDef(currentClassesProp);
2209
2219
  return [activeStyledDefId || fallback?.id || null, setActiveStyledDefId];
2210
2220
  }
@@ -2232,7 +2242,7 @@ var EditingPanelTabs = () => {
2232
2242
  return (
2233
2243
  // When switching between elements, the local states should be reset. We are using key to rerender the tabs.
2234
2244
  // Reference: https://react.dev/learn/preserving-and-resetting-state#resetting-a-form-with-a-key
2235
- /* @__PURE__ */ React61.createElement(import_react16.Fragment, { key: element.id }, /* @__PURE__ */ React61.createElement(import_ui50.Stack, { direction: "column", sx: { width: "100%" } }, /* @__PURE__ */ React61.createElement(import_ui50.Tabs, { variant: "fullWidth", indicatorColor: "secondary", textColor: "inherit", ...getTabsProps() }, /* @__PURE__ */ React61.createElement(import_ui50.Tab, { label: (0, import_i18n39.__)("General", "elementor"), ...getTabProps("settings") }), /* @__PURE__ */ React61.createElement(import_ui50.Tab, { label: (0, import_i18n39.__)("Style", "elementor"), ...getTabProps("style") })), /* @__PURE__ */ React61.createElement(import_ui50.Divider, null), /* @__PURE__ */ React61.createElement(import_ui50.TabPanel, { ...getTabPanelProps("settings"), disablePadding: true }, /* @__PURE__ */ React61.createElement(SettingsTab, null)), /* @__PURE__ */ React61.createElement(import_ui50.TabPanel, { ...getTabPanelProps("style"), disablePadding: true }, /* @__PURE__ */ React61.createElement(StyleTab, null))))
2245
+ /* @__PURE__ */ React61.createElement(import_react17.Fragment, { key: element.id }, /* @__PURE__ */ React61.createElement(import_ui50.Stack, { direction: "column", sx: { width: "100%" } }, /* @__PURE__ */ React61.createElement(import_ui50.Tabs, { variant: "fullWidth", indicatorColor: "secondary", textColor: "inherit", ...getTabsProps() }, /* @__PURE__ */ React61.createElement(import_ui50.Tab, { label: (0, import_i18n39.__)("General", "elementor"), ...getTabProps("settings") }), /* @__PURE__ */ React61.createElement(import_ui50.Tab, { label: (0, import_i18n39.__)("Style", "elementor"), ...getTabProps("style") })), /* @__PURE__ */ React61.createElement(import_ui50.Divider, null), /* @__PURE__ */ React61.createElement(import_ui50.TabPanel, { ...getTabPanelProps("settings"), disablePadding: true }, /* @__PURE__ */ React61.createElement(SettingsTab, null)), /* @__PURE__ */ React61.createElement(import_ui50.TabPanel, { ...getTabPanelProps("style"), disablePadding: true }, /* @__PURE__ */ React61.createElement(StyleTab, null))))
2236
2246
  );
2237
2247
  };
2238
2248
 
@@ -2255,6 +2265,16 @@ var { panel, usePanelActions, usePanelStatus } = (0, import_editor_panels2.__cre
2255
2265
  component: EditingPanel
2256
2266
  });
2257
2267
 
2268
+ // src/init.ts
2269
+ var import_editor = require("@elementor/editor");
2270
+ var import_editor_panels3 = require("@elementor/editor-panels");
2271
+ var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
2272
+
2273
+ // src/hooks/use-close-editor-panel.ts
2274
+ var import_react18 = require("react");
2275
+ var import_editor_elements8 = require("@elementor/editor-elements");
2276
+ var import_editor_v1_adapters2 = require("@elementor/editor-v1-adapters");
2277
+
2258
2278
  // src/sync/is-atomic-widget-selected.ts
2259
2279
  var import_editor_elements7 = require("@elementor/editor-elements");
2260
2280
  var isAtomicWidgetSelected = () => {
@@ -2269,7 +2289,7 @@ var isAtomicWidgetSelected = () => {
2269
2289
  // src/hooks/use-close-editor-panel.ts
2270
2290
  var useCloseEditorPanel = () => {
2271
2291
  const { close } = usePanelActions();
2272
- return (0, import_react17.useEffect)(() => {
2292
+ return (0, import_react18.useEffect)(() => {
2273
2293
  return (0, import_editor_v1_adapters2.__privateListenTo)((0, import_editor_v1_adapters2.commandStartEvent)("document/elements/delete"), (e) => {
2274
2294
  const selectedElement = (0, import_editor_elements8.getSelectedElements)()[0];
2275
2295
  const { container: deletedContainer } = e?.args;
@@ -2282,11 +2302,11 @@ var useCloseEditorPanel = () => {
2282
2302
  };
2283
2303
 
2284
2304
  // src/hooks/use-open-editor-panel.ts
2285
- var import_react18 = require("react");
2305
+ var import_react19 = require("react");
2286
2306
  var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
2287
2307
  var useOpenEditorPanel = () => {
2288
2308
  const { open } = usePanelActions();
2289
- (0, import_react18.useEffect)(() => {
2309
+ (0, import_react19.useEffect)(() => {
2290
2310
  return (0, import_editor_v1_adapters3.__privateListenTo)((0, import_editor_v1_adapters3.commandStartEvent)("panel/editor/open"), () => {
2291
2311
  if (isAtomicWidgetSelected()) {
2292
2312
  open();
@@ -2308,9 +2328,9 @@ var useUnapplyClass = (classId) => {
2308
2328
  const { element } = useElement();
2309
2329
  const classesProp = useClassesProp();
2310
2330
  const classes = (0, import_editor_elements9.useElementSetting)(element.id, classesProp);
2311
- const filteredClasses = classes?.value.filter((className) => className !== classId);
2331
+ const filteredClasses = classes?.value.filter((className) => className !== classId) ?? [];
2312
2332
  return () => {
2313
- (0, import_editor_elements9.updateSettings)({
2333
+ (0, import_editor_elements9.updateElementSettings)({
2314
2334
  id: element.id,
2315
2335
  props: {
2316
2336
  [classesProp]: {
@@ -2360,7 +2380,7 @@ function registerGlobalClassItems() {
2360
2380
 
2361
2381
  // src/dynamics/components/dynamic-selection-control.tsx
2362
2382
  var React65 = __toESM(require("react"));
2363
- var import_react22 = require("react");
2383
+ var import_react23 = require("react");
2364
2384
  var import_editor_controls45 = require("@elementor/editor-controls");
2365
2385
  var import_icons22 = require("@elementor/icons");
2366
2386
  var import_ui53 = require("@elementor/ui");
@@ -2378,10 +2398,10 @@ var React63 = __toESM(require("react"));
2378
2398
  var import_editor_controls43 = require("@elementor/editor-controls");
2379
2399
 
2380
2400
  // src/dynamics/hooks/use-dynamic-tag.ts
2381
- var import_react20 = require("react");
2401
+ var import_react21 = require("react");
2382
2402
 
2383
2403
  // src/dynamics/hooks/use-prop-dynamic-tags.ts
2384
- var import_react19 = require("react");
2404
+ var import_react20 = require("react");
2385
2405
  var import_editor_controls42 = require("@elementor/editor-controls");
2386
2406
 
2387
2407
  // src/dynamics/sync/get-elementor-config.ts
@@ -2433,7 +2453,7 @@ var usePropDynamicTags = () => {
2433
2453
  const propDynamicType = getDynamicPropType(propType);
2434
2454
  categories = propDynamicType?.settings.categories || [];
2435
2455
  }
2436
- return (0, import_react19.useMemo)(() => getDynamicTagsByCategories(categories), [categories.join()]);
2456
+ return (0, import_react20.useMemo)(() => getDynamicTagsByCategories(categories), [categories.join()]);
2437
2457
  };
2438
2458
  var getDynamicTagsByCategories = (categories) => {
2439
2459
  const dynamicTags = getAtomicDynamicTags();
@@ -2449,7 +2469,7 @@ var getDynamicTagsByCategories = (categories) => {
2449
2469
  // src/dynamics/hooks/use-dynamic-tag.ts
2450
2470
  var useDynamicTag = (tagName) => {
2451
2471
  const dynamicTags = usePropDynamicTags();
2452
- return (0, import_react20.useMemo)(() => dynamicTags.find((tag) => tag.name === tagName) ?? null, [dynamicTags, tagName]);
2472
+ return (0, import_react21.useMemo)(() => dynamicTags.find((tag) => tag.name === tagName) ?? null, [dynamicTags, tagName]);
2453
2473
  };
2454
2474
 
2455
2475
  // src/dynamics/dynamic-control.tsx
@@ -2478,14 +2498,14 @@ var DynamicControl = ({ bind, children }) => {
2478
2498
 
2479
2499
  // src/dynamics/components/dynamic-selection.tsx
2480
2500
  var React64 = __toESM(require("react"));
2481
- var import_react21 = require("react");
2501
+ var import_react22 = require("react");
2482
2502
  var import_editor_controls44 = require("@elementor/editor-controls");
2483
2503
  var import_icons21 = require("@elementor/icons");
2484
2504
  var import_ui52 = require("@elementor/ui");
2485
2505
  var import_i18n41 = require("@wordpress/i18n");
2486
2506
  var SIZE3 = "tiny";
2487
2507
  var DynamicSelection = ({ onSelect }) => {
2488
- const [searchValue, setSearchValue] = (0, import_react21.useState)("");
2508
+ const [searchValue, setSearchValue] = (0, import_react22.useState)("");
2489
2509
  const { groups: dynamicGroups } = getAtomicDynamicTags() || {};
2490
2510
  const { value: anyValue } = (0, import_editor_controls44.useBoundProp)();
2491
2511
  const { bind, value: dynamicValue, setValue } = (0, import_editor_controls44.useBoundProp)(dynamicPropTypeUtil);
@@ -2514,7 +2534,7 @@ var DynamicSelection = ({ onSelect }) => {
2514
2534
  startAdornment: /* @__PURE__ */ React64.createElement(import_ui52.InputAdornment, { position: "start" }, /* @__PURE__ */ React64.createElement(import_icons21.SearchIcon, { fontSize: SIZE3 }))
2515
2535
  }
2516
2536
  }
2517
- )), /* @__PURE__ */ React64.createElement(import_ui52.Divider, null), /* @__PURE__ */ React64.createElement(import_ui52.Box, { sx: { overflowY: "auto", height: 260, width: 220 } }, options10.length > 0 ? /* @__PURE__ */ React64.createElement(import_ui52.MenuList, { role: "listbox", tabIndex: 0 }, options10.map(([category, items3], index) => /* @__PURE__ */ React64.createElement(import_react21.Fragment, { key: index }, /* @__PURE__ */ React64.createElement(import_ui52.ListSubheader, { sx: { typography: "caption", color: "text.tertiary" } }, dynamicGroups?.[category]?.title || category), items3.map(({ value, label: tagLabel }) => {
2537
+ )), /* @__PURE__ */ React64.createElement(import_ui52.Divider, null), /* @__PURE__ */ React64.createElement(import_ui52.Box, { sx: { overflowY: "auto", height: 260, width: 220 } }, options10.length > 0 ? /* @__PURE__ */ React64.createElement(import_ui52.MenuList, { role: "listbox", tabIndex: 0 }, options10.map(([category, items3], index) => /* @__PURE__ */ React64.createElement(import_react22.Fragment, { key: index }, /* @__PURE__ */ React64.createElement(import_ui52.ListSubheader, { sx: { typography: "caption", color: "text.tertiary" } }, dynamicGroups?.[category]?.title || category), items3.map(({ value, label: tagLabel }) => {
2518
2538
  const isSelected = isCurrentValueDynamic && value === dynamicValue?.name;
2519
2539
  return /* @__PURE__ */ React64.createElement(
2520
2540
  import_ui52.MenuItem,
@@ -2561,7 +2581,7 @@ var DynamicSelectionControl = () => {
2561
2581
  const { bind, value } = (0, import_editor_controls45.useBoundProp)(dynamicPropTypeUtil);
2562
2582
  const [propValueFromHistory] = usePersistDynamicValue(bind);
2563
2583
  const { name: tagName = "" } = value;
2564
- const selectionPopoverId = (0, import_react22.useId)();
2584
+ const selectionPopoverId = (0, import_react23.useId)();
2565
2585
  const selectionPopoverState = (0, import_ui53.usePopupState)({ variant: "popover", popupId: selectionPopoverId });
2566
2586
  const dynamicTag = useDynamicTag(tagName);
2567
2587
  const removeDynamicTag = () => {
@@ -2600,7 +2620,7 @@ var DynamicSelectionControl = () => {
2600
2620
  ));
2601
2621
  };
2602
2622
  var DynamicSettingsPopover = ({ dynamicTag }) => {
2603
- const popupId = (0, import_react22.useId)();
2623
+ const popupId = (0, import_react23.useId)();
2604
2624
  const settingsPopupState = (0, import_ui53.usePopupState)({ variant: "popover", popupId });
2605
2625
  const hasDynamicSettings = !!dynamicTag.atomic_controls.length;
2606
2626
  if (!hasDynamicSettings) {
@@ -2697,9 +2717,12 @@ var blockV1Panel = () => {
2697
2717
  init2();
2698
2718
  // Annotate the CommonJS export names for ESM import in node:
2699
2719
  0 && (module.exports = {
2720
+ injectIntoClassSelectorActions,
2700
2721
  registerGlobalClassMenuItem,
2701
2722
  registerStateMenuItem,
2702
2723
  replaceControl,
2703
- useBoundProp
2724
+ useBoundProp,
2725
+ usePanelActions,
2726
+ usePanelStatus
2704
2727
  });
2705
2728
  //# sourceMappingURL=index.js.map