@antelopejs/dms-mailing 0.6.1 → 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.
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/data/templates-table.d.ts +4 -1
- package/dist/data/templates-table.js +55 -13
- package/dist/data/templates-table.js.map +1 -1
- package/dist/data-types/categories-type.d.ts +5 -5
- package/dist/db/models/templates.model.d.ts +10 -1
- package/dist/db/models/templates.model.js +27 -1
- package/dist/db/models/templates.model.js.map +1 -1
- package/dist/db/tables/templates.table.d.ts +7 -1
- package/dist/db/tables/templates.table.js +3 -1
- package/dist/db/tables/templates.table.js.map +1 -1
- package/dist/engine/formats.d.ts +13 -0
- package/dist/engine/formats.js +85 -0
- package/dist/engine/formats.js.map +1 -0
- package/dist/engine/index.d.ts +1 -0
- package/dist/engine/index.js +1 -0
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/resolve.d.ts +2 -1
- package/dist/engine/resolve.js +14 -7
- package/dist/engine/resolve.js.map +1 -1
- package/dist/engine/tokens.d.ts +2 -1
- package/dist/engine/tokens.js +3 -5
- package/dist/engine/tokens.js.map +1 -1
- package/dist/frontend-module.d.ts +2 -0
- package/dist/frontend-module.js +24 -0
- package/dist/frontend-module.js.map +1 -0
- package/dist/hooks/tenant-export.js +4 -1
- package/dist/hooks/tenant-export.js.map +1 -1
- package/dist/implementations/dms-mailing/index.d.ts +1 -0
- package/dist/implementations/dms-mailing/index.js +3 -1
- package/dist/implementations/dms-mailing/index.js.map +1 -1
- package/dist/index.js +2 -19
- package/dist/index.js.map +1 -1
- package/dist/pages/overview.d.ts +1 -1
- package/dist/pages/overview.js +11 -13
- package/dist/pages/overview.js.map +1 -1
- package/dist/pages/sends.d.ts +1 -1
- package/dist/pages/sends.js +16 -8
- package/dist/pages/sends.js.map +1 -1
- package/dist/pages/templates.js +3 -8
- package/dist/pages/templates.js.map +1 -1
- package/dist/pages/toolbar.d.ts +12 -0
- package/dist/pages/toolbar.js +41 -0
- package/dist/pages/toolbar.js.map +1 -0
- package/dist/realtime.d.ts +2 -2
- package/dist/realtime.js +8 -8
- package/dist/realtime.js.map +1 -1
- package/dist/routes/metrics.d.ts +9 -2
- package/dist/routes/metrics.js +90 -35
- package/dist/routes/metrics.js.map +1 -1
- package/dist/routes/period.d.ts +1 -0
- package/dist/routes/period.js +19 -0
- package/dist/routes/period.js.map +1 -1
- package/dist/routes/sends.js +6 -3
- package/dist/routes/sends.js.map +1 -1
- package/dist/routes/settings.js +6 -7
- package/dist/routes/settings.js.map +1 -1
- package/dist/routes/templates.d.ts +8 -4
- package/dist/routes/templates.js +40 -15
- package/dist/routes/templates.js.map +1 -1
- package/dist/services/categories.d.ts +2 -1
- package/dist/services/categories.js +9 -0
- package/dist/services/categories.js.map +1 -1
- package/dist/services/declarations.js +2 -2
- package/dist/services/declarations.js.map +1 -1
- package/dist/services/events.js +1 -1
- package/dist/services/events.js.map +1 -1
- package/dist/services/localized-text.d.ts +7 -0
- package/dist/services/localized-text.js +28 -0
- package/dist/services/localized-text.js.map +1 -0
- package/dist/services/send-stat-items.js +34 -12
- package/dist/services/send-stat-items.js.map +1 -1
- package/dist/services/send-stats.d.ts +7 -0
- package/dist/services/send-stats.js +17 -5
- package/dist/services/send-stats.js.map +1 -1
- package/dist/services/send.d.ts +2 -0
- package/dist/services/send.js +11 -12
- package/dist/services/send.js.map +1 -1
- package/dist/services/sender-declaration.d.ts +2 -0
- package/dist/services/sender-declaration.js +18 -0
- package/dist/services/sender-declaration.js.map +1 -0
- package/dist/services/starters.d.ts +2 -2
- package/dist/services/starters.js +1 -10
- package/dist/services/starters.js.map +1 -1
- package/dist/services/templates.d.ts +11 -5
- package/dist/services/templates.js +24 -6
- package/dist/services/templates.js.map +1 -1
- package/dist/services/webhook-status.d.ts +2 -1
- package/dist/services/webhook-status.js +6 -5
- package/dist/services/webhook-status.js.map +1 -1
- package/dist/types/settings.d.ts +6 -0
- package/dist/types/settings.js +25 -5
- package/dist/types/settings.js.map +1 -1
- package/dist/validation/declarations.schema.d.ts +25 -7
- package/dist/validation/declarations.schema.js +16 -3
- package/dist/validation/declarations.schema.js.map +1 -1
- package/dist/validation/settings.schema.d.ts +25 -25
- package/dist/validation/settings.schema.js +30 -6
- package/dist/validation/settings.schema.js.map +1 -1
- package/dist/validation/templates.schema.d.ts +13 -0
- package/dist/validation/templates.schema.js +6 -1
- package/dist/validation/templates.schema.js.map +1 -1
- package/frontend-vue/app/components/CategoriesInput.vue +15 -13
- package/frontend-vue/app/components/FunnelCard.vue +46 -3
- package/frontend-vue/app/components/NewTemplateModal.vue +4 -2
- package/frontend-vue/app/components/OverviewGate.vue +0 -8
- package/frontend-vue/app/components/ProviderPill.vue +50 -0
- package/frontend-vue/app/components/SendDrawer.vue +206 -183
- package/frontend-vue/app/components/StarterGallery.vue +1 -1
- package/frontend-vue/app/components/TemplateCard.vue +4 -1
- package/frontend-vue/app/components/TemplateDrawer.vue +3 -5
- package/frontend-vue/app/components/TemplateGallery.vue +57 -17
- package/frontend-vue/app/components/TemplatePreviewFrame.vue +41 -11
- package/frontend-vue/app/components/editor/EditorTemplatePane.vue +1 -3
- package/frontend-vue/app/components/editor/EditorTitle.vue +1 -7
- package/frontend-vue/app/composables/useLocalizedDefaults.ts +5 -7
- package/frontend-vue/app/composables/useMailingApi.ts +3 -3
- package/frontend-vue/app/composables/useMailingReads.ts +2 -2
- package/frontend-vue/app/composables/useTemplateCategories.ts +8 -7
- package/frontend-vue/app/types/mailing.ts +18 -0
- package/frontend-vue/app/utils/categories.ts +58 -49
- package/frontend-vue/app/utils/funnel.ts +25 -0
- package/frontend-vue/app/utils/period.ts +0 -7
- package/frontend-vue/app/utils/starters.ts +3 -1
- package/frontend-vue/app/utils/tokens.ts +6 -1
- package/frontend-vue/i18n/locales/mailing-en-GB.json +19 -28
- package/frontend-vue/i18n/locales/mailing-fr-FR.json +19 -28
- package/frontend-vue/package.json +1 -1
- package/frontend-vue/tests/categories-input.test.ts +4 -10
- package/frontend-vue/tests/categories.test.ts +55 -17
- package/frontend-vue/tests/conditions.test.ts +1 -4
- package/frontend-vue/tests/funnel-card.test.ts +27 -0
- package/frontend-vue/tests/funnel.test.ts +25 -0
- package/frontend-vue/tests/localized-defaults.test.ts +0 -29
- package/frontend-vue/tests/new-template-modal.test.ts +1 -1
- package/frontend-vue/tests/overview-gate.test.ts +1 -24
- package/frontend-vue/tests/page-reads.test.ts +9 -25
- package/frontend-vue/tests/period.test.ts +0 -12
- package/frontend-vue/tests/replay-toast.test.ts +2 -1
- package/frontend-vue/tests/send-drawer.test.ts +123 -0
- package/frontend-vue/tests/template-drawer.test.ts +1 -1
- package/frontend-vue/tests/template-gallery.test.ts +90 -3
- package/frontend-vue/tests/template-preview-frame.test.ts +92 -0
- package/package.json +6 -5
- package/skills/dms-mailing/SKILL.md +17 -4
- package/src/constants.ts +2 -0
- package/src/data/sends-table.ts +1 -1
- package/src/data/templates-table.ts +123 -19
- package/src/db/models/templates.model.ts +61 -3
- package/src/db/tables/templates.table.ts +10 -1
- package/src/engine/formats.ts +124 -0
- package/src/engine/index.ts +1 -0
- package/src/engine/resolve.ts +18 -7
- package/src/engine/tokens.ts +7 -5
- package/src/frontend-module.ts +36 -0
- package/src/hooks/tenant-export.ts +8 -1
- package/src/implementations/dms-mailing/index.ts +2 -0
- package/src/index.ts +2 -23
- package/src/pages/overview.ts +20 -16
- package/src/pages/sends.ts +27 -11
- package/src/pages/templates.ts +4 -8
- package/src/pages/toolbar.ts +77 -0
- package/src/realtime.ts +17 -8
- package/src/routes/metrics.ts +158 -45
- package/src/routes/period.ts +32 -0
- package/src/routes/sends.ts +13 -4
- package/src/routes/settings.ts +11 -8
- package/src/routes/templates.ts +72 -26
- package/src/services/categories.ts +14 -1
- package/src/services/declarations.ts +4 -3
- package/src/services/events.ts +1 -1
- package/src/services/localized-text.ts +53 -0
- package/src/services/send-stat-items.ts +60 -13
- package/src/services/send-stats.ts +37 -5
- package/src/services/send.ts +19 -20
- package/src/services/sender-declaration.ts +27 -0
- package/src/services/starters.ts +3 -15
- package/src/services/templates.ts +50 -19
- package/src/services/webhook-status.ts +3 -3
- package/src/types/settings.ts +35 -5
- package/src/validation/declarations.schema.ts +29 -3
- package/src/validation/settings.schema.ts +56 -14
- package/src/validation/templates.schema.ts +10 -0
- package/frontend-vue/app/components/PageHeader.vue +0 -94
- package/frontend-vue/app/composables/useOverviewSetup.ts +0 -21
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
export declare const localizedTextSchema: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodString>, Record<string, string>, Record<string, string>>;
|
|
2
3
|
export declare const templateDeclarationSchema: z.ZodObject<{
|
|
3
4
|
tenantId: z.ZodString;
|
|
4
5
|
slug: z.ZodString;
|
|
5
|
-
name: z.ZodString
|
|
6
|
+
name: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodString>, Record<string, string>, Record<string, string>>;
|
|
6
7
|
category: z.ZodDefault<z.ZodString>;
|
|
7
8
|
content: z.ZodObject<{
|
|
8
9
|
locales: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
@@ -47,7 +48,7 @@ export declare const templateDeclarationSchema: z.ZodObject<{
|
|
|
47
48
|
testData: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
48
49
|
author: z.ZodOptional<z.ZodString>;
|
|
49
50
|
}, "strip", z.ZodTypeAny, {
|
|
50
|
-
name: string
|
|
51
|
+
name: Record<string, string>;
|
|
51
52
|
content: {
|
|
52
53
|
locales: Record<string, {
|
|
53
54
|
subject: string;
|
|
@@ -55,8 +56,8 @@ export declare const templateDeclarationSchema: z.ZodObject<{
|
|
|
55
56
|
blocks: unknown[];
|
|
56
57
|
}>;
|
|
57
58
|
};
|
|
58
|
-
category: string;
|
|
59
59
|
tenantId: string;
|
|
60
|
+
category: string;
|
|
60
61
|
slug: string;
|
|
61
62
|
variables: {
|
|
62
63
|
path: string;
|
|
@@ -66,7 +67,7 @@ export declare const templateDeclarationSchema: z.ZodObject<{
|
|
|
66
67
|
testData: Record<string, unknown>;
|
|
67
68
|
author?: string | undefined;
|
|
68
69
|
}, {
|
|
69
|
-
name: string
|
|
70
|
+
name: Record<string, string>;
|
|
70
71
|
content: {
|
|
71
72
|
locales: Record<string, {
|
|
72
73
|
subject: string;
|
|
@@ -91,19 +92,36 @@ export declare const categoryDeclarationSchema: z.ZodObject<{
|
|
|
91
92
|
icon: z.ZodString;
|
|
92
93
|
} & {
|
|
93
94
|
tenantId: z.ZodString;
|
|
94
|
-
label: z.ZodString
|
|
95
|
+
label: z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodString>, Record<string, string>, Record<string, string>>;
|
|
95
96
|
}, "strip", z.ZodTypeAny, {
|
|
96
97
|
id: string;
|
|
97
|
-
label: string
|
|
98
|
+
label: Record<string, string>;
|
|
98
99
|
icon: string;
|
|
99
100
|
tenantId: string;
|
|
100
101
|
}, {
|
|
101
102
|
id: string;
|
|
102
|
-
label: string
|
|
103
|
+
label: Record<string, string>;
|
|
103
104
|
icon: string;
|
|
104
105
|
tenantId: string;
|
|
105
106
|
}>;
|
|
106
107
|
export type ParsedCategoryDeclaration = z.infer<typeof categoryDeclarationSchema>;
|
|
108
|
+
export declare const senderDeclarationSchema: z.ZodObject<{
|
|
109
|
+
tenantId: z.ZodString;
|
|
110
|
+
email: z.ZodPipeline<z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodUnion<[z.ZodLiteral<"">, z.ZodString]>>, z.ZodString>;
|
|
111
|
+
name: z.ZodDefault<z.ZodEffects<z.ZodString, string, string>>;
|
|
112
|
+
replyTo: z.ZodDefault<z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodUnion<[z.ZodLiteral<"">, z.ZodString]>>>;
|
|
113
|
+
}, "strip", z.ZodTypeAny, {
|
|
114
|
+
email: string;
|
|
115
|
+
name: string;
|
|
116
|
+
tenantId: string;
|
|
117
|
+
replyTo: string;
|
|
118
|
+
}, {
|
|
119
|
+
email: string;
|
|
120
|
+
tenantId: string;
|
|
121
|
+
name?: string | undefined;
|
|
122
|
+
replyTo?: string | undefined;
|
|
123
|
+
}>;
|
|
124
|
+
export type ParsedSenderDeclaration = z.infer<typeof senderDeclarationSchema>;
|
|
107
125
|
declare const importedSendSchema: z.ZodObject<{
|
|
108
126
|
importId: z.ZodString;
|
|
109
127
|
templateSlug: z.ZodString;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sendImportSchema = exports.categoryDeclarationSchema = exports.templateDeclarationSchema = void 0;
|
|
3
|
+
exports.sendImportSchema = exports.senderDeclarationSchema = exports.categoryDeclarationSchema = exports.templateDeclarationSchema = exports.localizedTextSchema = void 0;
|
|
4
|
+
const interface_dms_mailing_1 = require("@antelopejs/interface-dms-mailing");
|
|
4
5
|
const zod_1 = require("zod");
|
|
5
6
|
const constants_1 = require("../constants");
|
|
6
7
|
const types_1 = require("../types");
|
|
@@ -9,10 +10,15 @@ const templates_schema_1 = require("./templates.schema");
|
|
|
9
10
|
const MAX_AUTHOR_LENGTH = constants_1.MAX_NAME_LENGTH;
|
|
10
11
|
const MAX_IMPORT_ID_LENGTH = 200;
|
|
11
12
|
const tenantIdSchema = zod_1.z.string().trim().min(1);
|
|
13
|
+
exports.localizedTextSchema = zod_1.z
|
|
14
|
+
.record(zod_1.z.string().trim().min(1).max(constants_1.MAX_NAME_LENGTH))
|
|
15
|
+
.refine((text) => Boolean(text[interface_dms_mailing_1.LOCALIZED_TEXT_FALLBACK_LOCALE]), {
|
|
16
|
+
message: `a text in "${interface_dms_mailing_1.LOCALIZED_TEXT_FALLBACK_LOCALE}" is required`,
|
|
17
|
+
});
|
|
12
18
|
exports.templateDeclarationSchema = zod_1.z.object({
|
|
13
19
|
tenantId: tenantIdSchema,
|
|
14
20
|
slug: templates_schema_1.slugSchema,
|
|
15
|
-
name:
|
|
21
|
+
name: exports.localizedTextSchema,
|
|
16
22
|
category: zod_1.z.string().trim().default(""),
|
|
17
23
|
content: templates_schema_1.templateContentSchema,
|
|
18
24
|
variables: templates_schema_1.variableListSchema.default([]),
|
|
@@ -21,7 +27,14 @@ exports.templateDeclarationSchema = zod_1.z.object({
|
|
|
21
27
|
});
|
|
22
28
|
exports.categoryDeclarationSchema = settings_schema_1.categorySchema.extend({
|
|
23
29
|
tenantId: tenantIdSchema,
|
|
24
|
-
label:
|
|
30
|
+
label: exports.localizedTextSchema,
|
|
31
|
+
});
|
|
32
|
+
const SENDER_REQUIRED = "a sender address is required";
|
|
33
|
+
exports.senderDeclarationSchema = zod_1.z.object({
|
|
34
|
+
tenantId: tenantIdSchema,
|
|
35
|
+
email: settings_schema_1.settingsSchema.shape.senderEmail.pipe(zod_1.z.string().min(1, SENDER_REQUIRED)),
|
|
36
|
+
name: settings_schema_1.settingsSchema.shape.senderName.default(""),
|
|
37
|
+
replyTo: settings_schema_1.settingsSchema.shape.replyTo.default(""),
|
|
25
38
|
});
|
|
26
39
|
const recipientSchema = zod_1.z.union([
|
|
27
40
|
zod_1.z.string().trim().email(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declarations.schema.js","sourceRoot":"","sources":["../../src/validation/declarations.schema.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,4CAA+C;AAC/C,oCAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"declarations.schema.js","sourceRoot":"","sources":["../../src/validation/declarations.schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,59 +5,59 @@ export declare const MIN_WEBHOOK_SECRET_LENGTH = 32;
|
|
|
5
5
|
export declare const WEBHOOK_SECRET_TOO_SHORT: string;
|
|
6
6
|
export declare const categorySchema: z.ZodObject<{
|
|
7
7
|
id: z.ZodString;
|
|
8
|
-
label: z.ZodString
|
|
8
|
+
label: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
9
9
|
icon: z.ZodString;
|
|
10
10
|
}, "strip", z.ZodTypeAny, {
|
|
11
11
|
id: string;
|
|
12
|
-
label: string
|
|
12
|
+
label: Record<string, string>;
|
|
13
13
|
icon: string;
|
|
14
14
|
}, {
|
|
15
15
|
id: string;
|
|
16
|
-
label: string
|
|
16
|
+
label: Record<string, string>;
|
|
17
17
|
icon: string;
|
|
18
18
|
}>;
|
|
19
19
|
declare const categoryEntrySchema: z.ZodObject<{
|
|
20
20
|
id: z.ZodString;
|
|
21
|
-
label: z.ZodString
|
|
21
|
+
label: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
22
22
|
icon: z.ZodString;
|
|
23
23
|
} & {
|
|
24
24
|
moveTo: z.ZodOptional<z.ZodString>;
|
|
25
25
|
}, "strip", z.ZodTypeAny, {
|
|
26
26
|
id: string;
|
|
27
|
-
label: string
|
|
27
|
+
label: Record<string, string>;
|
|
28
28
|
icon: string;
|
|
29
29
|
moveTo?: string | undefined;
|
|
30
30
|
}, {
|
|
31
31
|
id: string;
|
|
32
|
-
label: string
|
|
32
|
+
label: Record<string, string>;
|
|
33
33
|
icon: string;
|
|
34
34
|
moveTo?: string | undefined;
|
|
35
35
|
}>;
|
|
36
36
|
export type CategoryEntry = z.infer<typeof categoryEntrySchema>;
|
|
37
37
|
export declare const categoriesSchema: z.ZodEffects<z.ZodArray<z.ZodObject<{
|
|
38
38
|
id: z.ZodString;
|
|
39
|
-
label: z.ZodString
|
|
39
|
+
label: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
40
40
|
icon: z.ZodString;
|
|
41
41
|
} & {
|
|
42
42
|
moveTo: z.ZodOptional<z.ZodString>;
|
|
43
43
|
}, "strip", z.ZodTypeAny, {
|
|
44
44
|
id: string;
|
|
45
|
-
label: string
|
|
45
|
+
label: Record<string, string>;
|
|
46
46
|
icon: string;
|
|
47
47
|
moveTo?: string | undefined;
|
|
48
48
|
}, {
|
|
49
49
|
id: string;
|
|
50
|
-
label: string
|
|
50
|
+
label: Record<string, string>;
|
|
51
51
|
icon: string;
|
|
52
52
|
moveTo?: string | undefined;
|
|
53
53
|
}>, "many">, {
|
|
54
54
|
id: string;
|
|
55
|
-
label: string
|
|
55
|
+
label: Record<string, string>;
|
|
56
56
|
icon: string;
|
|
57
57
|
moveTo?: string | undefined;
|
|
58
58
|
}[], {
|
|
59
59
|
id: string;
|
|
60
|
-
label: string
|
|
60
|
+
label: Record<string, string>;
|
|
61
61
|
icon: string;
|
|
62
62
|
moveTo?: string | undefined;
|
|
63
63
|
}[]>;
|
|
@@ -71,28 +71,28 @@ export declare const settingsSchema: z.ZodObject<{
|
|
|
71
71
|
webhookSecret: z.ZodString;
|
|
72
72
|
categories: z.ZodEffects<z.ZodArray<z.ZodObject<{
|
|
73
73
|
id: z.ZodString;
|
|
74
|
-
label: z.ZodString
|
|
74
|
+
label: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
75
75
|
icon: z.ZodString;
|
|
76
76
|
} & {
|
|
77
77
|
moveTo: z.ZodOptional<z.ZodString>;
|
|
78
78
|
}, "strip", z.ZodTypeAny, {
|
|
79
79
|
id: string;
|
|
80
|
-
label: string
|
|
80
|
+
label: Record<string, string>;
|
|
81
81
|
icon: string;
|
|
82
82
|
moveTo?: string | undefined;
|
|
83
83
|
}, {
|
|
84
84
|
id: string;
|
|
85
|
-
label: string
|
|
85
|
+
label: Record<string, string>;
|
|
86
86
|
icon: string;
|
|
87
87
|
moveTo?: string | undefined;
|
|
88
88
|
}>, "many">, {
|
|
89
89
|
id: string;
|
|
90
|
-
label: string
|
|
90
|
+
label: Record<string, string>;
|
|
91
91
|
icon: string;
|
|
92
92
|
moveTo?: string | undefined;
|
|
93
93
|
}[], {
|
|
94
94
|
id: string;
|
|
95
|
-
label: string
|
|
95
|
+
label: Record<string, string>;
|
|
96
96
|
icon: string;
|
|
97
97
|
moveTo?: string | undefined;
|
|
98
98
|
}[]>;
|
|
@@ -106,7 +106,7 @@ export declare const settingsSchema: z.ZodObject<{
|
|
|
106
106
|
webhookSecret: string;
|
|
107
107
|
categories: {
|
|
108
108
|
id: string;
|
|
109
|
-
label: string
|
|
109
|
+
label: Record<string, string>;
|
|
110
110
|
icon: string;
|
|
111
111
|
moveTo?: string | undefined;
|
|
112
112
|
}[];
|
|
@@ -120,7 +120,7 @@ export declare const settingsSchema: z.ZodObject<{
|
|
|
120
120
|
webhookSecret: string;
|
|
121
121
|
categories: {
|
|
122
122
|
id: string;
|
|
123
|
-
label: string
|
|
123
|
+
label: Record<string, string>;
|
|
124
124
|
icon: string;
|
|
125
125
|
moveTo?: string | undefined;
|
|
126
126
|
}[];
|
|
@@ -135,28 +135,28 @@ export declare const settingsPatchSchema: z.ZodObject<{
|
|
|
135
135
|
webhookSecret: z.ZodOptional<z.ZodString>;
|
|
136
136
|
categories: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodObject<{
|
|
137
137
|
id: z.ZodString;
|
|
138
|
-
label: z.ZodString
|
|
138
|
+
label: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
139
139
|
icon: z.ZodString;
|
|
140
140
|
} & {
|
|
141
141
|
moveTo: z.ZodOptional<z.ZodString>;
|
|
142
142
|
}, "strip", z.ZodTypeAny, {
|
|
143
143
|
id: string;
|
|
144
|
-
label: string
|
|
144
|
+
label: Record<string, string>;
|
|
145
145
|
icon: string;
|
|
146
146
|
moveTo?: string | undefined;
|
|
147
147
|
}, {
|
|
148
148
|
id: string;
|
|
149
|
-
label: string
|
|
149
|
+
label: Record<string, string>;
|
|
150
150
|
icon: string;
|
|
151
151
|
moveTo?: string | undefined;
|
|
152
152
|
}>, "many">, {
|
|
153
153
|
id: string;
|
|
154
|
-
label: string
|
|
154
|
+
label: Record<string, string>;
|
|
155
155
|
icon: string;
|
|
156
156
|
moveTo?: string | undefined;
|
|
157
157
|
}[], {
|
|
158
158
|
id: string;
|
|
159
|
-
label: string
|
|
159
|
+
label: Record<string, string>;
|
|
160
160
|
icon: string;
|
|
161
161
|
moveTo?: string | undefined;
|
|
162
162
|
}[]>>;
|
|
@@ -172,7 +172,7 @@ export declare const settingsPatchSchema: z.ZodObject<{
|
|
|
172
172
|
webhookSecret?: string | undefined;
|
|
173
173
|
categories?: {
|
|
174
174
|
id: string;
|
|
175
|
-
label: string
|
|
175
|
+
label: Record<string, string>;
|
|
176
176
|
icon: string;
|
|
177
177
|
moveTo?: string | undefined;
|
|
178
178
|
}[] | undefined;
|
|
@@ -187,7 +187,7 @@ export declare const settingsPatchSchema: z.ZodObject<{
|
|
|
187
187
|
webhookSecret?: string | undefined;
|
|
188
188
|
categories?: {
|
|
189
189
|
id: string;
|
|
190
|
-
label: string
|
|
190
|
+
label: Record<string, string>;
|
|
191
191
|
icon: string;
|
|
192
192
|
moveTo?: string | undefined;
|
|
193
193
|
}[] | undefined;
|
|
@@ -4,6 +4,7 @@ exports.settingsPatchSchema = exports.settingsSchema = exports.categoriesSchema
|
|
|
4
4
|
const node_url_1 = require("node:url");
|
|
5
5
|
const zod_1 = require("zod");
|
|
6
6
|
const constants_1 = require("../constants");
|
|
7
|
+
const interface_dms_mailing_1 = require("@antelopejs/interface-dms-mailing");
|
|
7
8
|
const engine_1 = require("../engine");
|
|
8
9
|
exports.MIN_RETENTION_DAYS = 1;
|
|
9
10
|
exports.MAX_RETENTION_DAYS = 3650;
|
|
@@ -23,12 +24,23 @@ exports.WEBHOOK_SECRET_TOO_SHORT = messageKey("fields.webhookSecret.too_short");
|
|
|
23
24
|
const MISSING_VARIABLES_POLICIES = ["refuse", "send"];
|
|
24
25
|
exports.categorySchema = zod_1.z.object({
|
|
25
26
|
id: zod_1.z.string().max(constants_1.MAX_NAME_LENGTH).regex(constants_1.SLUG_PATTERN),
|
|
26
|
-
label: zod_1.z.string().trim().max(constants_1.MAX_NAME_LENGTH),
|
|
27
|
+
label: zod_1.z.record(zod_1.z.string().trim().max(constants_1.MAX_NAME_LENGTH)),
|
|
27
28
|
icon: zod_1.z.string().regex(CATEGORY_ICON_PATTERN),
|
|
28
29
|
});
|
|
29
30
|
const categoryEntrySchema = exports.categorySchema.extend({
|
|
30
31
|
moveTo: zod_1.z.string().regex(constants_1.SLUG_PATTERN).optional(),
|
|
31
32
|
});
|
|
33
|
+
function languagesOf(entries) {
|
|
34
|
+
const codes = entries.flatMap((entry) => Object.keys(entry.label));
|
|
35
|
+
return [...new Set([interface_dms_mailing_1.LOCALIZED_TEXT_FALLBACK_LOCALE, ...codes])];
|
|
36
|
+
}
|
|
37
|
+
function entriesIn(entries, locale) {
|
|
38
|
+
return entries.map(({ id, label, moveTo }) => ({
|
|
39
|
+
id,
|
|
40
|
+
label: label[locale] || label[interface_dms_mailing_1.LOCALIZED_TEXT_FALLBACK_LOCALE] || "",
|
|
41
|
+
moveTo,
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
32
44
|
const isKept = (entry) => entry.moveTo === undefined;
|
|
33
45
|
function duplicateIssues(entries) {
|
|
34
46
|
const labels = new Set();
|
|
@@ -61,13 +73,25 @@ function moveIssues(entries, kept) {
|
|
|
61
73
|
: [{ message: UNKNOWN_MOVE_TARGET, path: [index, "moveTo"] }]);
|
|
62
74
|
}
|
|
63
75
|
function refineCategoryEntries(entries, context) {
|
|
64
|
-
const kept = new Set(entries.filter(
|
|
76
|
+
const kept = new Set(entries.filter((entry) => entry.moveTo === undefined).map(({ id }) => id));
|
|
77
|
+
const labelIssues = languagesOf(entries).flatMap((locale) => {
|
|
78
|
+
const inLocale = entriesIn(entries, locale);
|
|
79
|
+
return [...blankLabelIssues(inLocale), ...duplicateIssues(inLocale)];
|
|
80
|
+
});
|
|
81
|
+
const seen = new Set();
|
|
65
82
|
[
|
|
66
|
-
...
|
|
67
|
-
...duplicateIssues(entries),
|
|
83
|
+
...labelIssues,
|
|
68
84
|
...marketingIssues(kept),
|
|
69
|
-
...moveIssues(entries, kept),
|
|
70
|
-
]
|
|
85
|
+
...moveIssues(entriesIn(entries, interface_dms_mailing_1.LOCALIZED_TEXT_FALLBACK_LOCALE), kept),
|
|
86
|
+
]
|
|
87
|
+
.filter((issue) => {
|
|
88
|
+
const id = JSON.stringify(issue);
|
|
89
|
+
if (seen.has(id))
|
|
90
|
+
return false;
|
|
91
|
+
seen.add(id);
|
|
92
|
+
return true;
|
|
93
|
+
})
|
|
94
|
+
.forEach((issue) => context.addIssue({ code: zod_1.z.ZodIssueCode.custom, ...issue }));
|
|
71
95
|
}
|
|
72
96
|
exports.categoriesSchema = zod_1.z
|
|
73
97
|
.array(categoryEntrySchema)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.schema.js","sourceRoot":"","sources":["../../src/validation/settings.schema.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AACzC,6BAAwB;AACxB,4CAA6D;AAC7D,sCAA+C;AAElC,QAAA,kBAAkB,GAAG,CAAC,CAAC;AACvB,QAAA,kBAAkB,GAAG,IAAI,CAAC;AACvC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAClD,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,UAAU,GAAG,EAAE,CAAC;AAMT,QAAA,yBAAyB,GAAG,EAAE,CAAC;AAE5C,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,yBAAyB,IAAI,EAAE,CAAC;AAC7E,MAAM,cAAc,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAAC;AAC/D,MAAM,kBAAkB,GAAG,UAAU,CAAC,4BAA4B,CAAC,CAAC;AACpE,MAAM,kBAAkB,GAAG,UAAU,CAAC,+BAA+B,CAAC,CAAC;AACvE,MAAM,UAAU,GAAG,OAAO,CAAC;AAC3B,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AAC3C,QAAA,wBAAwB,GAAG,UAAU,CAChD,gCAAgC,CACjC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAU,CAAC;AAElD,QAAA,cAAc,GAAG,OAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,2BAAe,CAAC,CAAC,KAAK,CAAC,wBAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.schema.js","sourceRoot":"","sources":["../../src/validation/settings.schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -349,6 +349,19 @@ export declare const testSendSchema: z.ZodObject<{
|
|
|
349
349
|
data?: Record<string, unknown> | undefined;
|
|
350
350
|
locale?: string | undefined;
|
|
351
351
|
}>;
|
|
352
|
+
export declare const templateDetailsSchema: z.ZodObject<{
|
|
353
|
+
name: z.ZodString;
|
|
354
|
+
slug: z.ZodOptional<z.ZodString>;
|
|
355
|
+
category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
356
|
+
}, "strip", z.ZodTypeAny, {
|
|
357
|
+
name: string;
|
|
358
|
+
category?: string | null | undefined;
|
|
359
|
+
slug?: string | undefined;
|
|
360
|
+
}, {
|
|
361
|
+
name: string;
|
|
362
|
+
category?: string | null | undefined;
|
|
363
|
+
slug?: string | undefined;
|
|
364
|
+
}>;
|
|
352
365
|
export declare const duplicateSchema: z.ZodObject<{
|
|
353
366
|
slug: z.ZodString;
|
|
354
367
|
name: z.ZodString;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.replayFailedSchema = exports.replaySchema = exports.duplicateSchema = exports.testSendSchema = exports.realSendSchema = exports.previewSchema = exports.previewVersionSchema = exports.testDataSchema = exports.saveContentSchema = exports.variablesSchema = exports.variableListSchema = exports.variableSchema = exports.versionNumberSchema = exports.restoreVersionSchema = exports.publishSchema = exports.draftRevisionSchema = exports.templateContentSchema = exports.localeContentSchema = exports.blockSchema = exports.conditionSchema = exports.createTemplateSchema = exports.slugSchema = void 0;
|
|
3
|
+
exports.replayFailedSchema = exports.replaySchema = exports.duplicateSchema = exports.templateDetailsSchema = exports.testSendSchema = exports.realSendSchema = exports.previewSchema = exports.previewVersionSchema = exports.testDataSchema = exports.saveContentSchema = exports.variablesSchema = exports.variableListSchema = exports.variableSchema = exports.versionNumberSchema = exports.restoreVersionSchema = exports.publishSchema = exports.draftRevisionSchema = exports.templateContentSchema = exports.localeContentSchema = exports.blockSchema = exports.conditionSchema = exports.createTemplateSchema = exports.slugSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const constants_1 = require("../constants");
|
|
6
6
|
const MIN_HEADING_SIZE = 12;
|
|
@@ -139,6 +139,11 @@ exports.realSendSchema = zod_1.z.object({
|
|
|
139
139
|
exports.testSendSchema = exports.previewSchema.extend({
|
|
140
140
|
to: zod_1.z.array(zod_1.z.string().email()).min(1).max(MAX_TEST_RECIPIENT_COUNT),
|
|
141
141
|
});
|
|
142
|
+
exports.templateDetailsSchema = zod_1.z.object({
|
|
143
|
+
name: zod_1.z.string().trim().min(1).max(constants_1.MAX_NAME_LENGTH),
|
|
144
|
+
slug: zod_1.z.string().optional(),
|
|
145
|
+
category: zod_1.z.string().nullable().optional(),
|
|
146
|
+
});
|
|
142
147
|
exports.duplicateSchema = zod_1.z.object({
|
|
143
148
|
slug: exports.slugSchema,
|
|
144
149
|
name: zod_1.z.string().trim().min(1).max(constants_1.MAX_NAME_LENGTH),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.schema.js","sourceRoot":"","sources":["../../src/validation/templates.schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"templates.schema.js","sourceRoot":"","sources":["../../src/validation/templates.schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { useSortableList } from '../composables/useSortableList'
|
|
3
|
-
import { useLocalizedDefaults } from '../composables/useLocalizedDefaults'
|
|
4
3
|
import { useCategoryUsage } from '../composables/useMailingReads'
|
|
5
4
|
import { isMarketingCategory } from '../utils/system-variables'
|
|
6
5
|
import {
|
|
@@ -14,12 +13,14 @@ import {
|
|
|
14
13
|
NO_CATEGORY,
|
|
15
14
|
redirectMoves,
|
|
16
15
|
serializeCategories,
|
|
16
|
+
toEditableRows,
|
|
17
17
|
toStoredCategories,
|
|
18
18
|
withMoves,
|
|
19
|
+
withLabelIn,
|
|
19
20
|
type CategoryEntry,
|
|
20
21
|
type EditableCategory,
|
|
21
22
|
} from '../utils/categories'
|
|
22
|
-
import type {
|
|
23
|
+
import type { StoredCategory } from '../types/mailing'
|
|
23
24
|
|
|
24
25
|
interface CategoriesInputProps {
|
|
25
26
|
modelValue?: CategoryEntry[] | null
|
|
@@ -53,8 +54,8 @@ const MOVE_FIELD_COMPONENT = 'DmsSelect'
|
|
|
53
54
|
const LABEL_PART = 'label'
|
|
54
55
|
const ROW_FIELD_UI = { error: 'mt-1 ps-9 text-[12px]' }
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
const
|
|
57
|
+
// Labels are edited in the interface's language, the others kept as stored.
|
|
58
|
+
const { t, locale } = useI18n()
|
|
58
59
|
const { confirm } = useConfirm()
|
|
59
60
|
|
|
60
61
|
let nextKey = 0
|
|
@@ -90,11 +91,7 @@ const rowErrorPattern = (index: number): RegExp =>
|
|
|
90
91
|
new RegExp(`^${FIELD_NAME}\\.${index}\\.`)
|
|
91
92
|
|
|
92
93
|
function toRows(value: CategoryEntry[]): EditableCategory[] {
|
|
93
|
-
return
|
|
94
|
-
...category,
|
|
95
|
-
key: keyOf(),
|
|
96
|
-
isNew: false,
|
|
97
|
-
}))
|
|
94
|
+
return toEditableRows(keptCategories(value), locale.value, keyOf)
|
|
98
95
|
}
|
|
99
96
|
|
|
100
97
|
function movesOf(value: CategoryEntry[]): CategoryEntry[] {
|
|
@@ -102,11 +99,11 @@ function movesOf(value: CategoryEntry[]): CategoryEntry[] {
|
|
|
102
99
|
}
|
|
103
100
|
|
|
104
101
|
function currentEntries(): CategoryEntry[] {
|
|
105
|
-
return withMoves(toStoredCategories(rows.value), removed.value)
|
|
102
|
+
return withMoves(toStoredCategories(rows.value, locale.value), removed.value)
|
|
106
103
|
}
|
|
107
104
|
|
|
108
105
|
function onEdit(): void {
|
|
109
|
-
const stored = toStoredCategories(rows.value)
|
|
106
|
+
const stored = toStoredCategories(rows.value, locale.value)
|
|
110
107
|
stored.forEach((category, index) => {
|
|
111
108
|
const row = rows.value[index]
|
|
112
109
|
if (row) row.id = category.id
|
|
@@ -122,6 +119,7 @@ function addCategory(): void {
|
|
|
122
119
|
id: '',
|
|
123
120
|
label: '',
|
|
124
121
|
icon: newCategoryIcon(rows.value),
|
|
122
|
+
labels: {},
|
|
125
123
|
isNew: true,
|
|
126
124
|
})
|
|
127
125
|
}
|
|
@@ -147,8 +145,12 @@ function isRemovable(row: EditableCategory): boolean {
|
|
|
147
145
|
return row.isNew || !isMarketingCategory(row.id)
|
|
148
146
|
}
|
|
149
147
|
|
|
150
|
-
function categoryOf(row: EditableCategory):
|
|
151
|
-
return {
|
|
148
|
+
function categoryOf(row: EditableCategory): StoredCategory {
|
|
149
|
+
return {
|
|
150
|
+
id: row.id,
|
|
151
|
+
label: withLabelIn(row.labels, locale.value, row.label),
|
|
152
|
+
icon: row.icon,
|
|
153
|
+
}
|
|
152
154
|
}
|
|
153
155
|
|
|
154
156
|
function moveOptions(row: EditableCategory): MoveOption[] {
|
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
import { mailingPath, type FunnelResponse } from '../composables/useMailingApi'
|
|
3
3
|
import {
|
|
4
4
|
biggestDrop,
|
|
5
|
+
deltaTone,
|
|
6
|
+
formatDelta,
|
|
5
7
|
formatRate,
|
|
6
8
|
FUNNEL_KINDS,
|
|
7
9
|
FUNNEL_LEAK_STEP,
|
|
8
10
|
funnelTakeaway,
|
|
11
|
+
isCompared,
|
|
9
12
|
isMeasured,
|
|
10
13
|
type FunnelStepReading,
|
|
11
14
|
type FunnelTakeaway,
|
|
@@ -21,6 +24,24 @@ const SKELETON_ROWS = 5
|
|
|
21
24
|
const KEY_PREFIX = 'dms_mailing.funnel_card.'
|
|
22
25
|
const NOT_TRACKED_KEY = 'dms_mailing.metrics.not_tracked'
|
|
23
26
|
|
|
27
|
+
/**
|
|
28
|
+
* A row's columns: label, meter, count, rate, and the change while the
|
|
29
|
+
* toolbar compares. Written out whole so Tailwind sees every class.
|
|
30
|
+
*/
|
|
31
|
+
const ROW_GRID = {
|
|
32
|
+
plain:
|
|
33
|
+
'@md:grid-cols-[6.5rem_minmax(0,1fr)_4.5rem_3.5rem] grid-cols-[minmax(0,1fr)_auto_auto]',
|
|
34
|
+
compared:
|
|
35
|
+
'@md:grid-cols-[6.5rem_minmax(0,1fr)_4.5rem_3.5rem_4rem] grid-cols-[minmax(0,1fr)_auto_auto_auto]',
|
|
36
|
+
}
|
|
37
|
+
const METER_SPAN = { plain: 'col-span-3', compared: 'col-span-4' }
|
|
38
|
+
const UNTRACKED_SPAN = { plain: 'col-span-2', compared: 'col-span-3' }
|
|
39
|
+
const DELTA_TONE_CLASSES: Record<ReturnType<typeof deltaTone>, string> = {
|
|
40
|
+
success: 'text-success',
|
|
41
|
+
error: 'text-error',
|
|
42
|
+
neutral: 'text-dimmed',
|
|
43
|
+
}
|
|
44
|
+
|
|
24
45
|
const TAKEAWAY_KEYS: Record<FunnelTakeaway, string> = {
|
|
25
46
|
empty: `${KEY_PREFIX}no_drop`,
|
|
26
47
|
untracked: `${KEY_PREFIX}untracked`,
|
|
@@ -86,6 +107,16 @@ const takeaway = computed(() => {
|
|
|
86
107
|
|
|
87
108
|
const isLeak = (step: FunnelStepReading): boolean =>
|
|
88
109
|
step.id === FUNNEL_LEAK_STEP
|
|
110
|
+
|
|
111
|
+
/** "No comparison" in the toolbar drops the column rather than leave dashes. */
|
|
112
|
+
const layout = computed(() => (isCompared(steps.value) ? 'compared' : 'plain'))
|
|
113
|
+
|
|
114
|
+
const deltaTitle = (step: FunnelStepReading): string | undefined =>
|
|
115
|
+
step.previousCount === undefined
|
|
116
|
+
? undefined
|
|
117
|
+
: t(`${KEY_PREFIX}compared_count`, {
|
|
118
|
+
value: numberFormat.value.format(step.previousCount),
|
|
119
|
+
})
|
|
89
120
|
</script>
|
|
90
121
|
|
|
91
122
|
<template>
|
|
@@ -115,7 +146,8 @@ const isLeak = (step: FunnelStepReading): boolean =>
|
|
|
115
146
|
v-for="step in steps"
|
|
116
147
|
:key="step.id"
|
|
117
148
|
data-funnel-step
|
|
118
|
-
class="
|
|
149
|
+
class="grid items-center gap-x-3 gap-y-1.5"
|
|
150
|
+
:class="ROW_GRID[layout]"
|
|
119
151
|
>
|
|
120
152
|
<span
|
|
121
153
|
class="truncate text-[12.5px]"
|
|
@@ -125,7 +157,8 @@ const isLeak = (step: FunnelStepReading): boolean =>
|
|
|
125
157
|
</span>
|
|
126
158
|
<DmsMeter
|
|
127
159
|
as="span"
|
|
128
|
-
class="@md:order-none @md:col-span-1 order-last
|
|
160
|
+
class="@md:order-none @md:col-span-1 order-last"
|
|
161
|
+
:class="METER_SPAN[layout]"
|
|
129
162
|
:value="isMeasured(step) ? step.count : 0"
|
|
130
163
|
:max="Math.max(total, 1)"
|
|
131
164
|
:tone="isLeak(step) ? 'warning' : 'primary'"
|
|
@@ -143,11 +176,21 @@ const isLeak = (step: FunnelStepReading): boolean =>
|
|
|
143
176
|
>
|
|
144
177
|
{{ formatRate(step.rate, locale) }}
|
|
145
178
|
</span>
|
|
179
|
+
<span
|
|
180
|
+
v-if="layout === 'compared'"
|
|
181
|
+
data-funnel-delta
|
|
182
|
+
class="text-right font-mono text-[11.5px] tabular-nums"
|
|
183
|
+
:class="DELTA_TONE_CLASSES[deltaTone(step)]"
|
|
184
|
+
:title="deltaTitle(step)"
|
|
185
|
+
>
|
|
186
|
+
{{ formatDelta(step.delta, locale) }}
|
|
187
|
+
</span>
|
|
146
188
|
</template>
|
|
147
189
|
<span
|
|
148
190
|
v-else
|
|
149
191
|
data-funnel-untracked
|
|
150
|
-
class="text-dimmed
|
|
192
|
+
class="text-dimmed text-right text-[11.5px]"
|
|
193
|
+
:class="UNTRACKED_SPAN[layout]"
|
|
151
194
|
>
|
|
152
195
|
{{ t(NOT_TRACKED_KEY) }}
|
|
153
196
|
</span>
|