@useinsider/guido 3.13.1 → 3.14.0-beta.1e474dd
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/components/organisms/header/ViewOptions.vue.js +1 -1
- package/dist/components/organisms/header/version-history/ViewOptions.vue.js +1 -1
- package/dist/composables/useHtmlValidator.js +50 -50
- package/dist/config/i18n/en/labels.json.js +7 -3
- package/dist/config/migrator/recommendation/compositionMapper.js +26 -23
- package/dist/config/migrator/recommendation/htmlBuilder.js +156 -155
- package/dist/extensions/Blocks/Recommendation/constants/selectors.js +15 -13
- package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +346 -314
- package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +44 -43
- package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +16 -16
- package/dist/extensions/Blocks/Recommendation/templates/list/template.js +16 -16
- package/dist/extensions/Blocks/Recommendation/templates/utils.js +120 -120
- package/dist/extensions/Blocks/Recommendation/utils/captureStyleTemplates.js +55 -54
- package/dist/extensions/Blocks/Recommendation/utils/compositionKeys.js +89 -0
- package/dist/extensions/Blocks/common-control.js +42 -35
- package/dist/guido.css +1 -1
- package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +12 -12
- package/dist/package.json.js +1 -1
- package/dist/src/composables/useHtmlValidator.d.ts +3 -2
- package/dist/src/config/migrator/recommendation/types.d.ts +1 -0
- package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
- package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +4 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +22 -5
- package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +12 -11
- package/dist/src/extensions/Blocks/Recommendation/utils/compositionKeys.d.ts +52 -0
- package/dist/src/extensions/Blocks/common-control.d.ts +3 -1
- package/dist/static/styles/components/wide-panel.css.js +7 -0
- package/dist/static/styles/customEditorStyle.css.js +8 -0
- package/package.json +4 -4
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { ATTR_CUSTOM_PREFIX as i, ATTR_PRODUCT_ATTR as c, PRODUCT_ATTRIBUTE_PREFIX as l, ATTR_DATA_ATTRIBUTE_TYPE as f, SELECTOR_ATTRIBUTE_ROW as R } from "../constants/selectors.js";
|
|
2
|
+
function d(t) {
|
|
3
|
+
return !t.startsWith(l);
|
|
4
|
+
}
|
|
5
|
+
function y(t) {
|
|
6
|
+
return t.startsWith(l) ? t.substring(l.length) : t;
|
|
7
|
+
}
|
|
8
|
+
function T(t) {
|
|
9
|
+
return t.startsWith(i) ? t.substring(i.length) : t;
|
|
10
|
+
}
|
|
11
|
+
function A(t) {
|
|
12
|
+
return `${i}${t}`;
|
|
13
|
+
}
|
|
14
|
+
function P(t) {
|
|
15
|
+
return t.type === "defaultAttribute" ? t.attributeName : `${l}${t.attributeName}`;
|
|
16
|
+
}
|
|
17
|
+
function _(t, r) {
|
|
18
|
+
const n = Object.values(r).filter((e) => e.attributeName === t);
|
|
19
|
+
return n.find((e) => e.type === "defaultAttribute") ?? n[0];
|
|
20
|
+
}
|
|
21
|
+
function o(t, r) {
|
|
22
|
+
return t && "getAttribute" in t ? t.getAttribute(r) : null;
|
|
23
|
+
}
|
|
24
|
+
function m(t, r, n = {}) {
|
|
25
|
+
const e = `${i}${t}`, u = r == null ? void 0 : r.querySelector(
|
|
26
|
+
`${R}[${f}="${e}"]`
|
|
27
|
+
), a = o(u, c) ?? o(u == null ? void 0 : u.querySelector(`[${c}]`), c);
|
|
28
|
+
if (a)
|
|
29
|
+
return a;
|
|
30
|
+
const s = _(t, n);
|
|
31
|
+
return s ? P(s) : t;
|
|
32
|
+
}
|
|
33
|
+
function g(t, r, n = {}) {
|
|
34
|
+
return t.startsWith(l) ? t : m(t, r, n);
|
|
35
|
+
}
|
|
36
|
+
function C(t, r, n = {}) {
|
|
37
|
+
return t.map((e) => {
|
|
38
|
+
if (!e.startsWith(i))
|
|
39
|
+
return e;
|
|
40
|
+
const u = T(e);
|
|
41
|
+
return A(g(u, r, n));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function E(t, r, n = {}) {
|
|
45
|
+
return t.map((e) => g(e, r, n));
|
|
46
|
+
}
|
|
47
|
+
function S(t) {
|
|
48
|
+
const r = o(t, f);
|
|
49
|
+
if (!(r != null && r.startsWith(i)))
|
|
50
|
+
return r;
|
|
51
|
+
const n = "querySelector" in t ? t.querySelector(`[${c}]`) : void 0, e = o(n, c);
|
|
52
|
+
return e ? A(e) : r;
|
|
53
|
+
}
|
|
54
|
+
function $(t, r) {
|
|
55
|
+
const n = o(t, c), e = o(t.querySelector(`[${c}]`), c), u = n ?? e;
|
|
56
|
+
return u === null || u === r;
|
|
57
|
+
}
|
|
58
|
+
function W(t, r) {
|
|
59
|
+
const n = (h) => t.querySelector(
|
|
60
|
+
`${R}[${f}="${h}"]`
|
|
61
|
+
);
|
|
62
|
+
if (!r.startsWith(i))
|
|
63
|
+
return n(r) ?? null;
|
|
64
|
+
const e = T(r), u = n(r);
|
|
65
|
+
if (u && $(u, e))
|
|
66
|
+
return u;
|
|
67
|
+
const a = A(y(e)), s = a === r ? void 0 : n(a);
|
|
68
|
+
return s && $(s, e) ? s : null;
|
|
69
|
+
}
|
|
70
|
+
function q(t, r) {
|
|
71
|
+
const n = T(r), e = A(y(n));
|
|
72
|
+
return e === r ? t : t.replace(
|
|
73
|
+
`${f}="${e}"`,
|
|
74
|
+
`${f}="${r}"`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
y as bareAttributeName,
|
|
79
|
+
T as compositionKeyToProductAttr,
|
|
80
|
+
P as filterToProductAttrValue,
|
|
81
|
+
W as findAttributeRow,
|
|
82
|
+
_ as findFilterByBareName,
|
|
83
|
+
d as isDefaultProductAttr,
|
|
84
|
+
C as normalizeCompositionKeys,
|
|
85
|
+
E as normalizeCustomAttrValues,
|
|
86
|
+
A as productAttrToCompositionKey,
|
|
87
|
+
S as resolveRowCompositionKey,
|
|
88
|
+
q as rewriteLegacyRowKeyHtml
|
|
89
|
+
};
|
|
@@ -47,15 +47,15 @@ class d extends I {
|
|
|
47
47
|
const t = this.getBlockInstanceId();
|
|
48
48
|
if (!t)
|
|
49
49
|
return !1;
|
|
50
|
-
const
|
|
51
|
-
return e(),
|
|
50
|
+
const E = t !== this.lastBlockInstanceId;
|
|
51
|
+
return e(), E && (this.lastBlockInstanceId = t), E;
|
|
52
52
|
}
|
|
53
|
-
_GuLabel({ text: e, name: t = "", hint:
|
|
53
|
+
_GuLabel({ text: e, name: t = "", hint: E }) {
|
|
54
54
|
return `
|
|
55
55
|
<${n.LABEL}
|
|
56
56
|
${$.LABEL.text}="${e}"
|
|
57
57
|
${$.LABEL.name}="${t || `${e} Label`}"
|
|
58
|
-
${
|
|
58
|
+
${E ? `${$.LABEL.hint}="${E}"` : ""}>
|
|
59
59
|
</${n.LABEL}>
|
|
60
60
|
`;
|
|
61
61
|
}
|
|
@@ -73,7 +73,7 @@ class d extends I {
|
|
|
73
73
|
* Use in getTemplate() — the icon is registered in a hidden store so Stripo initializes it.
|
|
74
74
|
* Pair with _setInfoMessageValue() in onRender() to set the text content.
|
|
75
75
|
*/
|
|
76
|
-
_GuOnPageMessage({ name: e, icon: t = "not-found", type:
|
|
76
|
+
_GuOnPageMessage({ name: e, icon: t = "not-found", type: E = "info" }) {
|
|
77
77
|
return `
|
|
78
78
|
<div data-info-message="${e}" style="display: none; padding: 16px 16px 0;">
|
|
79
79
|
<div class="icon-store" style="display: none;">
|
|
@@ -81,7 +81,7 @@ class d extends I {
|
|
|
81
81
|
${this._GuIcon({ src: t, className: "icon" })}
|
|
82
82
|
</div>
|
|
83
83
|
</div>
|
|
84
|
-
${this._GuMessage({ name: e, type:
|
|
84
|
+
${this._GuMessage({ name: e, type: E })}
|
|
85
85
|
</div>
|
|
86
86
|
`;
|
|
87
87
|
}
|
|
@@ -91,7 +91,7 @@ class d extends I {
|
|
|
91
91
|
* and combines it with the text in Stripo's alert-message layout.
|
|
92
92
|
*/
|
|
93
93
|
_setInfoMessageValue(e, t) {
|
|
94
|
-
const
|
|
94
|
+
const E = this.getContainer(), o = E.querySelector(`[data-icon-key="${e}"]`), a = o == null ? void 0 : o.querySelector("ue-icon-component"), l = (a == null ? void 0 : a.outerHTML) ?? "";
|
|
95
95
|
this.api.setUIEAttribute(
|
|
96
96
|
e,
|
|
97
97
|
"value",
|
|
@@ -104,7 +104,7 @@ class d extends I {
|
|
|
104
104
|
</div>
|
|
105
105
|
`
|
|
106
106
|
);
|
|
107
|
-
const T =
|
|
107
|
+
const T = E.querySelector(`[data-info-message="${e}"]`);
|
|
108
108
|
T && (T.style.display = "");
|
|
109
109
|
}
|
|
110
110
|
_GuToggle(e) {
|
|
@@ -121,59 +121,66 @@ class d extends I {
|
|
|
121
121
|
${$.SELECT_ITEM.value}="${t}">
|
|
122
122
|
</${n.SELECT_ITEM}>`;
|
|
123
123
|
}
|
|
124
|
-
_GuSelect({
|
|
124
|
+
_GuSelect({
|
|
125
|
+
name: e,
|
|
126
|
+
placeholder: t,
|
|
127
|
+
options: E,
|
|
128
|
+
className: o = "es-180w",
|
|
129
|
+
searchable: a = !1
|
|
130
|
+
}) {
|
|
125
131
|
return `
|
|
126
132
|
<${n.SELECTPICKER}
|
|
127
|
-
class="${
|
|
133
|
+
class="${o}"
|
|
128
134
|
${$.SELECTPICKER.name}="${e}"
|
|
135
|
+
${a ? `${$.SELECTPICKER.searchable}="true"` : ""}
|
|
129
136
|
${$.SELECTPICKER.placeholder}="${t}">
|
|
130
|
-
${
|
|
137
|
+
${E.map((l) => this._GuSelectItem(l)).join("")}
|
|
131
138
|
</${n.SELECTPICKER}>
|
|
132
139
|
`;
|
|
133
140
|
}
|
|
134
|
-
_GuTextInput({ name: e, placeholder: t, className:
|
|
141
|
+
_GuTextInput({ name: e, placeholder: t, className: E = "", disabled: o = !1 }) {
|
|
135
142
|
return `
|
|
136
143
|
<${n.TEXT}
|
|
137
|
-
class=${
|
|
144
|
+
class=${E}
|
|
138
145
|
${$.TEXT.name}="${e}"
|
|
139
146
|
placeholder="${t || e}"
|
|
140
|
-
${
|
|
147
|
+
${o ? `${$.TEXT.disabled}="true"` : ""}>
|
|
141
148
|
</${n.TEXT}>
|
|
142
149
|
`;
|
|
143
150
|
}
|
|
144
|
-
_GuCounter({ name: e, maxValue: t, minValue:
|
|
151
|
+
_GuCounter({ name: e, maxValue: t, minValue: E = 1, step: o = 1 }) {
|
|
145
152
|
return `
|
|
146
153
|
<${n.COUNTER}
|
|
147
154
|
${$.COUNTER.name}="${e}"
|
|
148
|
-
${$.COUNTER.minValue}="${
|
|
155
|
+
${$.COUNTER.minValue}="${E}"
|
|
149
156
|
${$.COUNTER.maxValue}="${t}"
|
|
150
|
-
${$.COUNTER.step}="${
|
|
157
|
+
${$.COUNTER.step}="${o}">
|
|
151
158
|
</${n.COUNTER}>
|
|
152
159
|
`;
|
|
153
160
|
}
|
|
154
|
-
_GuRadioButtonItem({ text: e, value: t, icon:
|
|
161
|
+
_GuRadioButtonItem({ text: e, value: t, icon: E }) {
|
|
155
162
|
return `
|
|
156
163
|
<${n.RADIO_ITEM}
|
|
157
164
|
${$.RADIO_ITEM.value}="${t}"
|
|
158
165
|
${e ? `${$.RADIO_ITEM.text}="${e}"` : ""}
|
|
159
|
-
${
|
|
166
|
+
${E ? `${$.RADIO_ITEM.icon}="${E}"` : ""}>
|
|
160
167
|
</${n.RADIO_ITEM}>
|
|
161
168
|
`;
|
|
162
169
|
}
|
|
163
|
-
_GuRadioButton({ name: e, buttons: t, id:
|
|
170
|
+
_GuRadioButton({ name: e, buttons: t, id: E = "" }) {
|
|
164
171
|
return `
|
|
165
172
|
<${n.RADIO_BUTTONS}
|
|
166
|
-
${
|
|
173
|
+
${E ? `id="${E}"` : ""}
|
|
167
174
|
${$.RADIO_BUTTONS.name}="${e}">
|
|
168
|
-
${t.map((
|
|
175
|
+
${t.map((o) => this._GuRadioButtonItem(o)).join("")}
|
|
169
176
|
</${n.RADIO_BUTTONS}>
|
|
170
177
|
`;
|
|
171
178
|
}
|
|
172
|
-
_GuButton({ name: e, label: t, id:
|
|
179
|
+
_GuButton({ name: e, label: t, id: E = "" }) {
|
|
173
180
|
return `
|
|
174
181
|
<${n.BUTTON}
|
|
175
182
|
${$.BUTTON.name}="${e}"
|
|
176
|
-
${
|
|
183
|
+
${E ? `id="${E}"` : ""}
|
|
177
184
|
${$.BUTTON.caption}="${t}"}>
|
|
178
185
|
</${n.BUTTON}>
|
|
179
186
|
`;
|
|
@@ -191,10 +198,10 @@ class d extends I {
|
|
|
191
198
|
* @param param0
|
|
192
199
|
* @returns It returns a button with an icon.
|
|
193
200
|
*/
|
|
194
|
-
_GuIconButton({ name: e, icon: t, className:
|
|
201
|
+
_GuIconButton({ name: e, icon: t, className: E = "" }) {
|
|
195
202
|
return `
|
|
196
203
|
<${n.BUTTON}
|
|
197
|
-
class="${
|
|
204
|
+
class="${E}"
|
|
198
205
|
${$.BUTTON.name}="${e}"
|
|
199
206
|
${$.BUTTON.icon}="${t}">
|
|
200
207
|
</${n.BUTTON}>
|
|
@@ -222,19 +229,19 @@ class d extends I {
|
|
|
222
229
|
* @returns HTML string for the orderable control
|
|
223
230
|
*/
|
|
224
231
|
_GuOrderable(e, t) {
|
|
225
|
-
let
|
|
232
|
+
let E = "";
|
|
226
233
|
t.forEach((a) => {
|
|
227
234
|
const l = $.ORDERABLE_ITEM && "name" in $.ORDERABLE_ITEM ? $.ORDERABLE_ITEM.name : "name";
|
|
228
|
-
|
|
235
|
+
E += `
|
|
229
236
|
<${n.ORDERABLE_ITEM} ${l}="${a.key}">
|
|
230
237
|
${a.content}
|
|
231
238
|
</${n.ORDERABLE_ITEM}>
|
|
232
239
|
`;
|
|
233
240
|
});
|
|
234
|
-
const
|
|
241
|
+
const o = $.ORDERABLE && "name" in $.ORDERABLE ? $.ORDERABLE.name : "name";
|
|
235
242
|
return `
|
|
236
|
-
<${n.ORDERABLE} ${
|
|
237
|
-
${
|
|
243
|
+
<${n.ORDERABLE} ${o}="${e}">
|
|
244
|
+
${E}
|
|
238
245
|
</${n.ORDERABLE}>
|
|
239
246
|
`;
|
|
240
247
|
}
|
|
@@ -275,16 +282,16 @@ class d extends I {
|
|
|
275
282
|
`;
|
|
276
283
|
}
|
|
277
284
|
_GuRadioButtons(e, t) {
|
|
278
|
-
const
|
|
285
|
+
const E = t.map((o) => `
|
|
279
286
|
<${n.RADIO_ITEM}
|
|
280
|
-
${$.RADIO_ITEM.text}="${
|
|
281
|
-
${$.RADIO_ITEM.value}="${
|
|
287
|
+
${$.RADIO_ITEM.text}="${o.text}"
|
|
288
|
+
${$.RADIO_ITEM.value}="${o.value}">
|
|
282
289
|
</${n.RADIO_ITEM}>
|
|
283
290
|
`).join("");
|
|
284
291
|
return `
|
|
285
292
|
<${n.RADIO_BUTTONS}
|
|
286
293
|
${$.RADIO_BUTTONS.name}="${e}">
|
|
287
|
-
${
|
|
294
|
+
${E}
|
|
288
295
|
</${n.RADIO_BUTTONS}>
|
|
289
296
|
`;
|
|
290
297
|
}
|
package/dist/guido.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-
|
|
1
|
+
.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-6e711fd7]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-5079a1c8]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-5079a1c8]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-5079a1c8]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}
|
|
@@ -41,9 +41,9 @@ ${s.map((o) => ` - ${o}`).join(`
|
|
|
41
41
|
};
|
|
42
42
|
v.validatedClasses = /* @__PURE__ */ new Set();
|
|
43
43
|
v.validationErrors = /* @__PURE__ */ new Map();
|
|
44
|
-
var i = v, z = /* @__PURE__ */ ((e) => (e.BLOCK = "BLOCK", e.CONTAINER = "CONTAINER", e.STRUCTURE = "STRUCTURE", e.STRIPE = "STRIPE", e))(z || {}), P = class
|
|
44
|
+
var i = v, z = /* @__PURE__ */ ((e) => (e.BLOCK = "BLOCK", e.CONTAINER = "CONTAINER", e.STRUCTURE = "STRUCTURE", e.STRIPE = "STRIPE", e))(z || {}), P = class T extends i {
|
|
45
45
|
constructor() {
|
|
46
|
-
super(
|
|
46
|
+
super(T.REQUIRED_METHODS, T);
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
49
|
* Determines if the block should be available for use in the editor.
|
|
@@ -222,9 +222,9 @@ var i = v, z = /* @__PURE__ */ ((e) => (e.BLOCK = "BLOCK", e.CONTAINER = "CONTAI
|
|
|
222
222
|
}
|
|
223
223
|
};
|
|
224
224
|
P.REQUIRED_METHODS = ["getId", "getTemplate", "getIcon", "getName", "getDescription"];
|
|
225
|
-
var qe = P, Z = class
|
|
225
|
+
var qe = P, Z = class c extends i {
|
|
226
226
|
constructor() {
|
|
227
|
-
super(
|
|
227
|
+
super(c.REQUIRED_METHODS, c);
|
|
228
228
|
}
|
|
229
229
|
/**
|
|
230
230
|
* @deprecated - use {@link getPreviewInnerHtml} instead
|
|
@@ -339,12 +339,12 @@ var j = {
|
|
|
339
339
|
height: "height"
|
|
340
340
|
}, Je = {
|
|
341
341
|
BLOCK_IMAGE: j
|
|
342
|
-
}, U = "esd-block-button", w = "esd-block-text", K = "esd-block-image", J = "esd-structure", ee = "esd-block-video", te = "esd-block-social", re = "esd-block-banner", ae = "esd-block-timer", ne = "esd-block-menu", se = "esd-block-html", ie = "esd-block-spacer", le = "esd-container-frame", Ee = "esd-stripe", oe = "esd-amp-form", I = ((e) => (e.BUTTON = `.${U}`, e.TEXT = `.${w}`, e.IMAGE = `.${K}`, e.STRUCTURE = `.${J}`, e.VIDEO = `.${ee}`, e.SOCIAL = `.${te}`, e.BANNER = `.${re}`, e.TIMER = `.${ae}`, e.MENU = `.${ne}`, e.HTML = `.${se}`, e.SPACER = `.${ie}`, e.CONTAINER = `.${le}`, e.STRIPE = `.${Ee}`, e.FORM = `.${oe}`, e))(I || {}), de = /* @__PURE__ */ ((e) => (e.BLOCK_IMAGE = "BLOCK_IMAGE", e.BLOCK_TEXT = "BLOCK_TEXT", e.BLOCK_BUTTON = "BLOCK_BUTTON", e.BLOCK_SPACER = "BLOCK_SPACER", e.BLOCK_VIDEO = "BLOCK_VIDEO", e.BLOCK_SOCIAL = "BLOCK_SOCIAL", e.BLOCK_BANNER = "BLOCK_BANNER", e.BLOCK_TIMER = "BLOCK_TIMER", e.BLOCK_MENU = "BLOCK_MENU", e.BLOCK_MENU_ITEM = "BLOCK_MENU_ITEM", e.BLOCK_HTML = "BLOCK_HTML", e.BLOCK_AMP_CAROUSEL = "BLOCK_AMP_CAROUSEL", e.BLOCK_AMP_ACCORDION = "BLOCK_AMP_ACCORDION", e.BLOCK_AMP_FORM = "BLOCK_AMP_FORM", e.CONTAINER = "CONTAINER", e.FORM_CONTAINER = "FORM_CONTAINER", e.STRUCTURE = "STRUCTURE", e.STRIPE = "STRIPE", e.EMPTY_CONTAINER = "EMPTY_CONTAINER", e.CUSTOM_BLOCK_LINK = "CUSTOM_BLOCK_LINK", e.CUSTOM_BLOCK_IMAGE = "CUSTOM_BLOCK_IMAGE", e.CUSTOM_BLOCK_TEXT = "CUSTOM_BLOCK_TEXT", e))(de || {}), F = /* @__PURE__ */ ((e) => (e.ANCHOR_LINK_CONTAINER = "anchorLinkFormContainer", e.APPLY_CONDITION = "applyCondition", e.APPLY_CONDITION_SWITCHER = "applyConditionSwitcher", e.BACKGROUND_COLOR = "backgroundColor", e.BACKGROUND_IMAGE = "generalImageContainer", e.TEXT_COLOR = "textColor", e.TEXT_STYLE = "textStyle", e.TEXT_SIZE = "textSize", e.TEXT_LINE_SPACING = "textLineSpacing", e.TEXT_ALIGN = "textAlign", e.FIXED_HEIGHT_SWITCHER = "fixedHeightSwitcherForm", e.HIDDEN_NODE = "hiddenNode", e.SMART_BLOCK = "smartBlock", e.SYNCHRONIZED_MODULE = "synchronizedModuleForm", e.FONT_FAMILY = "generalFontFamilyForm", e.BLOCK_INTERNAL_INDENTS = "generalBlockInternalIndents", e.STRUCTURE_INTERNAL_INDENTS = "generalStructureInternalIndents", e))(F || {}), H = /* @__PURE__ */ ((e) => (e.ADJUST_TO_WIDTH = "adjustToWidth", e.ALIGNMENT = "buttonAlignment", e.BORDER = "buttonBorder", e.BORDER_RADIUS = "buttonBorderRadius", e.COLOR = "buttonColor", e.BUTTON_BLOCK_BACKGROUND_COLOR = "buttonBlockBackgroundColor", e.EXTERNAL_INDENTS = "buttonExternalIndents", e.FIXED_HEIGHT = "buttonFixedHeightForm", e.FONT_COLOR = "buttonFontColor", e.FONT_FAMILY = "buttonFontFamily", e.FONT_SIZE = "buttonFontSize", e.ICON = "buttonIconContainer", e.ICON_ALIGN = "buttonIconAlign", e.ICON_INDENT = "buttonIconIndent", e.ICON_WIDTH = "buttonIconWidth", e.IMAGE = "buttonImageForm", e.INTERNAL_INDENTS = "buttonInternalIndents", e.LINK = "buttonLink", e.MIME_TYPE = "buttonMimeTypeForm", e.SWITCHER_HOVERED_STYLES = "buttonSwitcherHoveredStylesForm", e.TEXT = "buttonText", e.TEXT_STYLE_AND_COLOR = "buttonTextStyleAndColorForm", e.HOVERED_BORDER_COLOR = "hoveredStyleBorderButtonForm", e.HOVERED_COLOR = "hoveredButtonColorForm", e.HOVERED_TEXT_COLOR = "hoveredButtonTextColorForm", e))(H || {}), k = /* @__PURE__ */ ((e) => (e.HIDDEN_NODE = "hiddenNodeText", e.PARAGRAPH_STYLE = "paragraphStyleForm", e.ALIGN = "textAlignmentForm", e.ANCHOR_CONTAINER = "textAnchorForm", e.FONT_BACKGROUND_COLOR = "textBlockFontBackgroundColor", e.TEXT_BLOCK_BACKGROUND_COLOR = "textBlockBackgroundColor", e.FONT_COLOR = "textBlockFontColor", e.TEXT_BLOCK_FONT_FAMILY = "textBlockFontFamily", e.FONT_FAMILY = "textFontFamily", e.FONT_SIZE = "textBlockFontSize", e.FONT_WEIGHT = "textBlockFontWeight", e.DIRECTION = "textBlockDirectionForm", e.INSERT_FORM = "textBlockInsertForm", e.LINK_DATA = "textBlockLinkDataForm", e.FORMAT = "textBlockTextFormatForm", e.FIXED_HEIGHT = "textFixedHeightForm", e.INTERNAL_INDENTS = "textInternalIndents", e.LINE_HEIGHT = "textLineHeightForm", e.MIME_TYPE = "textMimeTypeForm", e.NO_LINE_WRAPS = "textNoLineWrapsForm", e))(k || {}), p = /* @__PURE__ */ ((e) => (e.ALT_TEXT = "altText", e.LINK = "blockLink", e.ALIGNMENT = "imageAlignment", e.ANCHOR_LINK_CONTAINER = "imageAnchorLinkContainerForm", e.BORDER_RADIUS = "imageBorderRadiusForm", e.IMAGE = "imageImageForm", e.EXTERNAL_INDENTS = "imageExternalIndents", e.MIME_TYPE = "imageMimeTypeForm", e.RESPONSIVE = "imageResponsive", e.ROLLOVER_IMAGE = "imageRolloverImageForm", e.ROLLOVER_SWITCHER = "imageRolloverSwitcherForm", e.SIZE = "imageSizeContainer", e))(p || {}), ue = /* @__PURE__ */ ((e) => (e.BACKGROUND_COLOR = "containerBackgroundColorForm", e.BORDER_FORM = "containerBorderForm", e.BORDER_RADIUS = "containerBorderRadiusForm", e.EXTERNAL_INDENTS = "containerExternalIndentsForm", e.IMAGE_CONTAINER = "containerImageContainerForm", e.MIME_TYPE = "containerMimeTypeForm", e.DISPLAY_CONDITIONS = "displayConditions", e.HIDDEN_NODE = "containerHiddenNodeForm", e))(ue || {}), n = {
|
|
342
|
+
}, U = "esd-block-button", w = "esd-block-text", K = "esd-block-image", J = "esd-structure", ee = "esd-block-video", te = "esd-block-social", re = "esd-block-banner", ae = "esd-block-timer", ne = "esd-block-menu", se = "esd-block-html", ie = "esd-block-spacer", le = "esd-container-frame", Ee = "esd-stripe", oe = "esd-amp-form", I = ((e) => (e.BUTTON = `.${U}`, e.TEXT = `.${w}`, e.IMAGE = `.${K}`, e.STRUCTURE = `.${J}`, e.VIDEO = `.${ee}`, e.SOCIAL = `.${te}`, e.BANNER = `.${re}`, e.TIMER = `.${ae}`, e.MENU = `.${ne}`, e.HTML = `.${se}`, e.SPACER = `.${ie}`, e.CONTAINER = `.${le}`, e.STRIPE = `.${Ee}`, e.FORM = `.${oe}`, e))(I || {}), de = /* @__PURE__ */ ((e) => (e.BLOCK_IMAGE = "BLOCK_IMAGE", e.BLOCK_TEXT = "BLOCK_TEXT", e.BLOCK_BUTTON = "BLOCK_BUTTON", e.BLOCK_SPACER = "BLOCK_SPACER", e.BLOCK_VIDEO = "BLOCK_VIDEO", e.BLOCK_SOCIAL = "BLOCK_SOCIAL", e.BLOCK_BANNER = "BLOCK_BANNER", e.BLOCK_TIMER = "BLOCK_TIMER", e.BLOCK_MENU = "BLOCK_MENU", e.BLOCK_MENU_ITEM = "BLOCK_MENU_ITEM", e.BLOCK_HTML = "BLOCK_HTML", e.BLOCK_AMP_CAROUSEL = "BLOCK_AMP_CAROUSEL", e.BLOCK_AMP_ACCORDION = "BLOCK_AMP_ACCORDION", e.BLOCK_AMP_FORM = "BLOCK_AMP_FORM", e.CONTAINER = "CONTAINER", e.FORM_CONTAINER = "FORM_CONTAINER", e.STRUCTURE = "STRUCTURE", e.STRIPE = "STRIPE", e.EMPTY_CONTAINER = "EMPTY_CONTAINER", e.CUSTOM_BLOCK_LINK = "CUSTOM_BLOCK_LINK", e.CUSTOM_BLOCK_IMAGE = "CUSTOM_BLOCK_IMAGE", e.CUSTOM_BLOCK_TEXT = "CUSTOM_BLOCK_TEXT", e))(de || {}), F = /* @__PURE__ */ ((e) => (e.ANCHOR_LINK_CONTAINER = "anchorLinkFormContainer", e.APPLY_CONDITION = "applyCondition", e.APPLY_CONDITION_SWITCHER = "applyConditionSwitcher", e.BACKGROUND_COLOR = "backgroundColor", e.BACKGROUND_IMAGE = "generalImageContainer", e.TEXT_COLOR = "textColor", e.TEXT_STYLE = "textStyle", e.TEXT_SIZE = "textSize", e.TEXT_LINE_SPACING = "textLineSpacing", e.TEXT_ALIGN = "textAlign", e.FIXED_HEIGHT_SWITCHER = "fixedHeightSwitcherForm", e.HIDDEN_NODE = "hiddenNode", e.SMART_BLOCK = "smartBlock", e.SYNCHRONIZED_MODULE = "synchronizedModuleForm", e.FONT_FAMILY = "generalFontFamilyForm", e.BLOCK_INTERNAL_INDENTS = "generalBlockInternalIndents", e.STRUCTURE_INTERNAL_INDENTS = "generalStructureInternalIndents", e))(F || {}), H = /* @__PURE__ */ ((e) => (e.ADJUST_TO_WIDTH = "adjustToWidth", e.ALIGNMENT = "buttonAlignment", e.BORDER = "buttonBorder", e.BORDER_RADIUS = "buttonBorderRadius", e.COLOR = "buttonColor", e.BUTTON_BLOCK_BACKGROUND_COLOR = "buttonBlockBackgroundColor", e.EXTERNAL_INDENTS = "buttonExternalIndents", e.FIXED_HEIGHT = "buttonFixedHeightForm", e.FONT_COLOR = "buttonFontColor", e.FONT_FAMILY = "buttonFontFamily", e.FONT_SIZE = "buttonFontSize", e.FONT_WEIGHT = "buttonFontWeight", e.ICON = "buttonIconContainer", e.ICON_ALIGN = "buttonIconAlign", e.ICON_INDENT = "buttonIconIndent", e.ICON_WIDTH = "buttonIconWidth", e.IMAGE = "buttonImageForm", e.INTERNAL_INDENTS = "buttonInternalIndents", e.LINK = "buttonLink", e.MIME_TYPE = "buttonMimeTypeForm", e.SWITCHER_HOVERED_STYLES = "buttonSwitcherHoveredStylesForm", e.TEXT = "buttonText", e.TEXT_STYLE_AND_COLOR = "buttonTextStyleAndColorForm", e.HOVERED_BORDER_COLOR = "hoveredStyleBorderButtonForm", e.HOVERED_COLOR = "hoveredButtonColorForm", e.HOVERED_TEXT_COLOR = "hoveredButtonTextColorForm", e))(H || {}), k = /* @__PURE__ */ ((e) => (e.HIDDEN_NODE = "hiddenNodeText", e.PARAGRAPH_STYLE = "paragraphStyleForm", e.ALIGN = "textAlignmentForm", e.ANCHOR_CONTAINER = "textAnchorForm", e.FONT_BACKGROUND_COLOR = "textBlockFontBackgroundColor", e.TEXT_BLOCK_BACKGROUND_COLOR = "textBlockBackgroundColor", e.FONT_COLOR = "textBlockFontColor", e.TEXT_BLOCK_FONT_FAMILY = "textBlockFontFamily", e.FONT_FAMILY = "textFontFamily", e.FONT_SIZE = "textBlockFontSize", e.FONT_WEIGHT = "textBlockFontWeight", e.DIRECTION = "textBlockDirectionForm", e.INSERT_FORM = "textBlockInsertForm", e.LINK_DATA = "textBlockLinkDataForm", e.FORMAT = "textBlockTextFormatForm", e.FIXED_HEIGHT = "textFixedHeightForm", e.INTERNAL_INDENTS = "textInternalIndents", e.LINE_HEIGHT = "textLineHeightForm", e.MIME_TYPE = "textMimeTypeForm", e.NO_LINE_WRAPS = "textNoLineWrapsForm", e))(k || {}), p = /* @__PURE__ */ ((e) => (e.ALT_TEXT = "altText", e.LINK = "blockLink", e.ALIGNMENT = "imageAlignment", e.ANCHOR_LINK_CONTAINER = "imageAnchorLinkContainerForm", e.BORDER_RADIUS = "imageBorderRadiusForm", e.IMAGE = "imageImageForm", e.EXTERNAL_INDENTS = "imageExternalIndents", e.MIME_TYPE = "imageMimeTypeForm", e.RESPONSIVE = "imageResponsive", e.ROLLOVER_IMAGE = "imageRolloverImageForm", e.ROLLOVER_SWITCHER = "imageRolloverSwitcherForm", e.SIZE = "imageSizeContainer", e))(p || {}), ue = /* @__PURE__ */ ((e) => (e.BACKGROUND_COLOR = "containerBackgroundColorForm", e.BORDER_FORM = "containerBorderForm", e.BORDER_RADIUS = "containerBorderRadiusForm", e.EXTERNAL_INDENTS = "containerExternalIndentsForm", e.IMAGE_CONTAINER = "containerImageContainerForm", e.MIME_TYPE = "containerMimeTypeForm", e.DISPLAY_CONDITIONS = "displayConditions", e.HIDDEN_NODE = "containerHiddenNodeForm", e))(ue || {}), n = {
|
|
343
343
|
BLOCK_BUTTON: H,
|
|
344
344
|
BLOCK_TEXT: k,
|
|
345
345
|
BLOCK_IMAGE: p,
|
|
346
346
|
GENERAL: F
|
|
347
|
-
}, Ie = /* @__PURE__ */ ((e) => (e.SAVE_AS_MODULE = "saveAsModule", e.IMPROVE_WITH_AI = "improveWithAI", e.MOVE = "move", e.COPY = "copy", e.REMOVE = "remove", e.CLEAR_CONTAINER = "clearContainer", e.EXTERNAL_DISPLAY_CONDITION = "externalDisplayCondition", e))(Ie || {}),
|
|
347
|
+
}, Ie = /* @__PURE__ */ ((e) => (e.SAVE_AS_MODULE = "saveAsModule", e.IMPROVE_WITH_AI = "improveWithAI", e.MOVE = "move", e.COPY = "copy", e.REMOVE = "remove", e.CLEAR_CONTAINER = "clearContainer", e.EXTERNAL_DISPLAY_CONDITION = "externalDisplayCondition", e))(Ie || {}), Te = /* @__PURE__ */ ((e) => (e.previewDeviceMode = "previewDeviceMode", e.panelPosition = "panelPosition", e.themeMode = "themeMode", e))(Te || {}), ce = /* @__PURE__ */ ((e) => (e.DESKTOP = "DESKTOP", e.MOBILE = "MOBILE", e))(ce || {}), be = /* @__PURE__ */ ((e) => (e.SETTINGS = "settings", e.STYLES = "styles", e.DATA = "data", e))(be || {}), a = {
|
|
348
348
|
name: "name",
|
|
349
349
|
disabled: "disabled"
|
|
350
350
|
}, he = {
|
|
@@ -619,7 +619,7 @@ var j = {
|
|
|
619
619
|
}
|
|
620
620
|
};
|
|
621
621
|
G.REQUIRED_METHODS = ["getId", "getTemplate"];
|
|
622
|
-
var
|
|
622
|
+
var Tt = G, Xe = class m extends i {
|
|
623
623
|
constructor() {
|
|
624
624
|
super(m.REQUIRED_METHODS, m);
|
|
625
625
|
}
|
|
@@ -694,7 +694,7 @@ var V = class extends x {
|
|
|
694
694
|
const t = e.querySelectorAll(I.IMAGE), r = e.asElement().hasClass(K) ? [e] : [];
|
|
695
695
|
return t.length ? t : r;
|
|
696
696
|
}
|
|
697
|
-
},
|
|
697
|
+
}, ct = class extends V {
|
|
698
698
|
getParentControlId() {
|
|
699
699
|
return n.BLOCK_IMAGE.EXTERNAL_INDENTS;
|
|
700
700
|
}
|
|
@@ -1215,17 +1215,17 @@ export {
|
|
|
1215
1215
|
It as ButtonTextStyleAndFontColorBuiltInControl,
|
|
1216
1216
|
ue as ContainerControls,
|
|
1217
1217
|
Ie as ContextActionType,
|
|
1218
|
-
|
|
1219
|
-
|
|
1218
|
+
Tt as Control,
|
|
1219
|
+
Te as EditorStatePropertyType,
|
|
1220
1220
|
Ve as Extension,
|
|
1221
1221
|
Nt as ExtensionBuilder,
|
|
1222
1222
|
F as GeneralControls,
|
|
1223
1223
|
Dt as IconsRegistry,
|
|
1224
1224
|
p as ImageControls,
|
|
1225
|
-
|
|
1225
|
+
ct as ImageMarginsBuiltInControl,
|
|
1226
1226
|
bt as ImageSizeBuiltInControl,
|
|
1227
1227
|
St as ModificationDescription,
|
|
1228
|
-
|
|
1228
|
+
ce as PreviewDeviceMode,
|
|
1229
1229
|
ht as SettingsPanelRegistry,
|
|
1230
1230
|
mt as SettingsPanelTab,
|
|
1231
1231
|
be as SettingsTab,
|
package/dist/package.json.js
CHANGED
|
@@ -14,8 +14,9 @@ export declare function parseRecommendationVariable(field: string): {
|
|
|
14
14
|
* `{{recoId_index_attribute}}` variables: the built-in compiler attributes plus
|
|
15
15
|
* each account attribute in its canonical token form — bare for
|
|
16
16
|
* `defaultAttribute`, `product_attribute.<name>` for `productAttribute`. Using
|
|
17
|
-
* `
|
|
18
|
-
* validator's notion of "valid form" identical to what is actually emitted
|
|
17
|
+
* `filterToProductAttrValue` (the same producer the block builder uses) keeps the
|
|
18
|
+
* validator's notion of "valid form" identical to what is actually emitted, and
|
|
19
|
+
* admits both forms when a default and a custom attribute share a name.
|
|
19
20
|
*/
|
|
20
21
|
export declare function buildPartnerAttributeNameSet(filterList: FiltersResponse): Set<string>;
|
|
21
22
|
/**
|
|
@@ -193,6 +193,7 @@ export type PerElementStyles = Record<string, MappedTextStyle | MappedButtonStyl
|
|
|
193
193
|
export interface MappedComposition {
|
|
194
194
|
composition: string[];
|
|
195
195
|
visibility: Record<string, boolean>;
|
|
196
|
+
/** Canonical `product-attr` values, mirrored into `data-custom-attributes`. */
|
|
196
197
|
customAttributes: string[];
|
|
197
198
|
/** Mapping of customAttr key → full `product-attr` value. */
|
|
198
199
|
customAttrValues: Record<string, string>;
|
|
@@ -8,6 +8,6 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export { RecommendationBlockId } from './blockIds';
|
|
10
10
|
export { RecommendationControlId } from './controlIds';
|
|
11
|
-
export { BLOCK_ROOT_SELECTOR, CONTAINER_SELECTOR, DESKTOP_CONTAINER_SELECTOR, MOBILE_CONTAINER_SELECTOR, MOBILE_ROW_SELECTOR, CSS_CLASS_RECO_BUTTON, CSS_CLASS_SKIP_COMPILE, RECOMMENDATION_VARIABLE_BUILTIN_ATTRIBUTES, CURRENCY_ATTR, ATTR_PRODUCT_IMAGE, ATTR_PRODUCT_NAME, ATTR_PRODUCT_PRICE, ATTR_PRODUCT_OLD_PRICE, ATTR_PRODUCT_OMNIBUS_PRICE, ATTR_PRODUCT_OMNIBUS_DISCOUNT, ATTR_PRODUCT_BUTTON, ATTR_CUSTOM_PREFIX, ATTR_DATA_CUSTOM_ATTRIBUTES, ATTR_PRODUCT_ATTR, PRODUCT_ATTRIBUTE_PREFIX, BUILT_IN_DEFAULT_ATTRIBUTES, } from './selectors';
|
|
11
|
+
export { BLOCK_ROOT_SELECTOR, CONTAINER_SELECTOR, DESKTOP_CONTAINER_SELECTOR, MOBILE_CONTAINER_SELECTOR, MOBILE_ROW_SELECTOR, CSS_CLASS_RECO_BUTTON, CSS_CLASS_SKIP_COMPILE, RECOMMENDATION_VARIABLE_BUILTIN_ATTRIBUTES, CURRENCY_ATTR, ATTR_PRODUCT_IMAGE, ATTR_PRODUCT_NAME, ATTR_PRODUCT_PRICE, ATTR_PRODUCT_OLD_PRICE, ATTR_PRODUCT_OMNIBUS_PRICE, ATTR_PRODUCT_OMNIBUS_DISCOUNT, ATTR_PRODUCT_BUTTON, ATTR_CUSTOM_PREFIX, ATTR_DATA_CUSTOM_ATTRIBUTES, ATTR_PRODUCT_ATTR, SELECTOR_ATTRIBUTE_ROW, ATTR_DATA_ATTRIBUTE_TYPE, PRODUCT_ATTRIBUTE_PREFIX, BUILT_IN_DEFAULT_ATTRIBUTES, } from './selectors';
|
|
12
12
|
export { LAYOUT_VALUES, LAYOUT_OPTIONS, DEFAULT_PRODUCTS_PER_ROW, DEFAULT_CARDS_IN_ROW, DEFAULT_MOBILE_CARDS_IN_ROW, MAX_PRODUCT_COUNT, MIN_PRODUCT_COUNT, MAX_PRODUCTS_PER_ROW, MIN_PRODUCTS_PER_ROW, MAX_MOBILE_PRODUCTS_PER_ROW, MIN_MOBILE_PRODUCTS_PER_ROW, DEFAULT_COLUMN_SPACING, DEFAULT_ROW_SPACING, DEFAULT_MOBILE_COLUMN_SPACING, DEFAULT_MOBILE_ROW_SPACING, MIN_SPACING, MAX_SPACING, SPACING_STEP, } from './layout';
|
|
13
13
|
export { DEFAULT_NODE_CONFIG, DEFAULT_CURRENCY, DEFAULT_COMPOSITION, DEFAULT_VISIBILITY, CURRENT_CONFIG_VERSION, EXCLUDED_ALGORITHM_IDS, } from './defaultConfig';
|
|
@@ -68,6 +68,10 @@ export declare const ATTR_CUSTOM_PREFIX = "customAttr:";
|
|
|
68
68
|
export declare const ATTR_DATA_CUSTOM_ATTRIBUTES = "data-custom-attributes";
|
|
69
69
|
/** HTML attribute on <td> elements identifying the product attribute for compiler template variable generation */
|
|
70
70
|
export declare const ATTR_PRODUCT_ATTR = "product-attr";
|
|
71
|
+
/** Row wrapper of one composition entry inside a product card */
|
|
72
|
+
export declare const SELECTOR_ATTRIBUTE_ROW = ".recommendation-attribute-row";
|
|
73
|
+
/** HTML attribute on an attribute row holding its composition key */
|
|
74
|
+
export declare const ATTR_DATA_ATTRIBUTE_TYPE = "data-attribute-type";
|
|
71
75
|
/** Prefix `resolveProductAttrValue` puts on custom (non-default) product attributes in `product-attr` values */
|
|
72
76
|
export declare const PRODUCT_ATTRIBUTE_PREFIX = "product_attribute.";
|
|
73
77
|
/**
|
|
@@ -29,6 +29,8 @@ export declare class RecommendationCardCompositionControl extends CommonControl
|
|
|
29
29
|
private _initializeComposition;
|
|
30
30
|
private _registerValueChangeListeners;
|
|
31
31
|
private _readCompositionFromNode;
|
|
32
|
+
/** Upgrades legacy bare-name custom keys to the canonical form. (SD-147101) */
|
|
33
|
+
private _normalizeComposition;
|
|
32
34
|
private _readCustomAttributesFromNode;
|
|
33
35
|
private _readVisibilityFromRows;
|
|
34
36
|
private _getDefaultVisibilities;
|
|
@@ -61,7 +63,15 @@ export declare class RecommendationCardCompositionControl extends CommonControl
|
|
|
61
63
|
private _createPriceGroupItemHtml;
|
|
62
64
|
private _createCustomItemHtml;
|
|
63
65
|
/**
|
|
64
|
-
*
|
|
66
|
+
* Dropdown label of an attribute. A partner can own a default and a custom
|
|
67
|
+
* attribute under the same name; the type is spelled out only then, so partners
|
|
68
|
+
* without a collision keep clean labels. (SD-147101)
|
|
69
|
+
*/
|
|
70
|
+
private _toOptionLabel;
|
|
71
|
+
/**
|
|
72
|
+
* Builds select options from the store's filterList. Option values are
|
|
73
|
+
* `product-attr` values, so a default attribute and a same-named custom one
|
|
74
|
+
* never collapse onto a single option. (SD-147101)
|
|
65
75
|
* Falls back to a single option for the currently selected attribute.
|
|
66
76
|
*/
|
|
67
77
|
private _getSelectOptions;
|
|
@@ -144,6 +154,12 @@ export declare class RecommendationCardCompositionControl extends CommonControl
|
|
|
144
154
|
*/
|
|
145
155
|
private _onCustomAttributeChanged;
|
|
146
156
|
private _onReorder;
|
|
157
|
+
/**
|
|
158
|
+
* Outer HTML of an existing attribute row, rewritten to the canonical key when
|
|
159
|
+
* the row still carries a legacy bare-name one. Copying rows this way lets the
|
|
160
|
+
* DOM converge on the next composition change without writing on open.
|
|
161
|
+
*/
|
|
162
|
+
private _getExistingRowHtml;
|
|
147
163
|
private _injectCustomAttributeHtml;
|
|
148
164
|
private _injectGridAttributeRow;
|
|
149
165
|
private _injectListAttributeRow;
|
|
@@ -204,13 +220,14 @@ export declare class RecommendationCardCompositionControl extends CommonControl
|
|
|
204
220
|
*/
|
|
205
221
|
private _subscribeToStoreChanges;
|
|
206
222
|
/**
|
|
207
|
-
* Returns filters eligible for the custom attribute dropdown,
|
|
208
|
-
*
|
|
223
|
+
* Returns filters eligible for the custom attribute dropdown, excluding default
|
|
224
|
+
* attributes already covered by built-in toggle items.
|
|
209
225
|
*/
|
|
210
226
|
private _getAddableFilters;
|
|
211
227
|
/**
|
|
212
|
-
* Looks up the display name for
|
|
213
|
-
*
|
|
228
|
+
* Looks up the display name for a `product-attr` value from the store's filterList.
|
|
229
|
+
* Matches on the canonical value, so a default and a same-named custom attribute
|
|
230
|
+
* resolve to their own entry. Falls back to Title Case of the bare name.
|
|
214
231
|
*/
|
|
215
232
|
private _getDisplayNameForAttribute;
|
|
216
233
|
/**
|
|
@@ -43,22 +43,23 @@ export declare function resolveInlinePriceOrder(composition: string[]): {
|
|
|
43
43
|
*/
|
|
44
44
|
export declare function toDisplayableAttributeValue(value: unknown): string | undefined;
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
46
|
+
* Name-only type lookup — **legacy fallback only**; the canonical path uses
|
|
47
|
+
* `isDefaultProductAttr` on the `product-attr` value. A bare name is the canonical
|
|
48
|
+
* form of a default attribute, so a duplicated name resolves to the default rather
|
|
49
|
+
* than to whichever entry the filter list happens to enumerate first. (SD-147101)
|
|
49
50
|
*/
|
|
50
51
|
export declare function isDefaultAttribute(attrName: string, filterList: FiltersResponse): boolean;
|
|
51
52
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
53
|
+
* Name-only `product-attr` resolution — **legacy fallback only**, see
|
|
54
|
+
* `isDefaultAttribute`. Prefer `filterToProductAttrValue`, which reads the type off
|
|
55
|
+
* the filter entry itself.
|
|
55
56
|
*/
|
|
56
57
|
export declare function resolveProductAttrValue(attrName: string, filterList: FiltersResponse): string;
|
|
57
58
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
59
|
+
* Maps a cell's `product-attr` value to its composition key. The value is the
|
|
60
|
+
* canonical identity, so it is carried into the key verbatim — stripping the
|
|
61
|
+
* `product_attribute.` prefix here would collapse a default and a same-named
|
|
62
|
+
* custom attribute onto one key.
|
|
62
63
|
*/
|
|
63
64
|
export declare function toCustomCompositionKey(productAttrValue: string): string;
|
|
64
65
|
/**
|
|
@@ -184,7 +185,7 @@ export interface RenderOptions {
|
|
|
184
185
|
* `RenderOptions`. Single source for both the stacked per-cell options and the two inline
|
|
185
186
|
* (price + old-price) option sets, so style capture → re-bake stays consistent across layouts.
|
|
186
187
|
*/
|
|
187
|
-
export declare function buildCellOptions(attrType: string, renderOptions: RenderOptions): CellRenderOptions;
|
|
188
|
+
export declare function buildCellOptions(attrType: string, renderOptions: RenderOptions, composition?: string[]): CellRenderOptions;
|
|
188
189
|
/**
|
|
189
190
|
* Options for prepareProductRows unified function
|
|
190
191
|
*/
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { FiltersResponse } from '@@/Types/recommendation';
|
|
2
|
+
import type { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
|
|
3
|
+
/**
|
|
4
|
+
* Canonical identity of a card-composition custom attribute is its `product-attr`
|
|
5
|
+
* value — `brand` for a default attribute, `product_attribute.brand` for a custom
|
|
6
|
+
* one. A partner can own both under the same name, and only this form tells them
|
|
7
|
+
* apart. (SD-147101)
|
|
8
|
+
*/
|
|
9
|
+
type FilterEntry = FiltersResponse[string];
|
|
10
|
+
/** True when a `product-attr` value refers to a top-level (default) product field. */
|
|
11
|
+
export declare function isDefaultProductAttr(productAttrValue: string): boolean;
|
|
12
|
+
/** The bare attribute name behind a `product-attr` value (`product_attribute.brand` → `brand`). */
|
|
13
|
+
export declare function bareAttributeName(productAttrValue: string): string;
|
|
14
|
+
/** `customAttr:product_attribute.brand` → `product_attribute.brand`. */
|
|
15
|
+
export declare function compositionKeyToProductAttr(compositionKey: string): string;
|
|
16
|
+
/** `product_attribute.brand` → `customAttr:product_attribute.brand`. */
|
|
17
|
+
export declare function productAttrToCompositionKey(productAttrValue: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Canonical identity of a filter entry. Reads the type off the entry itself, so
|
|
20
|
+
* two same-named filters never collapse onto one value.
|
|
21
|
+
*/
|
|
22
|
+
export declare function filterToProductAttrValue(filter: FilterEntry): string;
|
|
23
|
+
/**
|
|
24
|
+
* Filter entry behind a bare attribute name. A bare name is the canonical form of a
|
|
25
|
+
* DEFAULT attribute, so the default wins a name collision; the custom entry is only
|
|
26
|
+
* reached when it is the sole match (a genuinely legacy key). (SD-147101)
|
|
27
|
+
*/
|
|
28
|
+
export declare function findFilterByBareName(bareName: string, filterList: FiltersResponse): FilterEntry | undefined;
|
|
29
|
+
/** Composition array with every `customAttr:*` key upgraded to the canonical form. */
|
|
30
|
+
export declare function normalizeCompositionKeys(composition: string[], blockNode?: ImmutableHtmlNode | null, filterList?: FiltersResponse): string[];
|
|
31
|
+
/**
|
|
32
|
+
* `data-custom-attributes` upgraded to canonical values. Index-preserving: the
|
|
33
|
+
* Nth entry must keep mapping to the Nth `customAttr:*` composition key.
|
|
34
|
+
*/
|
|
35
|
+
export declare function normalizeCustomAttrValues(values: string[], blockNode?: ImmutableHtmlNode | null, filterList?: FiltersResponse): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Composition key of an attribute row. Custom rows are keyed by their `product-attr`
|
|
38
|
+
* value, which stays correct on rows still tagged with a legacy bare name.
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveRowCompositionKey(row: ImmutableHtmlNode): string | null;
|
|
41
|
+
/**
|
|
42
|
+
* Finds an attribute row by composition key, tolerating rows still tagged with the
|
|
43
|
+
* legacy bare-name key. Custom candidates are validated against their `product-attr`,
|
|
44
|
+
* so a legacy custom `brand` row is never mistaken for the default `brand`.
|
|
45
|
+
*/
|
|
46
|
+
export declare function findAttributeRow(container: ImmutableHtmlNode, compositionKey: string): ImmutableHtmlNode | null;
|
|
47
|
+
/**
|
|
48
|
+
* Rewrites a copied row's legacy `data-attribute-type` to the canonical key so the
|
|
49
|
+
* DOM converges on the user's next composition change (no write on mere open).
|
|
50
|
+
*/
|
|
51
|
+
export declare function rewriteLegacyRowKeyHtml(rowHtml: string, compositionKey: string): string;
|
|
52
|
+
export {};
|
|
@@ -34,6 +34,8 @@ interface SelectProps {
|
|
|
34
34
|
placeholder: string;
|
|
35
35
|
options: TextValueObject[];
|
|
36
36
|
className?: string;
|
|
37
|
+
/** Adds the picker's built-in search box. Worth it once the list gets long. */
|
|
38
|
+
searchable?: boolean;
|
|
37
39
|
}
|
|
38
40
|
interface CounterProps {
|
|
39
41
|
name: string;
|
|
@@ -105,7 +107,7 @@ export declare abstract class CommonControl extends Control {
|
|
|
105
107
|
text: string;
|
|
106
108
|
value: string;
|
|
107
109
|
}): string;
|
|
108
|
-
_GuSelect({ name, placeholder, options, className }: SelectProps): string;
|
|
110
|
+
_GuSelect({ name, placeholder, options, className, searchable, }: SelectProps): string;
|
|
109
111
|
_GuTextInput({ name, placeholder, className, disabled }: TextInputProps): string;
|
|
110
112
|
_GuCounter({ name, maxValue, minValue, step }: CounterProps): string;
|
|
111
113
|
_GuRadioButtonItem({ text, value, icon }: {
|