@antelopejs/dms-marketing 0.6.0 → 0.7.0

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 (181) hide show
  1. package/dist/config.d.ts +3 -0
  2. package/dist/config.js +11 -0
  3. package/dist/config.js.map +1 -1
  4. package/dist/data-api/websites.d.ts +10 -4
  5. package/dist/data-api/websites.js +79 -3
  6. package/dist/data-api/websites.js.map +1 -1
  7. package/dist/db/models/page_snapshots.model.d.ts +2 -0
  8. package/dist/db/models/page_snapshots.model.js +6 -0
  9. package/dist/db/models/page_snapshots.model.js.map +1 -1
  10. package/dist/db/models/websites.model.d.ts +1 -0
  11. package/dist/db/models/websites.model.js +9 -0
  12. package/dist/db/models/websites.model.js.map +1 -1
  13. package/dist/db/tables/page_snapshots.table.d.ts +1 -0
  14. package/dist/db/tables/page_snapshots.table.js +4 -0
  15. package/dist/db/tables/page_snapshots.table.js.map +1 -1
  16. package/dist/db/tables/websites.table.d.ts +2 -0
  17. package/dist/db/tables/websites.table.js +4 -0
  18. package/dist/db/tables/websites.table.js.map +1 -1
  19. package/dist/frontend-module.d.ts +6 -0
  20. package/dist/frontend-module.js +46 -0
  21. package/dist/frontend-module.js.map +1 -0
  22. package/dist/index.js +3 -11
  23. package/dist/index.js.map +1 -1
  24. package/dist/pages/acquisition/page.d.ts +1 -0
  25. package/dist/pages/acquisition/page.js +9 -4
  26. package/dist/pages/acquisition/page.js.map +1 -1
  27. package/dist/pages/blocks.d.ts +11 -2
  28. package/dist/pages/blocks.js +43 -5
  29. package/dist/pages/blocks.js.map +1 -1
  30. package/dist/pages/funnel/page.d.ts +1 -0
  31. package/dist/pages/funnel/page.js +1 -0
  32. package/dist/pages/funnel/page.js.map +1 -1
  33. package/dist/pages/funnels/page.d.ts +1 -0
  34. package/dist/pages/funnels/page.js +4 -2
  35. package/dist/pages/funnels/page.js.map +1 -1
  36. package/dist/pages/overview/page.d.ts +1 -0
  37. package/dist/pages/overview/page.js +5 -6
  38. package/dist/pages/overview/page.js.map +1 -1
  39. package/dist/pages/pages/page.d.ts +1 -0
  40. package/dist/pages/pages/page.js +1 -0
  41. package/dist/pages/pages/page.js.map +1 -1
  42. package/dist/pages/settings/form.js +1 -0
  43. package/dist/pages/settings/form.js.map +1 -1
  44. package/dist/pages/websites/page.d.ts +2 -3
  45. package/dist/pages/websites/page.js +63 -5
  46. package/dist/pages/websites/page.js.map +1 -1
  47. package/dist/routes/dashboard-tracking.js +5 -1
  48. package/dist/routes/dashboard-tracking.js.map +1 -1
  49. package/dist/routes/funnels.d.ts +2 -0
  50. package/dist/routes/funnels.js +6 -5
  51. package/dist/routes/funnels.js.map +1 -1
  52. package/dist/routes/public-endpoints.js +1 -1
  53. package/dist/routes/public-endpoints.js.map +1 -1
  54. package/dist/routes/snapshot.d.ts +1 -1
  55. package/dist/routes/snapshot.js +30 -13
  56. package/dist/routes/snapshot.js.map +1 -1
  57. package/dist/routes/stats.d.ts +10 -4
  58. package/dist/routes/stats.js +77 -23
  59. package/dist/routes/stats.js.map +1 -1
  60. package/dist/routes/websites.d.ts +5 -1
  61. package/dist/routes/websites.js +31 -13
  62. package/dist/routes/websites.js.map +1 -1
  63. package/dist/services/acquisition-report.d.ts +1 -0
  64. package/dist/services/acquisition-report.js +1 -0
  65. package/dist/services/acquisition-report.js.map +1 -1
  66. package/dist/services/collect.js +7 -2
  67. package/dist/services/collect.js.map +1 -1
  68. package/dist/services/dashboard-tracking.d.ts +7 -14
  69. package/dist/services/dashboard-tracking.js +42 -26
  70. package/dist/services/dashboard-tracking.js.map +1 -1
  71. package/dist/services/funnels-table.d.ts +3 -2
  72. package/dist/services/funnels-table.js +9 -9
  73. package/dist/services/funnels-table.js.map +1 -1
  74. package/dist/services/heatmap.d.ts +6 -0
  75. package/dist/services/heatmap.js +82 -17
  76. package/dist/services/heatmap.js.map +1 -1
  77. package/dist/services/index.d.ts +1 -0
  78. package/dist/services/index.js +1 -0
  79. package/dist/services/index.js.map +1 -1
  80. package/dist/services/prune.js +6 -1
  81. package/dist/services/prune.js.map +1 -1
  82. package/dist/services/realtime.d.ts +3 -0
  83. package/dist/services/realtime.js +49 -0
  84. package/dist/services/realtime.js.map +1 -0
  85. package/dist/services/request-body.d.ts +1 -0
  86. package/dist/services/request-body.js +18 -0
  87. package/dist/services/request-body.js.map +1 -1
  88. package/dist/services/sessionize.d.ts +1 -0
  89. package/dist/services/sessionize.js +9 -0
  90. package/dist/services/sessionize.js.map +1 -1
  91. package/dist/services/snapshots.d.ts +28 -1
  92. package/dist/services/snapshots.js +147 -26
  93. package/dist/services/snapshots.js.map +1 -1
  94. package/dist/services/tenant-website.d.ts +11 -0
  95. package/dist/services/tenant-website.js +27 -5
  96. package/dist/services/tenant-website.js.map +1 -1
  97. package/dist/services/website-report.d.ts +5 -0
  98. package/dist/services/website-report.js +13 -1
  99. package/dist/services/website-report.js.map +1 -1
  100. package/dist/services/workspace-scope.d.ts +31 -0
  101. package/dist/services/workspace-scope.js +72 -0
  102. package/dist/services/workspace-scope.js.map +1 -0
  103. package/dist/types/constants.d.ts +7 -0
  104. package/dist/types/constants.js +8 -1
  105. package/dist/types/constants.js.map +1 -1
  106. package/dist/types/events.d.ts +25 -25
  107. package/dist/types/snapshots.d.ts +29 -29
  108. package/dist/types/snapshots.js +1 -1
  109. package/dist/types/snapshots.js.map +1 -1
  110. package/dist/utils/funnel-steps-type.d.ts +13 -13
  111. package/frontend-vue/app/components/ChannelsCard.vue +19 -2
  112. package/frontend-vue/app/components/Context.vue +50 -376
  113. package/frontend-vue/app/components/FunnelBuilder.vue +28 -22
  114. package/frontend-vue/app/components/FunnelFigure.vue +15 -2
  115. package/frontend-vue/app/components/FunnelReport.vue +3 -0
  116. package/frontend-vue/app/components/FunnelTemplates.vue +15 -13
  117. package/frontend-vue/app/components/InstallGuide.vue +1 -1
  118. package/frontend-vue/app/components/PagePreview.vue +330 -74
  119. package/frontend-vue/app/components/PagesExplorer.vue +230 -85
  120. package/frontend-vue/app/components/TopListTabs.vue +51 -18
  121. package/frontend-vue/app/components/WebsiteCard.vue +394 -0
  122. package/frontend-vue/app/components/WebsiteCreate.vue +159 -0
  123. package/frontend-vue/app/components/WebsitePicker.vue +210 -0
  124. package/frontend-vue/app/components/WebsiteSettings.vue +539 -0
  125. package/frontend-vue/app/components/WorkspaceScope.vue +119 -0
  126. package/frontend-vue/app/composables/useContextWebsite.ts +105 -0
  127. package/frontend-vue/app/composables/useCopyDraft.ts +47 -0
  128. package/frontend-vue/app/composables/useMarketingApi.ts +92 -4
  129. package/frontend-vue/app/composables/useMarketingReads.ts +32 -23
  130. package/frontend-vue/app/composables/useMarketingRoutes.ts +25 -2
  131. package/frontend-vue/app/composables/useRecordCrumb.ts +17 -0
  132. package/frontend-vue/app/composables/useSnapshotFrame.ts +35 -1
  133. package/frontend-vue/app/utils/anchor-drift.ts +58 -0
  134. package/frontend-vue/app/utils/drift-dismissals.ts +20 -0
  135. package/frontend-vue/app/utils/fill-height.ts +141 -0
  136. package/frontend-vue/app/utils/format.ts +21 -2
  137. package/frontend-vue/app/utils/funnel-draft.ts +22 -0
  138. package/frontend-vue/app/utils/heatmap.ts +17 -0
  139. package/frontend-vue/app/utils/page-snapshot.ts +75 -0
  140. package/frontend-vue/app/utils/snapshot-options.ts +148 -0
  141. package/frontend-vue/app/utils/snapshotScrollRoot.ts +93 -0
  142. package/frontend-vue/app/utils/website-card.ts +93 -0
  143. package/frontend-vue/app/utils/website-purge.ts +95 -0
  144. package/frontend-vue/app/utils/website-settings.ts +121 -0
  145. package/frontend-vue/app/utils/website-state.ts +93 -0
  146. package/frontend-vue/app/utils/workspace-scope.ts +51 -0
  147. package/frontend-vue/i18n/locales/marketing-en-GB.json +112 -36
  148. package/frontend-vue/i18n/locales/marketing-fr-FR.json +112 -36
  149. package/frontend-vue/package.json +1 -1
  150. package/frontend-vue/tests/anchor-drift.test.ts +59 -0
  151. package/frontend-vue/tests/build-flags.test.ts +38 -0
  152. package/frontend-vue/tests/context-bar.test.ts +226 -0
  153. package/frontend-vue/tests/copy-draft.test.ts +64 -0
  154. package/frontend-vue/tests/drift-dismissals.test.ts +12 -0
  155. package/frontend-vue/tests/fill-height.test.ts +110 -0
  156. package/frontend-vue/tests/format.test.ts +14 -0
  157. package/frontend-vue/tests/funnel-draft.test.ts +37 -0
  158. package/frontend-vue/tests/heatmap.test.ts +25 -0
  159. package/frontend-vue/tests/install-guide.test.ts +25 -0
  160. package/frontend-vue/tests/marketing-reads.test.ts +20 -6
  161. package/frontend-vue/tests/page-snapshot.test.ts +62 -0
  162. package/frontend-vue/tests/record-crumb.test.ts +43 -0
  163. package/frontend-vue/tests/registration.test.ts +4 -1
  164. package/frontend-vue/tests/routes.test.ts +21 -0
  165. package/frontend-vue/tests/save-funnel.test.ts +47 -0
  166. package/frontend-vue/tests/server-parity.test.ts +3 -0
  167. package/frontend-vue/tests/snapshot-options.test.ts +148 -0
  168. package/frontend-vue/tests/snapshot-scroll-root.test.ts +84 -0
  169. package/frontend-vue/tests/stubs/frontend-module.ts +5 -1
  170. package/frontend-vue/tests/top-list-tabs.test.ts +158 -0
  171. package/frontend-vue/tests/website-card.test.ts +119 -0
  172. package/frontend-vue/tests/website-purge.test.ts +70 -0
  173. package/frontend-vue/tests/website-settings.test.ts +133 -0
  174. package/frontend-vue/tests/website-state.test.ts +96 -0
  175. package/frontend-vue/tests/workspace-scope-control.test.ts +113 -0
  176. package/frontend-vue/tests/workspace-scope.test.ts +55 -0
  177. package/package.json +5 -4
  178. package/skills/dms-marketing/SKILL.md +47 -6
  179. package/static/snapshot.js +539 -48
  180. package/static/tracker.js +154 -5
  181. package/frontend-vue/app/components/WebsitesGrid.vue +0 -812
@@ -12,11 +12,11 @@ export declare const snapshotRequestSchema: z.ZodUnion<[z.ZodObject<{
12
12
  width: z.ZodNumber;
13
13
  height: z.ZodNumber;
14
14
  }, "strip", z.ZodTypeAny, {
15
- width: number;
16
15
  height: number;
17
- }, {
18
16
  width: number;
17
+ }, {
19
18
  height: number;
19
+ width: number;
20
20
  }>;
21
21
  colorScheme: z.ZodOptional<z.ZodEnum<["light", "dark"]>>;
22
22
  token: z.ZodString;
@@ -25,40 +25,40 @@ export declare const snapshotRequestSchema: z.ZodUnion<[z.ZodObject<{
25
25
  width: z.ZodNumber;
26
26
  height: z.ZodNumber;
27
27
  }, "strip", z.ZodTypeAny, {
28
- width: number;
29
28
  height: number;
30
- }, {
31
29
  width: number;
30
+ }, {
32
31
  height: number;
32
+ width: number;
33
33
  }>;
34
34
  html: z.ZodString;
35
35
  }, "strip", z.ZodTypeAny, {
36
36
  url: string;
37
+ token: string;
38
+ html: string;
37
39
  website: string;
38
40
  viewport: {
39
- width: number;
40
41
  height: number;
42
+ width: number;
41
43
  };
42
- token: string;
43
44
  document: {
44
- width: number;
45
45
  height: number;
46
+ width: number;
46
47
  };
47
- html: string;
48
48
  colorScheme?: "light" | "dark" | undefined;
49
49
  }, {
50
50
  url: string;
51
+ token: string;
52
+ html: string;
51
53
  website: string;
52
54
  viewport: {
53
- width: number;
54
55
  height: number;
56
+ width: number;
55
57
  };
56
- token: string;
57
58
  document: {
58
- width: number;
59
59
  height: number;
60
+ width: number;
60
61
  };
61
- html: string;
62
62
  colorScheme?: "light" | "dark" | undefined;
63
63
  }>, z.ZodObject<{
64
64
  website: z.ZodString;
@@ -67,11 +67,11 @@ export declare const snapshotRequestSchema: z.ZodUnion<[z.ZodObject<{
67
67
  width: z.ZodNumber;
68
68
  height: z.ZodNumber;
69
69
  }, "strip", z.ZodTypeAny, {
70
- width: number;
71
70
  height: number;
72
- }, {
73
71
  width: number;
72
+ }, {
74
73
  height: number;
74
+ width: number;
75
75
  }>;
76
76
  colorScheme: z.ZodOptional<z.ZodEnum<["light", "dark"]>>;
77
77
  token: z.ZodString;
@@ -79,22 +79,22 @@ export declare const snapshotRequestSchema: z.ZodUnion<[z.ZodObject<{
79
79
  oversizeBytes: z.ZodNumber;
80
80
  }, "strip", z.ZodTypeAny, {
81
81
  url: string;
82
+ token: string;
82
83
  website: string;
83
84
  viewport: {
84
- width: number;
85
85
  height: number;
86
+ width: number;
86
87
  };
87
- token: string;
88
88
  oversizeBytes: number;
89
89
  colorScheme?: "light" | "dark" | undefined;
90
90
  }, {
91
91
  url: string;
92
+ token: string;
92
93
  website: string;
93
94
  viewport: {
94
- width: number;
95
95
  height: number;
96
+ width: number;
96
97
  };
97
- token: string;
98
98
  oversizeBytes: number;
99
99
  colorScheme?: "light" | "dark" | undefined;
100
100
  }>]>;
@@ -106,52 +106,52 @@ export declare const snapshotDeclarationSchema: z.ZodObject<Omit<{
106
106
  width: z.ZodNumber;
107
107
  height: z.ZodNumber;
108
108
  }, "strip", z.ZodTypeAny, {
109
- width: number;
110
109
  height: number;
111
- }, {
112
110
  width: number;
111
+ }, {
113
112
  height: number;
113
+ width: number;
114
114
  }>;
115
115
  colorScheme: z.ZodOptional<z.ZodEnum<["light", "dark"]>>;
116
116
  token: z.ZodString;
117
- }, "website" | "token"> & {
117
+ }, "token" | "website"> & {
118
118
  websiteId: z.ZodString;
119
119
  document: z.ZodObject<{
120
120
  width: z.ZodNumber;
121
121
  height: z.ZodNumber;
122
122
  }, "strip", z.ZodTypeAny, {
123
- width: number;
124
123
  height: number;
125
- }, {
126
124
  width: number;
125
+ }, {
127
126
  height: number;
127
+ width: number;
128
128
  }>;
129
129
  html: z.ZodString;
130
130
  }, "strip", z.ZodTypeAny, {
131
131
  url: string;
132
+ html: string;
132
133
  websiteId: string;
133
134
  viewport: {
134
- width: number;
135
135
  height: number;
136
+ width: number;
136
137
  };
137
138
  document: {
138
- width: number;
139
139
  height: number;
140
+ width: number;
140
141
  };
141
- html: string;
142
142
  colorScheme?: "light" | "dark" | undefined;
143
143
  }, {
144
144
  url: string;
145
+ html: string;
145
146
  websiteId: string;
146
147
  viewport: {
147
- width: number;
148
148
  height: number;
149
+ width: number;
149
150
  };
150
151
  document: {
151
- width: number;
152
152
  height: number;
153
+ width: number;
153
154
  };
154
- html: string;
155
155
  colorScheme?: "light" | "dark" | undefined;
156
156
  }>;
157
157
  export {};
@@ -34,7 +34,7 @@ const snapshotPageSchema = zod_1.z.object({
34
34
  exports.snapshotRequestSchema = zod_1.z.union([
35
35
  snapshotPageSchema.extend({
36
36
  document: dimensionSchema(constants_1.MAX_SNAPSHOT_DOCUMENT_PX),
37
- html: zod_1.z.string().min(1).max(constants_1.MAX_SNAPSHOT_BYTES),
37
+ html: zod_1.z.string().min(1).max(constants_1.MAX_SNAPSHOT_INFLATED_BYTES),
38
38
  }),
39
39
  snapshotPageSchema.extend({
40
40
  oversizeBytes: zod_1.z.number().int().positive().max(constants_1.MAX_REPORTED_SNAPSHOT_BYTES),
@@ -1 +1 @@
1
- {"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/types/snapshots.ts"],"names":[],"mappings":";;;AA0BA,sCAKC;AAED,4CAEC;AAnCD,6BAAwB;AACxB,2CAOqB;AAErB,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAMxB,QAAA,gBAAgB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAIxE,MAAM,iBAAiB,GAAmC;IACxD,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,CACL,wBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,wBAAgB,CAAC,QAAQ,CAAC,KAAuB,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,CAAU,CAAC;AAI1D,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CACtC,OAAC,CAAC,MAAM,CAAC;IACP,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACzC,CAAC,CAAC;AAEL,MAAM,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iCAAqB,CAAC;IAErD,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,0BAAc,CAAC;IAC1C,QAAQ,EAAE,eAAe,CAAC,oCAAwB,CAAC;IACnD,WAAW,EAAE,OAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IAEtD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC;CACxD,CAAC,CAAC;AAGU,QAAA,qBAAqB,GAAG,OAAC,CAAC,KAAK,CAAC;IAC3C,kBAAkB,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,eAAe,CAAC,oCAAwB,CAAC;QACnD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,8BAAkB,CAAC;KAChD,CAAC;IACF,kBAAkB,CAAC,MAAM,CAAC;QACxB,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,uCAA2B,CAAC;KAC5E,CAAC;CACH,CAAC,CAAC;AAMU,QAAA,yBAAyB,GAAG,kBAAkB;KACxD,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACpC,MAAM,CAAC;IACN,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,eAAe,CAAC,oCAAwB,CAAC;IACnD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,8BAAkB,CAAC;CAChD,CAAC,CAAC"}
1
+ {"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/types/snapshots.ts"],"names":[],"mappings":";;;AA2BA,sCAKC;AAED,4CAEC;AApCD,6BAAwB;AACxB,2CAQqB;AAErB,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAMxB,QAAA,gBAAgB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAIxE,MAAM,iBAAiB,GAAmC;IACxD,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,CACL,wBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,wBAAgB,CAAC,QAAQ,CAAC,KAAuB,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,CAAU,CAAC;AAI1D,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CACtC,OAAC,CAAC,MAAM,CAAC;IACP,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACzC,CAAC,CAAC;AAEL,MAAM,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iCAAqB,CAAC;IAErD,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,0BAAc,CAAC;IAC1C,QAAQ,EAAE,eAAe,CAAC,oCAAwB,CAAC;IACnD,WAAW,EAAE,OAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IAEtD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC;CACxD,CAAC,CAAC;AAGU,QAAA,qBAAqB,GAAG,OAAC,CAAC,KAAK,CAAC;IAC3C,kBAAkB,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,eAAe,CAAC,oCAAwB,CAAC;QAEnD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uCAA2B,CAAC;KACzD,CAAC;IACF,kBAAkB,CAAC,MAAM,CAAC;QACxB,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,uCAA2B,CAAC;KAC5E,CAAC;CACH,CAAC,CAAC;AAMU,QAAA,yBAAyB,GAAG,kBAAkB;KACxD,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACpC,MAAM,CAAC;IACN,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,eAAe,CAAC,oCAAwB,CAAC;IACnD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,8BAAkB,CAAC;CAChD,CAAC,CAAC"}
@@ -4,16 +4,16 @@ declare const stepSchema: z.ZodEffects<z.ZodObject<{
4
4
  kind: z.ZodEnum<["url", "custom"]>;
5
5
  value: z.ZodString;
6
6
  }, "strip", z.ZodTypeAny, {
7
- kind: "url" | "custom";
7
+ kind: "custom" | "url";
8
8
  value: string;
9
9
  }, {
10
- kind: "url" | "custom";
10
+ kind: "custom" | "url";
11
11
  value: string;
12
12
  }>, {
13
- kind: "url" | "custom";
13
+ kind: "custom" | "url";
14
14
  value: string;
15
15
  }, {
16
- kind: "url" | "custom";
16
+ kind: "custom" | "url";
17
17
  value: string;
18
18
  }>;
19
19
  export type FunnelStepInput = z.output<typeof stepSchema>;
@@ -26,34 +26,34 @@ export declare class FunnelStepsType extends DataType {
26
26
  kind: z.ZodEnum<["url", "custom"]>;
27
27
  value: z.ZodString;
28
28
  }, "strip", z.ZodTypeAny, {
29
- kind: "url" | "custom";
29
+ kind: "custom" | "url";
30
30
  value: string;
31
31
  }, {
32
- kind: "url" | "custom";
32
+ kind: "custom" | "url";
33
33
  value: string;
34
34
  }>, {
35
- kind: "url" | "custom";
35
+ kind: "custom" | "url";
36
36
  value: string;
37
37
  }, {
38
- kind: "url" | "custom";
38
+ kind: "custom" | "url";
39
39
  value: string;
40
40
  }>, "many">]>, any, string | {
41
- kind: "url" | "custom";
41
+ kind: "custom" | "url";
42
42
  value: string;
43
43
  }[]>, z.ZodArray<z.ZodEffects<z.ZodObject<{
44
44
  kind: z.ZodEnum<["url", "custom"]>;
45
45
  value: z.ZodString;
46
46
  }, "strip", z.ZodTypeAny, {
47
- kind: "url" | "custom";
47
+ kind: "custom" | "url";
48
48
  value: string;
49
49
  }, {
50
- kind: "url" | "custom";
50
+ kind: "custom" | "url";
51
51
  value: string;
52
52
  }>, {
53
- kind: "url" | "custom";
53
+ kind: "custom" | "url";
54
54
  value: string;
55
55
  }, {
56
- kind: "url" | "custom";
56
+ kind: "custom" | "url";
57
57
  value: string;
58
58
  }>, "many">>;
59
59
  }
@@ -22,6 +22,8 @@ interface ChannelsResponse {
22
22
  items: ChannelRow[]
23
23
  /** The comparison days lost their channel split: no delta to show. */
24
24
  compareUnavailable?: boolean
25
+ /** Compared with a window that has rows: else no change column. */
26
+ compared?: boolean
25
27
  }
26
28
 
27
29
  const props = withDefaults(
@@ -34,6 +36,7 @@ const props = withDefaults(
34
36
  { periodScope: undefined, componentId: undefined, pageId: undefined },
35
37
  )
36
38
 
39
+ /** The channels the route always lists, each in its row: the skeleton's. */
37
40
  const SKELETON_ROWS = 6
38
41
  /** The key the campaigns table is mounted under on the page: its tab reads `?campaigns.tab=`. */
39
42
  const CAMPAIGNS_TAB_QUERY = 'campaigns.tab'
@@ -48,6 +51,12 @@ const { data, isLoading, error, refresh } = useChartFetch<ChannelsResponse>({
48
51
  })
49
52
 
50
53
  const rows = computed(() => data.value?.items ?? [])
54
+ /**
55
+ * The change column, while the period is compared (kept through a re-read):
56
+ * "No comparison" leaves it out rather than a column of dashes.
57
+ */
58
+ const compared = computed(() => data.value?.compared !== false)
59
+ const columns = computed(() => (compared.value ? 5 : 4))
51
60
  const maxShare = computed(() =>
52
61
  Math.max(1, ...rows.value.map((row) => row.share)),
53
62
  )
@@ -168,6 +177,7 @@ function showCampaigns(channel: string): void {
168
177
  {{ t('page.marketing.acquisition.channels.share') }}
169
178
  </th>
170
179
  <th
180
+ v-if="compared"
171
181
  scope="col"
172
182
  class="px-4 py-2 text-right font-normal"
173
183
  :title="t('page.marketing.acquisition.channels.vs_previous_hint')"
@@ -182,9 +192,16 @@ function showCampaigns(channel: string): void {
182
192
  :key="index"
183
193
  class="border-t border-default"
184
194
  >
185
- <td class="px-4 py-3" colspan="5">
195
+ <!-- A channel row's size: its icon well sets the height. -->
196
+ <td class="w-10 py-2.5 ps-4">
197
+ <USkeleton class="size-8 rounded-[9px]" />
198
+ </td>
199
+ <td class="px-2 py-2.5" :colspan="columns - 2">
186
200
  <USkeleton class="h-4 w-full" />
187
201
  </td>
202
+ <td class="px-4 py-2.5">
203
+ <USkeleton class="ms-auto h-4 w-12" />
204
+ </td>
188
205
  </tr>
189
206
  </tbody>
190
207
  <tbody v-else :class="isLoading ? 'opacity-60' : ''">
@@ -243,7 +260,7 @@ function showCampaigns(channel: string): void {
243
260
  >
244
261
  {{ formatPercentage(row.share / 100, locale, fractionDigits(1)) }}
245
262
  </td>
246
- <td class="px-4 py-2.5 text-right">
263
+ <td v-if="compared" class="px-4 py-2.5 text-right">
247
264
  <span
248
265
  class="rounded px-1.5 py-0.5 font-mono text-[11px] whitespace-nowrap tabular-nums"
249
266
  :class="deltaClass(row.delta)"