@useinsider/guido 3.1.1-beta.dee5e9c → 3.1.1-beta.e4b695a

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 (49) hide show
  1. package/dist/@types/config/schemas.js +69 -61
  2. package/dist/components/Guido.vue.js +4 -4
  3. package/dist/components/Guido.vue2.js +81 -91
  4. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +7 -7
  5. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue2.js +12 -20
  6. package/dist/composables/useHtmlCompiler.js +20 -20
  7. package/dist/composables/usePreviewMode.js +20 -16
  8. package/dist/composables/useSave.js +15 -13
  9. package/dist/config/migrator/checkboxMigrator.js +5 -3
  10. package/dist/config/migrator/radioButtonMigrator.js +14 -12
  11. package/dist/enums/extensions/recommendationBlock.js +14 -11
  12. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +27 -11
  13. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +185 -172
  14. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +94 -92
  15. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +31 -31
  16. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +7 -5
  17. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +30 -29
  18. package/dist/extensions/Blocks/Recommendation/templates/index.js +7 -7
  19. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +3 -1
  20. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +20 -20
  21. package/dist/extensions/Blocks/Recommendation/templates/utils.js +57 -50
  22. package/dist/guido.css +1 -1
  23. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +218 -324
  24. package/dist/package.json.js +1 -1
  25. package/dist/services/recommendationApi.js +15 -15
  26. package/dist/src/@types/config/index.d.ts +1 -1
  27. package/dist/src/@types/config/schemas.d.ts +20 -0
  28. package/dist/src/@types/config/types.d.ts +3 -1
  29. package/dist/src/@types/generic.d.ts +0 -1
  30. package/dist/src/composables/useConfig.d.ts +8 -0
  31. package/dist/src/enums/extensions/recommendationBlock.d.ts +3 -0
  32. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
  33. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +5 -0
  34. package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +5 -0
  35. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +4 -4
  36. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +3 -3
  37. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +20 -3
  38. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +3 -3
  39. package/dist/src/stores/config.d.ts +72 -0
  40. package/dist/src/stores/preview.d.ts +3 -0
  41. package/dist/src/utils/htmlCompiler.d.ts +2 -1
  42. package/dist/static/styles/base.css.js +2 -7
  43. package/dist/static/styles/components/button.css.js +7 -13
  44. package/dist/static/styles/components/narrow-panel.css.js +0 -52
  45. package/dist/stores/preview.js +4 -3
  46. package/dist/utils/htmlCompiler.js +48 -41
  47. package/dist/utils/templatePreparation.js +20 -20
  48. package/dist/utils/tooltipUtils.js +4 -5
  49. package/package.json +4 -4
@@ -28,58 +28,6 @@ ue-stripe-thumb:hover:not(.disabled),
28
28
  border-color: var(--guido-color-primary-500);
29
29
  }
30
30
 
31
- /* Module search — initial */
32
- .module-search-container {
33
- background-color: var(--guido-color-gray-0);
34
- border: 1px solid var(--guido-color-gray-300);
35
- border-radius: 4px;
36
- }
37
-
38
- .module-search-container .service-element {
39
- background-color: unset;
40
- }
41
-
42
- .module-filter-toggle {
43
- top: -1px !important;
44
- right: -1px !important;
45
- }
46
-
47
- .module-filter-toggle > .button,
48
- .module-search-container:hover .module-filter-toggle > .button {
49
- border: none;
50
- background: transparent;
51
- }
52
-
53
- /* Module search — hover */
54
- .module-search-container:has(.module-search-chip-input:hover) {
55
- border-color: var(--guido-color-primary-500);
56
- }
57
-
58
- .module-search-container .module-search-chip-input .service-element:hover {
59
- background-color: var(--guido-color-gray-0);
60
- border-radius: 4px;
61
- }
62
-
63
- .module-search-container .module-filter-toggle:hover > .button {
64
- background-color: var(--guido-color-gray-1);
65
- }
66
-
67
- /* Module search — selected (.on) */
68
- .module-search-container:has(.module-search-chip-input.on),
69
- .module-search-container:has(.module-search-chip-input.on):hover {
70
- border-color: var(--guido-color-primary-500);
71
- box-shadow: 0 0 0 3px var(--guido-color-primary-200) !important;
72
- }
73
-
74
- .module-search-container .module-search-chip-input.on .input-section {
75
- background-color: unset;
76
- box-shadow: unset;
77
- }
78
-
79
- .module-categories-list .menu-item {
80
- padding: 8px 20px !important;
81
- }
82
-
83
31
  .modules-layout-wrapper {
84
32
  padding: 0 16px 16px;
85
33
  grid-row-gap: 16px;
@@ -1,13 +1,14 @@
1
1
  import { defineStore as e } from "pinia";
2
- const s = () => ({
2
+ const i = () => ({
3
3
  emailFormat: "html",
4
4
  ampHtml: "",
5
5
  ampErrors: [],
6
6
  templateHtml: "",
7
7
  isLoaded: !1,
8
- isAMPErrorModalVisible: !1
8
+ isAMPErrorModalVisible: !1,
9
+ emailSizeKB: 0
9
10
  }), a = e("guidoPreview", {
10
- state: () => s(),
11
+ state: () => i(),
11
12
  getters: {
12
13
  isAMPModeEnabled: (t) => t.emailFormat === "AMP",
13
14
  previewHtml() {
@@ -1,70 +1,77 @@
1
- var y = Object.defineProperty;
2
- var g = (p, e, r) => e in p ? y(p, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : p[e] = r;
3
- var u = (p, e, r) => g(p, typeof e != "symbol" ? e + "" : e, r);
4
- import { useToaster as m } from "../composables/useToaster.js";
5
- class d {
1
+ var h = Object.defineProperty;
2
+ var f = (o, e, t) => e in o ? h(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t;
3
+ var m = (o, e, t) => f(o, typeof e != "symbol" ? e + "" : e, t);
4
+ import { useToaster as x } from "../composables/useToaster.js";
5
+ const E = /font-family\s*:[^;}"']+/gi;
6
+ class T {
6
7
  constructor(e = []) {
7
- u(this, "rules");
8
+ m(this, "rules");
8
9
  this.rules = e;
9
10
  }
10
- compile(e, r) {
11
- const l = performance.now(), t = e, o = e.length;
11
+ compile(e, t, r) {
12
+ const n = performance.now(), l = e, c = e.length;
12
13
  let s = e;
13
- const a = [];
14
- (r || this.rules).sort((n, c) => n.priority - c.priority).forEach((n) => {
15
- const c = s.length;
16
- s = this.applyRule(s, n), s.length !== c && a.push(n.id);
14
+ const i = [];
15
+ (t || this.rules).sort((p, a) => p.priority - a.priority).forEach((p) => {
16
+ const a = s.length;
17
+ s = this.applyRule(s, p), s.length !== a && i.push(p.id);
17
18
  });
18
- const i = s.length, R = o > 0 ? (o - i) / o * 100 : 0;
19
+ const u = s.length, R = c > 0 ? (c - u) / c * 100 : 0, d = new TextEncoder().encode(s).byteLength;
20
+ let y = 0;
21
+ if (r && r.name && r.family) {
22
+ const p = (s.match(E) || []).length, a = `, ${r.name}, ${r.family}`;
23
+ y = p * new TextEncoder().encode(a).byteLength;
24
+ }
25
+ const g = Math.round((d + y) / 1024);
19
26
  return {
20
- originalHtml: t,
27
+ originalHtml: l,
21
28
  compiledHtml: s,
22
- appliedRules: a,
23
- // TODO: We can use stats for monitoring in the future
29
+ appliedRules: i,
30
+ estimatedSizeKB: g,
24
31
  stats: {
25
- originalSize: o,
26
- compiledSize: i,
32
+ originalSize: c,
33
+ compiledSize: u,
27
34
  reductionPercentage: R,
28
- executionTime: performance.now() - l
35
+ executionTime: performance.now() - n
29
36
  }
30
37
  };
31
38
  }
32
- applyRule(e, r) {
39
+ applyRule(e, t) {
33
40
  try {
34
- switch (r.type) {
41
+ switch (t.type) {
35
42
  case "replace":
36
- return this.applyReplaceRule(e, r);
43
+ return this.applyReplaceRule(e, t);
37
44
  case "regex":
38
- return this.applyRegexRule(e, r);
45
+ return this.applyRegexRule(e, t);
39
46
  case "remove":
40
- return this.applyRemoveRule(e, r);
47
+ return this.applyRemoveRule(e, t);
41
48
  case "custom":
42
- return this.applyCustomRule(e, r);
49
+ return this.applyCustomRule(e, t);
43
50
  default:
44
51
  return e;
45
52
  }
46
- } catch (l) {
47
- const { handleError: t } = m();
48
- return t(l, `Failed to apply rule ${r.id}:`), e;
53
+ } catch (r) {
54
+ const { handleError: n } = x();
55
+ return n(r, `Failed to apply rule ${t.id}:`), e;
49
56
  }
50
57
  }
51
- applyReplaceRule(e, r) {
52
- const { search: l, replacement: t, replaceAll: o = !0 } = r;
53
- return o ? e.replaceAll(l, t) : e.replace(l, t);
58
+ applyReplaceRule(e, t) {
59
+ const { search: r, replacement: n, replaceAll: l = !0 } = t;
60
+ return l ? e.replaceAll(r, n) : e.replace(r, n);
54
61
  }
55
- applyRegexRule(e, r) {
56
- const { pattern: l, replacement: t, flags: o = "g" } = r, s = new RegExp(l, o);
57
- return e.replace(s, t);
62
+ applyRegexRule(e, t) {
63
+ const { pattern: r, replacement: n, flags: l = "g" } = t, c = new RegExp(r, l);
64
+ return e.replace(c, n);
58
65
  }
59
- applyRemoveRule(e, r) {
60
- return r.targets.reduce((l, t) => t instanceof RegExp ? l.replace(t, "") : l.replaceAll(t, ""), e);
66
+ applyRemoveRule(e, t) {
67
+ return t.targets.reduce((r, n) => n instanceof RegExp ? r.replace(n, "") : r.replaceAll(n, ""), e);
61
68
  }
62
- applyCustomRule(e, r) {
63
- return r.processor(e);
69
+ applyCustomRule(e, t) {
70
+ return t.processor(e);
64
71
  }
65
72
  }
66
- const A = (p = []) => new d(p);
73
+ const H = (o = []) => new T(o);
67
74
  export {
68
- d as HtmlCompilerEngine,
69
- A as createHtmlCompiler
75
+ T as HtmlCompilerEngine,
76
+ H as createHtmlCompiler
70
77
  };
@@ -1,32 +1,32 @@
1
- import { useActionsApi as f } from "../composables/useActionsApi.js";
2
- import { useHtmlCompiler as C } from "../composables/useHtmlCompiler.js";
3
- import { useRecommendationExtensionStore as T } from "../extensions/Blocks/Recommendation/store/recommendation.js";
4
- import { useDynamicContentStore as x } from "../stores/dynamic-content.js";
5
- import { useUnsubscribeStore as y } from "../stores/unsubscribe.js";
6
- const w = () => {
7
- const o = x(), e = y(), { getCompiledEmail: i, getTemplateData: s, editorSave: n } = f(), { compileHtml: a } = C();
1
+ import { useActionsApi as S } from "../composables/useActionsApi.js";
2
+ import { useHtmlCompiler as f } from "../composables/useHtmlCompiler.js";
3
+ import { useRecommendationExtensionStore as C } from "../extensions/Blocks/Recommendation/store/recommendation.js";
4
+ import { useDynamicContentStore as T } from "../stores/dynamic-content.js";
5
+ import { useUnsubscribeStore as x } from "../stores/unsubscribe.js";
6
+ const h = () => {
7
+ const o = T(), e = x(), { getCompiledEmail: i, getTemplateData: s } = S(), { compileHtml: n } = f();
8
8
  return {
9
9
  prepareTemplateDetails: async () => {
10
- const { html: m, ampHtml: r = "", ampErrors: c = [] } = await i({
10
+ const { html: a, ampHtml: m = "", ampErrors: r = [] } = await i({
11
11
  minimize: !0,
12
12
  resetDataSavedFlag: !1
13
- }), { html: l, css: p, syncModulesIds: u = [] } = await s();
13
+ }), { html: c, css: l, syncModulesIds: p = [] } = await s();
14
14
  e.selectedUnsubscribePages.length && await e.fetchTemplates();
15
- const { compiledHtml: d, stats: t, appliedRules: g } = a(m), S = o.getSelectedDynamicContentList, b = T();
16
- return n(), console.debug("HTML Compilation Stats:", {
15
+ const { compiledHtml: u, stats: t, appliedRules: d } = n(a), g = o.getSelectedDynamicContentList, b = C();
16
+ return console.debug("HTML Compilation Stats:", {
17
17
  originalSize: t.originalSize,
18
18
  compiledSize: t.compiledSize,
19
19
  reduction: `${t.reductionPercentage.toFixed(2)}%`,
20
- appliedRules: g,
20
+ appliedRules: d,
21
21
  executionTime: `${t.executionTime.toFixed(2)}ms`
22
22
  }), {
23
- dynamicContentList: S,
24
- compiledHtml: d,
25
- rawHtml: l,
26
- css: p,
27
- ampHtml: r,
28
- ampErrors: c,
29
- modules: u.map(Number),
23
+ dynamicContentList: g,
24
+ compiledHtml: u,
25
+ rawHtml: c,
26
+ css: l,
27
+ ampHtml: m,
28
+ ampErrors: r,
29
+ modules: p.map(Number),
30
30
  recommendation: {
31
31
  campaignUrls: b.recommendationCampaignUrls,
32
32
  configs: {}
@@ -40,5 +40,5 @@ const w = () => {
40
40
  };
41
41
  };
42
42
  export {
43
- w as useTemplatePreparation
43
+ h as useTemplatePreparation
44
44
  };
@@ -1,11 +1,10 @@
1
- const e = (s, t = {}) => ({
2
- id: s,
1
+ const o = (i, t = {}) => ({
2
+ id: i,
3
3
  dynamicPosition: t.dynamicPosition ?? !1,
4
4
  staticPosition: t.staticPosition ?? "bottom center",
5
5
  iconStatus: t.iconStatus ?? !1,
6
- offset: t.offset,
7
- preventXss: t.preventXss
6
+ offset: t.offset
8
7
  });
9
8
  export {
10
- e as getTooltipOptions
9
+ o as getTooltipOptions
11
10
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "3.1.1-beta.dee5e9c",
3
+ "version": "3.1.1-beta.e4b695a",
4
4
  "description": "Guido is a Vue + TypeScript wrapper for Email Plugin. Easily embed the email editor in your Vue applications.",
5
5
  "main": "./dist/guido.umd.cjs",
6
6
  "module": "./dist/library.js",
@@ -32,8 +32,8 @@
32
32
  "author": "",
33
33
  "license": "ISC",
34
34
  "dependencies": {
35
- "@stripoinc/ui-editor-extensions": "3.7.0",
36
- "@useinsider/design-system-vue": "0.14.28",
35
+ "@stripoinc/ui-editor-extensions": "3.5.0",
36
+ "@useinsider/design-system-vue": "1.1.0-beta.73ec2fa",
37
37
  "@vueuse/core": "11.3.0",
38
38
  "lodash-es": "4.17.21",
39
39
  "pinia": "2.3.1",
@@ -86,7 +86,7 @@
86
86
  },
87
87
  "guido": {
88
88
  "stripo": {
89
- "version": "2.59.0"
89
+ "version": "2.54.0"
90
90
  }
91
91
  }
92
92
  }