@useinsider/guido 3.19.0 → 3.20.0-beta.05ce01c

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 (151) hide show
  1. package/README.md +22 -3
  2. package/dist/@types/config/schemas.js +76 -53
  3. package/dist/components/Guido.vue.js +4 -4
  4. package/dist/components/Guido.vue2.js +105 -89
  5. package/dist/components/organisms/AutoSaveController.vue2.js +10 -8
  6. package/dist/components/organisms/base/AuthErrorModal.vue.js +18 -0
  7. package/dist/components/organisms/base/AuthErrorModal.vue2.js +42 -0
  8. package/dist/components/organisms/base/Toaster.vue2.js +13 -12
  9. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +13 -11
  10. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +78 -57
  11. package/dist/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.js +18 -0
  12. package/dist/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue2.js +25 -0
  13. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue2.js +28 -42
  14. package/dist/components/organisms/header/EditorActions.vue.js +2 -2
  15. package/dist/components/organisms/header/EditorActions.vue2.js +83 -48
  16. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  17. package/dist/components/organisms/header/LeftSlot.vue2.js +16 -12
  18. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +28 -24
  19. package/dist/components/organisms/onboarding/RecommendationLegacyStrategyOnboarding.vue.js +21 -0
  20. package/dist/components/organisms/onboarding/RecommendationLegacyStrategyOnboarding.vue2.js +46 -0
  21. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.js +21 -0
  22. package/dist/components/organisms/onboarding/RecommendationStrategyOnboarding.vue2.js +47 -0
  23. package/dist/components/organisms/validation/ValidationErrorDrawer.vue.js +20 -0
  24. package/dist/components/organisms/validation/ValidationErrorDrawer.vue2.js +50 -0
  25. package/dist/components/wrappers/WpDrawer.vue.js +9 -7
  26. package/dist/components/wrappers/WpDrawer.vue2.js +1 -1
  27. package/dist/components/wrappers/WpModal.vue.js +1 -1
  28. package/dist/components/wrappers/WpModal.vue2.js +4 -3
  29. package/dist/composables/useActionsApi.js +52 -47
  30. package/dist/composables/useAuthError.js +52 -0
  31. package/dist/composables/useAutoSave.js +44 -42
  32. package/dist/composables/useCodeEditorApi.js +23 -9
  33. package/dist/composables/useCortexBlueprintBridge.js +122 -54
  34. package/dist/composables/useCustomInterfaceAppearance.js +65 -51
  35. package/dist/composables/useEmailTemplateApplier.js +111 -50
  36. package/dist/composables/useHtmlCompiler.js +37 -26
  37. package/dist/composables/useHtmlValidator.js +89 -82
  38. package/dist/composables/useHttp.js +64 -54
  39. package/dist/composables/useLegacyStrategyConversion.js +65 -0
  40. package/dist/composables/useRecommendation.js +40 -35
  41. package/dist/composables/useSave.js +93 -45
  42. package/dist/composables/useSaveValidation.js +284 -0
  43. package/dist/composables/useSaveValidationRollout.js +20 -0
  44. package/dist/composables/useStripo.js +43 -39
  45. package/dist/composables/useToaster.js +18 -22
  46. package/dist/composables/useTranslations.js +3 -2
  47. package/dist/composables/useVersionHistoryApi.js +33 -24
  48. package/dist/composables/validators/useCouponBlockValidator.js +24 -21
  49. package/dist/composables/validators/useLiquidValidator.js +15 -15
  50. package/dist/composables/validators/useUnsubscribeBlockValidator.js +34 -27
  51. package/dist/config/migrator/index.js +14 -13
  52. package/dist/config/migrator/itemsBlockMigrator.js +236 -248
  53. package/dist/config/migrator/recommendationMigrator.js +28 -21
  54. package/dist/config/migrator/recommendationPartnerMigrator.js +56 -0
  55. package/dist/enums/extensions/recommendationBlock.js +51 -34
  56. package/dist/enums/save-validation.js +4 -0
  57. package/dist/extensions/Blocks/Items/constants/cardLayout.js +20 -0
  58. package/dist/extensions/Blocks/Items/controls/name/trimming.js +18 -17
  59. package/dist/extensions/Blocks/Items/controls/settingsControl.js +114 -105
  60. package/dist/extensions/Blocks/Items/enums/productEnums.js +14 -9
  61. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +11 -9
  62. package/dist/extensions/Blocks/Items/template.js +219 -204
  63. package/dist/extensions/Blocks/Recommendation/block.js +65 -45
  64. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +21 -20
  65. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +103 -90
  66. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +150 -52
  67. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +74 -74
  68. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +274 -92
  69. package/dist/extensions/Blocks/Recommendation/utils/legacyStrategyMigration.js +42 -0
  70. package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +26 -16
  71. package/dist/extensions/Blocks/Recommendation/utils/partnerCustomizations.js +3 -1
  72. package/dist/extensions/Blocks/Recommendation/utils/partnerScope.js +25 -0
  73. package/dist/extensions/Blocks/Recommendation/utils/strategyCommit.js +24 -0
  74. package/dist/extensions/Blocks/Recommendation/validation/requiredFields.js +21 -12
  75. package/dist/guido.css +1 -1
  76. package/dist/services/recommendationApi.js +46 -37
  77. package/dist/services/settingsApi.js +11 -0
  78. package/dist/src/@types/config/schemas.d.ts +36 -0
  79. package/dist/src/@types/save-validation.d.ts +19 -0
  80. package/dist/src/components/Guido.vue.d.ts +17 -1
  81. package/dist/src/components/organisms/base/AuthErrorModal.vue.d.ts +2 -0
  82. package/dist/src/components/organisms/extensions/recommendation/LegacyStrategyUpdatedModal.vue.d.ts +2 -0
  83. package/dist/src/components/organisms/header/EditorActions.vue.d.ts +17 -1
  84. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +17 -1
  85. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +17 -1
  86. package/dist/src/components/organisms/onboarding/RecommendationLegacyStrategyOnboarding.vue.d.ts +2 -0
  87. package/dist/src/components/organisms/onboarding/RecommendationStrategyOnboarding.vue.d.ts +2 -0
  88. package/dist/src/components/organisms/validation/ValidationErrorDrawer.vue.d.ts +2 -0
  89. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +4 -3
  90. package/dist/src/components/wrappers/WpModal.vue.d.ts +5 -1
  91. package/dist/src/composables/useAuthError.d.ts +12 -0
  92. package/dist/src/composables/useAutoSave.d.ts +4 -1
  93. package/dist/src/composables/useConfig.d.ts +8 -0
  94. package/dist/src/composables/useCortexBlueprintBridge.d.ts +2 -3
  95. package/dist/src/composables/useEmailTemplateApplier.d.ts +18 -5
  96. package/dist/src/composables/useGuidoActions.d.ts +2 -0
  97. package/dist/src/composables/useHtmlValidator.d.ts +21 -0
  98. package/dist/src/composables/useHttp.d.ts +2 -0
  99. package/dist/src/composables/useLegacyStrategyConversion.d.ts +3 -0
  100. package/dist/src/composables/useSave.d.ts +6 -1
  101. package/dist/src/composables/useSaveValidation.d.ts +6 -0
  102. package/dist/src/composables/useSaveValidationRollout.d.ts +4 -0
  103. package/dist/src/composables/validators/useCouponBlockValidator.d.ts +3 -0
  104. package/dist/src/composables/validators/useUnsubscribeBlockValidator.d.ts +10 -0
  105. package/dist/src/config/migrator/index.d.ts +2 -1
  106. package/dist/src/config/migrator/recommendationPartnerMigrator.d.ts +19 -0
  107. package/dist/src/enums/extensions/recommendationBlock.d.ts +7 -1
  108. package/dist/src/enums/save-validation.d.ts +27 -0
  109. package/dist/src/extensions/Blocks/Items/constants/cardLayout.d.ts +44 -0
  110. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +3 -0
  111. package/dist/src/extensions/Blocks/Items/template.d.ts +19 -0
  112. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +10 -0
  113. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +1 -0
  114. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
  115. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +2 -0
  116. package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +10 -0
  117. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +7 -2
  118. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +162 -1
  119. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +6 -0
  120. package/dist/src/extensions/Blocks/Recommendation/utils/legacyStrategyMigration.d.ts +32 -0
  121. package/dist/src/extensions/Blocks/Recommendation/utils/partnerScope.d.ts +33 -0
  122. package/dist/src/extensions/Blocks/Recommendation/utils/strategyCommit.d.ts +14 -0
  123. package/dist/src/extensions/Blocks/Recommendation/validation/requiredFields.d.ts +4 -0
  124. package/dist/src/mock/cortexChatStore.d.ts +12 -0
  125. package/dist/src/services/recommendationApi.d.ts +2 -1
  126. package/dist/src/services/settingsApi.d.ts +6 -0
  127. package/dist/src/stores/config.d.ts +374 -0
  128. package/dist/src/stores/guido-email-editor.d.ts +20 -10
  129. package/dist/src/stores/onboarding.d.ts +812 -10
  130. package/dist/src/stores/recommendation.d.ts +5 -0
  131. package/dist/src/stores/save-validation.d.ts +22 -0
  132. package/dist/src/stores/setup-settings.d.ts +4 -0
  133. package/dist/src/utils/dateUtil.d.ts +10 -0
  134. package/dist/src/utils/genericUtil.d.ts +3 -0
  135. package/dist/src/utils/stripoEditorApi.d.ts +4 -0
  136. package/dist/src/utils/templatePreparation.d.ts +30 -0
  137. package/dist/static/assets/icons/filled-arrow-rising.svg.js +5 -0
  138. package/dist/static/assets/icons/line-info.svg.js +5 -0
  139. package/dist/static/styles/components/recommendation-strategy.css.js +113 -9
  140. package/dist/static/styles/components/skeleton.css.js +23 -0
  141. package/dist/static/styles/components/version-history.css.js +2 -6
  142. package/dist/stores/config.js +55 -24
  143. package/dist/stores/guido-email-editor.js +3 -1
  144. package/dist/stores/onboarding.js +50 -36
  145. package/dist/stores/save-validation.js +30 -0
  146. package/dist/stores/setup-settings.js +10 -0
  147. package/dist/stores/unsubscribe.js +3 -3
  148. package/dist/utils/pairProductVariables.js +71 -71
  149. package/dist/utils/stripoEditorApi.js +11 -0
  150. package/dist/utils/templatePreparation.js +54 -51
  151. 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 a, number as s, optional as e, string as t, picklist as m, pipe as i, minLength as b, custom as k, boolean as o, array as c, transform as y, unknown as r, record as g, fallback as R, literal as u, looseObject as C, variant as I, union as h, lazy as T } from "../../node_modules/valibot/dist/index.js";
3
3
  const p = {
4
4
  /** Promotional/marketing emails */
5
5
  PROMOTIONAL: 1,
@@ -14,31 +14,39 @@ const p = {
14
14
  UNSUBSCRIBE_PAGES: 97
15
15
  }, A = a({
16
16
  /** Unique identifier for the template being edited */
17
- templateId: m(
17
+ templateId: i(
18
18
  t(),
19
19
  b(1, "templateId is required")
20
20
  ),
21
21
  /** Unique identifier for the user editing the template */
22
- userId: m(
22
+ userId: i(
23
23
  t(),
24
24
  b(1, "userId is required")
25
25
  ),
26
26
  /** Optional variation ID for A/B testing */
27
- variationId: e(t())
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())
28
36
  }), L = a({
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 = a({
34
42
  /** Partner/organization name (required) */
35
- name: m(
43
+ name: i(
36
44
  t(),
37
45
  b(1, "partner.name is required")
38
46
  ),
39
47
  /** Product type identifier */
40
48
  productType: e(
41
- i([
49
+ m([
42
50
  l.EMAIL,
43
51
  l.ARCHITECT,
44
52
  l.UNSUBSCRIBE_PAGES
@@ -47,14 +55,14 @@ const p = {
47
55
  ),
48
56
  /** Message type (promotional or transactional) */
49
57
  messageType: e(
50
- i([p.PROMOTIONAL, p.TRANSACTIONAL]),
58
+ m([p.PROMOTIONAL, p.TRANSACTIONAL]),
51
59
  p.PROMOTIONAL
52
60
  ),
53
61
  /** Display name for the current user */
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 = a({
58
66
  /** Display text for the dynamic content */
59
67
  text: t(),
60
68
  /** Template variable value (e.g., {{username}}) */
@@ -68,7 +76,7 @@ const p = {
68
76
  value: t()
69
77
  })
70
78
  )
71
- }), S = I(() => g({
79
+ }), S = T(() => C({
72
80
  text: e(t()),
73
81
  // eslint-disable-next-line camelcase -- backend field name
74
82
  tag_text: e(t()),
@@ -76,14 +84,14 @@ 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
+ })), N = g(
80
88
  t(),
81
89
  R(c(S), [])
82
- ), P = g({
90
+ ), P = C({
83
91
  /** Block ID (matches the dictionary key and the legacy HTML element id) */
84
- id: e(n()),
92
+ id: e(s()),
85
93
  /** Decimal places for price display (legacy data may use string or number) */
86
- decimalCount: e(h([t(), n()])),
94
+ decimalCount: e(h([t(), s()])),
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 */
@@ -103,11 +111,11 @@ const p = {
103
111
  /** Snapshot of products as rendered by the legacy block */
104
112
  recommendedProducts: e(c(r())),
105
113
  /** Number of product cards per row */
106
- cardsInRow: e(n()),
114
+ cardsInRow: e(s()),
107
115
  /** Mobile-only padding (right) */
108
- mobileRightPadding: e(n()),
116
+ mobileRightPadding: e(s()),
109
117
  /** Mobile-only padding (left) */
110
- mobileLeftPadding: e(n()),
118
+ mobileLeftPadding: e(s()),
111
119
  /** Disable responsive scaling */
112
120
  unresponsive: e(o()),
113
121
  /** Layout orientation ('vertical' | 'horizontal') */
@@ -117,7 +125,7 @@ const p = {
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
- size: e(h([t(), n()])),
128
+ size: e(h([t(), s()])),
121
129
  /** Vertical responsiveness flag (legacy size=1 variants) */
122
130
  verticalResponsiveness: e(o()),
123
131
  /** Legacy "Move to next line" price placement toggle (cardPricePlacement.js) */
@@ -132,7 +140,7 @@ const p = {
132
140
  * strategy, currency, locale, and layout data.
133
141
  */
134
142
  recommendationConfigs: e(
135
- k(t(), P),
143
+ g(t(), P),
136
144
  {}
137
145
  )
138
146
  }), x = a({
@@ -142,7 +150,7 @@ const p = {
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
  /**
@@ -155,7 +163,7 @@ const p = {
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
- selectedUnsubscribePages: e(c(n()), []),
166
+ selectedUnsubscribePages: e(c(s()), []),
159
167
  /** Force recreate template in Stripo storage (use true when updating externally modified templates) */
160
168
  forceRecreate: e(o(), !1),
161
169
  /**
@@ -166,12 +174,25 @@ const p = {
166
174
  * mount. Non-numbers still fail, like every other field in this schema.
167
175
  */
168
176
  trackIdCounter: e(
169
- m(
170
- n(),
171
- C((s) => Number.isFinite(s) ? Math.max(0, Math.floor(s)) : 0)
177
+ i(
178
+ s(),
179
+ y((n) => Number.isFinite(n) ? Math.max(0, Math.floor(n)) : 0)
172
180
  ),
173
181
  0
174
182
  ),
183
+ /**
184
+ * The variation's saved `recommendationCampaignUrls`, keyed by block id. A block
185
+ * that still names a strategy but has no entry here had it dropped by a
186
+ * cross-account duplicate, so Guido resets it on load (SD-151945). Omit it and
187
+ * that check is off, and so is any non-object value such as `null`, because a reset
188
+ * cannot be undone. Hosts send `[]` for an empty map.
189
+ */
190
+ recommendationCampaignUrls: e(
191
+ i(
192
+ r(),
193
+ y((n) => n && typeof n == "object" ? { ...n } : void 0)
194
+ )
195
+ ),
175
196
  /** Migration-only inputs (legacy block configs) */
176
197
  migration: e(v, {})
177
198
  }), D = a({
@@ -185,7 +206,7 @@ const p = {
185
206
  /** Path to translations object */
186
207
  translationsPath: e(t(), "window.trans[Object.keys(window.trans)[0]]"),
187
208
  /** Migration date for template compatibility */
188
- migrationDate: e(n(), 1759696858),
209
+ migrationDate: e(s(), 1759696858),
189
210
  /** Email header settings */
190
211
  emailHeader: e(D, { senderName: "", subject: "" }),
191
212
  /** Folder name for user-saved modules (used by Stripo plugin panel for path construction) */
@@ -220,8 +241,10 @@ const p = {
220
241
  allowlistEnabled: e(o(), !1),
221
242
  /** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
222
243
  linkTrackingIds: e(o(), !1),
244
+ /** Allow persisting a template that still has validation errors (drawer "Save and Continue" soft-save). Host sets false for transactional + unsubscribe. */
245
+ allowSaveWithErrors: e(o(), !0),
223
246
  reusableRecommendationStrategy: e(o(), !1)
224
- }), B = i([
247
+ }), w = m([
225
248
  "amp-accordion",
226
249
  "amp-carousel",
227
250
  "amp-form-controls",
@@ -235,7 +258,7 @@ const p = {
235
258
  "text-block",
236
259
  "timer-block",
237
260
  "video-block"
238
- ]), w = i([
261
+ ]), B = m([
239
262
  "dynamic-content",
240
263
  "checkbox-block",
241
264
  "radio-button-block",
@@ -243,15 +266,15 @@ const p = {
243
266
  "unsubscribe-block",
244
267
  "coupon-block",
245
268
  "items-block"
246
- ]), H = a({
269
+ ]), j = a({
247
270
  /** Default blocks to exclude from the editor */
248
271
  excludeDefaults: e(
249
- c(B),
272
+ c(w),
250
273
  []
251
274
  ),
252
275
  /** Custom blocks to include in the editor */
253
276
  includeCustoms: e(
254
- c(w),
277
+ c(B),
255
278
  []
256
279
  )
257
280
  }), d = a({
@@ -260,8 +283,8 @@ const p = {
260
283
  /** Human-readable description */
261
284
  description: e(t()),
262
285
  /** Priority for rule ordering (lower = earlier) */
263
- priority: n()
264
- }), _ = a({
286
+ priority: s()
287
+ }), H = a({
265
288
  ...d.entries,
266
289
  type: u("replace"),
267
290
  /** String to search for */
@@ -270,7 +293,7 @@ const p = {
270
293
  replacement: t(),
271
294
  /** Replace all occurrences (default: false) */
272
295
  replaceAll: e(o())
273
- }), j = a({
296
+ }), _ = a({
274
297
  ...d.entries,
275
298
  type: u("regex"),
276
299
  /** Regex pattern string */
@@ -288,13 +311,13 @@ const p = {
288
311
  ...d.entries,
289
312
  type: u("custom"),
290
313
  /** Custom processor function */
291
- processor: y(
292
- (s) => typeof s == "function",
314
+ processor: k(
315
+ (n) => typeof n == "function",
293
316
  "processor must be a function"
294
317
  )
295
- }), V = T("type", [
318
+ }), V = I("type", [
319
+ H,
296
320
  _,
297
- j,
298
321
  q,
299
322
  G
300
323
  ]), z = a({
@@ -302,23 +325,23 @@ const p = {
302
325
  customRules: e(c(V), []),
303
326
  /** Skip default compiler rules */
304
327
  ignoreDefaultRules: e(o(), !1)
305
- }), Z = a({
328
+ }), W = a({
306
329
  /**
307
330
  * External validation handler called before save completes.
308
331
  * Return false to cancel the save operation.
309
332
  */
310
333
  externalValidation: e(
311
- y(
312
- (s) => typeof s == "function",
334
+ k(
335
+ (n) => typeof n == "function",
313
336
  "externalValidation must be a function"
314
337
  )
315
338
  )
316
- }), Q = a({
339
+ }), K = a({
317
340
  // Required sections
318
341
  /** Identity configuration (required) */
319
342
  identity: A,
320
343
  /** Partner configuration (required) */
321
- partner: M,
344
+ partner: E,
322
345
  // Optional sections (with defaults)
323
346
  /** Template content and presets */
324
347
  template: e(x, {}),
@@ -329,36 +352,36 @@ const p = {
329
352
  /** Feature toggles */
330
353
  features: e(U, {}),
331
354
  /** Block configuration */
332
- blocks: e(H, {}),
355
+ blocks: e(j, {}),
333
356
  /** Compiler configuration */
334
357
  compiler: e(z, {}),
335
358
  /** Callbacks and event handlers */
336
- callbacks: e(Z, {})
359
+ callbacks: e(W, {})
337
360
  });
338
361
  export {
339
- H as BlocksSchema,
340
- Z as CallbacksSchema,
362
+ j as BlocksSchema,
363
+ W as CallbacksSchema,
341
364
  V as CompilerRuleSchema,
342
365
  z as CompilerSchema,
343
- w as CustomBlockTypeSchema,
366
+ B as CustomBlockTypeSchema,
344
367
  G as CustomRuleSchema,
345
- B as DefaultBlockTypeSchema,
368
+ w as DefaultBlockTypeSchema,
346
369
  N as DynamicContentListSchema,
347
370
  S as DynamicContentNodeSchema,
348
- E as DynamicContentSchema,
371
+ M as DynamicContentSchema,
349
372
  O as EditorSchema,
350
373
  D as EmailHeaderSchema,
351
374
  L as FallbackFontSchema,
352
375
  U as FeaturesSchema,
353
- Q as GuidoConfigSchema,
376
+ K as GuidoConfigSchema,
354
377
  A as IdentitySchema,
355
378
  P as LegacyRecommendationConfigSchema,
356
379
  p as MessageType,
357
- M as PartnerSchema,
380
+ E as PartnerSchema,
358
381
  l as ProductType,
359
- j as RegexRuleSchema,
382
+ _ as RegexRuleSchema,
360
383
  q as RemoveRuleSchema,
361
- _ as ReplaceRuleSchema,
384
+ H as ReplaceRuleSchema,
362
385
  v as TemplateMigrationSchema,
363
386
  x as TemplateSchema,
364
387
  F as UISchema
@@ -3,7 +3,7 @@ import o from "./Guido.vue2.js";
3
3
  import i 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.AuthErrorModal), 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
9
  }, s = [], n = /* @__PURE__ */ i(
@@ -12,9 +12,9 @@ var t = function() {
12
12
  s,
13
13
  !1,
14
14
  null,
15
- "050dfa52"
15
+ "d0a8825a"
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
  };