@elementor/editor-editing-panel 0.16.0 → 0.18.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 +44 -0
- package/dist/index.d.mts +26 -9
- package/dist/index.d.ts +26 -9
- package/dist/index.js +910 -360
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +886 -327
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -7
- package/src/components/settings-tab.tsx +5 -2
- package/src/components/style-sections/effects-section/box-shadow-repeater.tsx +224 -0
- package/src/components/style-sections/effects-section/effects-section.tsx +18 -0
- package/src/components/style-sections/position-section/z-index-control.tsx +11 -7
- package/src/components/style-sections/size-section.tsx +23 -20
- package/src/components/style-sections/spacing-section/linked-dimensions-control.tsx +62 -47
- package/src/components/style-sections/typography-section/font-size-control.tsx +10 -6
- package/src/components/style-sections/typography-section/font-weight-control.tsx +16 -12
- package/src/components/style-sections/typography-section/letter-spacing-control.tsx +10 -6
- package/src/components/style-sections/typography-section/text-alignment-control.tsx +47 -0
- package/src/components/style-sections/typography-section/text-color-control.tsx +10 -6
- package/src/components/style-sections/typography-section/text-direction-control.tsx +37 -0
- package/src/components/style-sections/typography-section/text-style-control.tsx +37 -34
- package/src/components/style-sections/typography-section/transform-control.tsx +14 -12
- package/src/components/style-sections/typography-section/typography-section.tsx +4 -0
- package/src/components/style-sections/typography-section/word-spacing-control.tsx +10 -6
- package/src/components/style-tab.tsx +5 -1
- package/src/controls/components/control-type-container.tsx +28 -0
- package/src/controls/components/repeater.tsx +197 -0
- package/src/controls/control-actions/actions/popover-action.tsx +58 -0
- package/src/controls/control-actions/control-actions-menu.ts +8 -0
- package/src/controls/control-actions/control-actions.tsx +43 -0
- package/src/controls/control-replacement.ts +15 -7
- package/src/controls/control-types/color-control.tsx +21 -18
- package/src/controls/control-types/image-control.tsx +56 -59
- package/src/controls/control-types/image-media-control.tsx +73 -0
- package/src/controls/control-types/number-control.tsx +13 -9
- package/src/controls/control-types/select-control.tsx +13 -9
- package/src/controls/control-types/size-control.tsx +17 -13
- package/src/controls/control-types/text-area-control.tsx +15 -11
- package/src/controls/control-types/text-control.tsx +9 -3
- package/src/controls/control-types/toggle-control.tsx +3 -2
- package/src/controls/control.tsx +1 -7
- package/src/controls/controls-registry.tsx +19 -10
- package/src/controls/create-control.tsx +31 -0
- package/src/controls/settings-control.tsx +2 -9
- package/src/dynamics/components/dynamic-selection-control.tsx +4 -3
- package/src/dynamics/components/dynamic-selection.tsx +19 -8
- package/src/dynamics/dynamic-control.tsx +1 -1
- package/src/dynamics/hooks/use-prop-dynamic-action.tsx +23 -0
- package/src/dynamics/hooks/use-prop-dynamic-tags.ts +4 -4
- package/src/dynamics/hooks/use-prop-value-history.ts +26 -0
- package/src/dynamics/init.ts +9 -0
- package/src/dynamics/types.ts +6 -3
- package/src/dynamics/utils.ts +18 -5
- package/src/index.ts +2 -0
- package/src/types.ts +35 -14
- package/src/controls/components/control-container.tsx +0 -18
package/dist/index.js
CHANGED
|
@@ -30,42 +30,91 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/index.ts
|
|
31
31
|
var src_exports = {};
|
|
32
32
|
__export(src_exports, {
|
|
33
|
+
controlActionsMenu: () => controlActionsMenu,
|
|
33
34
|
replaceControl: () => replaceControl,
|
|
34
35
|
useControl: () => useControl
|
|
35
36
|
});
|
|
36
37
|
module.exports = __toCommonJS(src_exports);
|
|
37
38
|
|
|
39
|
+
// src/controls/control-context.tsx
|
|
40
|
+
var import_react = require("react");
|
|
41
|
+
var ControlContext = (0, import_react.createContext)(null);
|
|
42
|
+
function useControl(defaultValue) {
|
|
43
|
+
const controlContext = (0, import_react.useContext)(ControlContext);
|
|
44
|
+
if (!controlContext) {
|
|
45
|
+
throw new Error("useControl must be used within a ControlContext");
|
|
46
|
+
}
|
|
47
|
+
return { ...controlContext, value: controlContext.value ?? defaultValue };
|
|
48
|
+
}
|
|
49
|
+
|
|
38
50
|
// src/controls/control-replacement.ts
|
|
39
51
|
var controlReplacement;
|
|
40
|
-
var replaceControl = ({ component, condition }) => {
|
|
41
|
-
controlReplacement = { component, condition };
|
|
42
|
-
};
|
|
43
52
|
var getControlReplacement = ({ value }) => {
|
|
44
53
|
let shouldReplace = false;
|
|
45
54
|
try {
|
|
46
|
-
shouldReplace = !!controlReplacement?.condition({ value });
|
|
55
|
+
shouldReplace = !!controlReplacement?.condition({ value }) && !!controlReplacement?.component;
|
|
47
56
|
} catch {
|
|
48
57
|
}
|
|
49
58
|
return shouldReplace ? controlReplacement?.component : void 0;
|
|
50
59
|
};
|
|
60
|
+
function replaceControl({ component, condition }) {
|
|
61
|
+
controlReplacement = { component, condition };
|
|
62
|
+
}
|
|
63
|
+
function useControlReplacement() {
|
|
64
|
+
const { value } = useControl();
|
|
65
|
+
return getControlReplacement({ value });
|
|
66
|
+
}
|
|
51
67
|
|
|
52
|
-
// src/controls/control-
|
|
53
|
-
var
|
|
54
|
-
var
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
68
|
+
// src/controls/control-actions/actions/popover-action.tsx
|
|
69
|
+
var React = __toESM(require("react"));
|
|
70
|
+
var import_ui = require("@elementor/ui");
|
|
71
|
+
var import_react2 = require("react");
|
|
72
|
+
var import_icons = require("@elementor/icons");
|
|
73
|
+
var SIZE = "tiny";
|
|
74
|
+
function PopoverAction({
|
|
75
|
+
title,
|
|
76
|
+
visible = true,
|
|
77
|
+
icon: Icon,
|
|
78
|
+
popoverContent: PopoverContent
|
|
79
|
+
}) {
|
|
80
|
+
const id = (0, import_react2.useId)();
|
|
81
|
+
const popupState = (0, import_ui.usePopupState)({
|
|
82
|
+
variant: "popover",
|
|
83
|
+
popupId: `elementor-popover-action-${id}`
|
|
84
|
+
});
|
|
85
|
+
if (!visible) {
|
|
86
|
+
return null;
|
|
59
87
|
}
|
|
60
|
-
return {
|
|
88
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(import_ui.Tooltip, { placement: "top", title }, /* @__PURE__ */ React.createElement(import_ui.IconButton, { "aria-label": title, key: id, size: SIZE, ...(0, import_ui.bindToggle)(popupState) }, /* @__PURE__ */ React.createElement(Icon, { fontSize: SIZE }))), /* @__PURE__ */ React.createElement(
|
|
89
|
+
import_ui.Popover,
|
|
90
|
+
{
|
|
91
|
+
disablePortal: true,
|
|
92
|
+
disableScrollLock: true,
|
|
93
|
+
anchorOrigin: {
|
|
94
|
+
vertical: "bottom",
|
|
95
|
+
horizontal: "center"
|
|
96
|
+
},
|
|
97
|
+
...(0, import_ui.bindPopover)(popupState)
|
|
98
|
+
},
|
|
99
|
+
/* @__PURE__ */ React.createElement(import_ui.Stack, { direction: "row", alignItems: "center", pl: 1.5, pr: 0.5, py: 1.5 }, /* @__PURE__ */ React.createElement(Icon, { fontSize: SIZE, sx: { mr: 0.5 } }), /* @__PURE__ */ React.createElement(import_ui.Typography, { variant: "subtitle2" }, title), /* @__PURE__ */ React.createElement(import_ui.IconButton, { sx: { ml: "auto" }, size: SIZE, onClick: popupState.close }, /* @__PURE__ */ React.createElement(import_icons.XIcon, { fontSize: SIZE }))),
|
|
100
|
+
/* @__PURE__ */ React.createElement(PopoverContent, { closePopover: popupState.close })
|
|
101
|
+
));
|
|
61
102
|
}
|
|
62
103
|
|
|
104
|
+
// src/controls/control-actions/control-actions-menu.ts
|
|
105
|
+
var import_menus = require("@elementor/menus");
|
|
106
|
+
var controlActionsMenu = (0, import_menus.createMenu)({
|
|
107
|
+
components: {
|
|
108
|
+
PopoverAction
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
|
|
63
112
|
// src/panel.ts
|
|
64
113
|
var import_editor_panels2 = require("@elementor/editor-panels");
|
|
65
114
|
|
|
66
115
|
// src/components/editing-panel.tsx
|
|
67
|
-
var
|
|
68
|
-
var
|
|
116
|
+
var React45 = __toESM(require("react"));
|
|
117
|
+
var import_i18n23 = require("@wordpress/i18n");
|
|
69
118
|
|
|
70
119
|
// src/hooks/use-selected-elements.ts
|
|
71
120
|
var import_editor_v1_adapters = require("@elementor/editor-v1-adapters");
|
|
@@ -134,14 +183,14 @@ function useElementType(type) {
|
|
|
134
183
|
var import_editor_panels = require("@elementor/editor-panels");
|
|
135
184
|
|
|
136
185
|
// src/contexts/element-context.tsx
|
|
137
|
-
var
|
|
138
|
-
var
|
|
139
|
-
var Context = (0,
|
|
186
|
+
var React2 = __toESM(require("react"));
|
|
187
|
+
var import_react3 = require("react");
|
|
188
|
+
var Context = (0, import_react3.createContext)(null);
|
|
140
189
|
function ElementContext({ children, element, elementType }) {
|
|
141
|
-
return /* @__PURE__ */
|
|
190
|
+
return /* @__PURE__ */ React2.createElement(Context.Provider, { value: { element, elementType } }, children);
|
|
142
191
|
}
|
|
143
192
|
function useElementContext() {
|
|
144
|
-
const context = (0,
|
|
193
|
+
const context = (0, import_react3.useContext)(Context);
|
|
145
194
|
if (!context) {
|
|
146
195
|
throw new Error("useElementContext must be used within a ElementContextProvider");
|
|
147
196
|
}
|
|
@@ -149,13 +198,13 @@ function useElementContext() {
|
|
|
149
198
|
}
|
|
150
199
|
|
|
151
200
|
// src/components/editing-panel-tabs.tsx
|
|
152
|
-
var
|
|
153
|
-
var
|
|
154
|
-
var
|
|
201
|
+
var import_ui37 = require("@elementor/ui");
|
|
202
|
+
var React44 = __toESM(require("react"));
|
|
203
|
+
var import_i18n22 = require("@wordpress/i18n");
|
|
155
204
|
|
|
156
205
|
// src/components/settings-tab.tsx
|
|
157
|
-
var
|
|
158
|
-
var
|
|
206
|
+
var React17 = __toESM(require("react"));
|
|
207
|
+
var import_ui13 = require("@elementor/ui");
|
|
159
208
|
|
|
160
209
|
// src/controls/settings-control.tsx
|
|
161
210
|
var React4 = __toESM(require("react"));
|
|
@@ -196,32 +245,16 @@ var updateSettings = ({ id, props }) => {
|
|
|
196
245
|
};
|
|
197
246
|
|
|
198
247
|
// src/components/control-label.tsx
|
|
199
|
-
var React2 = __toESM(require("react"));
|
|
200
|
-
var import_ui = require("@elementor/ui");
|
|
201
|
-
var ControlLabel = ({ children }) => {
|
|
202
|
-
return /* @__PURE__ */ React2.createElement(import_ui.Typography, { component: "label", variant: "caption", color: "text.secondary" }, children);
|
|
203
|
-
};
|
|
204
|
-
|
|
205
|
-
// src/controls/components/control-container.tsx
|
|
206
248
|
var React3 = __toESM(require("react"));
|
|
207
249
|
var import_ui2 = require("@elementor/ui");
|
|
208
|
-
var
|
|
209
|
-
"
|
|
210
|
-
|
|
211
|
-
},
|
|
212
|
-
"&:where( :has( > :nth-child( 2 ):last-child ) ) > :where( * )": {
|
|
213
|
-
width: direction === "column" ? "100%" : `calc( 50% - ${theme.spacing(gap / 2)})`
|
|
214
|
-
},
|
|
215
|
-
"&:where( :has( > :nth-child( 3 ):last-child ) ) > :where( * )": {
|
|
216
|
-
width: direction === "column" ? "100%" : `calc( 33.3333% - ${theme.spacing(gap * 2)} / 3)`
|
|
217
|
-
}
|
|
218
|
-
}));
|
|
219
|
-
var ControlContainer = (props) => /* @__PURE__ */ React3.createElement(StyledStack, { gap: 1, direction: "row", alignItems: "center", justifyContent: "space-between", ...props });
|
|
250
|
+
var ControlLabel = ({ children }) => {
|
|
251
|
+
return /* @__PURE__ */ React3.createElement(import_ui2.Typography, { component: "label", variant: "caption", color: "text.secondary" }, children);
|
|
252
|
+
};
|
|
220
253
|
|
|
221
254
|
// src/controls/settings-control.tsx
|
|
222
|
-
var
|
|
255
|
+
var SettingsControl = ({ bind, children }) => {
|
|
223
256
|
const { element, elementType } = useElementContext();
|
|
224
|
-
const defaultValue = elementType.propsSchema[bind]?.
|
|
257
|
+
const defaultValue = elementType.propsSchema[bind]?.default;
|
|
225
258
|
const settingsValue = useWidgetSettings({ id: element.id, bind });
|
|
226
259
|
const value = settingsValue ?? defaultValue ?? null;
|
|
227
260
|
const setValue = (newValue) => {
|
|
@@ -234,92 +267,178 @@ var SettingsControlProvider = ({ bind, children }) => {
|
|
|
234
267
|
};
|
|
235
268
|
return /* @__PURE__ */ React4.createElement(ControlContext.Provider, { value: { setValue, value, bind } }, children);
|
|
236
269
|
};
|
|
237
|
-
var SettingsControl = ({ children, bind }) => /* @__PURE__ */ React4.createElement(SettingsControlProvider, { bind }, /* @__PURE__ */ React4.createElement(ControlContainer, { flexWrap: "wrap" }, children));
|
|
238
270
|
SettingsControl.Label = ControlLabel;
|
|
239
271
|
|
|
240
272
|
// src/components/accordion-section.tsx
|
|
241
273
|
var React5 = __toESM(require("react"));
|
|
242
|
-
var
|
|
274
|
+
var import_react4 = require("react");
|
|
243
275
|
var import_ui3 = require("@elementor/ui");
|
|
244
276
|
var AccordionSection = ({ title, children }) => {
|
|
245
|
-
const uid = (0,
|
|
277
|
+
const uid = (0, import_react4.useId)();
|
|
246
278
|
const labelId = `label-${uid}`;
|
|
247
279
|
const contentId = `content-${uid}`;
|
|
248
280
|
return /* @__PURE__ */ React5.createElement(import_ui3.Accordion, { disableGutters: true, defaultExpanded: true }, /* @__PURE__ */ React5.createElement(import_ui3.AccordionSummary, { "aria-controls": contentId, id: labelId }, /* @__PURE__ */ React5.createElement(import_ui3.AccordionSummaryText, { primaryTypographyProps: { variant: "caption" } }, title)), /* @__PURE__ */ React5.createElement(import_ui3.AccordionDetails, { id: contentId, "aria-labelledby": labelId }, /* @__PURE__ */ React5.createElement(import_ui3.Stack, { gap: 2.5 }, children)));
|
|
249
281
|
};
|
|
250
282
|
|
|
251
283
|
// src/controls/control.tsx
|
|
252
|
-
var
|
|
284
|
+
var React15 = __toESM(require("react"));
|
|
253
285
|
var import_utils = require("@elementor/utils");
|
|
254
286
|
|
|
255
287
|
// src/controls/control-types/image-control.tsx
|
|
288
|
+
var React10 = __toESM(require("react"));
|
|
289
|
+
var import_ui7 = require("@elementor/ui");
|
|
290
|
+
var import_i18n2 = require("@wordpress/i18n");
|
|
291
|
+
|
|
292
|
+
// src/controls/control-types/image-media-control.tsx
|
|
293
|
+
var React8 = __toESM(require("react"));
|
|
294
|
+
var import_ui5 = require("@elementor/ui");
|
|
295
|
+
var import_icons2 = require("@elementor/icons");
|
|
296
|
+
var import_wp_media = require("@elementor/wp-media");
|
|
297
|
+
var import_i18n = require("@wordpress/i18n");
|
|
298
|
+
|
|
299
|
+
// src/controls/control-actions/control-actions.tsx
|
|
256
300
|
var React6 = __toESM(require("react"));
|
|
257
301
|
var import_ui4 = require("@elementor/ui");
|
|
258
|
-
var
|
|
259
|
-
var
|
|
260
|
-
|
|
261
|
-
|
|
302
|
+
var { useMenuItems } = controlActionsMenu;
|
|
303
|
+
var FloatingBar = (0, import_ui4.styled)(import_ui4.UnstableFloatingActionBar)`
|
|
304
|
+
& .MuiPaper-root:empty {
|
|
305
|
+
display: none;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// this is for a fix which would be added later on - to force the width externally
|
|
309
|
+
width: 100%;
|
|
310
|
+
& > :first-of-type {
|
|
311
|
+
width: 100%;
|
|
312
|
+
}
|
|
313
|
+
`;
|
|
314
|
+
function ControlActions({ fullWidth = false, children }) {
|
|
315
|
+
const items = useMenuItems().default;
|
|
316
|
+
if (items.length === 0) {
|
|
317
|
+
return children;
|
|
318
|
+
}
|
|
319
|
+
return /* @__PURE__ */ React6.createElement(
|
|
320
|
+
FloatingBar,
|
|
321
|
+
{
|
|
322
|
+
actions: items.map(({ MenuItem: MenuItem4, id }) => /* @__PURE__ */ React6.createElement(MenuItem4, { key: id })),
|
|
323
|
+
sx: fullWidth ? { width: "100%" } : void 0
|
|
324
|
+
},
|
|
325
|
+
children
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// src/controls/create-control.tsx
|
|
330
|
+
var React7 = __toESM(require("react"));
|
|
331
|
+
var brandSymbol = Symbol("control");
|
|
332
|
+
function createControl(Component, { supportsReplacements = true } = {}) {
|
|
333
|
+
return (props) => {
|
|
334
|
+
const ControlReplacement = useControlReplacement();
|
|
335
|
+
if (ControlReplacement && supportsReplacements) {
|
|
336
|
+
return /* @__PURE__ */ React7.createElement(ControlReplacement, { ...props });
|
|
337
|
+
}
|
|
338
|
+
return /* @__PURE__ */ React7.createElement(Component, { ...props });
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// src/controls/control-types/image-media-control.tsx
|
|
343
|
+
var ImageMediaControl = createControl(() => {
|
|
262
344
|
const { value, setValue } = useControl();
|
|
263
|
-
const {
|
|
264
|
-
const
|
|
345
|
+
const { id, url } = value?.value ?? {};
|
|
346
|
+
const { data: attachment } = (0, import_wp_media.useWpMediaAttachment)(id?.value || null);
|
|
347
|
+
const src = attachment?.url ?? url;
|
|
265
348
|
const { open } = (0, import_wp_media.useWpMediaFrame)({
|
|
266
349
|
types: ["image"],
|
|
267
350
|
multiple: false,
|
|
268
|
-
selected:
|
|
351
|
+
selected: id?.value || null,
|
|
269
352
|
onSelect: (selectedAttachment) => {
|
|
270
353
|
setValue({
|
|
271
|
-
$$type: "image",
|
|
354
|
+
$$type: "image-src",
|
|
272
355
|
value: {
|
|
273
|
-
|
|
356
|
+
id: {
|
|
357
|
+
$$type: "image-attachment-id",
|
|
358
|
+
value: selectedAttachment.id
|
|
359
|
+
},
|
|
360
|
+
url: null
|
|
274
361
|
}
|
|
275
362
|
});
|
|
276
363
|
}
|
|
277
364
|
});
|
|
278
|
-
return /* @__PURE__ */
|
|
279
|
-
|
|
365
|
+
return /* @__PURE__ */ React8.createElement(import_ui5.Card, { variant: "outlined" }, /* @__PURE__ */ React8.createElement(import_ui5.CardMedia, { image: src, sx: { height: 150 } }), /* @__PURE__ */ React8.createElement(import_ui5.CardOverlay, null, /* @__PURE__ */ React8.createElement(ControlActions, null, /* @__PURE__ */ React8.createElement(import_ui5.Stack, { gap: 0.5 }, /* @__PURE__ */ React8.createElement(
|
|
366
|
+
import_ui5.Button,
|
|
280
367
|
{
|
|
368
|
+
size: "tiny",
|
|
281
369
|
color: "inherit",
|
|
282
|
-
size: "small",
|
|
283
370
|
variant: "outlined",
|
|
284
|
-
onClick: () => {
|
|
285
|
-
open({ mode: "browse" });
|
|
286
|
-
}
|
|
371
|
+
onClick: () => open({ mode: "browse" })
|
|
287
372
|
},
|
|
288
373
|
(0, import_i18n.__)("Select Image", "elementor")
|
|
289
|
-
), /* @__PURE__ */
|
|
290
|
-
|
|
374
|
+
), /* @__PURE__ */ React8.createElement(
|
|
375
|
+
import_ui5.Button,
|
|
291
376
|
{
|
|
292
|
-
|
|
293
|
-
size: "small",
|
|
377
|
+
size: "tiny",
|
|
294
378
|
variant: "text",
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
379
|
+
color: "inherit",
|
|
380
|
+
startIcon: /* @__PURE__ */ React8.createElement(import_icons2.UploadIcon, null),
|
|
381
|
+
onClick: () => open({ mode: "upload" })
|
|
299
382
|
},
|
|
300
383
|
(0, import_i18n.__)("Upload Image", "elementor")
|
|
301
|
-
)));
|
|
302
|
-
};
|
|
384
|
+
)))));
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
// src/controls/control-types/select-control.tsx
|
|
388
|
+
var React9 = __toESM(require("react"));
|
|
389
|
+
var import_ui6 = require("@elementor/ui");
|
|
390
|
+
var SelectControl = createControl(({ options: options4 }) => {
|
|
391
|
+
const { value, setValue } = useControl();
|
|
392
|
+
const handleChange = (event) => {
|
|
393
|
+
setValue(event.target.value);
|
|
394
|
+
};
|
|
395
|
+
return /* @__PURE__ */ React9.createElement(ControlActions, null, /* @__PURE__ */ React9.createElement(import_ui6.Select, { size: "tiny", value: value ?? "", onChange: handleChange }, options4.map(({ label, ...props }) => /* @__PURE__ */ React9.createElement(import_ui6.MenuItem, { key: props.value, ...props }, label))));
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
// src/controls/control-types/image-control.tsx
|
|
399
|
+
var ImageControl = createControl((props) => {
|
|
400
|
+
const { value, setValue } = useControl();
|
|
401
|
+
const { src, size } = value?.value || {};
|
|
402
|
+
const setImageSrc = (newValue) => {
|
|
403
|
+
setValue({
|
|
404
|
+
$$type: "image",
|
|
405
|
+
value: {
|
|
406
|
+
src: newValue,
|
|
407
|
+
size
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
};
|
|
411
|
+
const setImageSize = (newValue) => {
|
|
412
|
+
setValue({
|
|
413
|
+
$$type: "image",
|
|
414
|
+
value: {
|
|
415
|
+
src,
|
|
416
|
+
size: newValue
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
};
|
|
420
|
+
return /* @__PURE__ */ React10.createElement(import_ui7.Stack, { gap: 2 }, /* @__PURE__ */ React10.createElement(ControlContext.Provider, { value: { setValue: setImageSrc, value: src, bind: "src" } }, /* @__PURE__ */ React10.createElement(ImageMediaControl, null)), /* @__PURE__ */ React10.createElement(ControlContext.Provider, { value: { setValue: setImageSize, value: size, bind: "size" } }, /* @__PURE__ */ React10.createElement(import_ui7.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React10.createElement(import_ui7.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React10.createElement(SettingsControl.Label, null, " ", (0, import_i18n2.__)("Image Resolution", "elementor"))), /* @__PURE__ */ React10.createElement(import_ui7.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React10.createElement(SelectControl, { options: props.sizes })))));
|
|
421
|
+
});
|
|
303
422
|
|
|
304
423
|
// src/controls/control-types/text-control.tsx
|
|
305
|
-
var
|
|
306
|
-
var
|
|
307
|
-
var TextControl = ({ placeholder }) => {
|
|
424
|
+
var React11 = __toESM(require("react"));
|
|
425
|
+
var import_ui8 = require("@elementor/ui");
|
|
426
|
+
var TextControl = createControl(({ placeholder }) => {
|
|
308
427
|
const { value, setValue } = useControl("");
|
|
309
428
|
const handleChange = (event) => setValue(event.target.value);
|
|
310
|
-
return /* @__PURE__ */
|
|
311
|
-
};
|
|
429
|
+
return /* @__PURE__ */ React11.createElement(ControlActions, { fullWidth: true }, /* @__PURE__ */ React11.createElement(import_ui8.TextField, { type: "text", size: "tiny", value, onChange: handleChange, placeholder }));
|
|
430
|
+
});
|
|
312
431
|
|
|
313
432
|
// src/controls/control-types/text-area-control.tsx
|
|
314
|
-
var
|
|
315
|
-
var
|
|
316
|
-
var TextAreaControl = ({ placeholder }) => {
|
|
433
|
+
var React12 = __toESM(require("react"));
|
|
434
|
+
var import_ui9 = require("@elementor/ui");
|
|
435
|
+
var TextAreaControl = createControl(({ placeholder }) => {
|
|
317
436
|
const { value, setValue } = useControl();
|
|
318
437
|
const handleChange = (event) => {
|
|
319
438
|
setValue(event.target.value);
|
|
320
439
|
};
|
|
321
|
-
return /* @__PURE__ */
|
|
322
|
-
|
|
440
|
+
return /* @__PURE__ */ React12.createElement(ControlActions, { fullWidth: true }, /* @__PURE__ */ React12.createElement(
|
|
441
|
+
import_ui9.TextField,
|
|
323
442
|
{
|
|
324
443
|
size: "tiny",
|
|
325
444
|
multiline: true,
|
|
@@ -329,15 +448,15 @@ var TextAreaControl = ({ placeholder }) => {
|
|
|
329
448
|
onChange: handleChange,
|
|
330
449
|
placeholder
|
|
331
450
|
}
|
|
332
|
-
);
|
|
333
|
-
};
|
|
451
|
+
));
|
|
452
|
+
});
|
|
334
453
|
|
|
335
454
|
// src/controls/control-types/size-control.tsx
|
|
336
|
-
var
|
|
337
|
-
var
|
|
455
|
+
var React14 = __toESM(require("react"));
|
|
456
|
+
var import_ui11 = require("@elementor/ui");
|
|
338
457
|
|
|
339
458
|
// src/controls/hooks/use-sync-external-state.tsx
|
|
340
|
-
var
|
|
459
|
+
var import_react5 = require("react");
|
|
341
460
|
var useSyncExternalState = ({
|
|
342
461
|
external,
|
|
343
462
|
setExternal,
|
|
@@ -356,8 +475,8 @@ var useSyncExternalState = ({
|
|
|
356
475
|
}
|
|
357
476
|
return externalValue;
|
|
358
477
|
}
|
|
359
|
-
const [internal, setInternal] = (0,
|
|
360
|
-
(0,
|
|
478
|
+
const [internal, setInternal] = (0, import_react5.useState)(toInternal(external, void 0));
|
|
479
|
+
(0, import_react5.useEffect)(() => {
|
|
361
480
|
setInternal((prevInternal) => toInternal(external, prevInternal));
|
|
362
481
|
}, [external]);
|
|
363
482
|
const setInternalValue = (setter) => {
|
|
@@ -370,9 +489,9 @@ var useSyncExternalState = ({
|
|
|
370
489
|
};
|
|
371
490
|
|
|
372
491
|
// src/controls/components/text-field-inner-selection.tsx
|
|
373
|
-
var
|
|
374
|
-
var
|
|
375
|
-
var
|
|
492
|
+
var React13 = __toESM(require("react"));
|
|
493
|
+
var import_ui10 = require("@elementor/ui");
|
|
494
|
+
var import_react6 = require("react");
|
|
376
495
|
var TextFieldInnerSelection = ({
|
|
377
496
|
placeholder,
|
|
378
497
|
type,
|
|
@@ -381,8 +500,8 @@ var TextFieldInnerSelection = ({
|
|
|
381
500
|
endAdornment,
|
|
382
501
|
startAdornment
|
|
383
502
|
}) => {
|
|
384
|
-
return /* @__PURE__ */
|
|
385
|
-
|
|
503
|
+
return /* @__PURE__ */ React13.createElement(
|
|
504
|
+
import_ui10.TextField,
|
|
386
505
|
{
|
|
387
506
|
size: "tiny",
|
|
388
507
|
type,
|
|
@@ -397,33 +516,33 @@ var TextFieldInnerSelection = ({
|
|
|
397
516
|
);
|
|
398
517
|
};
|
|
399
518
|
var SelectionEndAdornment = ({
|
|
400
|
-
options:
|
|
519
|
+
options: options4,
|
|
401
520
|
onClick,
|
|
402
521
|
value
|
|
403
522
|
}) => {
|
|
404
|
-
const popupState = (0,
|
|
523
|
+
const popupState = (0, import_ui10.usePopupState)({
|
|
405
524
|
variant: "popover",
|
|
406
|
-
popupId: (0,
|
|
525
|
+
popupId: (0, import_react6.useId)()
|
|
407
526
|
});
|
|
408
527
|
const handleMenuItemClick = (index) => {
|
|
409
|
-
onClick(
|
|
528
|
+
onClick(options4[index]);
|
|
410
529
|
popupState.close();
|
|
411
530
|
};
|
|
412
|
-
return /* @__PURE__ */
|
|
413
|
-
|
|
531
|
+
return /* @__PURE__ */ React13.createElement(import_ui10.InputAdornment, { position: "end" }, /* @__PURE__ */ React13.createElement(
|
|
532
|
+
import_ui10.Button,
|
|
414
533
|
{
|
|
415
534
|
size: "small",
|
|
416
535
|
color: "inherit",
|
|
417
536
|
sx: { font: "inherit", minWidth: "initial" },
|
|
418
|
-
...(0,
|
|
537
|
+
...(0, import_ui10.bindTrigger)(popupState)
|
|
419
538
|
},
|
|
420
539
|
value.toUpperCase()
|
|
421
|
-
), /* @__PURE__ */
|
|
540
|
+
), /* @__PURE__ */ React13.createElement(import_ui10.Menu, { MenuListProps: { dense: true }, ...(0, import_ui10.bindMenu)(popupState) }, options4.map((option, index) => /* @__PURE__ */ React13.createElement(import_ui10.MenuItem, { key: option, onClick: () => handleMenuItemClick(index) }, option.toUpperCase()))));
|
|
422
541
|
};
|
|
423
542
|
|
|
424
543
|
// src/controls/control-types/size-control.tsx
|
|
425
544
|
var defaultUnits = ["px", "%", "em", "rem", "vw"];
|
|
426
|
-
var SizeControl = ({ units = defaultUnits, placeholder, startIcon }) => {
|
|
545
|
+
var SizeControl = createControl(({ units = defaultUnits, placeholder, startIcon }) => {
|
|
427
546
|
const { value, setValue } = useControl();
|
|
428
547
|
const [state, setState] = useSyncExternalState({
|
|
429
548
|
external: value,
|
|
@@ -453,39 +572,29 @@ var SizeControl = ({ units = defaultUnits, placeholder, startIcon }) => {
|
|
|
453
572
|
}
|
|
454
573
|
}));
|
|
455
574
|
};
|
|
456
|
-
return /* @__PURE__ */
|
|
575
|
+
return /* @__PURE__ */ React14.createElement(ControlActions, null, /* @__PURE__ */ React14.createElement(
|
|
457
576
|
TextFieldInnerSelection,
|
|
458
577
|
{
|
|
459
|
-
endAdornment: /* @__PURE__ */
|
|
578
|
+
endAdornment: /* @__PURE__ */ React14.createElement(SelectionEndAdornment, { options: units, onClick: handleUnitChange, value: state.value.unit }),
|
|
460
579
|
placeholder,
|
|
461
|
-
startAdornment: startIcon ?? /* @__PURE__ */
|
|
580
|
+
startAdornment: startIcon ?? /* @__PURE__ */ React14.createElement(import_ui11.InputAdornment, { position: "start" }, startIcon),
|
|
462
581
|
type: "number",
|
|
463
582
|
value: Number.isNaN(state.value.size) ? "" : state.value.size,
|
|
464
583
|
onChange: handleSizeChange
|
|
465
584
|
}
|
|
466
|
-
);
|
|
467
|
-
};
|
|
468
|
-
|
|
469
|
-
// src/controls/control-types/select-control.tsx
|
|
470
|
-
var React11 = __toESM(require("react"));
|
|
471
|
-
var import_ui9 = require("@elementor/ui");
|
|
472
|
-
var SelectControl = ({ options: options2 }) => {
|
|
473
|
-
const { value, setValue } = useControl();
|
|
474
|
-
const handleChange = (event) => {
|
|
475
|
-
setValue(event.target.value);
|
|
476
|
-
};
|
|
477
|
-
return /* @__PURE__ */ React11.createElement(import_ui9.Select, { size: "tiny", value: value ?? "", onChange: handleChange }, options2.map(({ label, ...props }) => /* @__PURE__ */ React11.createElement(import_ui9.MenuItem, { key: props.value, ...props }, label)));
|
|
478
|
-
};
|
|
585
|
+
));
|
|
586
|
+
});
|
|
479
587
|
|
|
480
588
|
// src/controls/controls-registry.tsx
|
|
481
589
|
var controlTypes = {
|
|
482
|
-
image: ImageControl,
|
|
483
|
-
text: TextControl,
|
|
484
|
-
textarea: TextAreaControl,
|
|
485
|
-
size: SizeControl,
|
|
486
|
-
select: SelectControl
|
|
590
|
+
image: { component: ImageControl, layout: "full" },
|
|
591
|
+
text: { component: TextControl, layout: "two-columns" },
|
|
592
|
+
textarea: { component: TextAreaControl, layout: "full" },
|
|
593
|
+
size: { component: SizeControl, layout: "two-columns" },
|
|
594
|
+
select: { component: SelectControl, layout: "two-columns" }
|
|
487
595
|
};
|
|
488
|
-
var getControlByType = (type) => controlTypes[type];
|
|
596
|
+
var getControlByType = (type) => controlTypes[type]?.component;
|
|
597
|
+
var getLayoutByType = (type) => controlTypes[type].layout;
|
|
489
598
|
|
|
490
599
|
// src/controls/control.tsx
|
|
491
600
|
var ControlTypeError = (0, import_utils.createError)({
|
|
@@ -493,28 +602,51 @@ var ControlTypeError = (0, import_utils.createError)({
|
|
|
493
602
|
message: `Control type not found.`
|
|
494
603
|
});
|
|
495
604
|
var Control = ({ props, type }) => {
|
|
496
|
-
const { value } = useControl();
|
|
497
605
|
const ControlByType = getControlByType(type);
|
|
498
606
|
if (!ControlByType) {
|
|
499
607
|
throw new ControlTypeError({
|
|
500
608
|
context: { type }
|
|
501
609
|
});
|
|
502
610
|
}
|
|
503
|
-
|
|
504
|
-
return /* @__PURE__ */ React12.createElement(ControlComponent, { ...props });
|
|
611
|
+
return /* @__PURE__ */ React15.createElement(ControlByType, { ...props });
|
|
505
612
|
};
|
|
506
613
|
|
|
614
|
+
// src/controls/components/control-type-container.tsx
|
|
615
|
+
var React16 = __toESM(require("react"));
|
|
616
|
+
var import_ui12 = require("@elementor/ui");
|
|
617
|
+
var ControlTypeContainer = ({
|
|
618
|
+
controlType,
|
|
619
|
+
children
|
|
620
|
+
}) => {
|
|
621
|
+
const layout = getLayoutByType(controlType);
|
|
622
|
+
return /* @__PURE__ */ React16.createElement(StyledContainer, { layout }, children);
|
|
623
|
+
};
|
|
624
|
+
var StyledContainer = (0, import_ui12.styled)(import_ui12.Box, {
|
|
625
|
+
shouldForwardProp: (prop) => !["layout"].includes(prop)
|
|
626
|
+
})(({ layout, theme }) => ({
|
|
627
|
+
display: "grid",
|
|
628
|
+
gridGap: theme.spacing(1),
|
|
629
|
+
...getGridLayout(layout)
|
|
630
|
+
}));
|
|
631
|
+
var getGridLayout = (layout) => ({
|
|
632
|
+
justifyContent: "space-between",
|
|
633
|
+
gridTemplateColumns: {
|
|
634
|
+
full: "1fr",
|
|
635
|
+
"two-columns": "repeat(2, 1fr)"
|
|
636
|
+
}[layout]
|
|
637
|
+
});
|
|
638
|
+
|
|
507
639
|
// src/components/settings-tab.tsx
|
|
508
640
|
var SettingsTab = () => {
|
|
509
641
|
const { elementType } = useElementContext();
|
|
510
|
-
return /* @__PURE__ */
|
|
642
|
+
return /* @__PURE__ */ React17.createElement(import_ui13.Stack, null, elementType.controls.map(({ type, value }, index) => {
|
|
511
643
|
if (type === "control") {
|
|
512
|
-
return /* @__PURE__ */
|
|
644
|
+
return /* @__PURE__ */ React17.createElement(Control2, { key: value.bind, control: value });
|
|
513
645
|
}
|
|
514
646
|
if (type === "section") {
|
|
515
|
-
return /* @__PURE__ */
|
|
647
|
+
return /* @__PURE__ */ React17.createElement(AccordionSection, { key: type + "." + index, title: value.label }, value.items?.map((item) => {
|
|
516
648
|
if (item.type === "control") {
|
|
517
|
-
return /* @__PURE__ */
|
|
649
|
+
return /* @__PURE__ */ React17.createElement(Control2, { key: item.value.bind, control: item.value });
|
|
518
650
|
}
|
|
519
651
|
return null;
|
|
520
652
|
}));
|
|
@@ -526,24 +658,24 @@ var Control2 = ({ control }) => {
|
|
|
526
658
|
if (!getControlByType(control.type)) {
|
|
527
659
|
return null;
|
|
528
660
|
}
|
|
529
|
-
return /* @__PURE__ */
|
|
661
|
+
return /* @__PURE__ */ React17.createElement(SettingsControl, { bind: control.bind }, /* @__PURE__ */ React17.createElement(ControlTypeContainer, { controlType: control.type }, control.label ? /* @__PURE__ */ React17.createElement(SettingsControl.Label, null, control.label) : null, /* @__PURE__ */ React17.createElement(Control, { type: control.type, props: control.props })));
|
|
530
662
|
};
|
|
531
663
|
|
|
532
664
|
// src/components/style-tab.tsx
|
|
533
|
-
var
|
|
665
|
+
var React43 = __toESM(require("react"));
|
|
534
666
|
|
|
535
667
|
// src/contexts/style-context.tsx
|
|
536
|
-
var
|
|
537
|
-
var
|
|
668
|
+
var React18 = __toESM(require("react"));
|
|
669
|
+
var import_react7 = require("react");
|
|
538
670
|
var import_editor_responsive = require("@elementor/editor-responsive");
|
|
539
|
-
var Context2 = (0,
|
|
671
|
+
var Context2 = (0, import_react7.createContext)(null);
|
|
540
672
|
function StyleContext({ children, selectedStyleDef, selectedClassesProp }) {
|
|
541
673
|
const breakpoint = (0, import_editor_responsive.useActiveBreakpoint)();
|
|
542
674
|
const selectedMeta = { breakpoint, state: null };
|
|
543
|
-
return /* @__PURE__ */
|
|
675
|
+
return /* @__PURE__ */ React18.createElement(Context2.Provider, { value: { selectedStyleDef, selectedMeta, selectedClassesProp } }, children);
|
|
544
676
|
}
|
|
545
677
|
function useStyleContext() {
|
|
546
|
-
const context = (0,
|
|
678
|
+
const context = (0, import_react7.useContext)(Context2);
|
|
547
679
|
if (!context) {
|
|
548
680
|
throw new Error("UseStyleContext must be used within a StyleContextProvider");
|
|
549
681
|
}
|
|
@@ -571,13 +703,13 @@ var useElementStyles = (elementID) => {
|
|
|
571
703
|
};
|
|
572
704
|
|
|
573
705
|
// src/components/style-tab.tsx
|
|
574
|
-
var
|
|
706
|
+
var import_ui36 = require("@elementor/ui");
|
|
575
707
|
|
|
576
708
|
// src/components/style-sections/size-section.tsx
|
|
577
|
-
var
|
|
709
|
+
var React20 = __toESM(require("react"));
|
|
578
710
|
|
|
579
711
|
// src/controls/style-control.tsx
|
|
580
|
-
var
|
|
712
|
+
var React19 = __toESM(require("react"));
|
|
581
713
|
|
|
582
714
|
// src/hooks/use-element-style-prop.ts
|
|
583
715
|
var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
|
|
@@ -647,35 +779,35 @@ var useStyleControl = (propName) => {
|
|
|
647
779
|
// src/controls/style-control.tsx
|
|
648
780
|
var StyleControl = ({ bind, children }) => {
|
|
649
781
|
const [value, setValue] = useStyleControl(bind);
|
|
650
|
-
return /* @__PURE__ */
|
|
782
|
+
return /* @__PURE__ */ React19.createElement(ControlContext.Provider, { value: { bind, value, setValue } }, children);
|
|
651
783
|
};
|
|
652
784
|
StyleControl.Label = ControlLabel;
|
|
653
785
|
|
|
654
786
|
// src/components/style-sections/size-section.tsx
|
|
655
|
-
var
|
|
656
|
-
var
|
|
787
|
+
var import_ui14 = require("@elementor/ui");
|
|
788
|
+
var import_i18n3 = require("@wordpress/i18n");
|
|
657
789
|
var SizeSection = () => {
|
|
658
|
-
return /* @__PURE__ */
|
|
790
|
+
return /* @__PURE__ */ React20.createElement(AccordionSection, { title: (0, import_i18n3.__)("Size", "elementor") }, /* @__PURE__ */ React20.createElement(import_ui14.Stack, { gap: 1.5 }, /* @__PURE__ */ React20.createElement(import_ui14.Grid, { container: true, spacing: 2 }, /* @__PURE__ */ React20.createElement(Control3, { bind: "width", label: (0, import_i18n3.__)("Width", "elementor") }), /* @__PURE__ */ React20.createElement(Control3, { bind: "height", label: (0, import_i18n3.__)("Height", "elementor") })), /* @__PURE__ */ React20.createElement(import_ui14.Grid, { container: true, spacing: 2 }, /* @__PURE__ */ React20.createElement(Control3, { bind: "min-width", label: (0, import_i18n3.__)("Min. Width", "elementor") }), /* @__PURE__ */ React20.createElement(Control3, { bind: "min-height", label: (0, import_i18n3.__)("Min. Height", "elementor") })), /* @__PURE__ */ React20.createElement(import_ui14.Grid, { container: true, spacing: 2 }, /* @__PURE__ */ React20.createElement(Control3, { bind: "max-width", label: (0, import_i18n3.__)("Max. Width", "elementor") }), /* @__PURE__ */ React20.createElement(Control3, { bind: "max-height", label: (0, import_i18n3.__)("Max. Height", "elementor") }))));
|
|
659
791
|
};
|
|
660
792
|
var Control3 = ({ label, bind }) => {
|
|
661
|
-
return /* @__PURE__ */
|
|
793
|
+
return /* @__PURE__ */ React20.createElement(import_ui14.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React20.createElement(StyleControl, { bind }, /* @__PURE__ */ React20.createElement(import_ui14.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React20.createElement(import_ui14.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React20.createElement(StyleControl.Label, null, label)), /* @__PURE__ */ React20.createElement(import_ui14.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React20.createElement(Control, { type: "size" })))));
|
|
662
794
|
};
|
|
663
795
|
|
|
664
796
|
// src/components/style-sections/typography-section/typography-section.tsx
|
|
665
|
-
var
|
|
666
|
-
var
|
|
797
|
+
var React34 = __toESM(require("react"));
|
|
798
|
+
var import_ui27 = require("@elementor/ui");
|
|
667
799
|
|
|
668
800
|
// src/components/style-sections/typography-section/text-style-control.tsx
|
|
669
|
-
var
|
|
670
|
-
var
|
|
671
|
-
var
|
|
672
|
-
var
|
|
801
|
+
var React21 = __toESM(require("react"));
|
|
802
|
+
var import_i18n4 = require("@wordpress/i18n");
|
|
803
|
+
var import_ui15 = require("@elementor/ui");
|
|
804
|
+
var import_icons3 = require("@elementor/icons");
|
|
673
805
|
var buttonSize = "tiny";
|
|
674
806
|
var TextStyleControl = () => {
|
|
675
|
-
const [fontStyle, setFontStyle] = useStyleControl("
|
|
676
|
-
const [textDecoration, setTextDecoration] = useStyleControl("
|
|
807
|
+
const [fontStyle, setFontStyle] = useStyleControl("font-style");
|
|
808
|
+
const [textDecoration, setTextDecoration] = useStyleControl("text-decoration");
|
|
677
809
|
const formats = [fontStyle, ...(textDecoration || "").split(" ")];
|
|
678
|
-
return /* @__PURE__ */
|
|
810
|
+
return /* @__PURE__ */ React21.createElement(import_ui15.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React21.createElement(import_ui15.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React21.createElement(ControlLabel, null, (0, import_i18n4.__)("Style", "elementor"))), /* @__PURE__ */ React21.createElement(import_ui15.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React21.createElement(import_ui15.ToggleButtonGroup, { value: formats }, /* @__PURE__ */ React21.createElement(
|
|
679
811
|
ToggleButton,
|
|
680
812
|
{
|
|
681
813
|
value: "italic",
|
|
@@ -683,8 +815,8 @@ var TextStyleControl = () => {
|
|
|
683
815
|
"aria-label": "italic",
|
|
684
816
|
sx: { marginLeft: "auto" }
|
|
685
817
|
},
|
|
686
|
-
/* @__PURE__ */
|
|
687
|
-
), /* @__PURE__ */
|
|
818
|
+
/* @__PURE__ */ React21.createElement(import_icons3.ItalicIcon, { fontSize: buttonSize })
|
|
819
|
+
), /* @__PURE__ */ React21.createElement(
|
|
688
820
|
ShorthandControl,
|
|
689
821
|
{
|
|
690
822
|
value: "line-through",
|
|
@@ -692,8 +824,8 @@ var TextStyleControl = () => {
|
|
|
692
824
|
updateValues: setTextDecoration,
|
|
693
825
|
"aria-label": "line-through"
|
|
694
826
|
},
|
|
695
|
-
/* @__PURE__ */
|
|
696
|
-
), /* @__PURE__ */
|
|
827
|
+
/* @__PURE__ */ React21.createElement(import_icons3.StrikethroughIcon, { fontSize: buttonSize })
|
|
828
|
+
), /* @__PURE__ */ React21.createElement(
|
|
697
829
|
ShorthandControl,
|
|
698
830
|
{
|
|
699
831
|
value: "underline",
|
|
@@ -701,8 +833,8 @@ var TextStyleControl = () => {
|
|
|
701
833
|
updateValues: setTextDecoration,
|
|
702
834
|
"aria-label": "underline"
|
|
703
835
|
},
|
|
704
|
-
/* @__PURE__ */
|
|
705
|
-
)));
|
|
836
|
+
/* @__PURE__ */ React21.createElement(import_icons3.UnderlineIcon, { fontSize: buttonSize })
|
|
837
|
+
))));
|
|
706
838
|
};
|
|
707
839
|
var ShorthandControl = ({
|
|
708
840
|
children,
|
|
@@ -720,105 +852,108 @@ var ShorthandControl = ({
|
|
|
720
852
|
updateValues([...valuesArr, newValue].join(" "));
|
|
721
853
|
}
|
|
722
854
|
};
|
|
723
|
-
return /* @__PURE__ */
|
|
855
|
+
return /* @__PURE__ */ React21.createElement(ToggleButton, { value, onChange: toggleValue, selected, "aria-label": ariaLabel }, children);
|
|
724
856
|
};
|
|
725
857
|
var ToggleButton = ({ onChange, ...props }) => {
|
|
726
858
|
const handleChange = (_e, newValue) => {
|
|
727
859
|
onChange(newValue);
|
|
728
860
|
};
|
|
729
|
-
return /* @__PURE__ */
|
|
861
|
+
return /* @__PURE__ */ React21.createElement(import_ui15.ToggleButton, { ...props, onChange: handleChange, size: buttonSize });
|
|
730
862
|
};
|
|
731
863
|
|
|
732
864
|
// src/components/style-sections/typography-section/typography-section.tsx
|
|
733
|
-
var
|
|
865
|
+
var import_i18n14 = require("@wordpress/i18n");
|
|
734
866
|
|
|
735
867
|
// src/components/style-sections/typography-section/font-size-control.tsx
|
|
736
|
-
var
|
|
737
|
-
var
|
|
868
|
+
var React22 = __toESM(require("react"));
|
|
869
|
+
var import_i18n5 = require("@wordpress/i18n");
|
|
870
|
+
var import_ui16 = require("@elementor/ui");
|
|
738
871
|
var FontSizeControl = () => {
|
|
739
|
-
return /* @__PURE__ */
|
|
872
|
+
return /* @__PURE__ */ React22.createElement(StyleControl, { bind: "font-size" }, /* @__PURE__ */ React22.createElement(import_ui16.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React22.createElement(import_ui16.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React22.createElement(StyleControl.Label, null, (0, import_i18n5.__)("Font Size", "elementor"))), /* @__PURE__ */ React22.createElement(import_ui16.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React22.createElement(SizeControl, null))));
|
|
740
873
|
};
|
|
741
874
|
|
|
742
875
|
// src/components/style-sections/typography-section/font-weight-control.tsx
|
|
743
|
-
var
|
|
744
|
-
var
|
|
876
|
+
var React23 = __toESM(require("react"));
|
|
877
|
+
var import_i18n6 = require("@wordpress/i18n");
|
|
878
|
+
var import_ui17 = require("@elementor/ui");
|
|
745
879
|
var fontWeightOptions = [
|
|
746
|
-
{ label: (0,
|
|
747
|
-
{ label: (0,
|
|
748
|
-
{ label: (0,
|
|
749
|
-
{ label: (0,
|
|
750
|
-
{ label: (0,
|
|
880
|
+
{ label: (0, import_i18n6.__)("Light - 400", "elementor"), value: "400" },
|
|
881
|
+
{ label: (0, import_i18n6.__)("Regular - 500", "elementor"), value: "500" },
|
|
882
|
+
{ label: (0, import_i18n6.__)("Semi Bold - 600", "elementor"), value: "600" },
|
|
883
|
+
{ label: (0, import_i18n6.__)("Bold - 700", "elementor"), value: "700" },
|
|
884
|
+
{ label: (0, import_i18n6.__)("Black - 900", "elementor"), value: "900" }
|
|
751
885
|
];
|
|
752
886
|
var FontWeightControl = () => {
|
|
753
|
-
return /* @__PURE__ */
|
|
887
|
+
return /* @__PURE__ */ React23.createElement(StyleControl, { bind: "font-weight" }, /* @__PURE__ */ React23.createElement(import_ui17.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React23.createElement(import_ui17.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React23.createElement(StyleControl.Label, null, (0, import_i18n6.__)("Font Weight", "elementor"))), /* @__PURE__ */ React23.createElement(import_ui17.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React23.createElement(SelectControl, { options: fontWeightOptions }))));
|
|
754
888
|
};
|
|
755
889
|
|
|
756
890
|
// src/components/style-sections/typography-section/text-color-control.tsx
|
|
757
|
-
var
|
|
758
|
-
var
|
|
891
|
+
var React25 = __toESM(require("react"));
|
|
892
|
+
var import_i18n7 = require("@wordpress/i18n");
|
|
893
|
+
var import_ui19 = require("@elementor/ui");
|
|
759
894
|
|
|
760
895
|
// src/controls/control-types/color-control.tsx
|
|
761
|
-
var
|
|
762
|
-
var
|
|
763
|
-
var ColorControl = (
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
};
|
|
776
|
-
};
|
|
896
|
+
var React24 = __toESM(require("react"));
|
|
897
|
+
var import_ui18 = require("@elementor/ui");
|
|
898
|
+
var ColorControl = createControl(
|
|
899
|
+
(props) => {
|
|
900
|
+
const { value, setValue } = useControl();
|
|
901
|
+
const handleChange = (selectedColor) => {
|
|
902
|
+
setValue({
|
|
903
|
+
$$type: "color",
|
|
904
|
+
value: selectedColor
|
|
905
|
+
});
|
|
906
|
+
};
|
|
907
|
+
return /* @__PURE__ */ React24.createElement(ControlActions, null, /* @__PURE__ */ React24.createElement(import_ui18.UnstableColorPicker, { size: "tiny", ...props, value: value?.value, onChange: handleChange }));
|
|
908
|
+
}
|
|
909
|
+
);
|
|
777
910
|
|
|
778
911
|
// src/components/style-sections/typography-section/text-color-control.tsx
|
|
779
912
|
var TextColorControl = () => {
|
|
780
|
-
return /* @__PURE__ */
|
|
913
|
+
return /* @__PURE__ */ React25.createElement(StyleControl, { bind: "color" }, /* @__PURE__ */ React25.createElement(import_ui19.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React25.createElement(import_ui19.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React25.createElement(StyleControl.Label, null, (0, import_i18n7.__)("Text Color", "elementor"))), /* @__PURE__ */ React25.createElement(import_ui19.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React25.createElement(ColorControl, null))));
|
|
781
914
|
};
|
|
782
915
|
|
|
783
916
|
// src/components/style-sections/typography-section/letter-spacing-control.tsx
|
|
784
|
-
var
|
|
785
|
-
var
|
|
917
|
+
var React26 = __toESM(require("react"));
|
|
918
|
+
var import_i18n8 = require("@wordpress/i18n");
|
|
919
|
+
var import_ui20 = require("@elementor/ui");
|
|
786
920
|
var LetterSpacingControl = () => {
|
|
787
|
-
return /* @__PURE__ */
|
|
921
|
+
return /* @__PURE__ */ React26.createElement(StyleControl, { bind: "letter-spacing" }, /* @__PURE__ */ React26.createElement(import_ui20.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React26.createElement(import_ui20.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React26.createElement(StyleControl.Label, null, (0, import_i18n8.__)("Letter Spacing", "elementor"))), /* @__PURE__ */ React26.createElement(import_ui20.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React26.createElement(SizeControl, null))));
|
|
788
922
|
};
|
|
789
923
|
|
|
790
924
|
// src/components/style-sections/typography-section/word-spacing-control.tsx
|
|
791
|
-
var
|
|
792
|
-
var
|
|
925
|
+
var React27 = __toESM(require("react"));
|
|
926
|
+
var import_i18n9 = require("@wordpress/i18n");
|
|
927
|
+
var import_ui21 = require("@elementor/ui");
|
|
793
928
|
var WordSpacingControl = () => {
|
|
794
|
-
return /* @__PURE__ */
|
|
929
|
+
return /* @__PURE__ */ React27.createElement(StyleControl, { bind: "word-spacing" }, /* @__PURE__ */ React27.createElement(import_ui21.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React27.createElement(import_ui21.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React27.createElement(StyleControl.Label, null, (0, import_i18n9.__)("Word Spacing", "elementor"))), /* @__PURE__ */ React27.createElement(import_ui21.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React27.createElement(SizeControl, null))));
|
|
795
930
|
};
|
|
796
931
|
|
|
797
932
|
// src/components/collapsible-content.tsx
|
|
798
|
-
var
|
|
799
|
-
var
|
|
800
|
-
var
|
|
801
|
-
var
|
|
802
|
-
var
|
|
933
|
+
var React28 = __toESM(require("react"));
|
|
934
|
+
var import_react8 = require("react");
|
|
935
|
+
var import_icons4 = require("@elementor/icons");
|
|
936
|
+
var import_ui22 = require("@elementor/ui");
|
|
937
|
+
var import_i18n10 = require("@wordpress/i18n");
|
|
803
938
|
var CollapsibleContent = ({ children, defaultOpen = false }) => {
|
|
804
|
-
const [open, setOpen] = (0,
|
|
939
|
+
const [open, setOpen] = (0, import_react8.useState)(defaultOpen);
|
|
805
940
|
const handleToggle = () => {
|
|
806
941
|
setOpen((prevOpen) => !prevOpen);
|
|
807
942
|
};
|
|
808
|
-
return /* @__PURE__ */
|
|
809
|
-
|
|
943
|
+
return /* @__PURE__ */ React28.createElement(import_ui22.Stack, { sx: { py: 0.5 } }, /* @__PURE__ */ React28.createElement(
|
|
944
|
+
import_ui22.Button,
|
|
810
945
|
{
|
|
811
946
|
fullWidth: true,
|
|
812
947
|
size: "small",
|
|
813
948
|
color: "secondary",
|
|
814
949
|
variant: "outlined",
|
|
815
950
|
onClick: handleToggle,
|
|
816
|
-
endIcon: /* @__PURE__ */
|
|
951
|
+
endIcon: /* @__PURE__ */ React28.createElement(ChevronIcon, { open })
|
|
817
952
|
},
|
|
818
|
-
open ? (0,
|
|
819
|
-
), /* @__PURE__ */
|
|
953
|
+
open ? (0, import_i18n10.__)("Show less", "elementor") : (0, import_i18n10.__)("Show more", "elementor")
|
|
954
|
+
), /* @__PURE__ */ React28.createElement(import_ui22.Collapse, { in: open, timeout: "auto" }, children));
|
|
820
955
|
};
|
|
821
|
-
var ChevronIcon = (0,
|
|
956
|
+
var ChevronIcon = (0, import_ui22.styled)(import_icons4.ChevronDownIcon, {
|
|
822
957
|
shouldForwardProp: (prop) => prop !== "open"
|
|
823
958
|
})(({ theme, open }) => ({
|
|
824
959
|
transform: open ? "rotate(180deg)" : "rotate(0)",
|
|
@@ -828,16 +963,18 @@ var ChevronIcon = (0, import_ui14.styled)(import_icons3.ChevronDownIcon, {
|
|
|
828
963
|
}));
|
|
829
964
|
|
|
830
965
|
// src/components/style-sections/typography-section/transform-control.tsx
|
|
831
|
-
var
|
|
832
|
-
var
|
|
966
|
+
var React31 = __toESM(require("react"));
|
|
967
|
+
var import_i18n11 = require("@wordpress/i18n");
|
|
968
|
+
var import_ui24 = require("@elementor/ui");
|
|
969
|
+
var import_icons5 = require("@elementor/icons");
|
|
833
970
|
|
|
834
971
|
// src/controls/control-types/toggle-control.tsx
|
|
835
|
-
var
|
|
972
|
+
var React30 = __toESM(require("react"));
|
|
836
973
|
|
|
837
974
|
// src/controls/components/control-toggle-button-group.tsx
|
|
838
|
-
var
|
|
839
|
-
var
|
|
840
|
-
var StyledToggleButtonGroup = (0,
|
|
975
|
+
var React29 = __toESM(require("react"));
|
|
976
|
+
var import_ui23 = require("@elementor/ui");
|
|
977
|
+
var StyledToggleButtonGroup = (0, import_ui23.styled)(import_ui23.ToggleButtonGroup)`
|
|
841
978
|
${({ justify }) => `justify-content: ${justify};`}
|
|
842
979
|
`;
|
|
843
980
|
var ControlToggleButtonGroup = ({
|
|
@@ -851,62 +988,112 @@ var ControlToggleButtonGroup = ({
|
|
|
851
988
|
const handleChange = (_, newValue) => {
|
|
852
989
|
onChange(newValue);
|
|
853
990
|
};
|
|
854
|
-
return /* @__PURE__ */
|
|
991
|
+
return /* @__PURE__ */ React29.createElement(StyledToggleButtonGroup, { justify, value, onChange: handleChange, exclusive }, items.map(({ label, value: buttonValue, icon: Icon }) => /* @__PURE__ */ React29.createElement(import_ui23.ToggleButton, { key: buttonValue, value: buttonValue, "aria-label": label, size }, /* @__PURE__ */ React29.createElement(Icon, { fontSize: size }))));
|
|
855
992
|
};
|
|
856
993
|
|
|
857
994
|
// src/controls/control-types/toggle-control.tsx
|
|
858
|
-
var ToggleControl = ({ options:
|
|
995
|
+
var ToggleControl = createControl(({ options: options4 }) => {
|
|
859
996
|
const { value, setValue } = useControl();
|
|
860
997
|
const handleToggle = (option) => {
|
|
861
998
|
setValue(option || void 0);
|
|
862
999
|
};
|
|
863
|
-
return /* @__PURE__ */
|
|
1000
|
+
return /* @__PURE__ */ React30.createElement(
|
|
864
1001
|
ControlToggleButtonGroup,
|
|
865
1002
|
{
|
|
866
|
-
items:
|
|
1003
|
+
items: options4,
|
|
867
1004
|
value: value || null,
|
|
868
1005
|
onChange: handleToggle,
|
|
869
1006
|
exclusive: true
|
|
870
1007
|
}
|
|
871
1008
|
);
|
|
872
|
-
};
|
|
1009
|
+
});
|
|
873
1010
|
|
|
874
1011
|
// src/components/style-sections/typography-section/transform-control.tsx
|
|
875
|
-
var import_icons4 = require("@elementor/icons");
|
|
876
1012
|
var options = [
|
|
877
|
-
{ value: "capitalize", label: (0,
|
|
878
|
-
{ value: "uppercase", label: (0,
|
|
879
|
-
{ value: "lowercase", label: (0,
|
|
1013
|
+
{ value: "capitalize", label: (0, import_i18n11.__)("Capitalize", "elementor"), icon: import_icons5.LetterCaseIcon },
|
|
1014
|
+
{ value: "uppercase", label: (0, import_i18n11.__)("Uppercase", "elementor"), icon: import_icons5.LetterCaseUpperIcon },
|
|
1015
|
+
{ value: "lowercase", label: (0, import_i18n11.__)("Lowercase", "elementor"), icon: import_icons5.LetterCaseLowerIcon }
|
|
1016
|
+
];
|
|
1017
|
+
var TransformControl = () => /* @__PURE__ */ React31.createElement(StyleControl, { bind: "text-transform" }, /* @__PURE__ */ React31.createElement(import_ui24.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React31.createElement(import_ui24.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React31.createElement(StyleControl.Label, null, (0, import_i18n11.__)("Transform", "elementor"))), /* @__PURE__ */ React31.createElement(import_ui24.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React31.createElement(ToggleControl, { options }))));
|
|
1018
|
+
|
|
1019
|
+
// src/components/style-sections/typography-section/text-alignment-control.tsx
|
|
1020
|
+
var React32 = __toESM(require("react"));
|
|
1021
|
+
var import_i18n12 = require("@wordpress/i18n");
|
|
1022
|
+
var import_ui25 = require("@elementor/ui");
|
|
1023
|
+
var import_icons6 = require("@elementor/icons");
|
|
1024
|
+
var options2 = [
|
|
1025
|
+
{
|
|
1026
|
+
value: "left",
|
|
1027
|
+
label: (0, import_i18n12.__)("Left", "elementor"),
|
|
1028
|
+
icon: import_icons6.AlignLeftIcon
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
value: "center",
|
|
1032
|
+
label: (0, import_i18n12.__)("Center", "elementor"),
|
|
1033
|
+
icon: import_icons6.AlignCenterIcon
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
value: "right",
|
|
1037
|
+
label: (0, import_i18n12.__)("Right", "elementor"),
|
|
1038
|
+
icon: import_icons6.AlignRightIcon
|
|
1039
|
+
},
|
|
1040
|
+
{
|
|
1041
|
+
value: "justify",
|
|
1042
|
+
label: (0, import_i18n12.__)("Justify", "elementor"),
|
|
1043
|
+
icon: import_icons6.AlignJustifiedIcon
|
|
1044
|
+
}
|
|
1045
|
+
];
|
|
1046
|
+
var TextAlignmentControl = () => {
|
|
1047
|
+
return /* @__PURE__ */ React32.createElement(StyleControl, { bind: "text-align" }, /* @__PURE__ */ React32.createElement(import_ui25.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React32.createElement(import_ui25.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React32.createElement(StyleControl.Label, null, (0, import_i18n12.__)("Alignment", "elementor"))), /* @__PURE__ */ React32.createElement(import_ui25.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React32.createElement(ToggleControl, { options: options2 }))));
|
|
1048
|
+
};
|
|
1049
|
+
|
|
1050
|
+
// src/components/style-sections/typography-section/text-direction-control.tsx
|
|
1051
|
+
var React33 = __toESM(require("react"));
|
|
1052
|
+
var import_i18n13 = require("@wordpress/i18n");
|
|
1053
|
+
var import_ui26 = require("@elementor/ui");
|
|
1054
|
+
var import_icons7 = require("@elementor/icons");
|
|
1055
|
+
var options3 = [
|
|
1056
|
+
{
|
|
1057
|
+
value: "ltr",
|
|
1058
|
+
label: (0, import_i18n13.__)("Left to Right", "elementor"),
|
|
1059
|
+
icon: import_icons7.TextDirectionLtrIcon
|
|
1060
|
+
},
|
|
1061
|
+
{
|
|
1062
|
+
value: "rtl",
|
|
1063
|
+
label: (0, import_i18n13.__)("Right to Left", "elementor"),
|
|
1064
|
+
icon: import_icons7.TextDirectionRtlIcon
|
|
1065
|
+
}
|
|
880
1066
|
];
|
|
881
|
-
var
|
|
882
|
-
return /* @__PURE__ */
|
|
1067
|
+
var TextDirectionControl = () => {
|
|
1068
|
+
return /* @__PURE__ */ React33.createElement(StyleControl, { bind: "direction" }, /* @__PURE__ */ React33.createElement(import_ui26.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React33.createElement(import_ui26.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React33.createElement(StyleControl.Label, null, (0, import_i18n13.__)("Direction", "elementor"))), /* @__PURE__ */ React33.createElement(import_ui26.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React33.createElement(ToggleControl, { options: options3 }))));
|
|
883
1069
|
};
|
|
884
1070
|
|
|
885
1071
|
// src/components/style-sections/typography-section/typography-section.tsx
|
|
886
1072
|
var TypographySection = () => {
|
|
887
|
-
return /* @__PURE__ */
|
|
1073
|
+
return /* @__PURE__ */ React34.createElement(AccordionSection, { title: (0, import_i18n14.__)("Typography", "elementor") }, /* @__PURE__ */ React34.createElement(import_ui27.Stack, { gap: 1.5 }, /* @__PURE__ */ React34.createElement(FontWeightControl, null), /* @__PURE__ */ React34.createElement(FontSizeControl, null), /* @__PURE__ */ React34.createElement(import_ui27.Divider, null), /* @__PURE__ */ React34.createElement(TextColorControl, null), /* @__PURE__ */ React34.createElement(CollapsibleContent, null, /* @__PURE__ */ React34.createElement(import_ui27.Stack, { gap: 1.5, sx: { pt: 1.5 } }, /* @__PURE__ */ React34.createElement(LetterSpacingControl, null), /* @__PURE__ */ React34.createElement(WordSpacingControl, null), /* @__PURE__ */ React34.createElement(import_ui27.Divider, null), /* @__PURE__ */ React34.createElement(TextAlignmentControl, null), /* @__PURE__ */ React34.createElement(TextStyleControl, null), /* @__PURE__ */ React34.createElement(TransformControl, null), /* @__PURE__ */ React34.createElement(TextDirectionControl, null)))));
|
|
888
1074
|
};
|
|
889
1075
|
|
|
890
1076
|
// src/components/style-sections/position-section/position-section.tsx
|
|
891
|
-
var
|
|
892
|
-
var
|
|
1077
|
+
var React37 = __toESM(require("react"));
|
|
1078
|
+
var import_ui30 = require("@elementor/ui");
|
|
893
1079
|
|
|
894
1080
|
// src/components/style-sections/position-section/z-index-control.tsx
|
|
895
|
-
var
|
|
896
|
-
var
|
|
1081
|
+
var React36 = __toESM(require("react"));
|
|
1082
|
+
var import_i18n15 = require("@wordpress/i18n");
|
|
1083
|
+
var import_ui29 = require("@elementor/ui");
|
|
897
1084
|
|
|
898
1085
|
// src/controls/control-types/number-control.tsx
|
|
899
|
-
var
|
|
900
|
-
var
|
|
1086
|
+
var React35 = __toESM(require("react"));
|
|
1087
|
+
var import_ui28 = require("@elementor/ui");
|
|
901
1088
|
var isEmptyOrNaN = (value) => value === void 0 || value === "" || Number.isNaN(Number(value));
|
|
902
|
-
var NumberControl = ({ placeholder }) => {
|
|
1089
|
+
var NumberControl = createControl(({ placeholder }) => {
|
|
903
1090
|
const { value, setValue } = useControl();
|
|
904
1091
|
const handleChange = (event) => {
|
|
905
1092
|
const eventValue = event.target.value;
|
|
906
1093
|
setValue(isEmptyOrNaN(eventValue) ? void 0 : Number(eventValue));
|
|
907
1094
|
};
|
|
908
|
-
return /* @__PURE__ */
|
|
909
|
-
|
|
1095
|
+
return /* @__PURE__ */ React35.createElement(ControlActions, null, /* @__PURE__ */ React35.createElement(
|
|
1096
|
+
import_ui28.TextField,
|
|
910
1097
|
{
|
|
911
1098
|
size: "tiny",
|
|
912
1099
|
type: "number",
|
|
@@ -914,33 +1101,33 @@ var NumberControl = ({ placeholder }) => {
|
|
|
914
1101
|
onChange: handleChange,
|
|
915
1102
|
placeholder
|
|
916
1103
|
}
|
|
917
|
-
);
|
|
918
|
-
};
|
|
1104
|
+
));
|
|
1105
|
+
});
|
|
919
1106
|
|
|
920
1107
|
// src/components/style-sections/position-section/z-index-control.tsx
|
|
921
1108
|
var ZIndexControl = () => {
|
|
922
|
-
return /* @__PURE__ */
|
|
1109
|
+
return /* @__PURE__ */ React36.createElement(StyleControl, { bind: "z-index" }, /* @__PURE__ */ React36.createElement(import_ui29.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React36.createElement(import_ui29.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React36.createElement(StyleControl.Label, null, (0, import_i18n15.__)("Z-Index", "elementor"))), /* @__PURE__ */ React36.createElement(import_ui29.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React36.createElement(NumberControl, null))));
|
|
923
1110
|
};
|
|
924
1111
|
|
|
925
1112
|
// src/components/style-sections/position-section/position-section.tsx
|
|
926
|
-
var
|
|
1113
|
+
var import_i18n16 = require("@wordpress/i18n");
|
|
927
1114
|
var PositionSection = () => {
|
|
928
|
-
return /* @__PURE__ */
|
|
1115
|
+
return /* @__PURE__ */ React37.createElement(AccordionSection, { title: (0, import_i18n16.__)("Position", "elementor") }, /* @__PURE__ */ React37.createElement(import_ui30.Stack, { gap: 1.5 }, /* @__PURE__ */ React37.createElement(ZIndexControl, null)));
|
|
929
1116
|
};
|
|
930
1117
|
|
|
931
1118
|
// src/components/style-sections/spacing-section/spacing-section.tsx
|
|
932
|
-
var
|
|
933
|
-
var
|
|
934
|
-
var
|
|
1119
|
+
var React39 = __toESM(require("react"));
|
|
1120
|
+
var import_ui32 = require("@elementor/ui");
|
|
1121
|
+
var import_i18n18 = require("@wordpress/i18n");
|
|
935
1122
|
|
|
936
1123
|
// src/components/style-sections/spacing-section/linked-dimensions-control.tsx
|
|
937
|
-
var
|
|
938
|
-
var
|
|
939
|
-
var
|
|
940
|
-
var
|
|
1124
|
+
var React38 = __toESM(require("react"));
|
|
1125
|
+
var import_i18n17 = require("@wordpress/i18n");
|
|
1126
|
+
var import_ui31 = require("@elementor/ui");
|
|
1127
|
+
var import_icons8 = require("@elementor/icons");
|
|
941
1128
|
var LinkedDimensionsControl = ({ label }) => {
|
|
942
1129
|
const { value, setValue } = useControl();
|
|
943
|
-
const { top, right, bottom, left, isLinked =
|
|
1130
|
+
const { top, right, bottom, left, isLinked = true } = value?.value || {};
|
|
944
1131
|
const setLinkedValue = (position, newValue) => {
|
|
945
1132
|
const updatedValue = {
|
|
946
1133
|
isLinked,
|
|
@@ -968,58 +1155,58 @@ var LinkedDimensionsControl = ({ label }) => {
|
|
|
968
1155
|
value: updatedValue
|
|
969
1156
|
});
|
|
970
1157
|
};
|
|
971
|
-
const LinkedIcon = isLinked ?
|
|
972
|
-
return /* @__PURE__ */
|
|
973
|
-
|
|
1158
|
+
const LinkedIcon = isLinked ? import_icons8.LinkIcon : import_icons8.DetachIcon;
|
|
1159
|
+
return /* @__PURE__ */ React38.createElement(React38.Fragment, null, /* @__PURE__ */ React38.createElement(import_ui31.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React38.createElement(ControlLabel, null, label), /* @__PURE__ */ React38.createElement(
|
|
1160
|
+
import_ui31.ToggleButton,
|
|
974
1161
|
{
|
|
975
|
-
"aria-label": (0,
|
|
1162
|
+
"aria-label": (0, import_i18n17.__)("Link Inputs", "elementor"),
|
|
976
1163
|
size: "tiny",
|
|
977
1164
|
value: "check",
|
|
978
1165
|
selected: isLinked,
|
|
979
1166
|
sx: { marginLeft: "auto" },
|
|
980
1167
|
onChange: toggleLinked
|
|
981
1168
|
},
|
|
982
|
-
/* @__PURE__ */
|
|
983
|
-
)), /* @__PURE__ */
|
|
1169
|
+
/* @__PURE__ */ React38.createElement(LinkedIcon, { fontSize: "tiny" })
|
|
1170
|
+
)), /* @__PURE__ */ React38.createElement(import_ui31.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React38.createElement(import_ui31.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React38.createElement(import_ui31.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React38.createElement(ControlLabel, null, (0, import_i18n17.__)("Top", "elementor"))), /* @__PURE__ */ React38.createElement(import_ui31.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React38.createElement(
|
|
984
1171
|
Control4,
|
|
985
1172
|
{
|
|
986
1173
|
bind: "top",
|
|
987
1174
|
value: top,
|
|
988
1175
|
setValue: setLinkedValue,
|
|
989
|
-
startIcon: /* @__PURE__ */
|
|
1176
|
+
startIcon: /* @__PURE__ */ React38.createElement(import_icons8.SideTopIcon, { fontSize: "tiny" })
|
|
990
1177
|
}
|
|
991
|
-
)), /* @__PURE__ */
|
|
1178
|
+
))), /* @__PURE__ */ React38.createElement(import_ui31.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React38.createElement(import_ui31.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React38.createElement(ControlLabel, null, (0, import_i18n17.__)("Right", "elementor"))), /* @__PURE__ */ React38.createElement(import_ui31.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React38.createElement(
|
|
992
1179
|
Control4,
|
|
993
1180
|
{
|
|
994
1181
|
bind: "right",
|
|
995
1182
|
value: right,
|
|
996
1183
|
setValue: setLinkedValue,
|
|
997
|
-
startIcon: /* @__PURE__ */
|
|
1184
|
+
startIcon: /* @__PURE__ */ React38.createElement(import_icons8.SideRightIcon, { fontSize: "tiny" })
|
|
998
1185
|
}
|
|
999
|
-
))), /* @__PURE__ */
|
|
1186
|
+
)))), /* @__PURE__ */ React38.createElement(import_ui31.Stack, { direction: "row", gap: 2 }, /* @__PURE__ */ React38.createElement(import_ui31.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React38.createElement(import_ui31.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React38.createElement(ControlLabel, null, (0, import_i18n17.__)("Bottom", "elementor"))), /* @__PURE__ */ React38.createElement(import_ui31.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React38.createElement(
|
|
1000
1187
|
Control4,
|
|
1001
1188
|
{
|
|
1002
1189
|
bind: "bottom",
|
|
1003
1190
|
value: bottom,
|
|
1004
1191
|
setValue: setLinkedValue,
|
|
1005
|
-
startIcon: /* @__PURE__ */
|
|
1192
|
+
startIcon: /* @__PURE__ */ React38.createElement(import_icons8.SideBottomIcon, { fontSize: "tiny" })
|
|
1006
1193
|
}
|
|
1007
|
-
)), /* @__PURE__ */
|
|
1194
|
+
))), /* @__PURE__ */ React38.createElement(import_ui31.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React38.createElement(import_ui31.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React38.createElement(ControlLabel, null, (0, import_i18n17.__)("Left", "elementor"))), /* @__PURE__ */ React38.createElement(import_ui31.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React38.createElement(
|
|
1008
1195
|
Control4,
|
|
1009
1196
|
{
|
|
1010
1197
|
bind: "left",
|
|
1011
1198
|
value: left,
|
|
1012
1199
|
setValue: setLinkedValue,
|
|
1013
|
-
startIcon: /* @__PURE__ */
|
|
1200
|
+
startIcon: /* @__PURE__ */ React38.createElement(import_icons8.SideLeftIcon, { fontSize: "tiny" })
|
|
1014
1201
|
}
|
|
1015
|
-
))));
|
|
1202
|
+
)))));
|
|
1016
1203
|
};
|
|
1017
1204
|
var Control4 = ({
|
|
1018
1205
|
bind,
|
|
1019
1206
|
startIcon,
|
|
1020
1207
|
value,
|
|
1021
1208
|
setValue
|
|
1022
|
-
}) => /* @__PURE__ */
|
|
1209
|
+
}) => /* @__PURE__ */ React38.createElement(
|
|
1023
1210
|
ControlContext.Provider,
|
|
1024
1211
|
{
|
|
1025
1212
|
value: {
|
|
@@ -1028,12 +1215,314 @@ var Control4 = ({
|
|
|
1028
1215
|
value
|
|
1029
1216
|
}
|
|
1030
1217
|
},
|
|
1031
|
-
/* @__PURE__ */
|
|
1218
|
+
/* @__PURE__ */ React38.createElement(SizeControl, { startIcon })
|
|
1032
1219
|
);
|
|
1033
1220
|
|
|
1034
1221
|
// src/components/style-sections/spacing-section/spacing-section.tsx
|
|
1035
1222
|
var SpacingSection = () => {
|
|
1036
|
-
return /* @__PURE__ */
|
|
1223
|
+
return /* @__PURE__ */ React39.createElement(AccordionSection, { title: (0, import_i18n18.__)("Spacing", "elementor") }, /* @__PURE__ */ React39.createElement(import_ui32.Stack, { gap: 1.5 }, /* @__PURE__ */ React39.createElement(StyleControl, { bind: "padding" }, /* @__PURE__ */ React39.createElement(LinkedDimensionsControl, { label: (0, import_i18n18.__)("Padding", "elementor") })), /* @__PURE__ */ React39.createElement(import_ui32.Divider, null), /* @__PURE__ */ React39.createElement(StyleControl, { bind: "margin" }, /* @__PURE__ */ React39.createElement(LinkedDimensionsControl, { label: (0, import_i18n18.__)("Margin", "elementor") }))));
|
|
1224
|
+
};
|
|
1225
|
+
|
|
1226
|
+
// src/components/style-sections/effects-section/effects-section.tsx
|
|
1227
|
+
var React42 = __toESM(require("react"));
|
|
1228
|
+
var import_i18n21 = require("@wordpress/i18n");
|
|
1229
|
+
var import_ui35 = require("@elementor/ui");
|
|
1230
|
+
|
|
1231
|
+
// src/components/style-sections/effects-section/box-shadow-repeater.tsx
|
|
1232
|
+
var React41 = __toESM(require("react"));
|
|
1233
|
+
var import_i18n20 = require("@wordpress/i18n");
|
|
1234
|
+
var import_ui34 = require("@elementor/ui");
|
|
1235
|
+
|
|
1236
|
+
// src/controls/components/repeater.tsx
|
|
1237
|
+
var React40 = __toESM(require("react"));
|
|
1238
|
+
var import_react9 = require("react");
|
|
1239
|
+
var import_i18n19 = require("@wordpress/i18n");
|
|
1240
|
+
var import_icons9 = require("@elementor/icons");
|
|
1241
|
+
var import_ui33 = require("@elementor/ui");
|
|
1242
|
+
var SIZE2 = "tiny";
|
|
1243
|
+
var Repeater = ({
|
|
1244
|
+
label,
|
|
1245
|
+
itemSettings,
|
|
1246
|
+
values: repeaterValues = [],
|
|
1247
|
+
setValues: setRepeaterValues
|
|
1248
|
+
}) => {
|
|
1249
|
+
const addRepeaterItem = () => {
|
|
1250
|
+
const newItem = structuredClone(itemSettings.initialValues);
|
|
1251
|
+
setRepeaterValues([...repeaterValues, newItem]);
|
|
1252
|
+
};
|
|
1253
|
+
const duplicateRepeaterItem = (index) => {
|
|
1254
|
+
setRepeaterValues([
|
|
1255
|
+
...repeaterValues.slice(0, index),
|
|
1256
|
+
structuredClone(repeaterValues[index]),
|
|
1257
|
+
...repeaterValues.slice(index)
|
|
1258
|
+
]);
|
|
1259
|
+
};
|
|
1260
|
+
const removeRepeaterItem = (index) => {
|
|
1261
|
+
setRepeaterValues(repeaterValues.filter((_, i) => i !== index));
|
|
1262
|
+
};
|
|
1263
|
+
const toggleDisableRepeaterItem = (index) => {
|
|
1264
|
+
setRepeaterValues(
|
|
1265
|
+
repeaterValues.map((value, i) => {
|
|
1266
|
+
if (i === index) {
|
|
1267
|
+
const { disabled, ...rest } = value;
|
|
1268
|
+
return { ...rest, ...disabled ? {} : { disabled: true } };
|
|
1269
|
+
}
|
|
1270
|
+
return value;
|
|
1271
|
+
})
|
|
1272
|
+
);
|
|
1273
|
+
};
|
|
1274
|
+
return /* @__PURE__ */ React40.createElement(import_ui33.Stack, null, /* @__PURE__ */ React40.createElement(import_ui33.Stack, { direction: "row", justifyContent: "space-between", sx: { py: 0.5 } }, /* @__PURE__ */ React40.createElement(import_ui33.Typography, { component: "label", variant: "caption", color: "text.secondary" }, label), /* @__PURE__ */ React40.createElement(import_ui33.IconButton, { size: SIZE2, onClick: addRepeaterItem, "aria-label": (0, import_i18n19.__)("Add item", "elementor") }, /* @__PURE__ */ React40.createElement(import_icons9.PlusIcon, { fontSize: SIZE2 }))), /* @__PURE__ */ React40.createElement(import_ui33.Stack, { gap: 1 }, repeaterValues.map((value, index) => /* @__PURE__ */ React40.createElement(
|
|
1275
|
+
RepeaterItem,
|
|
1276
|
+
{
|
|
1277
|
+
key: index,
|
|
1278
|
+
disabled: value.disabled,
|
|
1279
|
+
label: /* @__PURE__ */ React40.createElement(itemSettings.Label, { value }),
|
|
1280
|
+
startIcon: /* @__PURE__ */ React40.createElement(itemSettings.Icon, { value }),
|
|
1281
|
+
removeItem: () => removeRepeaterItem(index),
|
|
1282
|
+
duplicateItem: () => duplicateRepeaterItem(index),
|
|
1283
|
+
toggleDisableItem: () => toggleDisableRepeaterItem(index)
|
|
1284
|
+
},
|
|
1285
|
+
(props) => /* @__PURE__ */ React40.createElement(
|
|
1286
|
+
itemSettings.Content,
|
|
1287
|
+
{
|
|
1288
|
+
...props,
|
|
1289
|
+
value,
|
|
1290
|
+
setValue: (newValue) => setRepeaterValues(
|
|
1291
|
+
repeaterValues.map((item, i) => i === index ? newValue : item)
|
|
1292
|
+
)
|
|
1293
|
+
}
|
|
1294
|
+
)
|
|
1295
|
+
))));
|
|
1296
|
+
};
|
|
1297
|
+
var RepeaterItem = ({
|
|
1298
|
+
label,
|
|
1299
|
+
disabled,
|
|
1300
|
+
startIcon,
|
|
1301
|
+
children,
|
|
1302
|
+
removeItem,
|
|
1303
|
+
duplicateItem,
|
|
1304
|
+
toggleDisableItem
|
|
1305
|
+
}) => {
|
|
1306
|
+
const popupId = (0, import_react9.useId)();
|
|
1307
|
+
const tagRef = (0, import_react9.useRef)(null);
|
|
1308
|
+
const [anchorEl, setAnchorEl] = (0, import_react9.useState)(null);
|
|
1309
|
+
const popoverState = (0, import_ui33.usePopupState)({ popupId, variant: "popover" });
|
|
1310
|
+
const popoverProps = (0, import_ui33.bindPopover)(popoverState);
|
|
1311
|
+
return /* @__PURE__ */ React40.createElement(React40.Fragment, null, /* @__PURE__ */ React40.createElement(
|
|
1312
|
+
import_ui33.UnstableTag,
|
|
1313
|
+
{
|
|
1314
|
+
ref: tagRef,
|
|
1315
|
+
label,
|
|
1316
|
+
showActionsOnHover: true,
|
|
1317
|
+
variant: "outlined",
|
|
1318
|
+
"aria-label": (0, import_i18n19.__)("Open item", "elementor"),
|
|
1319
|
+
...(0, import_ui33.bindTrigger)(popoverState),
|
|
1320
|
+
startIcon,
|
|
1321
|
+
actions: /* @__PURE__ */ React40.createElement(React40.Fragment, null, /* @__PURE__ */ React40.createElement(
|
|
1322
|
+
import_ui33.IconButton,
|
|
1323
|
+
{
|
|
1324
|
+
size: SIZE2,
|
|
1325
|
+
onClick: duplicateItem,
|
|
1326
|
+
"aria-label": (0, import_i18n19.__)("Duplicate item", "elementor")
|
|
1327
|
+
},
|
|
1328
|
+
/* @__PURE__ */ React40.createElement(import_icons9.CopyIcon, { fontSize: SIZE2 })
|
|
1329
|
+
), /* @__PURE__ */ React40.createElement(
|
|
1330
|
+
import_ui33.IconButton,
|
|
1331
|
+
{
|
|
1332
|
+
size: SIZE2,
|
|
1333
|
+
onClick: toggleDisableItem,
|
|
1334
|
+
"aria-label": disabled ? (0, import_i18n19.__)("Enable item", "elementor") : (0, import_i18n19.__)("Disable item", "elementor")
|
|
1335
|
+
},
|
|
1336
|
+
disabled ? /* @__PURE__ */ React40.createElement(import_icons9.EyeOffIcon, { fontSize: SIZE2 }) : /* @__PURE__ */ React40.createElement(import_icons9.EyeIcon, { fontSize: SIZE2 })
|
|
1337
|
+
), /* @__PURE__ */ React40.createElement(
|
|
1338
|
+
import_ui33.IconButton,
|
|
1339
|
+
{
|
|
1340
|
+
size: SIZE2,
|
|
1341
|
+
onClick: removeItem,
|
|
1342
|
+
"aria-label": (0, import_i18n19.__)("Remove item", "elementor")
|
|
1343
|
+
},
|
|
1344
|
+
/* @__PURE__ */ React40.createElement(import_icons9.XIcon, { fontSize: SIZE2 })
|
|
1345
|
+
))
|
|
1346
|
+
}
|
|
1347
|
+
), /* @__PURE__ */ React40.createElement(
|
|
1348
|
+
import_ui33.Popover,
|
|
1349
|
+
{
|
|
1350
|
+
disablePortal: true,
|
|
1351
|
+
slotProps: {
|
|
1352
|
+
paper: { ref: setAnchorEl, sx: { width: tagRef.current?.getBoundingClientRect().width } }
|
|
1353
|
+
},
|
|
1354
|
+
anchorOrigin: { vertical: "bottom", horizontal: "left" },
|
|
1355
|
+
...popoverProps
|
|
1356
|
+
},
|
|
1357
|
+
/* @__PURE__ */ React40.createElement(import_ui33.Box, { p: 2 }, children({ anchorEl }))
|
|
1358
|
+
));
|
|
1359
|
+
};
|
|
1360
|
+
|
|
1361
|
+
// src/components/style-sections/effects-section/box-shadow-repeater.tsx
|
|
1362
|
+
var BoxShadowRepeater = () => {
|
|
1363
|
+
const { value, setValue } = useControl();
|
|
1364
|
+
const boxShadowValues = value?.value;
|
|
1365
|
+
const setBoxShadow = (newValue) => {
|
|
1366
|
+
setValue({
|
|
1367
|
+
$$type: "box-shadow",
|
|
1368
|
+
value: newValue
|
|
1369
|
+
});
|
|
1370
|
+
};
|
|
1371
|
+
return /* @__PURE__ */ React41.createElement(
|
|
1372
|
+
Repeater,
|
|
1373
|
+
{
|
|
1374
|
+
values: boxShadowValues,
|
|
1375
|
+
setValues: setBoxShadow,
|
|
1376
|
+
label: (0, import_i18n20.__)("Box shadow", "elementor"),
|
|
1377
|
+
itemSettings: {
|
|
1378
|
+
Icon: ItemIcon,
|
|
1379
|
+
Label: ItemLabel,
|
|
1380
|
+
Content: ItemContent,
|
|
1381
|
+
initialValues: initialShadow
|
|
1382
|
+
}
|
|
1383
|
+
}
|
|
1384
|
+
);
|
|
1385
|
+
};
|
|
1386
|
+
var ItemIcon = ({ value }) => /* @__PURE__ */ React41.createElement(import_ui34.UnstableColorIndicator, { size: "inherit", component: "span", value: value.value.color.value });
|
|
1387
|
+
var ItemContent = ({
|
|
1388
|
+
anchorEl,
|
|
1389
|
+
value,
|
|
1390
|
+
setValue
|
|
1391
|
+
}) => {
|
|
1392
|
+
const setShadow = (newValue) => {
|
|
1393
|
+
setValue({
|
|
1394
|
+
$$type: "shadow",
|
|
1395
|
+
value: newValue
|
|
1396
|
+
});
|
|
1397
|
+
};
|
|
1398
|
+
return /* @__PURE__ */ React41.createElement(import_ui34.Stack, { gap: 1.5 }, /* @__PURE__ */ React41.createElement(import_ui34.Grid, { container: true, spacing: 1 }, /* @__PURE__ */ React41.createElement(
|
|
1399
|
+
Control5,
|
|
1400
|
+
{
|
|
1401
|
+
bind: "color",
|
|
1402
|
+
value: value.value.color,
|
|
1403
|
+
label: (0, import_i18n20.__)("Color", "elementor"),
|
|
1404
|
+
setValue: (v) => setShadow({ ...value.value, color: v })
|
|
1405
|
+
},
|
|
1406
|
+
/* @__PURE__ */ React41.createElement(
|
|
1407
|
+
ColorControl,
|
|
1408
|
+
{
|
|
1409
|
+
anchorEl,
|
|
1410
|
+
anchorOrigin: {
|
|
1411
|
+
vertical: "top",
|
|
1412
|
+
horizontal: "right"
|
|
1413
|
+
},
|
|
1414
|
+
transformOrigin: {
|
|
1415
|
+
vertical: "top",
|
|
1416
|
+
horizontal: -10
|
|
1417
|
+
}
|
|
1418
|
+
}
|
|
1419
|
+
)
|
|
1420
|
+
), /* @__PURE__ */ React41.createElement(
|
|
1421
|
+
Control5,
|
|
1422
|
+
{
|
|
1423
|
+
bind: "position",
|
|
1424
|
+
value: value.value.position,
|
|
1425
|
+
label: (0, import_i18n20.__)("Position", "elementor"),
|
|
1426
|
+
setValue: (v) => setShadow({ ...value.value, position: v })
|
|
1427
|
+
},
|
|
1428
|
+
/* @__PURE__ */ React41.createElement(
|
|
1429
|
+
SelectControl,
|
|
1430
|
+
{
|
|
1431
|
+
options: [
|
|
1432
|
+
{ label: "Inset", value: "inset" },
|
|
1433
|
+
{ label: "Outset", value: "outset" }
|
|
1434
|
+
]
|
|
1435
|
+
}
|
|
1436
|
+
)
|
|
1437
|
+
)), /* @__PURE__ */ React41.createElement(import_ui34.Grid, { container: true, spacing: 1 }, /* @__PURE__ */ React41.createElement(
|
|
1438
|
+
Control5,
|
|
1439
|
+
{
|
|
1440
|
+
bind: "hOffset",
|
|
1441
|
+
label: (0, import_i18n20.__)("Horizontal", "elementor"),
|
|
1442
|
+
value: value.value.hOffset,
|
|
1443
|
+
setValue: (v) => setShadow({ ...value.value, hOffset: v })
|
|
1444
|
+
},
|
|
1445
|
+
/* @__PURE__ */ React41.createElement(SizeControl, null)
|
|
1446
|
+
), /* @__PURE__ */ React41.createElement(
|
|
1447
|
+
Control5,
|
|
1448
|
+
{
|
|
1449
|
+
label: (0, import_i18n20.__)("Vertical", "elementor"),
|
|
1450
|
+
bind: "vOffset",
|
|
1451
|
+
value: value.value.vOffset,
|
|
1452
|
+
setValue: (v) => setShadow({ ...value.value, vOffset: v })
|
|
1453
|
+
},
|
|
1454
|
+
/* @__PURE__ */ React41.createElement(SizeControl, null)
|
|
1455
|
+
)), /* @__PURE__ */ React41.createElement(import_ui34.Grid, { container: true, spacing: 1 }, /* @__PURE__ */ React41.createElement(
|
|
1456
|
+
Control5,
|
|
1457
|
+
{
|
|
1458
|
+
bind: "blur",
|
|
1459
|
+
value: value.value.blur,
|
|
1460
|
+
label: (0, import_i18n20.__)("Blur", "elementor"),
|
|
1461
|
+
setValue: (v) => setShadow({ ...value.value, blur: v })
|
|
1462
|
+
},
|
|
1463
|
+
/* @__PURE__ */ React41.createElement(SizeControl, null)
|
|
1464
|
+
), /* @__PURE__ */ React41.createElement(
|
|
1465
|
+
Control5,
|
|
1466
|
+
{
|
|
1467
|
+
bind: "spread",
|
|
1468
|
+
label: (0, import_i18n20.__)("Spread", "elementor"),
|
|
1469
|
+
value: value.value.spread,
|
|
1470
|
+
setValue: (v) => setShadow({ ...value.value, spread: v })
|
|
1471
|
+
},
|
|
1472
|
+
/* @__PURE__ */ React41.createElement(SizeControl, null)
|
|
1473
|
+
)));
|
|
1474
|
+
};
|
|
1475
|
+
var Control5 = ({
|
|
1476
|
+
value,
|
|
1477
|
+
setValue,
|
|
1478
|
+
label,
|
|
1479
|
+
bind,
|
|
1480
|
+
children
|
|
1481
|
+
}) => /* @__PURE__ */ React41.createElement(ControlContext.Provider, { value: { value, setValue, bind } }, /* @__PURE__ */ React41.createElement(import_ui34.Grid, { item: true, xs: 6 }, /* @__PURE__ */ React41.createElement(import_ui34.Grid, { container: true, spacing: 1, alignItems: "center" }, /* @__PURE__ */ React41.createElement(import_ui34.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React41.createElement(ControlLabel, null, label)), /* @__PURE__ */ React41.createElement(import_ui34.Grid, { item: true, xs: 12 }, children))));
|
|
1482
|
+
var ItemLabel = ({ value }) => {
|
|
1483
|
+
const { position, hOffset, vOffset, blur, spread } = value.value;
|
|
1484
|
+
const { size: hOffsetSize, unit: hOffsetUnit } = hOffset.value;
|
|
1485
|
+
const { size: vOffsetSize, unit: vOffsetUnit } = vOffset.value;
|
|
1486
|
+
const { size: blurSize, unit: blurUnit } = blur.value;
|
|
1487
|
+
const { size: spreadSize, unit: spreadUnit } = spread.value;
|
|
1488
|
+
const sizes = [
|
|
1489
|
+
hOffsetSize + hOffsetUnit,
|
|
1490
|
+
vOffsetSize + vOffsetUnit,
|
|
1491
|
+
blurSize + blurUnit,
|
|
1492
|
+
spreadSize + spreadUnit
|
|
1493
|
+
].join(" ");
|
|
1494
|
+
return /* @__PURE__ */ React41.createElement("span", { style: { textTransform: "capitalize" } }, position, ": ", sizes);
|
|
1495
|
+
};
|
|
1496
|
+
var initialShadow = {
|
|
1497
|
+
$$type: "shadow",
|
|
1498
|
+
value: {
|
|
1499
|
+
hOffset: {
|
|
1500
|
+
$$type: "size",
|
|
1501
|
+
value: { unit: "px", size: 0 }
|
|
1502
|
+
},
|
|
1503
|
+
vOffset: {
|
|
1504
|
+
$$type: "size",
|
|
1505
|
+
value: { unit: "px", size: 0 }
|
|
1506
|
+
},
|
|
1507
|
+
blur: {
|
|
1508
|
+
$$type: "size",
|
|
1509
|
+
value: { unit: "px", size: 0 }
|
|
1510
|
+
},
|
|
1511
|
+
spread: {
|
|
1512
|
+
$$type: "size",
|
|
1513
|
+
value: { unit: "px", size: 0 }
|
|
1514
|
+
},
|
|
1515
|
+
color: {
|
|
1516
|
+
$$type: "color",
|
|
1517
|
+
value: "rgba(0, 0, 0, 0)"
|
|
1518
|
+
},
|
|
1519
|
+
position: "inset"
|
|
1520
|
+
}
|
|
1521
|
+
};
|
|
1522
|
+
|
|
1523
|
+
// src/components/style-sections/effects-section/effects-section.tsx
|
|
1524
|
+
var EffectsSection = () => {
|
|
1525
|
+
return /* @__PURE__ */ React42.createElement(AccordionSection, { title: (0, import_i18n21.__)("Effects", "elementor") }, /* @__PURE__ */ React42.createElement(import_ui35.Stack, { gap: 1.5 }, /* @__PURE__ */ React42.createElement(StyleControl, { bind: "box-shadow" }, /* @__PURE__ */ React42.createElement(BoxShadowRepeater, null))));
|
|
1037
1526
|
};
|
|
1038
1527
|
|
|
1039
1528
|
// src/components/style-tab.tsx
|
|
@@ -1041,11 +1530,13 @@ var CLASSES_PROP_KEY = "classes";
|
|
|
1041
1530
|
var StyleTab = () => {
|
|
1042
1531
|
const styleDefinition = useStyleDefinition();
|
|
1043
1532
|
const classesProp = useClassesProp();
|
|
1044
|
-
return /* @__PURE__ */
|
|
1533
|
+
return /* @__PURE__ */ React43.createElement(StyleContext, { selectedStyleDef: styleDefinition, selectedClassesProp: classesProp }, /* @__PURE__ */ React43.createElement(import_ui36.Stack, null, /* @__PURE__ */ React43.createElement(SizeSection, null), /* @__PURE__ */ React43.createElement(PositionSection, null), /* @__PURE__ */ React43.createElement(TypographySection, null), /* @__PURE__ */ React43.createElement(SpacingSection, null), /* @__PURE__ */ React43.createElement(EffectsSection, null)));
|
|
1045
1534
|
};
|
|
1046
1535
|
function useClassesProp() {
|
|
1047
1536
|
const { elementType } = useElementContext();
|
|
1048
|
-
const prop = Object.entries(elementType.propsSchema).find(
|
|
1537
|
+
const prop = Object.entries(elementType.propsSchema).find(
|
|
1538
|
+
([, propType]) => propType.kind === "array" && propType.key === CLASSES_PROP_KEY
|
|
1539
|
+
);
|
|
1049
1540
|
if (!prop) {
|
|
1050
1541
|
throw new Error("Element does not have a classes prop");
|
|
1051
1542
|
}
|
|
@@ -1059,8 +1550,8 @@ function useStyleDefinition() {
|
|
|
1059
1550
|
|
|
1060
1551
|
// src/components/editing-panel-tabs.tsx
|
|
1061
1552
|
var EditingPanelTabs = () => {
|
|
1062
|
-
const { getTabProps, getTabPanelProps, getTabsProps } = (0,
|
|
1063
|
-
return /* @__PURE__ */
|
|
1553
|
+
const { getTabProps, getTabPanelProps, getTabsProps } = (0, import_ui37.useTabs)("settings");
|
|
1554
|
+
return /* @__PURE__ */ React44.createElement(import_ui37.Stack, { direction: "column", sx: { width: "100%" } }, /* @__PURE__ */ React44.createElement(import_ui37.Tabs, { variant: "fullWidth", indicatorColor: "secondary", textColor: "inherit", ...getTabsProps() }, /* @__PURE__ */ React44.createElement(import_ui37.Tab, { label: (0, import_i18n22.__)("General", "elementor"), ...getTabProps("settings") }), /* @__PURE__ */ React44.createElement(import_ui37.Tab, { label: (0, import_i18n22.__)("Style", "elementor"), ...getTabProps("style") })), /* @__PURE__ */ React44.createElement(import_ui37.TabPanel, { ...getTabPanelProps("settings"), disablePadding: true }, /* @__PURE__ */ React44.createElement(SettingsTab, null)), /* @__PURE__ */ React44.createElement(import_ui37.TabPanel, { ...getTabPanelProps("style"), disablePadding: true }, /* @__PURE__ */ React44.createElement(StyleTab, null)));
|
|
1064
1555
|
};
|
|
1065
1556
|
|
|
1066
1557
|
// src/components/editing-panel.tsx
|
|
@@ -1071,8 +1562,8 @@ var EditingPanel = () => {
|
|
|
1071
1562
|
if (elements.length !== 1 || !elementType) {
|
|
1072
1563
|
return null;
|
|
1073
1564
|
}
|
|
1074
|
-
const panelTitle = (0,
|
|
1075
|
-
return /* @__PURE__ */
|
|
1565
|
+
const panelTitle = (0, import_i18n23.__)("Edit %s", "elementor").replace("%s", elementType.title);
|
|
1566
|
+
return /* @__PURE__ */ React45.createElement(import_editor_panels.Panel, null, /* @__PURE__ */ React45.createElement(import_editor_panels.PanelHeader, null, /* @__PURE__ */ React45.createElement(import_editor_panels.PanelHeaderTitle, null, panelTitle)), /* @__PURE__ */ React45.createElement(import_editor_panels.PanelBody, null, /* @__PURE__ */ React45.createElement(ElementContext, { element: selectedElement, elementType }, /* @__PURE__ */ React45.createElement(EditingPanelTabs, null))));
|
|
1076
1567
|
};
|
|
1077
1568
|
|
|
1078
1569
|
// src/panel.ts
|
|
@@ -1095,11 +1586,11 @@ var shouldUseV2Panel = () => {
|
|
|
1095
1586
|
};
|
|
1096
1587
|
|
|
1097
1588
|
// src/hooks/use-open-editor-panel.ts
|
|
1098
|
-
var
|
|
1589
|
+
var import_react10 = require("react");
|
|
1099
1590
|
var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
|
|
1100
1591
|
var useOpenEditorPanel = () => {
|
|
1101
1592
|
const { open } = usePanelActions();
|
|
1102
|
-
(0,
|
|
1593
|
+
(0, import_react10.useEffect)(() => {
|
|
1103
1594
|
return (0, import_editor_v1_adapters8.__privateListenTo)((0, import_editor_v1_adapters8.commandStartEvent)("panel/editor/open"), () => {
|
|
1104
1595
|
if (shouldUseV2Panel()) {
|
|
1105
1596
|
open();
|
|
@@ -1119,14 +1610,14 @@ var import_editor_panels3 = require("@elementor/editor-panels");
|
|
|
1119
1610
|
var import_editor_v1_adapters9 = require("@elementor/editor-v1-adapters");
|
|
1120
1611
|
|
|
1121
1612
|
// src/dynamics/components/dynamic-selection-control.tsx
|
|
1122
|
-
var
|
|
1123
|
-
var
|
|
1613
|
+
var React48 = __toESM(require("react"));
|
|
1614
|
+
var import_react14 = require("react");
|
|
1124
1615
|
|
|
1125
1616
|
// src/dynamics/dynamic-control.tsx
|
|
1126
|
-
var
|
|
1617
|
+
var React46 = __toESM(require("react"));
|
|
1127
1618
|
|
|
1128
1619
|
// src/dynamics/hooks/use-prop-dynamic-tags.ts
|
|
1129
|
-
var
|
|
1620
|
+
var import_react11 = require("react");
|
|
1130
1621
|
|
|
1131
1622
|
// src/dynamics/sync/get-elementor-config.ts
|
|
1132
1623
|
var getElementorConfig = () => {
|
|
@@ -1157,21 +1648,29 @@ var isTransformable = (value) => {
|
|
|
1157
1648
|
};
|
|
1158
1649
|
|
|
1159
1650
|
// src/dynamics/utils.ts
|
|
1160
|
-
var
|
|
1651
|
+
var DYNAMIC_PROP_TYPE_KEY = "dynamic";
|
|
1652
|
+
var isDynamicPropType = (prop) => prop.key === DYNAMIC_PROP_TYPE_KEY;
|
|
1653
|
+
var getDynamicPropType = (propType) => {
|
|
1654
|
+
const dynamicPropType = propType.kind === "union" && propType.prop_types[DYNAMIC_PROP_TYPE_KEY];
|
|
1655
|
+
return dynamicPropType && isDynamicPropType(dynamicPropType) ? dynamicPropType : null;
|
|
1656
|
+
};
|
|
1161
1657
|
var isDynamicPropValue = (prop) => {
|
|
1162
|
-
return isTransformable(prop) && prop.$$type ===
|
|
1658
|
+
return isTransformable(prop) && prop.$$type === DYNAMIC_PROP_TYPE_KEY;
|
|
1659
|
+
};
|
|
1660
|
+
var supportsDynamic = (propType) => {
|
|
1661
|
+
return !!getDynamicPropType(propType);
|
|
1163
1662
|
};
|
|
1164
1663
|
|
|
1165
1664
|
// src/dynamics/hooks/use-prop-dynamic-tags.ts
|
|
1166
1665
|
var usePropDynamicTags = (propName) => {
|
|
1167
1666
|
let categories = [];
|
|
1168
1667
|
const { elementType } = useElementContext();
|
|
1169
|
-
const
|
|
1170
|
-
if (
|
|
1171
|
-
const propDynamicType =
|
|
1668
|
+
const propType = elementType.propsSchema?.[propName];
|
|
1669
|
+
if (propType) {
|
|
1670
|
+
const propDynamicType = getDynamicPropType(propType);
|
|
1172
1671
|
categories = propDynamicType?.settings.categories || [];
|
|
1173
1672
|
}
|
|
1174
|
-
return (0,
|
|
1673
|
+
return (0, import_react11.useMemo)(() => getDynamicTagsByCategories(categories), [categories.join()]);
|
|
1175
1674
|
};
|
|
1176
1675
|
var getDynamicTagsByCategories = (categories) => {
|
|
1177
1676
|
const dynamicTags = getAtomicDynamicTags();
|
|
@@ -1185,10 +1684,10 @@ var getDynamicTagsByCategories = (categories) => {
|
|
|
1185
1684
|
};
|
|
1186
1685
|
|
|
1187
1686
|
// src/dynamics/hooks/use-dynamic-tag.ts
|
|
1188
|
-
var
|
|
1687
|
+
var import_react12 = require("react");
|
|
1189
1688
|
var useDynamicTag = (propName, tagName) => {
|
|
1190
1689
|
const dynamicTags = usePropDynamicTags(propName);
|
|
1191
|
-
return (0,
|
|
1690
|
+
return (0, import_react12.useMemo)(() => dynamicTags.find((tag) => tag.name === tagName) ?? null, [dynamicTags, tagName]);
|
|
1192
1691
|
};
|
|
1193
1692
|
|
|
1194
1693
|
// src/dynamics/dynamic-control.tsx
|
|
@@ -1199,7 +1698,7 @@ var DynamicControl = ({ bind, children }) => {
|
|
|
1199
1698
|
if (!dynamicTag) {
|
|
1200
1699
|
throw new Error(`Dynamic tag ${name} not found`);
|
|
1201
1700
|
}
|
|
1202
|
-
const defaultValue = dynamicTag.props_schema[bind]?.
|
|
1701
|
+
const defaultValue = dynamicTag.props_schema[bind]?.default;
|
|
1203
1702
|
const dynamicValue = settings?.[bind] ?? defaultValue;
|
|
1204
1703
|
const setDynamicValue = (newValue) => {
|
|
1205
1704
|
setValue({
|
|
@@ -1213,69 +1712,96 @@ var DynamicControl = ({ bind, children }) => {
|
|
|
1213
1712
|
}
|
|
1214
1713
|
});
|
|
1215
1714
|
};
|
|
1216
|
-
return /* @__PURE__ */
|
|
1715
|
+
return /* @__PURE__ */ React46.createElement(ControlContext.Provider, { value: { setValue: setDynamicValue, value: dynamicValue, bind } }, children);
|
|
1217
1716
|
};
|
|
1218
1717
|
|
|
1219
1718
|
// src/dynamics/components/dynamic-selection-control.tsx
|
|
1220
|
-
var
|
|
1719
|
+
var import_icons11 = require("@elementor/icons");
|
|
1221
1720
|
|
|
1222
1721
|
// src/dynamics/components/dynamic-selection.tsx
|
|
1223
|
-
var
|
|
1224
|
-
var
|
|
1225
|
-
var
|
|
1226
|
-
var
|
|
1227
|
-
var
|
|
1228
|
-
|
|
1722
|
+
var React47 = __toESM(require("react"));
|
|
1723
|
+
var import_react13 = require("react");
|
|
1724
|
+
var import_icons10 = require("@elementor/icons");
|
|
1725
|
+
var import_ui38 = require("@elementor/ui");
|
|
1726
|
+
var import_i18n24 = require("@wordpress/i18n");
|
|
1727
|
+
|
|
1728
|
+
// src/dynamics/hooks/use-prop-value-history.ts
|
|
1729
|
+
var PROPS_VALUES_HISTORY_KEY = "elementor/dynamic/non-dynamic-values-history";
|
|
1730
|
+
var usePropValueHistory = (path) => {
|
|
1731
|
+
const valuesHistory = getValues();
|
|
1732
|
+
const { element } = useElementContext();
|
|
1733
|
+
const key = `${element.id}-${path}`;
|
|
1734
|
+
const value = valuesHistory[key] ?? null;
|
|
1735
|
+
const setValue = (newValue) => {
|
|
1736
|
+
setValues({ ...valuesHistory, [key]: newValue });
|
|
1737
|
+
};
|
|
1738
|
+
return [value, setValue];
|
|
1739
|
+
};
|
|
1740
|
+
var getValues = () => {
|
|
1741
|
+
return JSON.parse(sessionStorage.getItem(PROPS_VALUES_HISTORY_KEY) || "{}");
|
|
1742
|
+
};
|
|
1743
|
+
var setValues = (values) => {
|
|
1744
|
+
sessionStorage.setItem(PROPS_VALUES_HISTORY_KEY, JSON.stringify(values));
|
|
1745
|
+
};
|
|
1746
|
+
|
|
1747
|
+
// src/dynamics/components/dynamic-selection.tsx
|
|
1748
|
+
var SIZE3 = "tiny";
|
|
1229
1749
|
var DynamicSelection = ({ onSelect }) => {
|
|
1230
|
-
const [searchValue, setSearchValue] = (0,
|
|
1750
|
+
const [searchValue, setSearchValue] = (0, import_react13.useState)("");
|
|
1231
1751
|
const { groups: dynamicGroups } = getAtomicDynamicTags() || {};
|
|
1232
|
-
const { bind, value:
|
|
1233
|
-
const
|
|
1752
|
+
const { bind, value: currentValue, setValue } = useControl();
|
|
1753
|
+
const [, updatePropValueHistory] = usePropValueHistory(bind);
|
|
1754
|
+
const isCurrentValueDynamic = isDynamicPropValue(currentValue);
|
|
1755
|
+
const options4 = useFilteredOptions(bind, searchValue);
|
|
1234
1756
|
const handleSearch = (event) => {
|
|
1235
1757
|
setSearchValue(event.target.value);
|
|
1236
1758
|
};
|
|
1237
|
-
|
|
1238
|
-
|
|
1759
|
+
const handleSetDynamicTag = (value) => {
|
|
1760
|
+
if (!isCurrentValueDynamic) {
|
|
1761
|
+
updatePropValueHistory(currentValue);
|
|
1762
|
+
}
|
|
1763
|
+
setValue({ $$type: "dynamic", value: { name: value, settings: {} } });
|
|
1764
|
+
onSelect?.();
|
|
1765
|
+
};
|
|
1766
|
+
return /* @__PURE__ */ React47.createElement(import_ui38.Stack, null, /* @__PURE__ */ React47.createElement(import_ui38.Box, { px: 1.5, pb: 1 }, /* @__PURE__ */ React47.createElement(
|
|
1767
|
+
import_ui38.TextField,
|
|
1239
1768
|
{
|
|
1240
1769
|
fullWidth: true,
|
|
1241
|
-
size:
|
|
1770
|
+
size: SIZE3,
|
|
1242
1771
|
value: searchValue,
|
|
1243
1772
|
onChange: handleSearch,
|
|
1244
|
-
placeholder: (0,
|
|
1773
|
+
placeholder: (0, import_i18n24.__)("Search dynamic tag", "elementor"),
|
|
1245
1774
|
InputProps: {
|
|
1246
|
-
startAdornment: /* @__PURE__ */
|
|
1775
|
+
startAdornment: /* @__PURE__ */ React47.createElement(import_ui38.InputAdornment, { position: "start" }, /* @__PURE__ */ React47.createElement(import_icons10.SearchIcon, { fontSize: SIZE3 }))
|
|
1247
1776
|
}
|
|
1248
1777
|
}
|
|
1249
|
-
)), /* @__PURE__ */
|
|
1250
|
-
const isSelected = value ===
|
|
1251
|
-
return /* @__PURE__ */
|
|
1252
|
-
|
|
1778
|
+
)), /* @__PURE__ */ React47.createElement(import_ui38.Divider, null), /* @__PURE__ */ React47.createElement(import_ui38.Box, { sx: { overflowY: "auto", height: 260, width: 220 } }, options4.length > 0 ? /* @__PURE__ */ React47.createElement(import_ui38.MenuList, { role: "listbox", tabIndex: 0 }, options4.map(([category, items], index) => /* @__PURE__ */ React47.createElement(import_react13.Fragment, { key: index }, /* @__PURE__ */ React47.createElement(import_ui38.ListSubheader, { sx: { typography: "caption", color: "text.tertiary" } }, dynamicGroups?.[category]?.title || category), items.map(({ value, label: tagLabel }) => {
|
|
1779
|
+
const isSelected = isCurrentValueDynamic && value === currentValue?.value?.name;
|
|
1780
|
+
return /* @__PURE__ */ React47.createElement(
|
|
1781
|
+
import_ui38.MenuItem,
|
|
1253
1782
|
{
|
|
1254
1783
|
key: value,
|
|
1255
1784
|
selected: isSelected,
|
|
1256
1785
|
autoFocus: isSelected,
|
|
1257
1786
|
sx: { typography: "caption" },
|
|
1258
|
-
onClick: () =>
|
|
1259
|
-
setValue({ $$type: "dynamic", value: { name: value } });
|
|
1260
|
-
onSelect?.();
|
|
1261
|
-
}
|
|
1787
|
+
onClick: () => handleSetDynamicTag(value)
|
|
1262
1788
|
},
|
|
1263
1789
|
tagLabel
|
|
1264
1790
|
);
|
|
1265
|
-
})))) : /* @__PURE__ */
|
|
1266
|
-
|
|
1791
|
+
})))) : /* @__PURE__ */ React47.createElement(import_ui38.Stack, { alignItems: "center", p: 2.5, gap: 1.5 }, /* @__PURE__ */ React47.createElement(import_icons10.PhotoIcon, { fontSize: "large" }), /* @__PURE__ */ React47.createElement(import_ui38.Typography, { align: "center", variant: "caption", color: "text.secondary" }, (0, import_i18n24.__)("Sorry, nothing matched", "elementor"), /* @__PURE__ */ React47.createElement("br", null), "\u201C", searchValue, "\u201D."), /* @__PURE__ */ React47.createElement(import_ui38.Typography, { align: "center", variant: "caption", color: "text.secondary" }, /* @__PURE__ */ React47.createElement(
|
|
1792
|
+
import_ui38.Link,
|
|
1267
1793
|
{
|
|
1268
1794
|
color: "secondary",
|
|
1269
1795
|
variant: "caption",
|
|
1270
1796
|
component: "button",
|
|
1271
1797
|
onClick: () => setSearchValue("")
|
|
1272
1798
|
},
|
|
1273
|
-
(0,
|
|
1274
|
-
), "\xA0", (0,
|
|
1799
|
+
(0, import_i18n24.__)("Clear the filters", "elementor")
|
|
1800
|
+
), "\xA0", (0, import_i18n24.__)("and try again.", "elementor")))));
|
|
1275
1801
|
};
|
|
1276
1802
|
var useFilteredOptions = (bind, searchValue) => {
|
|
1277
1803
|
const dynamicTags = usePropDynamicTags(bind);
|
|
1278
|
-
const
|
|
1804
|
+
const options4 = dynamicTags.reduce((categories, { name, label, group }) => {
|
|
1279
1805
|
const isVisible = label.toLowerCase().includes(searchValue.trim().toLowerCase());
|
|
1280
1806
|
if (!isVisible) {
|
|
1281
1807
|
return categories;
|
|
@@ -1286,107 +1812,130 @@ var useFilteredOptions = (bind, searchValue) => {
|
|
|
1286
1812
|
categories.get(group)?.push({ label, value: name });
|
|
1287
1813
|
return categories;
|
|
1288
1814
|
}, /* @__PURE__ */ new Map());
|
|
1289
|
-
return [...
|
|
1815
|
+
return [...options4];
|
|
1290
1816
|
};
|
|
1291
1817
|
|
|
1292
1818
|
// src/dynamics/components/dynamic-selection-control.tsx
|
|
1293
|
-
var
|
|
1294
|
-
var
|
|
1295
|
-
var
|
|
1819
|
+
var import_ui39 = require("@elementor/ui");
|
|
1820
|
+
var import_i18n25 = require("@wordpress/i18n");
|
|
1821
|
+
var SIZE4 = "tiny";
|
|
1296
1822
|
var DynamicSelectionControl = () => {
|
|
1297
1823
|
const { bind, value, setValue } = useControl();
|
|
1824
|
+
const [propValueFromHistory] = usePropValueHistory(bind);
|
|
1298
1825
|
const { name: tagName = "" } = value?.value || {};
|
|
1299
|
-
const selectionPopoverId = (0,
|
|
1300
|
-
const selectionPopoverState = (0,
|
|
1826
|
+
const selectionPopoverId = (0, import_react14.useId)();
|
|
1827
|
+
const selectionPopoverState = (0, import_ui39.usePopupState)({ variant: "popover", popupId: selectionPopoverId });
|
|
1301
1828
|
const dynamicTag = useDynamicTag(bind, tagName);
|
|
1302
1829
|
const removeDynamicTag = () => {
|
|
1303
|
-
setValue(null);
|
|
1830
|
+
setValue(propValueFromHistory ?? null);
|
|
1304
1831
|
};
|
|
1305
1832
|
if (!dynamicTag) {
|
|
1306
1833
|
throw new Error(`Dynamic tag ${tagName} not found`);
|
|
1307
1834
|
}
|
|
1308
|
-
return /* @__PURE__ */
|
|
1309
|
-
|
|
1835
|
+
return /* @__PURE__ */ React48.createElement(import_ui39.Box, null, /* @__PURE__ */ React48.createElement(
|
|
1836
|
+
import_ui39.UnstableTag,
|
|
1310
1837
|
{
|
|
1311
1838
|
fullWidth: true,
|
|
1312
1839
|
showActionsOnHover: true,
|
|
1313
1840
|
label: dynamicTag.label,
|
|
1314
|
-
startIcon: /* @__PURE__ */
|
|
1315
|
-
...(0,
|
|
1316
|
-
actions: /* @__PURE__ */
|
|
1317
|
-
|
|
1841
|
+
startIcon: /* @__PURE__ */ React48.createElement(import_icons11.DatabaseIcon, { fontSize: SIZE4 }),
|
|
1842
|
+
...(0, import_ui39.bindTrigger)(selectionPopoverState),
|
|
1843
|
+
actions: /* @__PURE__ */ React48.createElement(React48.Fragment, null, /* @__PURE__ */ React48.createElement(DynamicSettingsPopover, { dynamicTag }), /* @__PURE__ */ React48.createElement(
|
|
1844
|
+
import_ui39.IconButton,
|
|
1318
1845
|
{
|
|
1319
|
-
size:
|
|
1846
|
+
size: SIZE4,
|
|
1320
1847
|
onClick: removeDynamicTag,
|
|
1321
|
-
"aria-label": (0,
|
|
1848
|
+
"aria-label": (0, import_i18n25.__)("Remove dynamic value", "elementor")
|
|
1322
1849
|
},
|
|
1323
|
-
/* @__PURE__ */
|
|
1850
|
+
/* @__PURE__ */ React48.createElement(import_icons11.XIcon, { fontSize: SIZE4 })
|
|
1324
1851
|
))
|
|
1325
1852
|
}
|
|
1326
|
-
), /* @__PURE__ */
|
|
1327
|
-
|
|
1853
|
+
), /* @__PURE__ */ React48.createElement(
|
|
1854
|
+
import_ui39.Popover,
|
|
1328
1855
|
{
|
|
1329
1856
|
disablePortal: true,
|
|
1330
1857
|
disableScrollLock: true,
|
|
1331
1858
|
anchorOrigin: { vertical: "bottom", horizontal: "left" },
|
|
1332
|
-
...(0,
|
|
1859
|
+
...(0, import_ui39.bindPopover)(selectionPopoverState)
|
|
1333
1860
|
},
|
|
1334
|
-
/* @__PURE__ */
|
|
1861
|
+
/* @__PURE__ */ React48.createElement(import_ui39.Stack, null, /* @__PURE__ */ React48.createElement(import_ui39.Stack, { direction: "row", alignItems: "center", pl: 1.5, pr: 0.5, py: 1.5 }, /* @__PURE__ */ React48.createElement(import_icons11.DatabaseIcon, { fontSize: SIZE4, sx: { mr: 0.5 } }), /* @__PURE__ */ React48.createElement(import_ui39.Typography, { variant: "subtitle2" }, (0, import_i18n25.__)("Dynamic Tags", "elementor")), /* @__PURE__ */ React48.createElement(import_ui39.IconButton, { size: SIZE4, sx: { ml: "auto" }, onClick: selectionPopoverState.close }, /* @__PURE__ */ React48.createElement(import_icons11.XIcon, { fontSize: SIZE4 }))), /* @__PURE__ */ React48.createElement(DynamicSelection, { onSelect: selectionPopoverState.close }))
|
|
1335
1862
|
));
|
|
1336
1863
|
};
|
|
1337
1864
|
var DynamicSettingsPopover = ({ dynamicTag }) => {
|
|
1338
|
-
const popupId = (0,
|
|
1339
|
-
const settingsPopupState = (0,
|
|
1865
|
+
const popupId = (0, import_react14.useId)();
|
|
1866
|
+
const settingsPopupState = (0, import_ui39.usePopupState)({ variant: "popover", popupId });
|
|
1340
1867
|
const hasDynamicSettings = !!dynamicTag.atomic_controls.length;
|
|
1341
1868
|
if (!hasDynamicSettings) {
|
|
1342
1869
|
return null;
|
|
1343
1870
|
}
|
|
1344
|
-
return /* @__PURE__ */
|
|
1345
|
-
|
|
1871
|
+
return /* @__PURE__ */ React48.createElement(React48.Fragment, null, /* @__PURE__ */ React48.createElement(
|
|
1872
|
+
import_ui39.IconButton,
|
|
1346
1873
|
{
|
|
1347
|
-
size:
|
|
1348
|
-
...(0,
|
|
1349
|
-
"aria-label": (0,
|
|
1874
|
+
size: SIZE4,
|
|
1875
|
+
...(0, import_ui39.bindTrigger)(settingsPopupState),
|
|
1876
|
+
"aria-label": (0, import_i18n25.__)("Settings", "elementor")
|
|
1350
1877
|
},
|
|
1351
|
-
/* @__PURE__ */
|
|
1352
|
-
), /* @__PURE__ */
|
|
1353
|
-
|
|
1878
|
+
/* @__PURE__ */ React48.createElement(import_icons11.SettingsIcon, { fontSize: SIZE4 })
|
|
1879
|
+
), /* @__PURE__ */ React48.createElement(
|
|
1880
|
+
import_ui39.Popover,
|
|
1354
1881
|
{
|
|
1355
1882
|
disableScrollLock: true,
|
|
1356
1883
|
anchorOrigin: { vertical: "bottom", horizontal: "center" },
|
|
1357
|
-
...(0,
|
|
1884
|
+
...(0, import_ui39.bindPopover)(settingsPopupState)
|
|
1358
1885
|
},
|
|
1359
|
-
/* @__PURE__ */
|
|
1886
|
+
/* @__PURE__ */ React48.createElement(import_ui39.Paper, { component: import_ui39.Stack, sx: { minHeight: "300px", width: "220px" } }, /* @__PURE__ */ React48.createElement(import_ui39.Stack, { direction: "row", alignItems: "center", px: 1.5, pt: 2, pb: 1 }, /* @__PURE__ */ React48.createElement(import_icons11.DatabaseIcon, { fontSize: SIZE4, sx: { mr: 0.5 } }), /* @__PURE__ */ React48.createElement(import_ui39.Typography, { variant: "subtitle2" }, dynamicTag.label), /* @__PURE__ */ React48.createElement(import_ui39.IconButton, { sx: { ml: "auto" }, size: SIZE4, onClick: settingsPopupState.close }, /* @__PURE__ */ React48.createElement(import_icons11.XIcon, { fontSize: SIZE4 }))), /* @__PURE__ */ React48.createElement(DynamicSettings, { controls: dynamicTag.atomic_controls }))
|
|
1360
1887
|
));
|
|
1361
1888
|
};
|
|
1362
1889
|
var DynamicSettings = ({ controls }) => {
|
|
1363
1890
|
const tabs = controls.filter(({ type }) => type === "section");
|
|
1364
|
-
const { getTabsProps, getTabProps, getTabPanelProps } = (0,
|
|
1891
|
+
const { getTabsProps, getTabProps, getTabPanelProps } = (0, import_ui39.useTabs)(0);
|
|
1365
1892
|
if (!tabs.length) {
|
|
1366
1893
|
return null;
|
|
1367
1894
|
}
|
|
1368
|
-
return /* @__PURE__ */
|
|
1369
|
-
return /* @__PURE__ */
|
|
1895
|
+
return /* @__PURE__ */ React48.createElement(React48.Fragment, null, /* @__PURE__ */ React48.createElement(import_ui39.Tabs, { indicatorColor: "secondary", textColor: "secondary", ...getTabsProps() }, tabs.map(({ value }, index) => /* @__PURE__ */ React48.createElement(import_ui39.Tab, { key: index, label: value.label, sx: { px: 1, py: 0.5 }, ...getTabProps(index) }))), /* @__PURE__ */ React48.createElement(import_ui39.Divider, null), tabs.map(({ value }, index) => {
|
|
1896
|
+
return /* @__PURE__ */ React48.createElement(import_ui39.TabPanel, { key: index, sx: { flexGrow: 1 }, ...getTabPanelProps(index) }, /* @__PURE__ */ React48.createElement(import_ui39.Stack, { gap: 1, px: 2 }, value.items.map((item) => {
|
|
1370
1897
|
if (item.type === "control") {
|
|
1371
|
-
return /* @__PURE__ */
|
|
1898
|
+
return /* @__PURE__ */ React48.createElement(Control6, { key: item.value.bind, control: item.value });
|
|
1372
1899
|
}
|
|
1373
1900
|
return null;
|
|
1374
1901
|
})));
|
|
1375
1902
|
}));
|
|
1376
1903
|
};
|
|
1377
|
-
var
|
|
1904
|
+
var Control6 = ({ control }) => {
|
|
1378
1905
|
if (!getControlByType(control.type)) {
|
|
1379
1906
|
return null;
|
|
1380
1907
|
}
|
|
1381
|
-
return /* @__PURE__ */
|
|
1908
|
+
return /* @__PURE__ */ React48.createElement(DynamicControl, { bind: control.bind }, control.label ? /* @__PURE__ */ React48.createElement(ControlLabel, null, control.label) : null, /* @__PURE__ */ React48.createElement(Control, { type: control.type, props: control.props }));
|
|
1909
|
+
};
|
|
1910
|
+
|
|
1911
|
+
// src/dynamics/hooks/use-prop-dynamic-action.tsx
|
|
1912
|
+
var React49 = __toESM(require("react"));
|
|
1913
|
+
var import_icons12 = require("@elementor/icons");
|
|
1914
|
+
var import_i18n26 = require("@wordpress/i18n");
|
|
1915
|
+
var usePropDynamicAction = () => {
|
|
1916
|
+
const { bind } = useControl();
|
|
1917
|
+
const { elementType } = useElementContext();
|
|
1918
|
+
const propType = elementType.propsSchema[bind];
|
|
1919
|
+
const visible = !!propType && supportsDynamic(propType);
|
|
1920
|
+
return {
|
|
1921
|
+
visible,
|
|
1922
|
+
icon: import_icons12.DatabaseIcon,
|
|
1923
|
+
title: (0, import_i18n26.__)("Dynamic Tags", "elementor"),
|
|
1924
|
+
popoverContent: ({ closePopover }) => /* @__PURE__ */ React49.createElement(DynamicSelection, { onSelect: closePopover })
|
|
1925
|
+
};
|
|
1382
1926
|
};
|
|
1383
1927
|
|
|
1384
1928
|
// src/dynamics/init.ts
|
|
1929
|
+
var { registerPopoverAction } = controlActionsMenu;
|
|
1385
1930
|
var init = () => {
|
|
1386
1931
|
replaceControl({
|
|
1387
1932
|
component: DynamicSelectionControl,
|
|
1388
1933
|
condition: ({ value }) => isDynamicPropValue(value)
|
|
1389
1934
|
});
|
|
1935
|
+
registerPopoverAction({
|
|
1936
|
+
id: "dynamic-tags",
|
|
1937
|
+
useProps: usePropDynamicAction
|
|
1938
|
+
});
|
|
1390
1939
|
};
|
|
1391
1940
|
|
|
1392
1941
|
// src/init.ts
|
|
@@ -1410,6 +1959,7 @@ var blockV1Panel = () => {
|
|
|
1410
1959
|
init2();
|
|
1411
1960
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1412
1961
|
0 && (module.exports = {
|
|
1962
|
+
controlActionsMenu,
|
|
1413
1963
|
replaceControl,
|
|
1414
1964
|
useControl
|
|
1415
1965
|
});
|