@useinsider/guido 3.19.0-beta.cac604e → 3.19.0-beta.cc48fee

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.
Files changed (58) hide show
  1. package/dist/components/Guido.vue.js +6 -6
  2. package/dist/components/Guido.vue2.js +96 -85
  3. package/dist/components/organisms/base/AuthErrorModal.vue.js +18 -0
  4. package/dist/components/organisms/base/AuthErrorModal.vue2.js +42 -0
  5. package/dist/components/wrappers/WpModal.vue.js +1 -1
  6. package/dist/components/wrappers/WpModal.vue2.js +4 -3
  7. package/dist/composables/useAuthError.js +52 -0
  8. package/dist/composables/useAutoSave.js +11 -11
  9. package/dist/composables/useCortexBlueprintBridge.js +122 -54
  10. package/dist/composables/useEmailTemplateApplier.js +111 -50
  11. package/dist/composables/useHttp.js +64 -54
  12. package/dist/composables/useLegacyStrategyConversion.js +23 -19
  13. package/dist/composables/useStripo.js +24 -20
  14. package/dist/composables/useToaster.js +17 -15
  15. package/dist/composables/validators/useLiquidValidator.js +15 -15
  16. package/dist/config/migrator/index.js +14 -13
  17. package/dist/config/migrator/itemsBlockMigrator.js +236 -248
  18. package/dist/config/migrator/recommendationMigrator.js +28 -21
  19. package/dist/config/migrator/recommendationPartnerMigrator.js +56 -0
  20. package/dist/enums/extensions/recommendationBlock.js +30 -29
  21. package/dist/extensions/Blocks/Items/constants/cardLayout.js +20 -0
  22. package/dist/extensions/Blocks/Items/controls/name/trimming.js +18 -17
  23. package/dist/extensions/Blocks/Items/controls/settingsControl.js +114 -105
  24. package/dist/extensions/Blocks/Items/enums/productEnums.js +14 -9
  25. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +11 -9
  26. package/dist/extensions/Blocks/Items/template.js +219 -204
  27. package/dist/extensions/Blocks/Recommendation/block.js +54 -88
  28. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +32 -51
  29. package/dist/extensions/Blocks/Recommendation/utils/partnerCustomizations.js +3 -1
  30. package/dist/extensions/Blocks/Recommendation/utils/partnerScope.js +11 -12
  31. package/dist/guido.css +1 -1
  32. package/dist/src/components/organisms/base/AuthErrorModal.vue.d.ts +2 -0
  33. package/dist/src/components/wrappers/WpModal.vue.d.ts +5 -1
  34. package/dist/src/composables/useAuthError.d.ts +12 -0
  35. package/dist/src/composables/useCortexBlueprintBridge.d.ts +2 -3
  36. package/dist/src/composables/useEmailTemplateApplier.d.ts +18 -5
  37. package/dist/src/composables/useGuidoActions.d.ts +2 -0
  38. package/dist/src/composables/useHttp.d.ts +2 -0
  39. package/dist/src/config/migrator/index.d.ts +2 -1
  40. package/dist/src/config/migrator/recommendationPartnerMigrator.d.ts +19 -0
  41. package/dist/src/enums/extensions/recommendationBlock.d.ts +1 -1
  42. package/dist/src/extensions/Blocks/Items/constants/cardLayout.d.ts +44 -0
  43. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +3 -0
  44. package/dist/src/extensions/Blocks/Items/template.d.ts +19 -0
  45. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +0 -6
  46. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +0 -5
  47. package/dist/src/extensions/Blocks/Recommendation/utils/partnerScope.d.ts +13 -7
  48. package/dist/src/mock/cortexChatStore.d.ts +12 -0
  49. package/dist/src/stores/guido-email-editor.d.ts +20 -10
  50. package/dist/src/stores/onboarding.d.ts +4 -0
  51. package/dist/src/stores/recommendation.d.ts +5 -0
  52. package/dist/src/utils/dateUtil.d.ts +10 -0
  53. package/dist/src/utils/genericUtil.d.ts +3 -0
  54. package/dist/static/styles/components/version-history.css.js +2 -6
  55. package/dist/stores/guido-email-editor.js +3 -1
  56. package/dist/stores/onboarding.js +4 -0
  57. package/dist/utils/pairProductVariables.js +71 -71
  58. package/package.json +2 -2
@@ -1,41 +1,39 @@
1
- var D = Object.defineProperty;
2
- var S = (m, c, t) => c in m ? D(m, c, { enumerable: !0, configurable: !0, writable: !0, value: t }) : m[c] = t;
3
- var _ = (m, c, t) => S(m, typeof c != "symbol" ? c + "" : c, t);
4
- import { useConfig as g } from "../../../composables/useConfig.js";
5
- import { BlockId as T } from "../../../enums/block.js";
6
- import { getMigrationBannerHtml as N } from "../../../utils/migrationBannerHtml.js";
7
- import { Block as O, BlockCompositionType as M, ModificationDescription as h } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
8
- import { CURRENT_CONFIG_VERSION as w, PRE_RRS_CONFIG_VERSION as v } from "./constants/defaultConfig.js";
9
- import { RECOMMENDATION_ID_ATTR as d, SELECTOR_ATTRIBUTE_ROW as F, ATTR_CUSTOM_PREFIX as H, ATTR_DATA_CARD_COMPOSITION as P, ATTR_DATA_CUSTOM_ATTRIBUTES as x } from "./constants/selectors.js";
10
- import { regenerateMobileProductRows as $ } from "./controls/main/utils.js";
11
- import { ensureMobileCssRulesExist as C, setMobileLayoutOptOut as b, hasMobileLayoutOptOut as L } from "./controls/mobileLayout/cssRules.js";
1
+ var y = Object.defineProperty;
2
+ var A = (l, c, t) => c in l ? y(l, c, { enumerable: !0, configurable: !0, writable: !0, value: t }) : l[c] = t;
3
+ var h = (l, c, t) => A(l, typeof c != "symbol" ? c + "" : c, t);
4
+ import { useConfig as d } from "../../../composables/useConfig.js";
5
+ import { BlockId as D } from "../../../enums/block.js";
6
+ import { getMigrationBannerHtml as C } from "../../../utils/migrationBannerHtml.js";
7
+ import { Block as E, BlockCompositionType as S, ModificationDescription as p } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
8
+ import { CURRENT_CONFIG_VERSION as N, PRE_RRS_CONFIG_VERSION as O } from "./constants/defaultConfig.js";
9
+ import { RECOMMENDATION_ID_ATTR as m } from "./constants/selectors.js";
10
+ import { regenerateMobileProductRows as M } from "./controls/main/utils.js";
11
+ import { ensureMobileCssRulesExist as I, setMobileLayoutOptOut as R, hasMobileLayoutOptOut as w } from "./controls/mobileLayout/cssRules.js";
12
12
  import { RecommendationConfigService as s } from "./services/configService.js";
13
- import { useRecommendationExtensionStore as p } from "./store/recommendation.js";
14
- import { getDefaultTemplate as q } from "./templates/grid/template.js";
15
- import { useRecommendationBlockWarning as U } from "./useRecommendationBlockWarning.js";
16
- import { resolveRowCompositionKey as V } from "./utils/compositionKeys.js";
17
- import { carriesForeignPartnerConfig as W, loadedRecommendationIds as K, withoutCustomAttributes as z } from "./utils/partnerScope.js";
18
- const y = T.Recommendation, f = "recommendation-block-v2", B = "hide-price";
19
- let E = !1;
20
- class at extends O {
13
+ import { useRecommendationExtensionStore as g } from "./store/recommendation.js";
14
+ import { getDefaultTemplate as T } from "./templates/grid/template.js";
15
+ import { useRecommendationBlockWarning as v } from "./useRecommendationBlockWarning.js";
16
+ const k = D.Recommendation, u = "recommendation-block-v2", B = "hide-price";
17
+ let b = !1;
18
+ class j extends E {
21
19
  constructor() {
22
20
  super();
23
21
  /**
24
22
  * Stores the ID generated in getTemplate() so onCreated() can reuse it.
25
23
  * This avoids generating a new (different) ID in onCreated().
26
24
  */
27
- _(this, "_pendingBlockId", null);
25
+ h(this, "_pendingBlockId", null);
28
26
  /** Ids already reset under their new name, so the deferred pass skips their stale snapshot. */
29
- _(this, "_resetSourceIds", /* @__PURE__ */ new Set());
27
+ h(this, "_resetSourceIds", /* @__PURE__ */ new Set());
30
28
  }
31
29
  getId() {
32
- return y;
30
+ return k;
33
31
  }
34
32
  getIcon() {
35
33
  return "recommendation-icon";
36
34
  }
37
35
  getBlockCompositionType() {
38
- return M.CONTAINER;
36
+ return S.CONTAINER;
39
37
  }
40
38
  getName() {
41
39
  return this.api.translate("Recommendation Block");
@@ -46,8 +44,8 @@ class at extends O {
46
44
  );
47
45
  }
48
46
  getSettingsPanelTitleHtml() {
49
- return N(
50
- y,
47
+ return C(
48
+ k,
51
49
  this.api.translate("Recommendation Block"),
52
50
  this.api.translate("This block is switched from the Old Version to the New Version. We recommend you check the Recommendation block and test your message to ensure it works properly.")
53
51
  );
@@ -70,7 +68,7 @@ class at extends O {
70
68
  */
71
69
  getTemplate() {
72
70
  const t = this._generateNextId();
73
- return this._pendingBlockId = t, q(t);
71
+ return this._pendingBlockId = t, T(t);
74
72
  }
75
73
  /**
76
74
  * Called when a new block is dropped into the template
@@ -93,28 +91,28 @@ class at extends O {
93
91
  }
94
92
  const i = this._pendingBlockId ?? this._generateNextId();
95
93
  this._pendingBlockId = null, this._assignRecommendationId(t, i);
96
- const n = g().isFeatureEnabled("reusableRecommendationStrategy"), o = n && !s.hasConfig(t), { config: r, wasFreshDrop: a } = s.initializeConfig(
94
+ const n = d().isFeatureEnabled("reusableRecommendationStrategy"), o = n && !s.hasConfig(t), { config: r, wasFreshDrop: a } = s.initializeConfig(
97
95
  this.api,
98
96
  t,
99
97
  {
100
98
  recommendationId: i,
101
- configVersion: n ? w : v,
102
- ...o ? { partnerName: g().partnerName.value } : {},
99
+ configVersion: n ? N : O,
100
+ ...o ? { partnerName: d().partnerName.value } : {},
103
101
  // An RRS block picks a strategy, not an algorithm, and its algorithm control is
104
102
  // hidden. Keeping the `mostPopular` default would bake a most-popular feed URL
105
103
  // at save for a block the user never configured.
106
104
  ...o ? { strategy: "" } : {}
107
105
  }
108
- ), u = p();
109
- if (u.setCurrentBlock(i), this._stampHidePrice(t, r.priceHideIfSameAsDiscounted), a) {
110
- C(this.api);
111
- const l = this._getBlockElement(t);
112
- l && (b(this.api, l, !0), $({
106
+ ), f = g();
107
+ if (f.setCurrentBlock(i), this._stampHidePrice(t, r.priceHideIfSameAsDiscounted), a) {
108
+ I(this.api);
109
+ const _ = this._getBlockElement(t);
110
+ _ && (R(this.api, _, !0), M({
113
111
  currentNode: t,
114
112
  documentModifier: this.api.getDocumentModifier()
115
113
  }));
116
114
  }
117
- u.patchCurrentBlockConfig({ language: r.language }, { triggerRefetch: !1 }), this._warnIfMultipleBlocks();
115
+ f.patchCurrentBlockConfig({ language: r.language }, { triggerRefetch: !1 }), this._warnIfMultipleBlocks();
118
116
  }
119
117
  /**
120
118
  * Called when the document changes or template is loaded
@@ -134,13 +132,13 @@ class at extends O {
134
132
  "Assign recommendation ID to legacy block"
135
133
  );
136
134
  }
137
- this._healLingeringDuplicate(t), s.needsMigration(t) && this._migrateFromLegacy(t), this._healHidePriceAttr(t), this._resetForeignPartnerConfig(t);
135
+ this._healLingeringDuplicate(t), s.needsMigration(t) && this._migrateFromLegacy(t), this._healHidePriceAttr(t);
138
136
  try {
139
- E || (C(this.api), E = !0);
137
+ b || (I(this.api), b = !0);
140
138
  const e = s.getConfig(t), i = this._getBlockElement(t);
141
139
  if (i) {
142
140
  const n = !e.mobileLayoutEnabled;
143
- L(i) !== n && b(this.api, i, n);
141
+ w(i) !== n && R(this.api, i, n);
144
142
  }
145
143
  } catch {
146
144
  }
@@ -154,7 +152,7 @@ class at extends O {
154
152
  */
155
153
  onDelete(t) {
156
154
  const e = this._getRecommendationId(t);
157
- e && p().removeBlockState(e);
155
+ e && g().removeBlockState(e);
158
156
  }
159
157
  /**
160
158
  * Warns (dark advisory toaster) when the design holds more than one live
@@ -170,7 +168,7 @@ class at extends O {
170
168
  */
171
169
  _warnIfMultipleBlocks() {
172
170
  try {
173
- U().warnIfMultipleBlocks(this.api.getDocumentRootHtmlNode());
171
+ v().warnIfMultipleBlocks(this.api.getDocumentRootHtmlNode());
174
172
  } catch {
175
173
  }
176
174
  }
@@ -182,9 +180,9 @@ class at extends O {
182
180
  let t = 0;
183
181
  try {
184
182
  const e = this.api.getDocumentRoot();
185
- e && "querySelectorAll" in e && e.querySelectorAll(`.${f}`).forEach((n) => {
183
+ e && "querySelectorAll" in e && e.querySelectorAll(`.${u}`).forEach((n) => {
186
184
  if ("getAttribute" in n) {
187
- const o = n.getAttribute(d), r = o ? parseInt(o) : 0;
185
+ const o = n.getAttribute(m), r = o ? parseInt(o) : 0;
188
186
  r > t && (t = r);
189
187
  }
190
188
  });
@@ -200,9 +198,9 @@ class at extends O {
200
198
  * the renamed one depending on where the module was dropped (SD-149916).
201
199
  */
202
200
  _scheduleArrivalReset(t) {
203
- g().isFeatureEnabled("reusableRecommendationStrategy") && setTimeout(() => {
201
+ d().isFeatureEnabled("reusableRecommendationStrategy") && setTimeout(() => {
204
202
  const e = this._getRecommendationId(t);
205
- e !== null && e > 0 && !this._resetSourceIds.delete(e) && p().resetArrivedBlock(e);
203
+ e !== null && e > 0 && !this._resetSourceIds.delete(e) && g().resetArrivedBlock(e);
206
204
  }, 0);
207
205
  }
208
206
  /**
@@ -225,7 +223,7 @@ class at extends O {
225
223
  if (!i || !("querySelectorAll" in i))
226
224
  return;
227
225
  const n = i.querySelectorAll(
228
- `.${f}[${d}="${e}"]`
226
+ `.${u}[${m}="${e}"]`
229
227
  );
230
228
  if (n.length <= 1)
231
229
  return;
@@ -250,7 +248,7 @@ class at extends O {
250
248
  const e = this.api.getDocumentRoot();
251
249
  if (e && "querySelectorAll" in e)
252
250
  return e.querySelectorAll(
253
- `.${f}[${d}="${t}"]`
251
+ `.${u}[${m}="${t}"]`
254
252
  ).length > 1;
255
253
  } catch {
256
254
  }
@@ -258,8 +256,8 @@ class at extends O {
258
256
  }
259
257
  /** Assigns a fresh id to a duplicated block and syncs DOM, node config and store. */
260
258
  _handleDuplicate(t, e) {
261
- const i = this._reassignDuplicateId(t, e), n = p();
262
- n.cloneBlockState(e, i), n.setCurrentBlock(i), g().isFeatureEnabled("reusableRecommendationStrategy") && (this._resetSourceIds.add(e), n.resetArrivedBlock(i)), this._warnIfMultipleBlocks();
259
+ const i = this._reassignDuplicateId(t, e), n = g();
260
+ n.cloneBlockState(e, i), n.setCurrentBlock(i), d().isFeatureEnabled("reusableRecommendationStrategy") && (this._resetSourceIds.add(e), n.resetArrivedBlock(i)), this._warnIfMultipleBlocks();
263
261
  }
264
262
  /**
265
263
  * Core id-reassignment for a duplicated block: rewrites the DOM
@@ -292,7 +290,7 @@ class at extends O {
292
290
  if (!("getAttribute" in t))
293
291
  return;
294
292
  const n = `ins-recommendation-v3-block-${e}`, o = `ins-recommendation-v3-block-${i}`, r = this.api.getDocumentModifier();
295
- r.modifyHtml(t).removeClass(n).setClass(o), r.apply(new h(
293
+ r.modifyHtml(t).removeClass(n).setClass(o), r.apply(new p(
296
294
  `Reassign recommendation instance class ${n} -> ${o}`
297
295
  ));
298
296
  }
@@ -307,7 +305,7 @@ class at extends O {
307
305
  if (!i)
308
306
  return;
309
307
  const n = this.api.getDocumentModifier();
310
- n.modifyHtml(i).setAttribute(d, e.toString()), n.apply(new h(`Assign recommendation ID ${e}`));
308
+ n.modifyHtml(i).setAttribute(m, e.toString()), n.apply(new p(`Assign recommendation ID ${e}`));
311
309
  }
312
310
  /**
313
311
  * Stamps the `hide-price` attribute (read by email-service at send time) on
@@ -315,7 +313,7 @@ class at extends O {
315
313
  */
316
314
  _stampHidePrice(t, e) {
317
315
  const i = this._getBlockElement(t);
318
- i && this.api.getDocumentModifier().modifyHtml(i).setAttribute(B, String(e)).apply(new h("Stamp hide-price"));
316
+ i && this.api.getDocumentModifier().modifyHtml(i).setAttribute(B, String(e)).apply(new p("Stamp hide-price"));
319
317
  }
320
318
  /**
321
319
  * Stamps `hide-price` from config only when the block lacks the attribute —
@@ -328,38 +326,6 @@ class at extends O {
328
326
  const { priceHideIfSameAsDiscounted: i } = s.getConfig(t);
329
327
  this._stampHidePrice(t, i);
330
328
  }
331
- /**
332
- * Empties a block copied in from another account: its strategy and attribute types
333
- * are account-scoped and would not resolve here (SD-151945). Layout, locale and
334
- * currency stay. The write stamps the current account, so the next pass is a no-op.
335
- */
336
- _resetForeignPartnerConfig(t) {
337
- var I, R;
338
- const e = this._getRecommendationId(t), i = this._getBlockElement(t);
339
- if (e === null || !i || !s.hasConfig(t))
340
- return;
341
- const { partnerName: n, template: o } = g(), r = s.getConfig(t);
342
- if (!W({
343
- config: r,
344
- blockId: e,
345
- partnerName: n.value,
346
- campaignUrls: (I = o.value) == null ? void 0 : I.recommendationCampaignUrls,
347
- loadedIds: K(((R = o.value) == null ? void 0 : R.html) ?? "")
348
- }))
349
- return;
350
- const u = z(r.composition), l = this.api.getDocumentModifier();
351
- i.querySelectorAll(F).forEach((k) => {
352
- var A;
353
- (A = V(k)) != null && A.startsWith(H) && l.modifyHtml(k).delete();
354
- }), l.modifyHtml(i).setAttribute(P, u.join(",")).setAttribute(x, "[]"), s.stageConfig(l, t, {
355
- strategyId: "",
356
- strategy: "",
357
- filters: [],
358
- productIds: [],
359
- composition: u,
360
- partnerName: n.value
361
- }), l.apply(new h("Reset recommendation block copied from another account")), p().resetPartnerScopedConfig(e);
362
- }
363
329
  /**
364
330
  * Gets the recommendation-id from a block node
365
331
  */
@@ -367,7 +333,7 @@ class at extends O {
367
333
  const e = this._getBlockElement(t);
368
334
  if (!e || !("getAttribute" in e))
369
335
  return null;
370
- const i = e.getAttribute(d);
336
+ const i = e.getAttribute(m);
371
337
  if (!i)
372
338
  return null;
373
339
  const n = parseInt(i);
@@ -379,10 +345,10 @@ class at extends O {
379
345
  _getBlockElement(t) {
380
346
  if ("getAttribute" in t) {
381
347
  const e = t.getAttribute("class");
382
- if (e && e.includes(f))
348
+ if (e && e.includes(u))
383
349
  return t;
384
350
  }
385
- return "querySelector" in t ? t.querySelector(`.${f}`) ?? null : null;
351
+ return "querySelector" in t ? t.querySelector(`.${u}`) ?? null : null;
386
352
  }
387
353
  /**
388
354
  * Migrate configuration from legacy format
@@ -392,6 +358,6 @@ class at extends O {
392
358
  }
393
359
  }
394
360
  export {
395
- y as BLOCK_ID,
396
- at as RecommendationBlock
361
+ k as BLOCK_ID,
362
+ j as RecommendationBlock
397
363
  };
@@ -1,27 +1,27 @@
1
- import { useToaster as D } from "../../../../composables/useToaster.js";
1
+ import { useToaster as _ } from "../../../../composables/useToaster.js";
2
2
  import { useTranslations as L } from "../../../../composables/useTranslations.js";
3
- import { getRecommendationFeedSourceMaps as F, strategyEditPath as U, URLS as E, getOperatorOptions as N, PriceAttributes as M } from "../../../../enums/extensions/recommendationBlock.js";
4
- import { ToasterTypeOptions as A } from "../../../../enums/toaster.js";
5
- import { useRecommendationApi as T } from "../../../../services/recommendationApi.js";
3
+ import { getRecommendationFeedSourceMaps as F, strategyEditPath as U, strategyCreatePath as N, getOperatorOptions as M, PriceAttributes as E } from "../../../../enums/extensions/recommendationBlock.js";
4
+ import { ToasterTypeOptions as B } from "../../../../enums/toaster.js";
5
+ import { useRecommendationApi as z } from "../../../../services/recommendationApi.js";
6
6
  import { useConfigStore as R } from "../../../../stores/config.js";
7
- import { defineStore as B } from "pinia";
7
+ import { defineStore as A } from "pinia";
8
8
  import "../constants/selectors.js";
9
- import { DEFAULT_MOBILE_CARDS_IN_ROW as O, DEFAULT_CARDS_IN_ROW as z } from "../constants/layout.js";
10
- import { CURRENT_CONFIG_VERSION as C, DEFAULT_NODE_CONFIG as x, EXCLUDED_ALGORITHM_IDS as V } from "../constants/defaultConfig.js";
9
+ import { DEFAULT_MOBILE_CARDS_IN_ROW as O, DEFAULT_CARDS_IN_ROW as x } from "../constants/layout.js";
10
+ import { CURRENT_CONFIG_VERSION as C, DEFAULT_NODE_CONFIG as T, EXCLUDED_ALGORITHM_IDS as V } from "../constants/defaultConfig.js";
11
11
  import { getDefaultProducts as w } from "../templates/utils.js";
12
12
  import { generateCompleteFilterQuery as P } from "../utils/filterUtil.js";
13
13
  import { isLegacyStrategyConfig as j } from "../utils/legacyStrategyMigration.js";
14
14
  import { getPartnerRecommendationParams as $ } from "../utils/partnerCustomizations.js";
15
- import { sanitizeProductIds as K } from "../utils/productIds.js";
16
- import { isFilterValid as q } from "../validation/filterSchema.js";
15
+ import { sanitizeProductIds as q } from "../utils/productIds.js";
16
+ import { isFilterValid as K } from "../validation/filterSchema.js";
17
17
  import { getInvalidFields as H, isConfigValid as J } from "../validation/requiredFields.js";
18
- const m = T();
19
- let S = null, p = null, y = null, b = "", k = null, I = 0;
18
+ const m = z();
19
+ let S = null, p = null, y = null, I = "", k = null, b = 0;
20
20
  const g = /* @__PURE__ */ new Map();
21
21
  let l = null;
22
- function _() {
22
+ function D() {
23
23
  return {
24
- cardsInRow: z,
24
+ cardsInRow: x,
25
25
  currencySettings: {
26
26
  name: "USD",
27
27
  value: "USD",
@@ -58,7 +58,7 @@ function _() {
58
58
  }
59
59
  function G() {
60
60
  return {
61
- recommendationConfigs: _(),
61
+ recommendationConfigs: D(),
62
62
  recommendationProducts: [],
63
63
  filterStatus: !1,
64
64
  filterSelectionDrawerStatus: !1,
@@ -87,7 +87,7 @@ const Q = () => ({
87
87
  currentRecommendationId: null,
88
88
  strategyPanelOpen: !1,
89
89
  configVersion: 0
90
- }), ft = B("guidoRecommendationExtension", {
90
+ }), ft = A("guidoRecommendationExtension", {
91
91
  state: () => Q(),
92
92
  getters: {
93
93
  // ====================================================================
@@ -98,7 +98,7 @@ const Q = () => ({
98
98
  * This allows all existing code that reads `store.recommendationConfigs` to work unchanged.
99
99
  */
100
100
  recommendationConfigs(t) {
101
- return t.currentRecommendationId !== null && t.blockStates[t.currentRecommendationId] ? t.blockStates[t.currentRecommendationId].recommendationConfigs : _();
101
+ return t.currentRecommendationId !== null && t.blockStates[t.currentRecommendationId] ? t.blockStates[t.currentRecommendationId].recommendationConfigs : D();
102
102
  },
103
103
  /**
104
104
  * Proxy getter: delegates to blockStates[currentRecommendationId].recommendationProducts
@@ -181,7 +181,7 @@ const Q = () => ({
181
181
  getFilterList() {
182
182
  return Object.values(this.filterList).filter((t) => t.isFilterable !== 0 && t.isFilterable !== !1).map((t) => {
183
183
  let e;
184
- return t.type === "productAttribute" ? e = `product_attributes.${t.attributeName}` : M.includes(t.attributeName) ? e = `${t.attributeName}.${this.recommendationConfigs.currencySettings.value}` : e = t.attributeName, {
184
+ return t.type === "productAttribute" ? e = `product_attributes.${t.attributeName}` : E.includes(t.attributeName) ? e = `${t.attributeName}.${this.recommendationConfigs.currencySettings.value}` : e = t.attributeName, {
185
185
  text: t.displayName,
186
186
  value: e,
187
187
  type: t.attributeType
@@ -314,7 +314,7 @@ const Q = () => ({
314
314
  * Creates a filter with the first available attribute and operator pre-selected.
315
315
  */
316
316
  createDefaultFilter(t, e) {
317
- const [r] = this.getFilterList, [n] = N(r == null ? void 0 : r.type);
317
+ const [r] = this.getFilterList, [n] = M(r == null ? void 0 : r.type);
318
318
  return {
319
319
  type: "standardFilter",
320
320
  attribute: (r == null ? void 0 : r.value) ?? "",
@@ -387,15 +387,15 @@ const Q = () => ({
387
387
  }
388
388
  if (this.strategiesFetched)
389
389
  return;
390
- const t = I, e = (async () => {
390
+ const t = b, e = (async () => {
391
391
  this.strategiesLoading = !0;
392
392
  try {
393
393
  const r = await m.fetchRecommendationStrategies();
394
- if (t !== I)
394
+ if (t !== b)
395
395
  return;
396
396
  this.strategies = r, this.strategiesFetched = !0;
397
397
  } finally {
398
- this.strategiesLoading = !1, t === I && (this.strategiesSettled = !0);
398
+ this.strategiesLoading = !1, t === b && (this.strategiesSettled = !0);
399
399
  }
400
400
  })();
401
401
  k = e;
@@ -405,25 +405,6 @@ const Q = () => ({
405
405
  k = null;
406
406
  }
407
407
  },
408
- /**
409
- * Drops what the store still holds for a block whose account-scoped config was just
410
- * reset in the document (SD-151945), so the panel re-seeds from the emptied node.
411
- */
412
- resetPartnerScopedConfig(t) {
413
- const e = t.toString();
414
- if (this.recommendationCampaignUrls[e] !== void 0) {
415
- const n = { ...this.recommendationCampaignUrls };
416
- delete n[e], this.recommendationCampaignUrls = n;
417
- }
418
- const r = this.blockStates[t];
419
- r && (r.recommendationConfigs = {
420
- ...r.recommendationConfigs,
421
- strategyId: "",
422
- strategy: "",
423
- filters: [],
424
- productIds: []
425
- }, r.isInitialized = !1, r.syncedConfigFingerprint = null, this.currentRecommendationId === t && this.configVersion++);
426
- },
427
408
  /**
428
409
  * Clears what a block inherited from the id it arrived holding, so the panel fetches for it.
429
410
  * A re-dropped saved module can keep the source's id — and its "already fetched" entry —
@@ -435,7 +416,7 @@ const Q = () => ({
435
416
  }));
436
417
  },
437
418
  invalidateStrategies() {
438
- this.strategiesFetched = !1, this.strategiesSettled = !1, I += 1;
419
+ this.strategiesFetched = !1, this.strategiesSettled = !1, b += 1;
439
420
  },
440
421
  /**
441
422
  * Opens a Smart Recommender strategy page in a new tab and refreshes the list every time
@@ -453,8 +434,8 @@ const Q = () => ({
453
434
  _armStrategyPageReturn(t) {
454
435
  const e = window.open(t, "_blank");
455
436
  if (!e)
456
- return D().showToaster({
457
- type: A.Error,
437
+ return _().showToaster({
438
+ type: B.Error,
458
439
  message: L()("discovery-strategy.error-description")
459
440
  }), !1;
460
441
  e.opener = null, l == null || l();
@@ -490,7 +471,7 @@ const Q = () => ({
490
471
  * new strategy is offered; the user picks it themselves.
491
472
  */
492
473
  openStrategyCreation() {
493
- return this._armStrategyPageReturn(E.RECOMMENDATION_STRATEGY_CREATE_PATH);
474
+ return this._armStrategyPageReturn(N());
494
475
  },
495
476
  /**
496
477
  * Opens the strategy's edit page. Every return refreshes the list so the block reflects the
@@ -552,7 +533,7 @@ const Q = () => ({
552
533
  this.patchCurrentBlockConfig({
553
534
  strategyId: "",
554
535
  strategy: "",
555
- size: x.size,
536
+ size: T.size,
556
537
  nodeConfigVersion: C
557
538
  });
558
539
  },
@@ -626,7 +607,7 @@ const Q = () => ({
626
607
  const n = [...e.recommendationConfigs.filters];
627
608
  n[r] = {
628
609
  ...t,
629
- isValid: q(t)
610
+ isValid: K(t)
630
611
  }, e.recommendationConfigs.filters = n;
631
612
  }
632
613
  },
@@ -690,17 +671,17 @@ const Q = () => ({
690
671
  const t = [
691
672
  this.currentRecommendationId,
692
673
  this.configVersion,
693
- I
674
+ b
694
675
  ].join(":");
695
- if (y && b === t) {
676
+ if (y && I === t) {
696
677
  await y;
697
678
  return;
698
679
  }
699
- b = t, y = this._doFetchProducts();
680
+ I = t, y = this._doFetchProducts();
700
681
  try {
701
682
  await y;
702
683
  } finally {
703
- b === t && (y = null, b = "");
684
+ I === t && (y = null, I = "");
704
685
  }
705
686
  },
706
687
  async _doFetchProducts() {
@@ -725,7 +706,7 @@ const Q = () => ({
725
706
  details: !0,
726
707
  campaignId: n.variationId
727
708
  };
728
- r.strategy === "manualMerchandising" ? c.productId = K(r.productIds) : r.strategy === "similarViewed" && (c.productId = "{itemId}"), r.strategy === "userBased" && (c.userId = "{user_id}"), a && (c.filter = a), r.shuffleProducts && (c.shuffle = !0), Object.assign(
709
+ r.strategy === "manualMerchandising" ? c.productId = q(r.productIds) : r.strategy === "similarViewed" && (c.productId = "{itemId}"), r.strategy === "userBased" && (c.userId = "{user_id}"), a && (c.filter = a), r.shuffleProducts && (c.shuffle = !0), Object.assign(
729
710
  c,
730
711
  $(n.partnerName, r.strategy)
731
712
  );
@@ -10,7 +10,9 @@ const i = [
10
10
  "iboodde",
11
11
  "iboodfr",
12
12
  "iboodnl",
13
- "iboodpl"
13
+ "iboodpl",
14
+ "marionnaudaustria",
15
+ "marionnaudfrance"
14
16
  ], r = ["interencheres", "interencherespreprod"], d = ["lodenfrey", "lodenfreyuat"], c = "manualMerchandising";
15
17
  function s(e, n) {
16
18
  const o = {};
@@ -1,6 +1,5 @@
1
- import { ATTR_CUSTOM_PREFIX as f, RECOMMENDATION_ID_ATTR as o } from "../constants/selectors.js";
2
- const s = new RegExp(`\\s${o}="(\\d+)"`, "g");
3
- function u(t) {
1
+ import { ATTR_CUSTOM_PREFIX as f } from "../constants/selectors.js";
2
+ function o(t) {
4
3
  if (typeof t == "string")
5
4
  return t.trim() !== "";
6
5
  if (t && typeof t == "object" && "strategyId" in t) {
@@ -9,18 +8,18 @@ function u(t) {
9
8
  }
10
9
  return !1;
11
10
  }
12
- function a(t) {
13
- return new Set([...t.matchAll(s)].map((r) => Number(r[1])));
11
+ function u({ config: t, blockId: r, partnerName: e, campaignUrls: n, rrsEnabled: i }) {
12
+ return e ? t.partnerName ? t.partnerName !== e : !i || !t.strategyId || !n ? !1 : !o(n[String(r)]) : !1;
14
13
  }
15
- function g({ config: t, blockId: r, partnerName: e, campaignUrls: n, loadedIds: i }) {
16
- return e ? t.partnerName ? t.partnerName !== e : !t.strategyId || !n || !i.has(r) ? !1 : !u(n[String(r)]) : !1;
14
+ function a({ config: t, campaignUrls: r, rrsEnabled: e }) {
15
+ return !t.strategyId || e && !!r;
17
16
  }
18
- function p(t) {
17
+ function g(t) {
19
18
  return t.filter((r) => !r.startsWith(f));
20
19
  }
21
20
  export {
22
- g as carriesForeignPartnerConfig,
23
- u as isDefinedCampaignUrl,
24
- a as loadedRecommendationIds,
25
- p as withoutCustomAttributes
21
+ a as canJudgeUnstampedBlock,
22
+ u as carriesForeignPartnerConfig,
23
+ o as isDefinedCampaignUrl,
24
+ g as withoutCustomAttributes
26
25
  };
package/dist/guido.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";.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-c61cc8ea]{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-36867e2e]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-36867e2e]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-36867e2e]{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-19d8cb42] .vueperslides__bullets,[data-v-ec2027ff] .vueperslides__bullets,[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}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-skeleton{width:100%!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}.legacy-strategy-updated-modal[data-v-da2225a1]{position:relative;z-index:145}
1
+ @charset "UTF-8";.auth-error-modal[data-v-b4d7ae51]{position:relative;z-index:145}.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-c61cc8ea]{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-c404d230]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-c404d230]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-c404d230]{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-19d8cb42] .vueperslides__bullets,[data-v-ec2027ff] .vueperslides__bullets,[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}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-skeleton{width:100%!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}.legacy-strategy-updated-modal[data-v-da2225a1]{position:relative;z-index:145}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
+ export default _default;
@@ -3,6 +3,7 @@ type __VLS_Props = {
3
3
  id: string;
4
4
  title: string;
5
5
  description?: string;
6
+ state?: 'default' | 'primary' | 'warning' | 'danger';
6
7
  size?: 'X-small' | 'small' | 'medium' | 'large';
7
8
  footerButtonOptions?: FooterButtonGroup;
8
9
  closeButtonStatus?: boolean;
@@ -15,6 +16,7 @@ type __VLS_Slots = {} & {
15
16
  };
16
17
  declare const __VLS_component: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
17
18
  description: string;
19
+ state: string;
18
20
  size: string;
19
21
  footerButtonOptions: undefined;
20
22
  closeButtonStatus: boolean;
@@ -26,6 +28,7 @@ declare const __VLS_component: import("vue").DefineComponent<__VLS_WithDefaults<
26
28
  "secondary-action": () => void;
27
29
  }, string, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
28
30
  description: string;
31
+ state: string;
29
32
  size: string;
30
33
  footerButtonOptions: undefined;
31
34
  closeButtonStatus: boolean;
@@ -34,9 +37,10 @@ declare const __VLS_component: import("vue").DefineComponent<__VLS_WithDefaults<
34
37
  }>>>, {
35
38
  size: "X-small" | "small" | "medium" | "large";
36
39
  description: string;
37
- closeOnOutsideClick: boolean;
40
+ state: "default" | "primary" | "warning" | "danger";
38
41
  footerButtonOptions: FooterButtonGroup;
39
42
  closeButtonStatus: boolean;
43
+ closeOnOutsideClick: boolean;
40
44
  footerStatus: boolean;
41
45
  }>;
42
46
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
@@ -0,0 +1,12 @@
1
+ export interface AuthErrorState {
2
+ status: number;
3
+ data: Record<string, unknown> | null;
4
+ }
5
+ export declare const isPanelOrigin: (url: string) => boolean;
6
+ export declare const reportAuthError: (status: number, body: string, url: string) => void;
7
+ export declare const useAuthError: () => {
8
+ authError: import("vue").Ref<{
9
+ status: number;
10
+ data: Record<string, unknown> | null;
11
+ } | null>;
12
+ };
@@ -17,12 +17,11 @@
17
17
  * - `error` segments (and message-level `isError` / `isCancelled`) trigger
18
18
  * a localized toaster.
19
19
  *
20
+ * Every apply settles into a terminal `applyAcks` entry, so cortex moves its button on the write, not the click.
21
+ *
20
22
  * In dev (`import.meta.env.DEV`) every observed segment + message-level flag
21
23
  * change is also `console.debug`-logged with the prefix `[guido:cortex]` so a
22
24
  * developer can watch the agent stream in real time. In production this is
23
25
  * gated behind `localStorage.guido:debug:ai === '1'`.
24
- *
25
- * If cortex-fe isn't loaded the chat store is undefined and the bridge is a
26
- * no-op (intentional — Guido must still work standalone).
27
26
  */
28
27
  export declare const useCortexBlueprintBridge: () => void;