@elementor/editor-components 3.35.0-461 → 3.35.0-463
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +131 -108
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +111 -88
- package/dist/index.mjs.map +1 -1
- package/package.json +22 -22
- package/src/components/components-tab/components-pro-notification.tsx +22 -0
- package/src/components/components-tab/components.tsx +3 -0
- package/src/utils/is-pro-user.ts +26 -0
package/dist/index.js
CHANGED
|
@@ -44,7 +44,7 @@ var import_editor_panels4 = require("@elementor/editor-panels");
|
|
|
44
44
|
var import_editor_styles_repository2 = require("@elementor/editor-styles-repository");
|
|
45
45
|
var import_editor_v1_adapters12 = require("@elementor/editor-v1-adapters");
|
|
46
46
|
var import_store80 = require("@elementor/store");
|
|
47
|
-
var
|
|
47
|
+
var import_i18n31 = require("@wordpress/i18n");
|
|
48
48
|
|
|
49
49
|
// src/component-instance-transformer.ts
|
|
50
50
|
var import_editor_canvas = require("@elementor/editor-canvas");
|
|
@@ -1690,8 +1690,8 @@ function getComponentName() {
|
|
|
1690
1690
|
}
|
|
1691
1691
|
|
|
1692
1692
|
// src/components/components-tab/components.tsx
|
|
1693
|
-
var
|
|
1694
|
-
var
|
|
1693
|
+
var React19 = __toESM(require("react"));
|
|
1694
|
+
var import_editor_ui9 = require("@elementor/editor-ui");
|
|
1695
1695
|
|
|
1696
1696
|
// src/hooks/use-components.ts
|
|
1697
1697
|
var import_store27 = require("@elementor/store");
|
|
@@ -1701,6 +1701,17 @@ var useComponents = () => {
|
|
|
1701
1701
|
return { components, isLoading };
|
|
1702
1702
|
};
|
|
1703
1703
|
|
|
1704
|
+
// src/utils/is-pro-user.ts
|
|
1705
|
+
function isProUser() {
|
|
1706
|
+
const extendedWindow = window;
|
|
1707
|
+
const hasPro = extendedWindow.elementor?.helpers?.hasPro?.() ?? false;
|
|
1708
|
+
if (!hasPro) {
|
|
1709
|
+
return false;
|
|
1710
|
+
}
|
|
1711
|
+
const isProActive = extendedWindow.elementorPro?.config?.isActive ?? false;
|
|
1712
|
+
return isProActive;
|
|
1713
|
+
}
|
|
1714
|
+
|
|
1704
1715
|
// src/components/components-tab/component-search.tsx
|
|
1705
1716
|
var React12 = __toESM(require("react"));
|
|
1706
1717
|
var import_icons8 = require("@elementor/icons");
|
|
@@ -2761,14 +2772,26 @@ var useFilteredComponents = () => {
|
|
|
2761
2772
|
};
|
|
2762
2773
|
};
|
|
2763
2774
|
|
|
2775
|
+
// src/components/components-tab/components-pro-notification.tsx
|
|
2776
|
+
var React18 = __toESM(require("react"));
|
|
2777
|
+
var import_editor_ui8 = require("@elementor/editor-ui");
|
|
2778
|
+
var import_ui16 = require("@elementor/ui");
|
|
2779
|
+
var import_i18n21 = require("@wordpress/i18n");
|
|
2780
|
+
function ComponentsProNotification() {
|
|
2781
|
+
return /* @__PURE__ */ React18.createElement(import_ui16.Box, { sx: { px: 2 } }, /* @__PURE__ */ React18.createElement(import_editor_ui8.InfoAlert, null, /* @__PURE__ */ React18.createElement(import_ui16.Typography, { variant: "caption", component: "span" }, /* @__PURE__ */ React18.createElement(import_ui16.Typography, { variant: "caption", component: "span", fontWeight: "bold" }, (0, import_i18n21.__)("Try Components for free:", "elementor")), " ", (0, import_i18n21.__)(
|
|
2782
|
+
"Soon Components will be part of the Pro subscription, but what you create now will remain on your site.",
|
|
2783
|
+
"elementor"
|
|
2784
|
+
))));
|
|
2785
|
+
}
|
|
2786
|
+
|
|
2764
2787
|
// src/components/components-tab/components.tsx
|
|
2765
2788
|
var ComponentsContent = () => {
|
|
2766
2789
|
const { components, isLoading } = useComponents();
|
|
2767
2790
|
const hasComponents = !isLoading && components.length > 0;
|
|
2768
|
-
return /* @__PURE__ */
|
|
2791
|
+
return /* @__PURE__ */ React19.createElement(React19.Fragment, null, hasComponents && /* @__PURE__ */ React19.createElement(ComponentSearch, null), hasComponents && !isProUser() && /* @__PURE__ */ React19.createElement(ComponentsProNotification, null), /* @__PURE__ */ React19.createElement(ComponentsList, null));
|
|
2769
2792
|
};
|
|
2770
2793
|
var Components = () => {
|
|
2771
|
-
return /* @__PURE__ */
|
|
2794
|
+
return /* @__PURE__ */ React19.createElement(import_editor_ui9.ThemeProvider, null, /* @__PURE__ */ React19.createElement(SearchProvider, { localStorageKey: "elementor-components-search" }, /* @__PURE__ */ React19.createElement(ComponentsContent, null)));
|
|
2772
2795
|
};
|
|
2773
2796
|
|
|
2774
2797
|
// src/components/consts.ts
|
|
@@ -2776,15 +2799,15 @@ var COMPONENT_DOCUMENT_TYPE = "elementor_component";
|
|
|
2776
2799
|
var OVERRIDABLE_PROP_REPLACEMENT_ID = "overridable-prop";
|
|
2777
2800
|
|
|
2778
2801
|
// src/components/create-component-form/create-component-form.tsx
|
|
2779
|
-
var
|
|
2802
|
+
var React20 = __toESM(require("react"));
|
|
2780
2803
|
var import_react11 = require("react");
|
|
2781
2804
|
var import_editor_elements10 = require("@elementor/editor-elements");
|
|
2782
2805
|
var import_editor_notifications3 = require("@elementor/editor-notifications");
|
|
2783
|
-
var
|
|
2806
|
+
var import_editor_ui10 = require("@elementor/editor-ui");
|
|
2784
2807
|
var import_icons11 = require("@elementor/icons");
|
|
2785
2808
|
var import_store47 = require("@elementor/store");
|
|
2786
|
-
var
|
|
2787
|
-
var
|
|
2809
|
+
var import_ui17 = require("@elementor/ui");
|
|
2810
|
+
var import_i18n23 = require("@wordpress/i18n");
|
|
2788
2811
|
|
|
2789
2812
|
// src/prevent-non-atomic-nesting.ts
|
|
2790
2813
|
var import_editor_canvas6 = require("@elementor/editor-canvas");
|
|
@@ -2792,10 +2815,10 @@ var import_editor_elements9 = require("@elementor/editor-elements");
|
|
|
2792
2815
|
var import_editor_notifications2 = require("@elementor/editor-notifications");
|
|
2793
2816
|
var import_editor_v1_adapters4 = require("@elementor/editor-v1-adapters");
|
|
2794
2817
|
var import_store43 = require("@elementor/store");
|
|
2795
|
-
var
|
|
2818
|
+
var import_i18n22 = require("@wordpress/i18n");
|
|
2796
2819
|
var NON_ATOMIC_ELEMENT_ALERT = {
|
|
2797
2820
|
type: "default",
|
|
2798
|
-
message: (0,
|
|
2821
|
+
message: (0, import_i18n22.__)("This widget isn't compatible with components. Use atomic elements instead.", "elementor"),
|
|
2799
2822
|
id: "non-atomic-element-blocked"
|
|
2800
2823
|
};
|
|
2801
2824
|
function initNonAtomicNestingPrevention() {
|
|
@@ -3015,7 +3038,7 @@ function CreateComponentForm() {
|
|
|
3015
3038
|
if (nonAtomicElements.length > 0) {
|
|
3016
3039
|
(0, import_editor_notifications3.notify)({
|
|
3017
3040
|
type: "default",
|
|
3018
|
-
message: (0,
|
|
3041
|
+
message: (0, import_i18n23.__)(
|
|
3019
3042
|
"Components require atomic elements only. Remove widgets to create this component.",
|
|
3020
3043
|
"elementor"
|
|
3021
3044
|
),
|
|
@@ -3054,12 +3077,12 @@ function CreateComponentForm() {
|
|
|
3054
3077
|
}
|
|
3055
3078
|
(0, import_editor_notifications3.notify)({
|
|
3056
3079
|
type: "success",
|
|
3057
|
-
message: (0,
|
|
3080
|
+
message: (0, import_i18n23.__)("Component created successfully.", "elementor"),
|
|
3058
3081
|
id: `component-saved-successfully-${uid}`
|
|
3059
3082
|
});
|
|
3060
3083
|
resetAndClosePopup();
|
|
3061
3084
|
} catch {
|
|
3062
|
-
const errorMessage = (0,
|
|
3085
|
+
const errorMessage = (0, import_i18n23.__)("Failed to create component. Please try again.", "elementor");
|
|
3063
3086
|
(0, import_editor_notifications3.notify)({
|
|
3064
3087
|
type: "error",
|
|
3065
3088
|
message: errorMessage,
|
|
@@ -3078,15 +3101,15 @@ function CreateComponentForm() {
|
|
|
3078
3101
|
...eventData.current
|
|
3079
3102
|
});
|
|
3080
3103
|
};
|
|
3081
|
-
return /* @__PURE__ */
|
|
3082
|
-
|
|
3104
|
+
return /* @__PURE__ */ React20.createElement(import_editor_ui10.ThemeProvider, null, /* @__PURE__ */ React20.createElement(
|
|
3105
|
+
import_ui17.Popover,
|
|
3083
3106
|
{
|
|
3084
3107
|
open: element !== null,
|
|
3085
3108
|
onClose: cancelSave,
|
|
3086
3109
|
anchorReference: "anchorPosition",
|
|
3087
3110
|
anchorPosition
|
|
3088
3111
|
},
|
|
3089
|
-
element !== null && /* @__PURE__ */
|
|
3112
|
+
element !== null && /* @__PURE__ */ React20.createElement(
|
|
3090
3113
|
Form2,
|
|
3091
3114
|
{
|
|
3092
3115
|
initialValues: { componentName: element.elementLabel },
|
|
@@ -3122,14 +3145,14 @@ var Form2 = ({
|
|
|
3122
3145
|
}
|
|
3123
3146
|
};
|
|
3124
3147
|
const texts = {
|
|
3125
|
-
heading: (0,
|
|
3126
|
-
name: (0,
|
|
3127
|
-
cancel: (0,
|
|
3128
|
-
create: (0,
|
|
3148
|
+
heading: (0, import_i18n23.__)("Create component", "elementor"),
|
|
3149
|
+
name: (0, import_i18n23.__)("Name", "elementor"),
|
|
3150
|
+
cancel: (0, import_i18n23.__)("Cancel", "elementor"),
|
|
3151
|
+
create: (0, import_i18n23.__)("Create", "elementor")
|
|
3129
3152
|
};
|
|
3130
3153
|
const nameInputId = "component-name";
|
|
3131
|
-
return /* @__PURE__ */
|
|
3132
|
-
|
|
3154
|
+
return /* @__PURE__ */ React20.createElement(import_editor_ui10.Form, { onSubmit: handleSubmit }, /* @__PURE__ */ React20.createElement(import_ui17.Stack, { alignItems: "start", width: "268px" }, /* @__PURE__ */ React20.createElement(
|
|
3155
|
+
import_ui17.Stack,
|
|
3133
3156
|
{
|
|
3134
3157
|
direction: "row",
|
|
3135
3158
|
alignItems: "center",
|
|
@@ -3137,10 +3160,10 @@ var Form2 = ({
|
|
|
3137
3160
|
px: 1.5,
|
|
3138
3161
|
sx: { columnGap: 0.5, borderBottom: "1px solid", borderColor: "divider", width: "100%" }
|
|
3139
3162
|
},
|
|
3140
|
-
/* @__PURE__ */
|
|
3141
|
-
/* @__PURE__ */
|
|
3142
|
-
), /* @__PURE__ */
|
|
3143
|
-
|
|
3163
|
+
/* @__PURE__ */ React20.createElement(import_icons11.ComponentsIcon, { fontSize: FONT_SIZE }),
|
|
3164
|
+
/* @__PURE__ */ React20.createElement(import_ui17.Typography, { variant: "caption", sx: { color: "text.primary", fontWeight: "500", lineHeight: 1 } }, texts.heading)
|
|
3165
|
+
), /* @__PURE__ */ React20.createElement(import_ui17.Grid, { container: true, gap: 0.75, alignItems: "start", p: 1.5 }, /* @__PURE__ */ React20.createElement(import_ui17.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React20.createElement(import_ui17.FormLabel, { htmlFor: nameInputId, size: "tiny" }, texts.name)), /* @__PURE__ */ React20.createElement(import_ui17.Grid, { item: true, xs: 12 }, /* @__PURE__ */ React20.createElement(
|
|
3166
|
+
import_ui17.TextField,
|
|
3144
3167
|
{
|
|
3145
3168
|
id: nameInputId,
|
|
3146
3169
|
size: FONT_SIZE,
|
|
@@ -3151,11 +3174,11 @@ var Form2 = ({
|
|
|
3151
3174
|
error: Boolean(errors.componentName),
|
|
3152
3175
|
helperText: errors.componentName
|
|
3153
3176
|
}
|
|
3154
|
-
))), /* @__PURE__ */
|
|
3177
|
+
))), /* @__PURE__ */ React20.createElement(import_ui17.Stack, { direction: "row", justifyContent: "flex-end", alignSelf: "end", py: 1, px: 1.5 }, /* @__PURE__ */ React20.createElement(import_ui17.Button, { onClick: closePopup, color: "secondary", variant: "text", size: "small" }, texts.cancel), /* @__PURE__ */ React20.createElement(import_ui17.Button, { type: "submit", disabled: !isValid, variant: "contained", color: "primary", size: "small" }, texts.create))));
|
|
3155
3178
|
};
|
|
3156
3179
|
|
|
3157
3180
|
// src/components/edit-component/edit-component.tsx
|
|
3158
|
-
var
|
|
3181
|
+
var React22 = __toESM(require("react"));
|
|
3159
3182
|
var import_react14 = require("react");
|
|
3160
3183
|
var import_editor_documents11 = require("@elementor/editor-documents");
|
|
3161
3184
|
var import_editor_v1_adapters7 = require("@elementor/editor-v1-adapters");
|
|
@@ -3178,10 +3201,10 @@ function updateCurrentComponent({
|
|
|
3178
3201
|
}
|
|
3179
3202
|
|
|
3180
3203
|
// src/components/edit-component/component-modal.tsx
|
|
3181
|
-
var
|
|
3204
|
+
var React21 = __toESM(require("react"));
|
|
3182
3205
|
var import_react13 = require("react");
|
|
3183
3206
|
var import_react_dom = require("react-dom");
|
|
3184
|
-
var
|
|
3207
|
+
var import_i18n24 = require("@wordpress/i18n");
|
|
3185
3208
|
|
|
3186
3209
|
// src/hooks/use-canvas-document.ts
|
|
3187
3210
|
var import_editor_v1_adapters6 = require("@elementor/editor-v1-adapters");
|
|
@@ -3270,7 +3293,7 @@ function ComponentModal({ element, onClose }) {
|
|
|
3270
3293
|
return null;
|
|
3271
3294
|
}
|
|
3272
3295
|
return (0, import_react_dom.createPortal)(
|
|
3273
|
-
/* @__PURE__ */
|
|
3296
|
+
/* @__PURE__ */ React21.createElement(React21.Fragment, null, /* @__PURE__ */ React21.createElement(BlockEditPage, null), /* @__PURE__ */ React21.createElement(Backdrop, { canvas: canvasDocument, element, onClose })),
|
|
3274
3297
|
canvasDocument.body
|
|
3275
3298
|
);
|
|
3276
3299
|
}
|
|
@@ -3294,7 +3317,7 @@ function Backdrop({ canvas, element, onClose }) {
|
|
|
3294
3317
|
onClose();
|
|
3295
3318
|
}
|
|
3296
3319
|
};
|
|
3297
|
-
return /* @__PURE__ */
|
|
3320
|
+
return /* @__PURE__ */ React21.createElement(
|
|
3298
3321
|
"div",
|
|
3299
3322
|
{
|
|
3300
3323
|
style: backdropStyle,
|
|
@@ -3302,7 +3325,7 @@ function Backdrop({ canvas, element, onClose }) {
|
|
|
3302
3325
|
onKeyDown: handleKeyDown,
|
|
3303
3326
|
role: "button",
|
|
3304
3327
|
tabIndex: 0,
|
|
3305
|
-
"aria-label": (0,
|
|
3328
|
+
"aria-label": (0, import_i18n24.__)("Exit component editing mode", "elementor")
|
|
3306
3329
|
}
|
|
3307
3330
|
);
|
|
3308
3331
|
}
|
|
@@ -3346,7 +3369,7 @@ function BlockEditPage() {
|
|
|
3346
3369
|
}
|
|
3347
3370
|
}
|
|
3348
3371
|
`;
|
|
3349
|
-
return /* @__PURE__ */
|
|
3372
|
+
return /* @__PURE__ */ React21.createElement("style", { "data-e-style-id": "e-block-v3-document-handles-styles" }, blockV3DocumentHandlesStyles);
|
|
3350
3373
|
}
|
|
3351
3374
|
|
|
3352
3375
|
// src/components/edit-component/edit-component.tsx
|
|
@@ -3359,7 +3382,7 @@ function EditComponent() {
|
|
|
3359
3382
|
if (!elementDom) {
|
|
3360
3383
|
return null;
|
|
3361
3384
|
}
|
|
3362
|
-
return /* @__PURE__ */
|
|
3385
|
+
return /* @__PURE__ */ React22.createElement(ComponentModal, { element: elementDom, onClose });
|
|
3363
3386
|
}
|
|
3364
3387
|
function useHandleDocumentSwitches() {
|
|
3365
3388
|
const documentsManager = (0, import_editor_documents11.getV1DocumentsManager)();
|
|
@@ -3429,34 +3452,34 @@ function getComponentDOMElement(id2) {
|
|
|
3429
3452
|
}
|
|
3430
3453
|
|
|
3431
3454
|
// src/components/in-edit-mode.tsx
|
|
3432
|
-
var
|
|
3433
|
-
var
|
|
3455
|
+
var React23 = __toESM(require("react"));
|
|
3456
|
+
var import_editor_ui11 = require("@elementor/editor-ui");
|
|
3434
3457
|
var import_icons12 = require("@elementor/icons");
|
|
3435
|
-
var
|
|
3436
|
-
var
|
|
3458
|
+
var import_ui18 = require("@elementor/ui");
|
|
3459
|
+
var import_i18n25 = require("@wordpress/i18n");
|
|
3437
3460
|
var openEditModeDialog = (lockedBy) => {
|
|
3438
|
-
(0,
|
|
3439
|
-
component: /* @__PURE__ */
|
|
3461
|
+
(0, import_editor_ui11.openDialog)({
|
|
3462
|
+
component: /* @__PURE__ */ React23.createElement(EditModeDialog, { lockedBy })
|
|
3440
3463
|
});
|
|
3441
3464
|
};
|
|
3442
3465
|
var EditModeDialog = ({ lockedBy }) => {
|
|
3443
|
-
const content = (0,
|
|
3444
|
-
return /* @__PURE__ */
|
|
3466
|
+
const content = (0, import_i18n25.__)("%s is currently editing this document", "elementor").replace("%s", lockedBy);
|
|
3467
|
+
return /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement(import_ui18.DialogHeader, { logo: false }, /* @__PURE__ */ React23.createElement(import_ui18.Box, { display: "flex", alignItems: "center", gap: 1 }, /* @__PURE__ */ React23.createElement(import_ui18.Icon, { color: "secondary" }, /* @__PURE__ */ React23.createElement(import_icons12.InfoCircleFilledIcon, { fontSize: "medium" })), /* @__PURE__ */ React23.createElement(import_ui18.Typography, { variant: "subtitle1" }, content))), /* @__PURE__ */ React23.createElement(import_ui18.DialogContent, null, /* @__PURE__ */ React23.createElement(import_ui18.Stack, { spacing: 2, direction: "column" }, /* @__PURE__ */ React23.createElement(import_ui18.Typography, { variant: "body2" }, (0, import_i18n25.__)(
|
|
3445
3468
|
"You can wait for them to finish or reach out to coordinate your changes together.",
|
|
3446
3469
|
"elementor"
|
|
3447
|
-
)), /* @__PURE__ */
|
|
3470
|
+
)), /* @__PURE__ */ React23.createElement(import_ui18.DialogActions, null, /* @__PURE__ */ React23.createElement(import_ui18.Button, { color: "secondary", variant: "contained", onClick: import_editor_ui11.closeDialog }, (0, import_i18n25.__)("Close", "elementor"))))));
|
|
3448
3471
|
};
|
|
3449
3472
|
|
|
3450
3473
|
// src/components/instance-editing-panel/instance-editing-panel.tsx
|
|
3451
|
-
var
|
|
3474
|
+
var React29 = __toESM(require("react"));
|
|
3452
3475
|
var import_editor_controls4 = require("@elementor/editor-controls");
|
|
3453
3476
|
var import_editor_editing_panel5 = require("@elementor/editor-editing-panel");
|
|
3454
3477
|
var import_editor_elements15 = require("@elementor/editor-elements");
|
|
3455
3478
|
var import_editor_panels3 = require("@elementor/editor-panels");
|
|
3456
|
-
var
|
|
3479
|
+
var import_editor_ui13 = require("@elementor/editor-ui");
|
|
3457
3480
|
var import_icons14 = require("@elementor/icons");
|
|
3458
|
-
var
|
|
3459
|
-
var
|
|
3481
|
+
var import_ui23 = require("@elementor/ui");
|
|
3482
|
+
var import_i18n27 = require("@wordpress/i18n");
|
|
3460
3483
|
|
|
3461
3484
|
// src/hooks/use-component-instance-settings.ts
|
|
3462
3485
|
var import_editor_editing_panel2 = require("@elementor/editor-editing-panel");
|
|
@@ -3522,21 +3545,21 @@ function useComponentInstanceSettings() {
|
|
|
3522
3545
|
}
|
|
3523
3546
|
|
|
3524
3547
|
// src/components/instance-editing-panel/empty-state.tsx
|
|
3525
|
-
var
|
|
3548
|
+
var React24 = __toESM(require("react"));
|
|
3526
3549
|
var import_icons13 = require("@elementor/icons");
|
|
3527
|
-
var
|
|
3528
|
-
var
|
|
3550
|
+
var import_ui19 = require("@elementor/ui");
|
|
3551
|
+
var import_i18n26 = require("@wordpress/i18n");
|
|
3529
3552
|
var EmptyState2 = ({ onEditComponent }) => {
|
|
3530
3553
|
const { canEdit } = useComponentsPermissions();
|
|
3531
|
-
const message = canEdit ? (0,
|
|
3554
|
+
const message = canEdit ? (0, import_i18n26.__)(
|
|
3532
3555
|
"Edit the component to add properties, manage them or update the design across all instances.",
|
|
3533
3556
|
"elementor"
|
|
3534
|
-
) : (0,
|
|
3557
|
+
) : (0, import_i18n26.__)(
|
|
3535
3558
|
"With your current role, you cannot edit this component. Contact an administrator to add properties.",
|
|
3536
3559
|
"elementor"
|
|
3537
3560
|
);
|
|
3538
|
-
return /* @__PURE__ */
|
|
3539
|
-
|
|
3561
|
+
return /* @__PURE__ */ React24.createElement(
|
|
3562
|
+
import_ui19.Stack,
|
|
3540
3563
|
{
|
|
3541
3564
|
alignItems: "center",
|
|
3542
3565
|
justifyContent: "start",
|
|
@@ -3545,26 +3568,26 @@ var EmptyState2 = ({ onEditComponent }) => {
|
|
|
3545
3568
|
sx: { p: 2.5, pt: 8, pb: 5.5, mt: 1 },
|
|
3546
3569
|
gap: 1.5
|
|
3547
3570
|
},
|
|
3548
|
-
/* @__PURE__ */
|
|
3549
|
-
/* @__PURE__ */
|
|
3550
|
-
/* @__PURE__ */
|
|
3551
|
-
canEdit && /* @__PURE__ */
|
|
3571
|
+
/* @__PURE__ */ React24.createElement(import_icons13.ComponentPropListIcon, { fontSize: "large" }),
|
|
3572
|
+
/* @__PURE__ */ React24.createElement(import_ui19.Typography, { align: "center", variant: "subtitle2" }, (0, import_i18n26.__)("No properties yet", "elementor")),
|
|
3573
|
+
/* @__PURE__ */ React24.createElement(import_ui19.Typography, { align: "center", variant: "caption", maxWidth: "170px" }, message),
|
|
3574
|
+
canEdit && /* @__PURE__ */ React24.createElement(import_ui19.Button, { variant: "outlined", color: "secondary", size: "small", sx: { mt: 1 }, onClick: onEditComponent }, /* @__PURE__ */ React24.createElement(import_icons13.PencilIcon, { fontSize: "small" }), (0, import_i18n26.__)("Edit component", "elementor"))
|
|
3552
3575
|
);
|
|
3553
3576
|
};
|
|
3554
3577
|
|
|
3555
3578
|
// src/components/instance-editing-panel/override-props-group.tsx
|
|
3556
|
-
var
|
|
3579
|
+
var React28 = __toESM(require("react"));
|
|
3557
3580
|
var import_react16 = require("react");
|
|
3558
3581
|
var import_editor_editing_panel4 = require("@elementor/editor-editing-panel");
|
|
3559
|
-
var
|
|
3560
|
-
var
|
|
3582
|
+
var import_editor_ui12 = require("@elementor/editor-ui");
|
|
3583
|
+
var import_ui22 = require("@elementor/ui");
|
|
3561
3584
|
|
|
3562
3585
|
// src/components/instance-editing-panel/override-prop-control.tsx
|
|
3563
|
-
var
|
|
3586
|
+
var React27 = __toESM(require("react"));
|
|
3564
3587
|
var import_editor_controls3 = require("@elementor/editor-controls");
|
|
3565
3588
|
var import_editor_editing_panel3 = require("@elementor/editor-editing-panel");
|
|
3566
3589
|
var import_editor_elements14 = require("@elementor/editor-elements");
|
|
3567
|
-
var
|
|
3590
|
+
var import_ui21 = require("@elementor/ui");
|
|
3568
3591
|
|
|
3569
3592
|
// src/hooks/use-controls-by-widget-type.ts
|
|
3570
3593
|
var import_editor_elements12 = require("@elementor/editor-elements");
|
|
@@ -3598,11 +3621,11 @@ function getControlsByBind(controls) {
|
|
|
3598
3621
|
}
|
|
3599
3622
|
|
|
3600
3623
|
// src/provider/overridable-prop-context.tsx
|
|
3601
|
-
var
|
|
3624
|
+
var React25 = __toESM(require("react"));
|
|
3602
3625
|
var import_react15 = require("react");
|
|
3603
3626
|
var OverridablePropContext = (0, import_react15.createContext)(null);
|
|
3604
3627
|
function OverridablePropProvider({ children, ...props }) {
|
|
3605
|
-
return /* @__PURE__ */
|
|
3628
|
+
return /* @__PURE__ */ React25.createElement(OverridablePropContext.Provider, { value: props }, children);
|
|
3606
3629
|
}
|
|
3607
3630
|
var useOverridablePropValue = () => (0, import_react15.useContext)(OverridablePropContext)?.value;
|
|
3608
3631
|
var useComponentInstanceElement = () => (0, import_react15.useContext)(OverridablePropContext)?.componentInstanceElement;
|
|
@@ -3696,11 +3719,11 @@ function getPropType({ widgetType, propKey }) {
|
|
|
3696
3719
|
}
|
|
3697
3720
|
|
|
3698
3721
|
// src/components/control-label.tsx
|
|
3699
|
-
var
|
|
3722
|
+
var React26 = __toESM(require("react"));
|
|
3700
3723
|
var import_editor_controls2 = require("@elementor/editor-controls");
|
|
3701
|
-
var
|
|
3724
|
+
var import_ui20 = require("@elementor/ui");
|
|
3702
3725
|
var ControlLabel = ({ children, ...props }) => {
|
|
3703
|
-
return /* @__PURE__ */
|
|
3726
|
+
return /* @__PURE__ */ React26.createElement(import_ui20.Stack, { direction: "row", alignItems: "center", justifyItems: "start", gap: 0.25 }, /* @__PURE__ */ React26.createElement(import_editor_controls2.ControlFormLabel, { ...props }, children), /* @__PURE__ */ React26.createElement(import_editor_controls2.ControlAdornments, null));
|
|
3704
3727
|
};
|
|
3705
3728
|
|
|
3706
3729
|
// src/components/errors.ts
|
|
@@ -3712,7 +3735,7 @@ var OverrideControlInnerElementNotFoundError = (0, import_utils7.createError)({
|
|
|
3712
3735
|
|
|
3713
3736
|
// src/components/instance-editing-panel/override-prop-control.tsx
|
|
3714
3737
|
function OverridePropControl({ overridableProp, overrides }) {
|
|
3715
|
-
return /* @__PURE__ */
|
|
3738
|
+
return /* @__PURE__ */ React27.createElement(import_editor_editing_panel3.SettingsField, { bind: "component_instance", propDisplayName: overridableProp.label }, /* @__PURE__ */ React27.createElement(OverrideControl, { overridableProp, overrides }));
|
|
3716
3739
|
}
|
|
3717
3740
|
function OverrideControl({ overridableProp, overrides }) {
|
|
3718
3741
|
const componentInstanceElement = (0, import_editor_editing_panel3.useElement)();
|
|
@@ -3783,13 +3806,13 @@ function OverrideControl({ overridableProp, overrides }) {
|
|
|
3783
3806
|
if (!elementType) {
|
|
3784
3807
|
return null;
|
|
3785
3808
|
}
|
|
3786
|
-
return /* @__PURE__ */
|
|
3809
|
+
return /* @__PURE__ */ React27.createElement(
|
|
3787
3810
|
OverridablePropProvider,
|
|
3788
3811
|
{
|
|
3789
3812
|
value: componentOverridablePropTypeUtil.extract(matchingOverride) ?? void 0,
|
|
3790
3813
|
componentInstanceElement
|
|
3791
3814
|
},
|
|
3792
|
-
/* @__PURE__ */
|
|
3815
|
+
/* @__PURE__ */ React27.createElement(import_editor_editing_panel3.ElementProvider, { element: { id: elementId, type }, elementType }, /* @__PURE__ */ React27.createElement(import_editor_editing_panel3.SettingsField, { bind: propKey, propDisplayName: overridableProp.label }, /* @__PURE__ */ React27.createElement(
|
|
3793
3816
|
import_editor_controls3.PropProvider,
|
|
3794
3817
|
{
|
|
3795
3818
|
propType: propTypeSchema,
|
|
@@ -3799,7 +3822,7 @@ function OverrideControl({ overridableProp, overrides }) {
|
|
|
3799
3822
|
return false;
|
|
3800
3823
|
}
|
|
3801
3824
|
},
|
|
3802
|
-
/* @__PURE__ */
|
|
3825
|
+
/* @__PURE__ */ React27.createElement(import_editor_controls3.PropKeyProvider, { bind: overridableProp.overrideKey }, /* @__PURE__ */ React27.createElement(import_editor_controls3.ControlReplacementsProvider, { replacements: controlReplacements }, /* @__PURE__ */ React27.createElement(import_ui21.Stack, { direction: "column", gap: 1, mb: 1.5 }, layout !== "custom" && /* @__PURE__ */ React27.createElement(ControlLabel, null, overridableProp.label), /* @__PURE__ */ React27.createElement(OriginalControl, { control, controlProps }))))
|
|
3803
3826
|
)))
|
|
3804
3827
|
);
|
|
3805
3828
|
}
|
|
@@ -3863,7 +3886,7 @@ function getControlParams(controls, originPropFields, label) {
|
|
|
3863
3886
|
}
|
|
3864
3887
|
function OriginalControl({ control, controlProps }) {
|
|
3865
3888
|
const { value } = control;
|
|
3866
|
-
return /* @__PURE__ */
|
|
3889
|
+
return /* @__PURE__ */ React27.createElement(import_editor_editing_panel3.BaseControl, { type: value.type, props: controlProps });
|
|
3867
3890
|
}
|
|
3868
3891
|
function getControlLayout(control) {
|
|
3869
3892
|
return control.value.meta?.layout || import_editor_editing_panel3.controlsRegistry.getLayout(control.value.type);
|
|
@@ -3894,8 +3917,8 @@ function OverridePropsGroup({ group, props, overrides }) {
|
|
|
3894
3917
|
const labelId = `label-${id2}`;
|
|
3895
3918
|
const contentId = `content-${id2}`;
|
|
3896
3919
|
const title = group.label;
|
|
3897
|
-
return /* @__PURE__ */
|
|
3898
|
-
|
|
3920
|
+
return /* @__PURE__ */ React28.createElement(import_ui22.Box, { "aria-label": `${title} section` }, /* @__PURE__ */ React28.createElement(
|
|
3921
|
+
import_ui22.ListItemButton,
|
|
3899
3922
|
{
|
|
3900
3923
|
id: labelId,
|
|
3901
3924
|
"aria-controls": contentId,
|
|
@@ -3904,16 +3927,16 @@ function OverridePropsGroup({ group, props, overrides }) {
|
|
|
3904
3927
|
p: 0,
|
|
3905
3928
|
sx: { "&:hover": { backgroundColor: "transparent" } }
|
|
3906
3929
|
},
|
|
3907
|
-
/* @__PURE__ */
|
|
3908
|
-
|
|
3930
|
+
/* @__PURE__ */ React28.createElement(import_ui22.Stack, { direction: "row", alignItems: "center", justifyItems: "start", flexGrow: 1, gap: 0.5 }, /* @__PURE__ */ React28.createElement(
|
|
3931
|
+
import_ui22.ListItemText,
|
|
3909
3932
|
{
|
|
3910
3933
|
secondary: title,
|
|
3911
3934
|
secondaryTypographyProps: { color: "text.primary", variant: "caption", fontWeight: "bold" },
|
|
3912
3935
|
sx: { flexGrow: 0, flexShrink: 1, marginInlineEnd: 1 }
|
|
3913
3936
|
}
|
|
3914
3937
|
)),
|
|
3915
|
-
/* @__PURE__ */
|
|
3916
|
-
), /* @__PURE__ */
|
|
3938
|
+
/* @__PURE__ */ React28.createElement(import_editor_ui12.CollapseIcon, { open: isOpen, color: "secondary", fontSize: "tiny" })
|
|
3939
|
+
), /* @__PURE__ */ React28.createElement(import_ui22.Collapse, { id: contentId, "aria-labelledby": labelId, in: isOpen, timeout: "auto" }, /* @__PURE__ */ React28.createElement(import_ui22.Stack, { direction: "column", gap: 1, p: 2 }, group.props.map((overrideKey) => /* @__PURE__ */ React28.createElement(
|
|
3917
3940
|
OverridePropControl,
|
|
3918
3941
|
{
|
|
3919
3942
|
key: overrideKey,
|
|
@@ -3935,23 +3958,23 @@ function InstanceEditingPanel() {
|
|
|
3935
3958
|
if (!componentId || !overridableProps || !component) {
|
|
3936
3959
|
return null;
|
|
3937
3960
|
}
|
|
3938
|
-
const panelTitle = (0,
|
|
3961
|
+
const panelTitle = (0, import_i18n27.__)("Edit %s", "elementor").replace("%s", component.name);
|
|
3939
3962
|
const handleEditComponent = () => switchToComponent(componentId, componentInstanceId);
|
|
3940
3963
|
const isNonEmptyGroup = (group) => group !== null && group.props.length > 0;
|
|
3941
3964
|
const groups = overridableProps.groups.order.map((groupId) => overridableProps.groups.items[groupId] ?? null).filter(isNonEmptyGroup);
|
|
3942
3965
|
const isEmpty = groups.length === 0 || Object.keys(overridableProps.props).length === 0;
|
|
3943
|
-
return /* @__PURE__ */
|
|
3966
|
+
return /* @__PURE__ */ React29.createElement(React29.Fragment, null, /* @__PURE__ */ React29.createElement(import_editor_panels3.PanelHeader, { sx: { justifyContent: "start", px: 2 } }, /* @__PURE__ */ React29.createElement(import_ui23.Stack, { direction: "row", alignItems: "center", flexGrow: 1, gap: 1, maxWidth: "100%" }, /* @__PURE__ */ React29.createElement(import_icons14.ComponentsIcon, { fontSize: "small", sx: { color: "text.tertiary" } }), /* @__PURE__ */ React29.createElement(import_editor_ui13.EllipsisWithTooltip, { title: component.name, as: import_editor_panels3.PanelHeaderTitle }), canEdit && /* @__PURE__ */ React29.createElement(import_ui23.Tooltip, { title: panelTitle }, /* @__PURE__ */ React29.createElement(import_ui23.IconButton, { size: "tiny", onClick: handleEditComponent, "aria-label": panelTitle }, /* @__PURE__ */ React29.createElement(import_icons14.PencilIcon, { fontSize: "tiny" }))))), /* @__PURE__ */ React29.createElement(import_editor_panels3.PanelBody, null, /* @__PURE__ */ React29.createElement(import_editor_controls4.ControlAdornmentsProvider, { items: (0, import_editor_editing_panel5.getFieldIndicators)("settings") }, isEmpty ? /* @__PURE__ */ React29.createElement(EmptyState2, { onEditComponent: handleEditComponent }) : /* @__PURE__ */ React29.createElement(import_ui23.Stack, { direction: "column", alignItems: "stretch" }, groups.map((group) => /* @__PURE__ */ React29.createElement(React29.Fragment, { key: group.id }, /* @__PURE__ */ React29.createElement(
|
|
3944
3967
|
OverridePropsGroup,
|
|
3945
3968
|
{
|
|
3946
3969
|
group,
|
|
3947
3970
|
props: overridableProps.props,
|
|
3948
3971
|
overrides
|
|
3949
3972
|
}
|
|
3950
|
-
), /* @__PURE__ */
|
|
3973
|
+
), /* @__PURE__ */ React29.createElement(import_ui23.Divider, null)))))));
|
|
3951
3974
|
}
|
|
3952
3975
|
|
|
3953
3976
|
// src/components/overridable-props/overridable-prop-control.tsx
|
|
3954
|
-
var
|
|
3977
|
+
var React30 = __toESM(require("react"));
|
|
3955
3978
|
var import_editor_controls5 = require("@elementor/editor-controls");
|
|
3956
3979
|
var import_editor_editing_panel6 = require("@elementor/editor-editing-panel");
|
|
3957
3980
|
function OverridablePropControl({
|
|
@@ -3997,7 +4020,7 @@ function OverridablePropControl({
|
|
|
3997
4020
|
});
|
|
3998
4021
|
const propValue = isComponentInstance2 ? (value.origin_value?.value).override_value : value.origin_value;
|
|
3999
4022
|
const objectPlaceholder = placeholder ? { [bind]: placeholder } : void 0;
|
|
4000
|
-
return /* @__PURE__ */
|
|
4023
|
+
return /* @__PURE__ */ React30.createElement(OverridablePropProvider, { value }, /* @__PURE__ */ React30.createElement(
|
|
4001
4024
|
import_editor_controls5.PropProvider,
|
|
4002
4025
|
{
|
|
4003
4026
|
...propContext,
|
|
@@ -4008,17 +4031,17 @@ function OverridablePropControl({
|
|
|
4008
4031
|
},
|
|
4009
4032
|
placeholder: objectPlaceholder
|
|
4010
4033
|
},
|
|
4011
|
-
/* @__PURE__ */
|
|
4034
|
+
/* @__PURE__ */ React30.createElement(import_editor_controls5.PropKeyProvider, { bind }, /* @__PURE__ */ React30.createElement(import_editor_controls5.ControlReplacementsProvider, { replacements: filteredReplacements }, /* @__PURE__ */ React30.createElement(Control, { ...props })))
|
|
4012
4035
|
));
|
|
4013
4036
|
}
|
|
4014
4037
|
|
|
4015
4038
|
// src/components/overridable-props/overridable-prop-indicator.tsx
|
|
4016
|
-
var
|
|
4039
|
+
var React32 = __toESM(require("react"));
|
|
4017
4040
|
var import_editor_controls6 = require("@elementor/editor-controls");
|
|
4018
4041
|
var import_editor_editing_panel7 = require("@elementor/editor-editing-panel");
|
|
4019
4042
|
var import_editor_elements16 = require("@elementor/editor-elements");
|
|
4020
|
-
var
|
|
4021
|
-
var
|
|
4043
|
+
var import_ui25 = require("@elementor/ui");
|
|
4044
|
+
var import_i18n29 = require("@wordpress/i18n");
|
|
4022
4045
|
|
|
4023
4046
|
// src/store/actions/set-overridable-prop.ts
|
|
4024
4047
|
var import_store58 = require("@elementor/store");
|
|
@@ -4085,13 +4108,13 @@ function setOverridableProp({
|
|
|
4085
4108
|
}
|
|
4086
4109
|
|
|
4087
4110
|
// src/components/overridable-props/indicator.tsx
|
|
4088
|
-
var
|
|
4111
|
+
var React31 = __toESM(require("react"));
|
|
4089
4112
|
var import_react17 = require("react");
|
|
4090
4113
|
var import_icons15 = require("@elementor/icons");
|
|
4091
|
-
var
|
|
4092
|
-
var
|
|
4114
|
+
var import_ui24 = require("@elementor/ui");
|
|
4115
|
+
var import_i18n28 = require("@wordpress/i18n");
|
|
4093
4116
|
var SIZE2 = "tiny";
|
|
4094
|
-
var IconContainer = (0,
|
|
4117
|
+
var IconContainer = (0, import_ui24.styled)(import_ui24.Box)`
|
|
4095
4118
|
pointer-events: none;
|
|
4096
4119
|
opacity: 0;
|
|
4097
4120
|
transition: opacity 0.2s ease-in-out;
|
|
@@ -4108,7 +4131,7 @@ var IconContainer = (0, import_ui23.styled)(import_ui23.Box)`
|
|
|
4108
4131
|
stroke-width: 2px;
|
|
4109
4132
|
}
|
|
4110
4133
|
`;
|
|
4111
|
-
var Content = (0,
|
|
4134
|
+
var Content = (0, import_ui24.styled)(import_ui24.Box)`
|
|
4112
4135
|
position: relative;
|
|
4113
4136
|
display: flex;
|
|
4114
4137
|
align-items: center;
|
|
@@ -4145,13 +4168,13 @@ var Content = (0, import_ui23.styled)(import_ui23.Box)`
|
|
|
4145
4168
|
}
|
|
4146
4169
|
}
|
|
4147
4170
|
`;
|
|
4148
|
-
var Indicator2 = (0, import_react17.forwardRef)(({ isOpen, isOverridable, ...props }, ref) => /* @__PURE__ */
|
|
4171
|
+
var Indicator2 = (0, import_react17.forwardRef)(({ isOpen, isOverridable, ...props }, ref) => /* @__PURE__ */ React31.createElement(Content, { ref, ...props, className: isOpen || isOverridable ? "enlarged" : "" }, /* @__PURE__ */ React31.createElement(
|
|
4149
4172
|
IconContainer,
|
|
4150
4173
|
{
|
|
4151
4174
|
className: "icon",
|
|
4152
|
-
"aria-label": isOverridable ? (0,
|
|
4175
|
+
"aria-label": isOverridable ? (0, import_i18n28.__)("Overridable property", "elementor") : (0, import_i18n28.__)("Make prop overridable", "elementor")
|
|
4153
4176
|
},
|
|
4154
|
-
isOverridable ? /* @__PURE__ */
|
|
4177
|
+
isOverridable ? /* @__PURE__ */ React31.createElement(import_icons15.CheckIcon, { fontSize: SIZE2 }) : /* @__PURE__ */ React31.createElement(import_icons15.PlusIcon, { fontSize: SIZE2 })
|
|
4155
4178
|
)));
|
|
4156
4179
|
|
|
4157
4180
|
// src/components/overridable-props/utils/get-overridable-prop.ts
|
|
@@ -4175,7 +4198,7 @@ function OverridablePropIndicator() {
|
|
|
4175
4198
|
if (!isPropAllowed(propType) || !componentId || !overridableProps) {
|
|
4176
4199
|
return null;
|
|
4177
4200
|
}
|
|
4178
|
-
return /* @__PURE__ */
|
|
4201
|
+
return /* @__PURE__ */ React32.createElement(Content2, { componentId, overridableProps });
|
|
4179
4202
|
}
|
|
4180
4203
|
function Content2({ componentId, overridableProps }) {
|
|
4181
4204
|
const {
|
|
@@ -4189,11 +4212,11 @@ function Content2({ componentId, overridableProps }) {
|
|
|
4189
4212
|
componentOverridablePropTypeUtil
|
|
4190
4213
|
);
|
|
4191
4214
|
const overridableValue = boundPropOverridableValue ?? contextOverridableValue;
|
|
4192
|
-
const popupState = (0,
|
|
4215
|
+
const popupState = (0, import_ui25.usePopupState)({
|
|
4193
4216
|
variant: "popover"
|
|
4194
4217
|
});
|
|
4195
|
-
const triggerProps = (0,
|
|
4196
|
-
const popoverProps = (0,
|
|
4218
|
+
const triggerProps = (0, import_ui25.bindTrigger)(popupState);
|
|
4219
|
+
const popoverProps = (0, import_ui25.bindPopover)(popupState);
|
|
4197
4220
|
const { elType } = (0, import_editor_elements16.getWidgetsCache)()?.[elementType.key] ?? { elType: "widget" };
|
|
4198
4221
|
const handleSubmit = ({ label, group }) => {
|
|
4199
4222
|
const propTypeDefault = propType.default ?? {};
|
|
@@ -4220,8 +4243,8 @@ function Content2({ componentId, overridableProps }) {
|
|
|
4220
4243
|
popupState.close();
|
|
4221
4244
|
};
|
|
4222
4245
|
const overridableConfig = overridableValue ? getOverridableProp({ componentId, overrideKey: overridableValue.override_key }) : void 0;
|
|
4223
|
-
return /* @__PURE__ */
|
|
4224
|
-
|
|
4246
|
+
return /* @__PURE__ */ React32.createElement(React32.Fragment, null, /* @__PURE__ */ React32.createElement(import_ui25.Tooltip, { placement: "top", title: (0, import_i18n29.__)("Override Property", "elementor") }, /* @__PURE__ */ React32.createElement(Indicator2, { ...triggerProps, isOpen: !!popoverProps.open, isOverridable: !!overridableValue })), /* @__PURE__ */ React32.createElement(
|
|
4247
|
+
import_ui25.Popover,
|
|
4225
4248
|
{
|
|
4226
4249
|
disableScrollLock: true,
|
|
4227
4250
|
anchorOrigin: {
|
|
@@ -4237,7 +4260,7 @@ function Content2({ componentId, overridableProps }) {
|
|
|
4237
4260
|
},
|
|
4238
4261
|
...popoverProps
|
|
4239
4262
|
},
|
|
4240
|
-
/* @__PURE__ */
|
|
4263
|
+
/* @__PURE__ */ React32.createElement(
|
|
4241
4264
|
OverridablePropForm,
|
|
4242
4265
|
{
|
|
4243
4266
|
onSubmit: handleSubmit,
|
|
@@ -4605,11 +4628,11 @@ var import_editor_elements18 = require("@elementor/editor-elements");
|
|
|
4605
4628
|
var import_editor_notifications4 = require("@elementor/editor-notifications");
|
|
4606
4629
|
var import_editor_v1_adapters8 = require("@elementor/editor-v1-adapters");
|
|
4607
4630
|
var import_store64 = require("@elementor/store");
|
|
4608
|
-
var
|
|
4631
|
+
var import_i18n30 = require("@wordpress/i18n");
|
|
4609
4632
|
var COMPONENT_TYPE = "e-component";
|
|
4610
4633
|
var COMPONENT_CIRCULAR_NESTING_ALERT = {
|
|
4611
4634
|
type: "default",
|
|
4612
|
-
message: (0,
|
|
4635
|
+
message: (0, import_i18n30.__)("Can't add this component - components that contain each other can't be nested.", "elementor"),
|
|
4613
4636
|
id: "circular-component-nesting-blocked"
|
|
4614
4637
|
};
|
|
4615
4638
|
function initCircularNestingPrevention() {
|
|
@@ -5088,7 +5111,7 @@ function init() {
|
|
|
5088
5111
|
window.elementorCommon.__beforeSave = beforeSave;
|
|
5089
5112
|
(0, import_editor_elements_panel.injectTab)({
|
|
5090
5113
|
id: "components",
|
|
5091
|
-
label: (0,
|
|
5114
|
+
label: (0, import_i18n31.__)("Components", "elementor"),
|
|
5092
5115
|
component: Components,
|
|
5093
5116
|
position: 1
|
|
5094
5117
|
});
|