@useinsider/guido 3.19.0-beta.87e26c0 → 3.19.0-beta.892c3ca

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 (103) hide show
  1. package/README.md +22 -3
  2. package/dist/@types/config/schemas.js +78 -68
  3. package/dist/components/Guido.vue.js +8 -8
  4. package/dist/components/Guido.vue2.js +81 -76
  5. package/dist/components/organisms/AutoSaveController.vue2.js +9 -8
  6. package/dist/components/organisms/base/Toaster.vue2.js +13 -12
  7. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +13 -11
  8. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +78 -57
  9. package/dist/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js +18 -0
  10. package/dist/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue2.js +25 -0
  11. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue2.js +28 -42
  12. package/dist/components/organisms/header/EditorActions.vue.js +5 -5
  13. package/dist/components/organisms/header/EditorActions.vue2.js +90 -57
  14. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  15. package/dist/components/organisms/header/LeftSlot.vue2.js +16 -12
  16. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +28 -24
  17. package/dist/components/organisms/onboarding/RecommendationLegacyStrategyOnboarding.vue.js +21 -0
  18. package/dist/components/organisms/onboarding/RecommendationLegacyStrategyOnboarding.vue2.js +46 -0
  19. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.js +21 -0
  20. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue2.js +47 -0
  21. package/dist/components/organisms/validation/ValidationErrorDrawer.vue.js +20 -0
  22. package/dist/components/organisms/validation/ValidationErrorDrawer.vue2.js +49 -0
  23. package/dist/components/wrappers/WpDrawer.vue.js +9 -7
  24. package/dist/components/wrappers/WpDrawer.vue2.js +1 -1
  25. package/dist/composables/useActionsApi.js +52 -47
  26. package/dist/composables/useCodeEditorApi.js +23 -9
  27. package/dist/composables/useCustomInterfaceAppearance.js +65 -51
  28. package/dist/composables/useHtmlCompiler.js +37 -26
  29. package/dist/composables/useHtmlValidator.js +89 -82
  30. package/dist/composables/useHttp.js +44 -55
  31. package/dist/composables/useLegacyStrategyConversion.js +61 -0
  32. package/dist/composables/useRecommendation.js +40 -35
  33. package/dist/composables/useSave.js +90 -45
  34. package/dist/composables/useSaveValidation.js +282 -0
  35. package/dist/composables/useSaveValidationRollout.js +9 -0
  36. package/dist/composables/useStripo.js +30 -30
  37. package/dist/composables/useToaster.js +14 -20
  38. package/dist/composables/useTranslations.js +3 -2
  39. package/dist/composables/useVersionHistoryApi.js +33 -24
  40. package/dist/composables/validators/useCouponBlockValidator.js +24 -21
  41. package/dist/composables/validators/useUnsubscribeBlockValidator.js +34 -27
  42. package/dist/enums/extensions/recommendationBlock.js +49 -33
  43. package/dist/enums/save-validation.js +4 -0
  44. package/dist/extensions/Blocks/Recommendation/block.js +61 -42
  45. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +21 -20
  46. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +100 -94
  47. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +130 -55
  48. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +74 -74
  49. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +273 -92
  50. package/dist/extensions/Blocks/Recommendation/utils/legacyStrategyMigration.js +42 -0
  51. package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +26 -16
  52. package/dist/extensions/Blocks/Recommendation/utils/strategyCommit.js +24 -0
  53. package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +21 -12
  54. package/dist/guido.css +1 -1
  55. package/dist/services/recommendationApi.js +46 -37
  56. package/dist/src/@types/config/schemas.d.ts +20 -0
  57. package/dist/src/@types/save-validation.d.ts +19 -0
  58. package/dist/src/components/Guido.vue.d.ts +17 -1
  59. package/dist/src/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.d.ts +2 -0
  60. package/dist/src/components/organisms/header/EditorActions.vue.d.ts +17 -1
  61. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +17 -1
  62. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +17 -1
  63. package/dist/src/components/organisms/onboarding/RecommendationLegacyStrategyOnboarding.vue.d.ts +2 -0
  64. package/dist/src/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.d.ts +2 -0
  65. package/dist/src/components/organisms/validation/ValidationErrorDrawer.vue.d.ts +2 -0
  66. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +4 -3
  67. package/dist/src/composables/useConfig.d.ts +6 -0
  68. package/dist/src/composables/useHtmlValidator.d.ts +21 -0
  69. package/dist/src/composables/useLegacyStrategyConversion.d.ts +3 -0
  70. package/dist/src/composables/useSave.d.ts +6 -1
  71. package/dist/src/composables/useSaveValidation.d.ts +6 -0
  72. package/dist/src/composables/useSaveValidationRollout.d.ts +3 -0
  73. package/dist/src/composables/validators/useCouponBlockValidator.d.ts +3 -0
  74. package/dist/src/composables/validators/useUnsubscribeBlockValidator.d.ts +10 -0
  75. package/dist/src/enums/extensions/recommendationBlock.d.ts +7 -1
  76. package/dist/src/enums/save-validation.d.ts +27 -0
  77. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +10 -0
  78. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +1 -0
  79. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
  80. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +2 -0
  81. package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +10 -0
  82. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +7 -2
  83. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +162 -1
  84. package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMigration.d.ts +32 -0
  85. package/dist/src/extensions/Blocks/Recommendation/utils/strategyCommit.d.ts +14 -0
  86. package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +4 -0
  87. package/dist/src/services/recommendationApi.d.ts +2 -1
  88. package/dist/src/stores/config.d.ts +354 -0
  89. package/dist/src/stores/onboarding.d.ts +808 -10
  90. package/dist/src/stores/save-validation.d.ts +22 -0
  91. package/dist/src/utils/stripoEditorApi.d.ts +4 -0
  92. package/dist/src/utils/templatePreparation.d.ts +30 -0
  93. package/dist/static/assets/icons/filled-arrow-rising.svg.js +5 -0
  94. package/dist/static/assets/icons/line-info.svg.js +5 -0
  95. package/dist/static/styles/components/recommendation-strategy.css.js +104 -9
  96. package/dist/static/styles/components/skeleton.css.js +23 -0
  97. package/dist/stores/config.js +55 -24
  98. package/dist/stores/onboarding.js +46 -36
  99. package/dist/stores/save-validation.js +30 -0
  100. package/dist/stores/unsubscribe.js +3 -3
  101. package/dist/utils/stripoEditorApi.js +11 -0
  102. package/dist/utils/templatePreparation.js +54 -51
  103. package/package.json +2 -1
package/README.md CHANGED
@@ -95,9 +95,11 @@ import type { GuidoConfigInput } from '@useinsider/guido';
95
95
  const config: GuidoConfigInput = {
96
96
  // Required: Identity
97
97
  identity: {
98
- templateId: string, // Required - Template identifier
99
- userId: string, // Required - User identifier
100
- variationId?: string, // Optional - A/B test variation
98
+ templateId: string, // Required - Template identifier
99
+ userId: string, // Required - User identifier
100
+ variationId?: string, // Optional - A/B test variation
101
+ campaignId?: string, // Optional - Numeric campaign id; absent for templates/modules
102
+ templateLibraryId?: string, // Optional - Numeric template-library id; absent for campaigns/modules
101
103
  },
102
104
 
103
105
  // Required: Partner
@@ -162,6 +164,7 @@ const config: GuidoConfigInput = {
162
164
  liquidSyntax?: boolean, // Default: false - Enable Liquid template syntax
163
165
  autosave?: boolean, // Default: false - Show the Auto Save toggle in the header. See wiki/AUTOSAVE.md.
164
166
  allowlistEnabled?: boolean, // Default: false - Pre-save domain-allowlist check (opt-in). Guido self-serves the block toaster (role lookup, deep-link, copy from window.trans).
167
+ allowSaveWithErrors?: boolean, // Default: true - Allow the validation drawer's "Save and Continue" soft-save. Set false to hard-block invalid saves (transactional + unsubscribe pages).
165
168
  reusableRecommendationStrategy?: boolean, // Default: false - Assign an RRS strategy to recommendation blocks instead of per-block algorithm/filters/shuffle/product-count settings.
166
169
  },
167
170
 
@@ -184,6 +187,22 @@ const config: GuidoConfigInput = {
184
187
  };
185
188
  ```
186
189
 
190
+ ### `identity` ids
191
+
192
+ `templateId` is the editor's **document** identity (a uuid / Stripo doc id) and never addresses a
193
+ backend resource. `campaignId` and `templateLibraryId` are the **numeric** ids of the surface the
194
+ editor was opened on, and they are what Guido uses to resolve host-scoped endpoints — most visibly
195
+ when converting a legacy recommendation block into a reusable strategy.
196
+
197
+ | Surface | `campaignId` | `templateLibraryId` |
198
+ |---------|--------------|---------------------|
199
+ | Campaign editor | the campaign id | absent |
200
+ | Saved template editor | absent | the template-library id |
201
+ | Module editor / unsaved template | absent | absent |
202
+
203
+ Pass only the one that applies. A campaign id takes precedence when both are present, and when
204
+ neither is supplied Guido falls back to campaign scope — so a module keeps working unchanged.
205
+
187
206
  ### `ready` prop
188
207
 
189
208
  ```vue
@@ -1,5 +1,5 @@
1
1
  import { ModuleFolderDefaults as f } from "../../enums/defaults.js";
2
- import { object as a, number as n, optional as e, string as t, picklist as i, pipe as m, minLength as b, custom as y, boolean as o, array as c, transform as C, record as k, fallback as R, literal as u, looseObject as g, variant as T, union as h, unknown as r, lazy as I } from "../../node_modules/valibot/dist/index.js";
2
+ import { object as o, number as n, optional as e, string as t, picklist as i, pipe as m, minLength as b, custom as y, boolean as a, array as c, transform as C, record as k, fallback as R, literal as u, looseObject as g, variant as I, union as h, unknown as r, lazy as T } from "../../node_modules/valibot/dist/index.js";
3
3
  const p = {
4
4
  /** Promotional/marketing emails */
5
5
  PROMOTIONAL: 1,
@@ -12,7 +12,7 @@ const p = {
12
12
  ARCHITECT: 49,
13
13
  /** Unsubscribe page builder */
14
14
  UNSUBSCRIBE_PAGES: 97
15
- }, A = a({
15
+ }, A = o({
16
16
  /** Unique identifier for the template being edited */
17
17
  templateId: m(
18
18
  t(),
@@ -24,13 +24,21 @@ const p = {
24
24
  b(1, "userId is required")
25
25
  ),
26
26
  /** Optional variation ID for A/B testing */
27
- variationId: e(t())
28
- }), L = a({
27
+ variationId: e(t()),
28
+ /** Optional numeric campaign ID of the host campaign; absent for templates and modules */
29
+ campaignId: e(t()),
30
+ /**
31
+ * Optional numeric template-library id of the host template; absent for campaigns and
32
+ * modules. Distinct from `templateId`, which is the editor's document identity (a uuid /
33
+ * Stripo doc id) and is never an endpoint id.
34
+ */
35
+ templateLibraryId: e(t())
36
+ }), L = o({
29
37
  /** Fallback font name (e.g., "Georgia") */
30
38
  name: t(),
31
39
  /** Fallback font family (e.g., "serif" or "sans-serif") */
32
40
  family: t()
33
- }), M = a({
41
+ }), E = o({
34
42
  /** Partner/organization name (required) */
35
43
  name: m(
36
44
  t(),
@@ -54,7 +62,7 @@ const p = {
54
62
  username: e(t(), "Guido User"),
55
63
  /** Fallback font settings from partner settings — used to match backend size calculation */
56
64
  fallbackFont: e(L)
57
- }), E = a({
65
+ }), M = o({
58
66
  /** Display text for the dynamic content */
59
67
  text: t(),
60
68
  /** Template variable value (e.g., {{username}}) */
@@ -63,12 +71,12 @@ const p = {
63
71
  fallback: e(t()),
64
72
  /** Optional formatting options */
65
73
  format: e(
66
- a({
74
+ o({
67
75
  key: t(),
68
76
  value: t()
69
77
  })
70
78
  )
71
- }), S = I(() => g({
79
+ }), S = T(() => g({
72
80
  text: e(t()),
73
81
  // eslint-disable-next-line camelcase -- backend field name
74
82
  tag_text: e(t()),
@@ -76,10 +84,10 @@ const p = {
76
84
  children: e(c(S)),
77
85
  // eslint-disable-next-line camelcase -- backend field name
78
86
  select_items: e(c(S))
79
- })), N = k(
87
+ })), v = k(
80
88
  t(),
81
89
  R(c(S), [])
82
- ), P = g({
90
+ ), N = g({
83
91
  /** Block ID (matches the dictionary key and the legacy HTML element id) */
84
92
  id: e(n()),
85
93
  /** Decimal places for price display (legacy data may use string or number) */
@@ -87,9 +95,9 @@ const p = {
87
95
  /** Pinned product IDs (empty array when filter-driven) */
88
96
  productIds: e(c(r())),
89
97
  /** Whether the block requested live products at send time */
90
- sendProductRequestFlag: e(o()),
98
+ sendProductRequestFlag: e(a()),
91
99
  /** Whether to randomize product order */
92
- shuffleProducts: e(o()),
100
+ shuffleProducts: e(a()),
93
101
  /** Filter rules driving product selection */
94
102
  filters: e(c(r())),
95
103
  /** Currency code (e.g. 'EUR') — sometimes absent in legacy data */
@@ -109,22 +117,22 @@ const p = {
109
117
  /** Mobile-only padding (left) */
110
118
  mobileLeftPadding: e(n()),
111
119
  /** Disable responsive scaling */
112
- unresponsive: e(o()),
120
+ unresponsive: e(a()),
113
121
  /** Layout orientation ('vertical' | 'horizontal') */
114
122
  orientation: e(t()),
115
123
  /** Whether long text is trimmed */
116
- textTrimming: e(o()),
124
+ textTrimming: e(a()),
117
125
  /** Block type marker used by some legacy variants */
118
126
  blockType: e(t()),
119
127
  /** Size variant marker (legacy data may use string or number) */
120
128
  size: e(h([t(), n()])),
121
129
  /** Vertical responsiveness flag (legacy size=1 variants) */
122
- verticalResponsiveness: e(o()),
130
+ verticalResponsiveness: e(a()),
123
131
  /** Legacy "Move to next line" price placement toggle (cardPricePlacement.js) */
124
- isPriceMovedToNextLine: e(o()),
132
+ isPriceMovedToNextLine: e(a()),
125
133
  /** Legacy "Hide if same as discounted" / delete-price-for-zero-sale toggle */
126
- isPriceDeletedForZeroSale: e(o())
127
- }), v = a({
134
+ isPriceDeletedForZeroSale: e(a())
135
+ }), P = o({
128
136
  /**
129
137
  * Legacy recommendation block configs keyed by block ID.
130
138
  * Pass this when loading a template authored with the v1
@@ -132,17 +140,17 @@ const p = {
132
140
  * strategy, currency, locale, and layout data.
133
141
  */
134
142
  recommendationConfigs: e(
135
- k(t(), P),
143
+ k(t(), N),
136
144
  {}
137
145
  )
138
- }), x = a({
146
+ }), x = o({
139
147
  /** Initial HTML content */
140
148
  html: e(t(), ""),
141
149
  /** Initial CSS content */
142
150
  css: e(t(), ""),
143
151
  /** Preselected dynamic content items */
144
152
  preselectedDynamicContent: e(
145
- c(E),
153
+ c(M),
146
154
  []
147
155
  ),
148
156
  /**
@@ -151,13 +159,13 @@ const p = {
151
159
  * (first) partner's leaf attributes into the label→token map that repairs
152
160
  * label-form placeholders (`{{ Phone Number }}`) in dropped saved modules.
153
161
  */
154
- dynamicContentList: e(N, {}),
162
+ dynamicContentList: e(v, {}),
155
163
  /** Valid custom field attribute names from the partner's categorized fields */
156
164
  customFieldAttributes: e(c(t()), []),
157
165
  /** Selected unsubscribe page IDs */
158
166
  selectedUnsubscribePages: e(c(n()), []),
159
167
  /** Force recreate template in Stripo storage (use true when updating externally modified templates) */
160
- forceRecreate: e(o(), !1),
168
+ forceRecreate: e(a(), !1),
161
169
  /**
162
170
  * Consumer-persisted tracking-id high-water mark (SD-141414). Used as the id floor
163
171
  * during migration so a rolled-back document never re-mints retired tracking ids.
@@ -173,13 +181,13 @@ const p = {
173
181
  0
174
182
  ),
175
183
  /** Migration-only inputs (legacy block configs) */
176
- migration: e(v, {})
177
- }), D = a({
184
+ migration: e(P, {})
185
+ }), D = o({
178
186
  /** Sender display name */
179
187
  senderName: e(t(), ""),
180
188
  /** Email subject line */
181
189
  subject: e(t(), "")
182
- }), O = a({
190
+ }), O = o({
183
191
  /** Locale for the editor UI */
184
192
  locale: e(t(), "en"),
185
193
  /** Path to translations object */
@@ -192,36 +200,38 @@ const p = {
192
200
  savedModulesFolderName: e(t(), f.SAVED_MODULES),
193
201
  /** Folder name for default/prebuilt modules (used by Stripo plugin panel for path construction) */
194
202
  defaultModulesFolderName: e(t(), f.DEFAULT_MODULES)
195
- }), F = a({
203
+ }), F = o({
196
204
  /** Whether to show the header bar */
197
- showHeader: e(o(), !0),
205
+ showHeader: e(a(), !0),
198
206
  /** Custom label for back button (if shown) */
199
207
  backButtonLabel: e(t())
200
- }), U = a({
208
+ }), U = o({
201
209
  /** Enable dynamic content insertion */
202
- dynamicContent: e(o(), !0),
210
+ dynamicContent: e(a(), !0),
203
211
  /** Enable save as template functionality */
204
- saveAsTemplate: e(o(), !0),
212
+ saveAsTemplate: e(a(), !0),
205
213
  /** Enable version history */
206
- versionHistory: e(o(), !0),
214
+ versionHistory: e(a(), !0),
207
215
  /** Enable test message sending */
208
- testMessage: e(o(), !0),
216
+ testMessage: e(a(), !0),
209
217
  /** Enable display conditions */
210
- displayConditions: e(o(), !0),
218
+ displayConditions: e(a(), !0),
211
219
  /** Enable unsubscribe block */
212
- unsubscribe: e(o(), !0),
220
+ unsubscribe: e(a(), !0),
213
221
  /** Disable modules panel in the editor */
214
- modulesDisabled: e(o(), !1),
222
+ modulesDisabled: e(a(), !1),
215
223
  /** Enable Liquid template syntax */
216
- liquidSyntax: e(o(), !1),
224
+ liquidSyntax: e(a(), !1),
217
225
  /** Enable autosave (3-min interval + tab-hide). User toggles on/off from the header. */
218
- autosave: e(o(), !1),
226
+ autosave: e(a(), !1),
219
227
  /** Enable pre-save domain-allowlist validation (opt-in; Guido self-serves the block toaster) */
220
- allowlistEnabled: e(o(), !1),
228
+ allowlistEnabled: e(a(), !1),
221
229
  /** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
222
- linkTrackingIds: e(o(), !1),
223
- reusableRecommendationStrategy: e(o(), !1)
224
- }), B = i([
230
+ linkTrackingIds: e(a(), !1),
231
+ /** Allow persisting a template that still has validation errors (drawer "Save and Continue" soft-save). Host sets false for transactional + unsubscribe. */
232
+ allowSaveWithErrors: e(a(), !0),
233
+ reusableRecommendationStrategy: e(a(), !1)
234
+ }), w = i([
225
235
  "amp-accordion",
226
236
  "amp-carousel",
227
237
  "amp-form-controls",
@@ -235,7 +245,7 @@ const p = {
235
245
  "text-block",
236
246
  "timer-block",
237
247
  "video-block"
238
- ]), w = i([
248
+ ]), B = i([
239
249
  "dynamic-content",
240
250
  "checkbox-block",
241
251
  "radio-button-block",
@@ -243,25 +253,25 @@ const p = {
243
253
  "unsubscribe-block",
244
254
  "coupon-block",
245
255
  "items-block"
246
- ]), H = a({
256
+ ]), H = o({
247
257
  /** Default blocks to exclude from the editor */
248
258
  excludeDefaults: e(
249
- c(B),
259
+ c(w),
250
260
  []
251
261
  ),
252
262
  /** Custom blocks to include in the editor */
253
263
  includeCustoms: e(
254
- c(w),
264
+ c(B),
255
265
  []
256
266
  )
257
- }), d = a({
267
+ }), d = o({
258
268
  /** Unique identifier for the rule */
259
269
  id: t(),
260
270
  /** Human-readable description */
261
271
  description: e(t()),
262
272
  /** Priority for rule ordering (lower = earlier) */
263
273
  priority: n()
264
- }), _ = a({
274
+ }), _ = o({
265
275
  ...d.entries,
266
276
  type: u("replace"),
267
277
  /** String to search for */
@@ -269,8 +279,8 @@ const p = {
269
279
  /** Replacement string */
270
280
  replacement: t(),
271
281
  /** Replace all occurrences (default: false) */
272
- replaceAll: e(o())
273
- }), j = a({
282
+ replaceAll: e(a())
283
+ }), j = o({
274
284
  ...d.entries,
275
285
  type: u("regex"),
276
286
  /** Regex pattern string */
@@ -279,12 +289,12 @@ const p = {
279
289
  replacement: t(),
280
290
  /** Regex flags (e.g., 'gi') */
281
291
  flags: e(t())
282
- }), q = a({
292
+ }), q = o({
283
293
  ...d.entries,
284
294
  type: u("remove"),
285
295
  /** Strings or patterns to remove */
286
296
  targets: c(t())
287
- }), G = a({
297
+ }), G = o({
288
298
  ...d.entries,
289
299
  type: u("custom"),
290
300
  /** Custom processor function */
@@ -292,17 +302,17 @@ const p = {
292
302
  (s) => typeof s == "function",
293
303
  "processor must be a function"
294
304
  )
295
- }), V = T("type", [
305
+ }), V = I("type", [
296
306
  _,
297
307
  j,
298
308
  q,
299
309
  G
300
- ]), z = a({
310
+ ]), z = o({
301
311
  /** Custom compiler rules to apply */
302
312
  customRules: e(c(V), []),
303
313
  /** Skip default compiler rules */
304
- ignoreDefaultRules: e(o(), !1)
305
- }), Z = a({
314
+ ignoreDefaultRules: e(a(), !1)
315
+ }), W = o({
306
316
  /**
307
317
  * External validation handler called before save completes.
308
318
  * Return false to cancel the save operation.
@@ -313,12 +323,12 @@ const p = {
313
323
  "externalValidation must be a function"
314
324
  )
315
325
  )
316
- }), Q = a({
326
+ }), K = o({
317
327
  // Required sections
318
328
  /** Identity configuration (required) */
319
329
  identity: A,
320
330
  /** Partner configuration (required) */
321
- partner: M,
331
+ partner: E,
322
332
  // Optional sections (with defaults)
323
333
  /** Template content and presets */
324
334
  template: e(x, {}),
@@ -333,33 +343,33 @@ const p = {
333
343
  /** Compiler configuration */
334
344
  compiler: e(z, {}),
335
345
  /** Callbacks and event handlers */
336
- callbacks: e(Z, {})
346
+ callbacks: e(W, {})
337
347
  });
338
348
  export {
339
349
  H as BlocksSchema,
340
- Z as CallbacksSchema,
350
+ W as CallbacksSchema,
341
351
  V as CompilerRuleSchema,
342
352
  z as CompilerSchema,
343
- w as CustomBlockTypeSchema,
353
+ B as CustomBlockTypeSchema,
344
354
  G as CustomRuleSchema,
345
- B as DefaultBlockTypeSchema,
346
- N as DynamicContentListSchema,
355
+ w as DefaultBlockTypeSchema,
356
+ v as DynamicContentListSchema,
347
357
  S as DynamicContentNodeSchema,
348
- E as DynamicContentSchema,
358
+ M as DynamicContentSchema,
349
359
  O as EditorSchema,
350
360
  D as EmailHeaderSchema,
351
361
  L as FallbackFontSchema,
352
362
  U as FeaturesSchema,
353
- Q as GuidoConfigSchema,
363
+ K as GuidoConfigSchema,
354
364
  A as IdentitySchema,
355
- P as LegacyRecommendationConfigSchema,
365
+ N as LegacyRecommendationConfigSchema,
356
366
  p as MessageType,
357
- M as PartnerSchema,
367
+ E as PartnerSchema,
358
368
  l as ProductType,
359
369
  j as RegexRuleSchema,
360
370
  q as RemoveRuleSchema,
361
371
  _ as ReplaceRuleSchema,
362
- v as TemplateMigrationSchema,
372
+ P as TemplateMigrationSchema,
363
373
  x as TemplateSchema,
364
374
  F as UISchema
365
375
  };
@@ -1,20 +1,20 @@
1
- import o from "./Guido.vue2.js";
1
+ import i from "./Guido.vue2.js";
2
2
  /* empty css */
3
- import i from "../_virtual/_plugin-vue2_normalizer.js";
3
+ import o from "../_virtual/_plugin-vue2_normalizer.js";
4
4
  var t = function() {
5
5
  var a = this, r = a._self._c, e = a._self._setupProxy;
6
- return r("div", { ref: "wrapperRef", staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper, { ref: "headerWrapperRef" }), r(e.AutoSaveController), e.editorStore.isPreviewModeOpen ? r(e.PreviewContainer) : a._e(), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.previewStore.isLoaded, expression: "!previewStore.isLoaded" }], staticClass: "guido-editor__container", class: { "guido-editor__no-header": e.noHeader }, attrs: { id: "guido-editor" } }), r(e.Toaster), r(e.FilterSelectionDrawer), e.isRrsEnabled || e.hasAssignedStrategy ? r(e.AssignStrategyDrawer) : a._e(), e.isRrsEnabled || e.hasAssignedStrategy ? r(e.RemoveStrategyModal) : a._e(), r(e.SaveAsTemplateDrawer), e.isTestPartner() ? a._e() : r(e.OnboardingWrapper, { on: { "onboarding-finished": function(_) {
6
+ return r("div", { ref: "wrapperRef", staticClass: "guido-editor__wrapper", class: { "guido-editor__no-header": e.noHeader } }, [r(e.HeaderWrapper, { ref: "headerWrapperRef" }), r(e.AutoSaveController), e.editorStore.isPreviewModeOpen ? r(e.PreviewContainer) : a._e(), r("div", { directives: [{ name: "show", rawName: "v-show", value: !e.previewStore.isLoaded, expression: "!previewStore.isLoaded" }], staticClass: "guido-editor__container", class: { "guido-editor__no-header": e.noHeader }, attrs: { id: "guido-editor" } }), r(e.Toaster), r(e.FilterSelectionDrawer), e.isRrsEnabled || e.hasAssignedStrategy ? r(e.AssignStrategyDrawer) : a._e(), e.isRrsEnabled || e.hasAssignedStrategy ? r(e.RemoveStrategyModal) : a._e(), e.isRrsEnabled ? r(e.LegacyStrategyUpdatedModal) : a._e(), r(e.SaveAsTemplateDrawer), e.isSaveValidationEnabled ? r(e.ValidationErrorDrawer) : a._e(), e.isTestPartner() ? a._e() : r(e.OnboardingWrapper, { on: { "onboarding-finished": function(_) {
7
7
  return e.emit("onboarding:finished");
8
8
  } } }), r(e.UnsubscribeWrapper), r(e.LoadingWrapper)], 1);
9
- }, s = [], n = /* @__PURE__ */ i(
10
- o,
9
+ }, s = [], n = /* @__PURE__ */ o(
10
+ i,
11
11
  t,
12
12
  s,
13
13
  !1,
14
14
  null,
15
- "050dfa52"
15
+ "aaa8fe47"
16
16
  );
17
- const f = n.exports;
17
+ const v = n.exports;
18
18
  export {
19
- f as default
19
+ v as default
20
20
  };