@elementor/editor-editing-panel 0.12.0 → 0.13.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/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [0.13.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-editing-panel@0.12.0...@elementor/editor-editing-panel@0.13.0) (2024-08-21)
7
+
8
+ ### Features
9
+
10
+ - **editor-editing-panel:** add text style control [EDS-329] ([#242](https://github.com/elementor/elementor-packages/issues/242)) ([2cc149b](https://github.com/elementor/elementor-packages/commit/2cc149b7471c31ff9e577f85a1a0269f10ec0169))
11
+
6
12
  # [0.12.0](https://github.com/elementor/elementor-packages/compare/@elementor/editor-editing-panel@0.11.2...@elementor/editor-editing-panel@0.12.0) (2024-08-20)
7
13
 
8
14
  ### Features
package/dist/index.js CHANGED
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  var import_editor_panels2 = require("@elementor/editor-panels");
27
27
 
28
28
  // src/components/editing-panel.tsx
29
- var React15 = __toESM(require("react"));
30
- var import_i18n4 = require("@wordpress/i18n");
29
+ var React18 = __toESM(require("react"));
30
+ var import_i18n6 = require("@wordpress/i18n");
31
31
 
32
32
  // src/hooks/use-selected-elements.ts
33
33
  var import_editor_v1_adapters = require("@elementor/editor-v1-adapters");
@@ -107,16 +107,16 @@ function useElementContext() {
107
107
  }
108
108
 
109
109
  // src/components/editing-panel-tabs.tsx
110
- var import_ui12 = require("@elementor/ui");
111
- var React14 = __toESM(require("react"));
112
- var import_i18n3 = require("@wordpress/i18n");
110
+ var import_ui14 = require("@elementor/ui");
111
+ var React17 = __toESM(require("react"));
112
+ var import_i18n5 = require("@wordpress/i18n");
113
113
 
114
114
  // src/components/settings-tab.tsx
115
- var React8 = __toESM(require("react"));
116
- var import_ui7 = require("@elementor/ui");
115
+ var React9 = __toESM(require("react"));
116
+ var import_ui8 = require("@elementor/ui");
117
117
 
118
118
  // src/controls/settings-control.tsx
119
- var React2 = __toESM(require("react"));
119
+ var React3 = __toESM(require("react"));
120
120
 
121
121
  // src/controls/control-context.tsx
122
122
  var import_react2 = require("react");
@@ -130,7 +130,7 @@ function useControl(defaultValue) {
130
130
  }
131
131
 
132
132
  // src/controls/settings-control.tsx
133
- var import_ui = require("@elementor/ui");
133
+ var import_ui2 = require("@elementor/ui");
134
134
 
135
135
  // src/hooks/use-widget-settings.ts
136
136
  var import_editor_v1_adapters3 = require("@elementor/editor-v1-adapters");
@@ -167,6 +167,13 @@ var updateSettings = ({ id, props }) => {
167
167
  });
168
168
  };
169
169
 
170
+ // src/components/control-label.tsx
171
+ var React2 = __toESM(require("react"));
172
+ var import_ui = require("@elementor/ui");
173
+ var ControlLabel = ({ children }) => {
174
+ return /* @__PURE__ */ React2.createElement(import_ui.Typography, { component: "label", variant: "caption", color: "text.secondary" }, children);
175
+ };
176
+
170
177
  // src/controls/settings-control.tsx
171
178
  var SettingsControlProvider = ({ bind, children }) => {
172
179
  const { element } = useElementContext();
@@ -179,10 +186,10 @@ var SettingsControlProvider = ({ bind, children }) => {
179
186
  }
180
187
  });
181
188
  };
182
- return /* @__PURE__ */ React2.createElement(ControlContext.Provider, { value: { setValue, value, bind } }, children);
189
+ return /* @__PURE__ */ React3.createElement(ControlContext.Provider, { value: { setValue, value, bind } }, children);
183
190
  };
184
- var SettingsControl = ({ children, bind }) => /* @__PURE__ */ React2.createElement(SettingsControlProvider, { bind }, /* @__PURE__ */ React2.createElement(StyledStack, { gap: 1, direction: "row", alignItems: "center", justifyContent: "space-between", flexWrap: "wrap" }, children));
185
- var StyledStack = (0, import_ui.styled)(import_ui.Stack)`
191
+ var SettingsControl = ({ children, bind }) => /* @__PURE__ */ React3.createElement(SettingsControlProvider, { bind }, /* @__PURE__ */ React3.createElement(StyledStack, { gap: 1, direction: "row", alignItems: "center", justifyContent: "space-between", flexWrap: "wrap" }, children));
192
+ var StyledStack = (0, import_ui2.styled)(import_ui2.Stack)`
186
193
  & > * {
187
194
  flex-grow: 1;
188
195
  }
@@ -191,43 +198,40 @@ var StyledStack = (0, import_ui.styled)(import_ui.Stack)`
191
198
  min-width: 50%;
192
199
  }
193
200
  `;
194
- var Label = ({ children }) => {
195
- return /* @__PURE__ */ React2.createElement(import_ui.Typography, { component: "label", variant: "caption", color: "text.secondary" }, children);
196
- };
197
- SettingsControl.Label = Label;
201
+ SettingsControl.Label = ControlLabel;
198
202
 
199
203
  // src/components/collapsible-section.tsx
200
- var React3 = __toESM(require("react"));
204
+ var React4 = __toESM(require("react"));
201
205
  var import_react3 = require("react");
202
- var import_ui2 = require("@elementor/ui");
206
+ var import_ui3 = require("@elementor/ui");
203
207
  var CollapsibleSection = ({ title, children }) => {
204
208
  const uid = (0, import_react3.useId)();
205
209
  const labelId = `label-${uid}`;
206
210
  const contentId = `content-${uid}`;
207
- return /* @__PURE__ */ React3.createElement(import_ui2.Accordion, { disableGutters: true, defaultExpanded: true }, /* @__PURE__ */ React3.createElement(import_ui2.AccordionSummary, { "aria-controls": contentId, id: labelId }, /* @__PURE__ */ React3.createElement(import_ui2.AccordionSummaryText, { primaryTypographyProps: { variant: "caption" } }, title)), /* @__PURE__ */ React3.createElement(import_ui2.AccordionDetails, { id: contentId, "aria-labelledby": labelId }, /* @__PURE__ */ React3.createElement(import_ui2.Stack, { gap: 2.5 }, children)));
211
+ return /* @__PURE__ */ React4.createElement(import_ui3.Accordion, { disableGutters: true, defaultExpanded: true }, /* @__PURE__ */ React4.createElement(import_ui3.AccordionSummary, { "aria-controls": contentId, id: labelId }, /* @__PURE__ */ React4.createElement(import_ui3.AccordionSummaryText, { primaryTypographyProps: { variant: "caption" } }, title)), /* @__PURE__ */ React4.createElement(import_ui3.AccordionDetails, { id: contentId, "aria-labelledby": labelId }, /* @__PURE__ */ React4.createElement(import_ui3.Stack, { gap: 2.5 }, children)));
208
212
  };
209
213
 
210
214
  // src/controls/control-types/select-control.tsx
211
- var React4 = __toESM(require("react"));
212
- var import_ui3 = require("@elementor/ui");
215
+ var React5 = __toESM(require("react"));
216
+ var import_ui4 = require("@elementor/ui");
213
217
  var SelectControl = ({ options }) => {
214
218
  const { value, setValue } = useControl();
215
219
  const handleChange = (event) => {
216
220
  setValue(event.target.value);
217
221
  };
218
- return /* @__PURE__ */ React4.createElement(import_ui3.Select, { size: "tiny", value: value ?? "", onChange: handleChange }, options.map(({ label, ...props }) => /* @__PURE__ */ React4.createElement(import_ui3.MenuItem, { key: props.value, ...props }, label)));
222
+ return /* @__PURE__ */ React5.createElement(import_ui4.Select, { size: "tiny", value: value ?? "", onChange: handleChange }, options.map(({ label, ...props }) => /* @__PURE__ */ React5.createElement(import_ui4.MenuItem, { key: props.value, ...props }, label)));
219
223
  };
220
224
 
221
225
  // src/controls/control-types/text-area-control.tsx
222
- var React5 = __toESM(require("react"));
223
- var import_ui4 = require("@elementor/ui");
226
+ var React6 = __toESM(require("react"));
227
+ var import_ui5 = require("@elementor/ui");
224
228
  var TextAreaControl = ({ placeholder }) => {
225
229
  const { value, setValue } = useControl("");
226
230
  const handleChange = (event) => {
227
231
  setValue(event.target.value);
228
232
  };
229
- return /* @__PURE__ */ React5.createElement(
230
- import_ui4.TextField,
233
+ return /* @__PURE__ */ React6.createElement(
234
+ import_ui5.TextField,
231
235
  {
232
236
  size: "tiny",
233
237
  multiline: true,
@@ -241,17 +245,17 @@ var TextAreaControl = ({ placeholder }) => {
241
245
  };
242
246
 
243
247
  // src/controls/control-types/text-control.tsx
244
- var React6 = __toESM(require("react"));
245
- var import_ui5 = require("@elementor/ui");
248
+ var React7 = __toESM(require("react"));
249
+ var import_ui6 = require("@elementor/ui");
246
250
  var TextControl = ({ placeholder }) => {
247
251
  const { value, setValue } = useControl("");
248
252
  const handleChange = (event) => setValue(event.target.value);
249
- return /* @__PURE__ */ React6.createElement(import_ui5.TextField, { type: "text", size: "tiny", value, onChange: handleChange, placeholder });
253
+ return /* @__PURE__ */ React7.createElement(import_ui6.TextField, { type: "text", size: "tiny", value, onChange: handleChange, placeholder });
250
254
  };
251
255
 
252
256
  // src/controls/control-types/image-control.tsx
253
- var React7 = __toESM(require("react"));
254
- var import_ui6 = require("@elementor/ui");
257
+ var React8 = __toESM(require("react"));
258
+ var import_ui7 = require("@elementor/ui");
255
259
  var import_icons = require("@elementor/icons");
256
260
  var import_i18n = require("@wordpress/i18n");
257
261
  var import_wp_media = require("@elementor/wp-media");
@@ -283,8 +287,8 @@ var ImageControl = () => {
283
287
  });
284
288
  }
285
289
  });
286
- return /* @__PURE__ */ React7.createElement(import_ui6.Card, { variant: "outlined" }, /* @__PURE__ */ React7.createElement(import_ui6.CardMedia, { image: getImageSrc(), sx: { height: 150 } }), /* @__PURE__ */ React7.createElement(import_ui6.CardOverlay, null, /* @__PURE__ */ React7.createElement(
287
- import_ui6.Button,
290
+ return /* @__PURE__ */ React8.createElement(import_ui7.Card, { variant: "outlined" }, /* @__PURE__ */ React8.createElement(import_ui7.CardMedia, { image: getImageSrc(), sx: { height: 150 } }), /* @__PURE__ */ React8.createElement(import_ui7.CardOverlay, null, /* @__PURE__ */ React8.createElement(
291
+ import_ui7.Button,
288
292
  {
289
293
  color: "inherit",
290
294
  size: "small",
@@ -294,13 +298,13 @@ var ImageControl = () => {
294
298
  }
295
299
  },
296
300
  (0, import_i18n.__)("Select Image", "elementor")
297
- ), /* @__PURE__ */ React7.createElement(
298
- import_ui6.Button,
301
+ ), /* @__PURE__ */ React8.createElement(
302
+ import_ui7.Button,
299
303
  {
300
304
  color: "inherit",
301
305
  size: "small",
302
306
  variant: "text",
303
- startIcon: /* @__PURE__ */ React7.createElement(import_icons.UploadIcon, null),
307
+ startIcon: /* @__PURE__ */ React8.createElement(import_icons.UploadIcon, null),
304
308
  onClick: () => {
305
309
  open({ mode: "upload" });
306
310
  }
@@ -327,14 +331,14 @@ var SettingsTab = () => {
327
331
  if (!elementType) {
328
332
  return null;
329
333
  }
330
- return /* @__PURE__ */ React8.createElement(import_ui7.Stack, null, elementType.controls.map(({ type, value }, index) => {
334
+ return /* @__PURE__ */ React9.createElement(import_ui8.Stack, null, elementType.controls.map(({ type, value }, index) => {
331
335
  if (type === "control") {
332
- return /* @__PURE__ */ React8.createElement(Control, { key: value.bind, control: value });
336
+ return /* @__PURE__ */ React9.createElement(Control, { key: value.bind, control: value });
333
337
  }
334
338
  if (type === "section") {
335
- return /* @__PURE__ */ React8.createElement(CollapsibleSection, { key: type + "." + index, title: value.label }, value.items?.map((item) => {
339
+ return /* @__PURE__ */ React9.createElement(CollapsibleSection, { key: type + "." + index, title: value.label }, value.items?.map((item) => {
336
340
  if (item.type === "control") {
337
- return /* @__PURE__ */ React8.createElement(Control, { key: item.value.bind, control: item.value });
341
+ return /* @__PURE__ */ React9.createElement(Control, { key: item.value.bind, control: item.value });
338
342
  }
339
343
  return null;
340
344
  }));
@@ -347,7 +351,7 @@ var Control = ({ control }) => {
347
351
  if (!ControlComponent) {
348
352
  return null;
349
353
  }
350
- return /* @__PURE__ */ React8.createElement(SettingsControl, { bind: control.bind }, control.label ? /* @__PURE__ */ React8.createElement(SettingsControl.Label, null, control.label) : null, /* @__PURE__ */ React8.createElement(
354
+ return /* @__PURE__ */ React9.createElement(SettingsControl, { bind: control.bind }, control.label ? /* @__PURE__ */ React9.createElement(SettingsControl.Label, null, control.label) : null, /* @__PURE__ */ React9.createElement(
351
355
  ControlComponent,
352
356
  {
353
357
  ...control.props
@@ -356,17 +360,17 @@ var Control = ({ control }) => {
356
360
  };
357
361
 
358
362
  // src/components/style-tab.tsx
359
- var React13 = __toESM(require("react"));
363
+ var React16 = __toESM(require("react"));
360
364
 
361
365
  // src/contexts/style-context.tsx
362
- var React9 = __toESM(require("react"));
366
+ var React10 = __toESM(require("react"));
363
367
  var import_react4 = require("react");
364
368
  var import_editor_responsive = require("@elementor/editor-responsive");
365
369
  var Context2 = (0, import_react4.createContext)(null);
366
370
  function StyleContext({ children, selectedStyleDef }) {
367
371
  const breakpoint = (0, import_editor_responsive.useActiveBreakpoint)();
368
372
  const selectedMeta = { breakpoint, state: null };
369
- return /* @__PURE__ */ React9.createElement(Context2.Provider, { value: { selectedStyleDef, selectedMeta } }, children);
373
+ return /* @__PURE__ */ React10.createElement(Context2.Provider, { value: { selectedStyleDef, selectedMeta } }, children);
370
374
  }
371
375
  function useStyleContext() {
372
376
  const context = (0, import_react4.useContext)(Context2);
@@ -397,37 +401,24 @@ var useElementStyles = (elementID) => {
397
401
  };
398
402
 
399
403
  // src/components/style-tab.tsx
400
- var import_ui11 = require("@elementor/ui");
404
+ var import_ui13 = require("@elementor/ui");
401
405
 
402
406
  // src/components/style-sections/size-section.tsx
403
- var React12 = __toESM(require("react"));
407
+ var React13 = __toESM(require("react"));
404
408
 
405
409
  // src/controls/style-control.tsx
406
- var React10 = __toESM(require("react"));
407
-
408
- // src/sync/update-style.ts
409
- var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
410
- var updateStyle = ({ elementID, styleDefID, meta, props, bind = "classes" }) => {
411
- const container = getContainer(elementID);
412
- (0, import_editor_v1_adapters6.__privateRunCommand)("document/atomic-widgets/styles", {
413
- container,
414
- styleDefID,
415
- bind,
416
- meta,
417
- props
418
- });
419
- };
410
+ var React11 = __toESM(require("react"));
420
411
 
421
412
  // src/hooks/use-element-style-prop.ts
422
- var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
413
+ var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
423
414
  var useElementStyleProp = ({
424
415
  elementID,
425
416
  styleDefID,
426
417
  meta,
427
418
  propName
428
419
  }) => {
429
- return (0, import_editor_v1_adapters7.__privateUseListenTo)(
430
- (0, import_editor_v1_adapters7.commandEndEvent)("document/atomic-widgets/styles"),
420
+ return (0, import_editor_v1_adapters6.__privateUseListenTo)(
421
+ (0, import_editor_v1_adapters6.commandEndEvent)("document/atomic-widgets/styles"),
431
422
  () => {
432
423
  if (!styleDefID) {
433
424
  return null;
@@ -448,34 +439,49 @@ function getVariantByMeta(styleDef, meta) {
448
439
  });
449
440
  }
450
441
 
451
- // src/controls/style-control.tsx
452
- var import_ui8 = require("@elementor/ui");
453
- var StyleControl = ({ bind, children }) => {
442
+ // src/sync/update-style.ts
443
+ var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
444
+ var updateStyle = ({ elementID, styleDefID, meta, props, bind = "classes" }) => {
445
+ const container = getContainer(elementID);
446
+ (0, import_editor_v1_adapters7.__privateRunCommand)("document/atomic-widgets/styles", {
447
+ container,
448
+ styleDefID,
449
+ bind,
450
+ meta,
451
+ props
452
+ });
453
+ };
454
+
455
+ // src/controls/hooks/use-style-control.ts
456
+ var useStyleControl = (propName) => {
454
457
  const { element } = useElementContext();
455
458
  const { selectedStyleDef, selectedMeta } = useStyleContext();
459
+ const value = useElementStyleProp({
460
+ elementID: element.id,
461
+ styleDefID: selectedStyleDef?.id,
462
+ meta: selectedMeta,
463
+ propName
464
+ });
456
465
  const setValue = (newValue) => {
457
466
  updateStyle({
458
467
  elementID: element.id,
459
468
  styleDefID: selectedStyleDef?.id,
460
- props: { [bind]: newValue },
469
+ props: { [propName]: newValue },
461
470
  meta: selectedMeta
462
471
  });
463
472
  };
464
- const value = useElementStyleProp({
465
- elementID: element.id,
466
- styleDefID: selectedStyleDef?.id,
467
- meta: selectedMeta,
468
- propName: bind
469
- });
470
- return /* @__PURE__ */ React10.createElement(ControlContext.Provider, { value: { bind, value, setValue } }, children);
473
+ return [value, setValue];
471
474
  };
472
- var Label2 = ({ children }) => {
473
- return /* @__PURE__ */ React10.createElement(import_ui8.Typography, { component: "label", variant: "caption", color: "text.secondary" }, children);
475
+
476
+ // src/controls/style-control.tsx
477
+ var StyleControl = ({ bind, children }) => {
478
+ const [value, setValue] = useStyleControl(bind);
479
+ return /* @__PURE__ */ React11.createElement(ControlContext.Provider, { value: { bind, value, setValue } }, children);
474
480
  };
475
- StyleControl.Label = Label2;
481
+ StyleControl.Label = ControlLabel;
476
482
 
477
483
  // src/controls/control-types/size-control.tsx
478
- var React11 = __toESM(require("react"));
484
+ var React12 = __toESM(require("react"));
479
485
  var import_ui9 = require("@elementor/ui");
480
486
 
481
487
  // src/controls/hooks/use-sync-external-state.tsx
@@ -543,7 +549,7 @@ var SizeControl = ({ units: units2, placeholder }) => {
543
549
  }
544
550
  }));
545
551
  };
546
- return /* @__PURE__ */ React11.createElement(import_ui9.Stack, { direction: "row" }, /* @__PURE__ */ React11.createElement(
552
+ return /* @__PURE__ */ React12.createElement(import_ui9.Stack, { direction: "row" }, /* @__PURE__ */ React12.createElement(
547
553
  import_ui9.TextField,
548
554
  {
549
555
  size: "tiny",
@@ -552,7 +558,7 @@ var SizeControl = ({ units: units2, placeholder }) => {
552
558
  onChange: handleSizeChange,
553
559
  placeholder
554
560
  }
555
- ), /* @__PURE__ */ React11.createElement(
561
+ ), /* @__PURE__ */ React12.createElement(
556
562
  import_ui9.Select,
557
563
  {
558
564
  size: "tiny",
@@ -563,7 +569,7 @@ var SizeControl = ({ units: units2, placeholder }) => {
563
569
  transformOrigin: { vertical: "top", horizontal: "right" }
564
570
  }
565
571
  },
566
- units2.map((unit) => /* @__PURE__ */ React11.createElement(import_ui9.MenuItem, { key: unit, value: unit }, unit.toUpperCase()))
572
+ units2.map((unit) => /* @__PURE__ */ React12.createElement(import_ui9.MenuItem, { key: unit, value: unit }, unit.toUpperCase()))
567
573
  ));
568
574
  };
569
575
 
@@ -571,11 +577,82 @@ var SizeControl = ({ units: units2, placeholder }) => {
571
577
  var import_ui10 = require("@elementor/ui");
572
578
  var import_i18n2 = require("@wordpress/i18n");
573
579
  var SizeSection = () => {
574
- return /* @__PURE__ */ React12.createElement(CollapsibleSection, { title: (0, import_i18n2.__)("Size", "elementor") }, /* @__PURE__ */ React12.createElement(import_ui10.Stack, { gap: 1.5 }, /* @__PURE__ */ React12.createElement(import_ui10.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React12.createElement(Control2, { bind: "width", label: (0, import_i18n2.__)("Width", "elementor") }), /* @__PURE__ */ React12.createElement(Control2, { bind: "height", label: (0, import_i18n2.__)("Height", "elementor") })), /* @__PURE__ */ React12.createElement(import_ui10.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React12.createElement(Control2, { bind: "min-width", label: (0, import_i18n2.__)("Min. Width", "elementor") }), /* @__PURE__ */ React12.createElement(Control2, { bind: "min-height", label: (0, import_i18n2.__)("Min. Height", "elementor") })), /* @__PURE__ */ React12.createElement(import_ui10.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React12.createElement(Control2, { bind: "max-width", label: (0, import_i18n2.__)("Max. Width", "elementor") }), /* @__PURE__ */ React12.createElement(Control2, { bind: "max-height", label: (0, import_i18n2.__)("Max. Height", "elementor") }))));
580
+ return /* @__PURE__ */ React13.createElement(CollapsibleSection, { title: (0, import_i18n2.__)("Size", "elementor") }, /* @__PURE__ */ React13.createElement(import_ui10.Stack, { gap: 1.5 }, /* @__PURE__ */ React13.createElement(import_ui10.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React13.createElement(Control2, { bind: "width", label: (0, import_i18n2.__)("Width", "elementor") }), /* @__PURE__ */ React13.createElement(Control2, { bind: "height", label: (0, import_i18n2.__)("Height", "elementor") })), /* @__PURE__ */ React13.createElement(import_ui10.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React13.createElement(Control2, { bind: "minWidth", label: (0, import_i18n2.__)("Min. Width", "elementor") }), /* @__PURE__ */ React13.createElement(Control2, { bind: "minHeight", label: (0, import_i18n2.__)("Min. Height", "elementor") })), /* @__PURE__ */ React13.createElement(import_ui10.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React13.createElement(Control2, { bind: "maxWidth", label: (0, import_i18n2.__)("Max. Width", "elementor") }), /* @__PURE__ */ React13.createElement(Control2, { bind: "maxHeight", label: (0, import_i18n2.__)("Max. Height", "elementor") }))));
575
581
  };
576
582
  var units = ["px", "%", "em", "rem", "vw"];
577
583
  var Control2 = ({ label, bind }) => {
578
- return /* @__PURE__ */ React12.createElement(StyleControl, { bind }, /* @__PURE__ */ React12.createElement(import_ui10.Stack, { gap: 1, sx: { flex: "0 1 50%" } }, /* @__PURE__ */ React12.createElement(StyleControl.Label, null, label), /* @__PURE__ */ React12.createElement(SizeControl, { units })));
584
+ return /* @__PURE__ */ React13.createElement(StyleControl, { bind }, /* @__PURE__ */ React13.createElement(import_ui10.Stack, { gap: 1, sx: { flex: "0 1 50%" } }, /* @__PURE__ */ React13.createElement(StyleControl.Label, null, label), /* @__PURE__ */ React13.createElement(SizeControl, { units })));
585
+ };
586
+
587
+ // src/components/style-sections/typography-section.tsx
588
+ var React15 = __toESM(require("react"));
589
+ var import_ui12 = require("@elementor/ui");
590
+
591
+ // src/controls/control-types/text-style-control.tsx
592
+ var React14 = __toESM(require("react"));
593
+ var import_ui11 = require("@elementor/ui");
594
+ var import_i18n3 = require("@wordpress/i18n");
595
+ var TextStyleControl = () => {
596
+ const [fontStyle, setFontStyle] = useStyleControl("fontStyle");
597
+ const [textDecoration, setTextDecoration] = useStyleControl("textDecoration");
598
+ const formats = [fontStyle, ...(textDecoration || "").split(" ")];
599
+ return /* @__PURE__ */ React14.createElement(import_ui11.Stack, { direction: "row", justifyContent: "space-between", alignItems: "center" }, /* @__PURE__ */ React14.createElement(ControlLabel, null, (0, import_i18n3.__)("Style", "elementor")), /* @__PURE__ */ React14.createElement(import_ui11.ToggleButtonGroup, { value: formats }, /* @__PURE__ */ React14.createElement(
600
+ ToggleButton,
601
+ {
602
+ value: "italic",
603
+ onChange: (v) => setFontStyle(fontStyle === v ? null : v),
604
+ "aria-label": "italic"
605
+ },
606
+ /* @__PURE__ */ React14.createElement("span", { style: { fontStyle: "italic", fontSize: "12px" } }, "I")
607
+ ), /* @__PURE__ */ React14.createElement(
608
+ ShorthandControl,
609
+ {
610
+ value: "line-through",
611
+ currentValues: textDecoration || "",
612
+ updateValues: setTextDecoration,
613
+ "aria-label": "line-through"
614
+ },
615
+ /* @__PURE__ */ React14.createElement("span", { style: { textDecoration: "line-through", fontSize: "12px" } }, "S")
616
+ ), /* @__PURE__ */ React14.createElement(
617
+ ShorthandControl,
618
+ {
619
+ value: "underline",
620
+ currentValues: textDecoration || "",
621
+ updateValues: setTextDecoration,
622
+ "aria-label": "underline"
623
+ },
624
+ /* @__PURE__ */ React14.createElement("span", { style: { textDecoration: "underline", fontSize: "12px" } }, "U")
625
+ )));
626
+ };
627
+ var ShorthandControl = ({
628
+ children,
629
+ value,
630
+ currentValues,
631
+ updateValues,
632
+ "aria-label": ariaLabel
633
+ }) => {
634
+ const valuesArr = currentValues.split(" ").filter(Boolean);
635
+ const selected = valuesArr.includes(value);
636
+ const toggleValue = (newValue) => {
637
+ if (selected) {
638
+ updateValues(valuesArr.filter((v) => v !== newValue).join(" ") || null);
639
+ } else {
640
+ updateValues([...valuesArr, newValue].join(" "));
641
+ }
642
+ };
643
+ return /* @__PURE__ */ React14.createElement(ToggleButton, { value, onChange: toggleValue, selected, "aria-label": ariaLabel }, children);
644
+ };
645
+ var ToggleButton = ({ onChange, ...props }) => {
646
+ const handleChange = (_e, newValue) => {
647
+ onChange(newValue);
648
+ };
649
+ return /* @__PURE__ */ React14.createElement(import_ui11.ToggleButton, { ...props, onChange: handleChange, size: "tiny", sx: { px: 1.5 } });
650
+ };
651
+
652
+ // src/components/style-sections/typography-section.tsx
653
+ var import_i18n4 = require("@wordpress/i18n");
654
+ var TypographySection = () => {
655
+ return /* @__PURE__ */ React15.createElement(CollapsibleSection, { title: (0, import_i18n4.__)("Typography", "elementor") }, /* @__PURE__ */ React15.createElement(import_ui12.Stack, { gap: 1.5 }, /* @__PURE__ */ React15.createElement(TextStyleControl, null)));
579
656
  };
580
657
 
581
658
  // src/components/style-tab.tsx
@@ -583,13 +660,13 @@ var StyleTab = () => {
583
660
  const { element } = useElementContext();
584
661
  const elementStyles = useElementStyles(element.id);
585
662
  const [selectedStyleDef = null] = Object.values(elementStyles || {});
586
- return /* @__PURE__ */ React13.createElement(StyleContext, { selectedStyleDef }, /* @__PURE__ */ React13.createElement(import_ui11.Stack, null, /* @__PURE__ */ React13.createElement(SizeSection, null)));
663
+ return /* @__PURE__ */ React16.createElement(StyleContext, { selectedStyleDef }, /* @__PURE__ */ React16.createElement(import_ui13.Stack, null, /* @__PURE__ */ React16.createElement(SizeSection, null), /* @__PURE__ */ React16.createElement(TypographySection, null)));
587
664
  };
588
665
 
589
666
  // src/components/editing-panel-tabs.tsx
590
667
  var EditingPanelTabs = () => {
591
- const { getTabProps, getTabPanelProps, getTabsProps } = (0, import_ui12.useTabs)("settings");
592
- return /* @__PURE__ */ React14.createElement(import_ui12.Stack, { direction: "column", sx: { width: "100%" } }, /* @__PURE__ */ React14.createElement(import_ui12.Tabs, { variant: "fullWidth", indicatorColor: "secondary", textColor: "inherit", ...getTabsProps() }, /* @__PURE__ */ React14.createElement(import_ui12.Tab, { label: (0, import_i18n3.__)("General", "elementor"), ...getTabProps("settings") }), /* @__PURE__ */ React14.createElement(import_ui12.Tab, { label: (0, import_i18n3.__)("Style", "elementor"), ...getTabProps("style") })), /* @__PURE__ */ React14.createElement(import_ui12.TabPanel, { ...getTabPanelProps("settings"), disablePadding: true }, /* @__PURE__ */ React14.createElement(SettingsTab, null)), /* @__PURE__ */ React14.createElement(import_ui12.TabPanel, { ...getTabPanelProps("style"), disablePadding: true }, /* @__PURE__ */ React14.createElement(StyleTab, null)));
668
+ const { getTabProps, getTabPanelProps, getTabsProps } = (0, import_ui14.useTabs)("settings");
669
+ return /* @__PURE__ */ React17.createElement(import_ui14.Stack, { direction: "column", sx: { width: "100%" } }, /* @__PURE__ */ React17.createElement(import_ui14.Tabs, { variant: "fullWidth", indicatorColor: "secondary", textColor: "inherit", ...getTabsProps() }, /* @__PURE__ */ React17.createElement(import_ui14.Tab, { label: (0, import_i18n5.__)("General", "elementor"), ...getTabProps("settings") }), /* @__PURE__ */ React17.createElement(import_ui14.Tab, { label: (0, import_i18n5.__)("Style", "elementor"), ...getTabProps("style") })), /* @__PURE__ */ React17.createElement(import_ui14.TabPanel, { ...getTabPanelProps("settings"), disablePadding: true }, /* @__PURE__ */ React17.createElement(SettingsTab, null)), /* @__PURE__ */ React17.createElement(import_ui14.TabPanel, { ...getTabPanelProps("style"), disablePadding: true }, /* @__PURE__ */ React17.createElement(StyleTab, null)));
593
670
  };
594
671
 
595
672
  // src/components/editing-panel.tsx
@@ -600,8 +677,8 @@ var EditingPanel = () => {
600
677
  if (elements.length !== 1 || !elementType) {
601
678
  return null;
602
679
  }
603
- const panelTitle = (0, import_i18n4.__)("Edit %s", "elementor").replace("%s", elementType.title);
604
- return /* @__PURE__ */ React15.createElement(import_editor_panels.Panel, null, /* @__PURE__ */ React15.createElement(import_editor_panels.PanelHeader, null, /* @__PURE__ */ React15.createElement(import_editor_panels.PanelHeaderTitle, null, panelTitle)), /* @__PURE__ */ React15.createElement(import_editor_panels.PanelBody, null, /* @__PURE__ */ React15.createElement(ElementContext, { element: selectedElement }, /* @__PURE__ */ React15.createElement(EditingPanelTabs, null))));
680
+ const panelTitle = (0, import_i18n6.__)("Edit %s", "elementor").replace("%s", elementType.title);
681
+ return /* @__PURE__ */ React18.createElement(import_editor_panels.Panel, null, /* @__PURE__ */ React18.createElement(import_editor_panels.PanelHeader, null, /* @__PURE__ */ React18.createElement(import_editor_panels.PanelHeaderTitle, null, panelTitle)), /* @__PURE__ */ React18.createElement(import_editor_panels.PanelBody, null, /* @__PURE__ */ React18.createElement(ElementContext, { element: selectedElement }, /* @__PURE__ */ React18.createElement(EditingPanelTabs, null))));
605
682
  };
606
683
 
607
684
  // src/panel.ts