@useinsider/guido 3.2.0-beta.803b92e → 3.2.0-beta.8220f9d
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/README.md +1 -25
- package/dist/@types/config/schemas.js +2 -2
- package/dist/components/Guido.vue.js +5 -5
- package/dist/components/Guido.vue2.js +88 -78
- package/dist/components/organisms/chat/blueprint/BlueprintCard.vue.js +20 -0
- package/dist/components/organisms/chat/blueprint/BlueprintCard.vue2.js +20 -0
- package/dist/components/organisms/chat/blueprint/EmailTemplateBlueprintCard.vue.js +23 -0
- package/dist/components/organisms/chat/blueprint/EmailTemplateBlueprintCard.vue2.js +18 -0
- package/dist/components/organisms/chat/chatbox/ChatboxContainer.vue.js +18 -0
- package/dist/components/organisms/chat/chatbox/ChatboxContainer.vue2.js +16 -0
- package/dist/components/organisms/chat/chatbox/ChatboxPanel.vue.js +20 -0
- package/dist/components/organisms/chat/chatbox/ChatboxPanel.vue2.js +19 -0
- package/dist/components/organisms/chat/conversation/ChatConversation.vue.js +28 -0
- package/dist/components/organisms/chat/conversation/ChatConversation.vue2.js +20 -0
- package/dist/components/organisms/chat/conversation/ChatWelcome.vue.js +18 -0
- package/dist/components/organisms/chat/conversation/ChatWelcome.vue2.js +11 -0
- package/dist/components/organisms/chat/conversation/QuickActionChips.vue.js +22 -0
- package/dist/components/organisms/chat/conversation/QuickActionChips.vue2.js +42 -0
- package/dist/components/organisms/chat/input/ChatInput.vue.js +29 -0
- package/dist/components/organisms/chat/input/ChatInput.vue2.js +39 -0
- package/dist/components/organisms/chat/input/GuidoAgentSelector.vue.js +22 -0
- package/dist/components/organisms/chat/input/GuidoAgentSelector.vue2.js +29 -0
- package/dist/components/organisms/chat/messages/AiMessage.vue.js +26 -0
- package/dist/components/organisms/chat/messages/AiMessage.vue2.js +41 -0
- package/dist/components/organisms/chat/messages/AiMessageActions.vue.js +18 -0
- package/dist/components/organisms/chat/messages/AiMessageActions.vue2.js +27 -0
- package/dist/components/organisms/chat/messages/ChatLoading.vue.js +18 -0
- package/dist/components/organisms/chat/messages/ChatLoading.vue2.js +30 -0
- package/dist/components/organisms/chat/messages/ChatMessages.vue.js +26 -0
- package/dist/components/organisms/chat/messages/ChatMessages.vue2.js +67 -0
- package/dist/components/organisms/chat/messages/UserMessage.vue.js +18 -0
- package/dist/components/organisms/chat/messages/UserMessage.vue2.js +26 -0
- package/dist/components/organisms/header/RightSlot.vue.js +8 -8
- package/dist/components/organisms/header/RightSlot.vue2.js +8 -9
- package/dist/components/organisms/onboarding/AMPOnboarding.vue2.js +51 -31
- package/dist/components/organisms/onboarding/GenericOnboarding.vue.js +1 -1
- package/dist/components/organisms/onboarding/GenericOnboarding.vue2.js +23 -22
- package/dist/components/organisms/onboarding/ItemsOnboarding.vue.js +1 -1
- package/dist/components/organisms/onboarding/ItemsOnboarding.vue2.js +37 -39
- package/dist/components/organisms/onboarding/TextBlockOnboarding.vue.js +3 -3
- package/dist/components/organisms/onboarding/TextBlockOnboarding.vue2.js +30 -41
- package/dist/components/organisms/onboarding/VersionHistoryOnboarding.vue2.js +15 -14
- package/dist/composables/useChatState.js +130 -0
- package/dist/composables/useChatStreaming.js +191 -0
- package/dist/composables/useConversationEvents.js +37 -0
- package/dist/composables/useEmailTemplateApplier.js +41 -0
- package/dist/composables/useRibbonOffset.js +21 -0
- package/dist/composables/useSave.js +15 -15
- package/dist/config/compiler/unsubscribeCompilerRules.js +40 -37
- package/dist/enums/onboarding.js +7 -2
- package/dist/enums/unsubscribe.js +34 -27
- package/dist/guido.css +1 -1
- package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +258 -235
- package/dist/node_modules/@vueuse/core/index.js +127 -0
- package/dist/node_modules/@vueuse/shared/index.js +68 -27
- package/dist/node_modules/dompurify/dist/purify.es.js +595 -0
- package/dist/node_modules/marked/lib/marked.esm.js +1152 -0
- package/dist/package.json.js +1 -1
- package/dist/services/chatService.js +163 -0
- package/dist/services/templateLibraryApi.js +5 -4
- package/dist/src/@types/chat.d.ts +138 -0
- package/dist/src/@types/config/schemas.d.ts +4 -4
- package/dist/src/components/Guido.vue.d.ts +5 -1
- package/dist/src/components/organisms/chat/blueprint/BlueprintCard.vue.d.ts +38 -0
- package/dist/src/components/organisms/chat/blueprint/EmailTemplateBlueprintCard.vue.d.ts +35 -0
- package/dist/src/components/organisms/chat/chatbox/ChatboxContainer.vue.d.ts +4 -0
- package/dist/src/components/organisms/chat/chatbox/ChatboxPanel.vue.d.ts +4 -0
- package/dist/src/components/organisms/chat/conversation/ChatConversation.vue.d.ts +31 -0
- package/dist/src/components/organisms/chat/conversation/QuickActionChips.vue.d.ts +30 -0
- package/dist/src/components/organisms/chat/input/ChatInput.vue.d.ts +37 -0
- package/dist/src/components/organisms/chat/messages/AiMessage.vue.d.ts +33 -0
- package/dist/src/components/organisms/chat/messages/AiMessageActions.vue.d.ts +18 -0
- package/dist/src/components/organisms/chat/messages/ChatLoading.vue.d.ts +32 -0
- package/dist/src/components/organisms/chat/messages/ChatMessages.vue.d.ts +37 -0
- package/dist/src/components/organisms/chat/messages/UserMessage.vue.d.ts +35 -0
- package/dist/src/components/organisms/header/EditorActions.vue.d.ts +1 -1
- package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -1
- package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -1
- package/dist/src/composables/useChatState.d.ts +26 -0
- package/dist/src/composables/useChatStreaming.d.ts +26 -0
- package/dist/src/composables/useConfig.d.ts +2 -2
- package/dist/src/composables/useConversationEvents.d.ts +19 -0
- package/dist/src/composables/useEmailTemplateApplier.d.ts +21 -0
- package/dist/src/composables/useRibbonOffset.d.ts +4 -0
- package/dist/src/composables/useSave.d.ts +1 -1
- package/dist/src/enums/onboarding.d.ts +6 -0
- package/dist/src/enums/unsubscribe.d.ts +5 -0
- package/dist/src/services/chatService.d.ts +16 -0
- package/dist/src/stores/chat.d.ts +323 -0
- package/dist/src/stores/config.d.ts +18 -18
- package/dist/src/stores/editor.d.ts +23 -0
- package/dist/src/stores/onboarding.d.ts +4 -0
- package/dist/src/utils/generateId.d.ts +1 -0
- package/dist/src/utils/markdown.d.ts +1 -0
- package/dist/stores/chat.js +26 -0
- package/dist/stores/editor.js +1 -0
- package/dist/stores/onboarding.js +4 -0
- package/dist/utils/generateId.js +7 -0
- package/dist/utils/markdown.js +21 -0
- package/dist/utils/pairProductVariables.js +89 -88
- package/package.json +6 -3
- package/dist/components/organisms/AutoSaveController.vue.js +0 -17
- package/dist/components/organisms/AutoSaveController.vue2.js +0 -13
- package/dist/components/organisms/header/AutoSaveToggle.vue.js +0 -22
- package/dist/components/organisms/header/AutoSaveToggle.vue2.js +0 -19
- package/dist/composables/useAutoSave.js +0 -68
- package/dist/src/composables/useAutoSave.d.ts +0 -3
- package/dist/src/stores/autosave.d.ts +0 -6
- package/dist/src/utils/timeUtil.d.ts +0 -8
- package/dist/stores/autosave.js +0 -11
- package/dist/utils/timeUtil.js +0 -19
- /package/dist/src/components/organisms/{AutoSaveController.vue.d.ts → chat/conversation/ChatWelcome.vue.d.ts} +0 -0
- /package/dist/src/components/organisms/{header/AutoSaveToggle.vue.d.ts → chat/input/GuidoAgentSelector.vue.d.ts} +0 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { generateId as u } from "../utils/generateId.js";
|
|
2
|
+
const S = (h) => {
|
|
3
|
+
const {
|
|
4
|
+
messages: d,
|
|
5
|
+
conversationId: F,
|
|
6
|
+
isLoading: b,
|
|
7
|
+
assistantMsgId: p,
|
|
8
|
+
addOrUpdateBlueprint: w
|
|
9
|
+
} = h, n = [], g = [];
|
|
10
|
+
let r = "";
|
|
11
|
+
const i = (e = {}) => {
|
|
12
|
+
const c = d.value.findIndex((m) => m.id === p);
|
|
13
|
+
c < 0 || d.value.splice(c, 1, {
|
|
14
|
+
...d.value[c],
|
|
15
|
+
...e,
|
|
16
|
+
segments: [...n]
|
|
17
|
+
});
|
|
18
|
+
}, f = () => {
|
|
19
|
+
if (!r)
|
|
20
|
+
return;
|
|
21
|
+
const e = n[n.length - 1];
|
|
22
|
+
e && e.type === "text" ? e.content = r : n.push({
|
|
23
|
+
_id: u("seg"),
|
|
24
|
+
type: "text",
|
|
25
|
+
content: r
|
|
26
|
+
}), i({});
|
|
27
|
+
};
|
|
28
|
+
return { handleEvent: (e) => {
|
|
29
|
+
var c, m, k, x;
|
|
30
|
+
switch (e.type) {
|
|
31
|
+
case "text": {
|
|
32
|
+
r += e.content ?? "";
|
|
33
|
+
const t = n[n.length - 1];
|
|
34
|
+
t && t.type === "text" ? t.content = r : n.push({
|
|
35
|
+
_id: u("seg"),
|
|
36
|
+
type: "text",
|
|
37
|
+
content: r
|
|
38
|
+
}), i({ currentStatus: void 0 });
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
case "agent_start": {
|
|
42
|
+
f(), r = "";
|
|
43
|
+
const t = e.id ?? e.toolCallId ?? u("seg"), a = (e.name ?? "tool").replace(/-/g, " ").replace(/\b\w/g, (l) => l.toUpperCase()), o = g[g.length - 1] ?? null;
|
|
44
|
+
n.push({
|
|
45
|
+
_id: u("seg"),
|
|
46
|
+
type: "tool",
|
|
47
|
+
toolCallId: t,
|
|
48
|
+
name: a,
|
|
49
|
+
isRunning: !0,
|
|
50
|
+
startedAt: Date.now(),
|
|
51
|
+
ownerAgentId: o
|
|
52
|
+
}), g.push(t);
|
|
53
|
+
const s = ((c = d.value.find((l) => l.id === p)) == null ? void 0 : c.agentFlow) ?? [];
|
|
54
|
+
i({
|
|
55
|
+
agentFlow: [
|
|
56
|
+
...s,
|
|
57
|
+
{
|
|
58
|
+
id: t,
|
|
59
|
+
name: a,
|
|
60
|
+
parentId: o,
|
|
61
|
+
startedAt: Date.now()
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
});
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
case "agent_end": {
|
|
68
|
+
const t = e.id ?? e.toolCallId, a = n.findIndex(
|
|
69
|
+
(l) => l.type === "tool" && l.toolCallId === t
|
|
70
|
+
);
|
|
71
|
+
a >= 0 && (n[a].endedAt = Date.now(), e.success ? n.splice(a, 1) : (n[a].isRunning = !1, n[a].error = !0));
|
|
72
|
+
const o = g.lastIndexOf(t ?? "");
|
|
73
|
+
o >= 0 && g.splice(o, 1);
|
|
74
|
+
const s = (m = d.value.find((l) => l.id === p)) == null ? void 0 : m.agentFlow;
|
|
75
|
+
if (s) {
|
|
76
|
+
const l = s.map((I) => I.id === t ? { ...I, success: !!e.success, endedAt: Date.now() } : I);
|
|
77
|
+
i({ agentFlow: l });
|
|
78
|
+
} else
|
|
79
|
+
i({});
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
case "agent_handoff": {
|
|
83
|
+
const t = e.toAgent ?? e.id;
|
|
84
|
+
if (!t)
|
|
85
|
+
break;
|
|
86
|
+
const a = (e.objective ?? e.message ?? "").trim();
|
|
87
|
+
if (!a)
|
|
88
|
+
break;
|
|
89
|
+
const o = (k = d.value.find((s) => s.id === p)) == null ? void 0 : k.agentFlow;
|
|
90
|
+
if (o && o.some((s) => s.id === t))
|
|
91
|
+
i({
|
|
92
|
+
agentFlow: o.map((s) => s.id === t ? { ...s, description: s.description ?? a } : s)
|
|
93
|
+
});
|
|
94
|
+
else {
|
|
95
|
+
const s = {
|
|
96
|
+
id: t,
|
|
97
|
+
name: (e.toAgent ?? "agent").replace(/-/g, " ").replace(/\b\w/g, (l) => l.toUpperCase()),
|
|
98
|
+
parentId: e.fromAgent ?? e.parentId ?? null,
|
|
99
|
+
description: a
|
|
100
|
+
};
|
|
101
|
+
i({ agentFlow: [...o ?? [], s] });
|
|
102
|
+
}
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
case "agent_result": {
|
|
106
|
+
const t = e.id ?? e.toAgent;
|
|
107
|
+
if (!t)
|
|
108
|
+
break;
|
|
109
|
+
const a = (e.summary ?? "").trim(), o = (x = d.value.find((s) => s.id === p)) == null ? void 0 : x.agentFlow;
|
|
110
|
+
if (!o)
|
|
111
|
+
break;
|
|
112
|
+
i({
|
|
113
|
+
agentFlow: o.map((s) => s.id === t ? {
|
|
114
|
+
...s,
|
|
115
|
+
description: a || s.description,
|
|
116
|
+
success: typeof e.success == "boolean" ? e.success : s.success,
|
|
117
|
+
endedAt: s.endedAt ?? Date.now()
|
|
118
|
+
} : s)
|
|
119
|
+
});
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case "tool_call": {
|
|
123
|
+
const t = [...n].reverse().find(
|
|
124
|
+
(a) => a.type === "tool" && a.isRunning
|
|
125
|
+
);
|
|
126
|
+
t && (t.title = e.name ?? "", i({}));
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
case "status": {
|
|
130
|
+
const t = e.message ?? "";
|
|
131
|
+
i({ currentStatus: t || void 0 });
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
case "blueprint_create":
|
|
135
|
+
case "blueprint_update": {
|
|
136
|
+
const t = {
|
|
137
|
+
id: e.blueprintId ?? "",
|
|
138
|
+
type: e.blueprintType ?? "unknown",
|
|
139
|
+
title: e.title ?? "",
|
|
140
|
+
data: e.data ?? {},
|
|
141
|
+
version: e.version ?? 1,
|
|
142
|
+
status: e.status ?? "draft"
|
|
143
|
+
};
|
|
144
|
+
w && w(t), f(), r = "";
|
|
145
|
+
const a = n.findIndex(
|
|
146
|
+
(s) => s.type === "blueprint" && s.blueprintId === t.id
|
|
147
|
+
), o = {
|
|
148
|
+
_id: a >= 0 ? n[a]._id : u("seg"),
|
|
149
|
+
type: "blueprint",
|
|
150
|
+
blueprintId: t.id,
|
|
151
|
+
blueprintType: t.type,
|
|
152
|
+
title: t.title,
|
|
153
|
+
blueprintData: t.data,
|
|
154
|
+
version: t.version,
|
|
155
|
+
status: t.status
|
|
156
|
+
};
|
|
157
|
+
a >= 0 ? n[a] = o : n.push(o), i({});
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
case "done": {
|
|
161
|
+
f(), e.conversationId && (F.value = e.conversationId), i({
|
|
162
|
+
isStreaming: !1,
|
|
163
|
+
content: r,
|
|
164
|
+
traceId: e.traceId ?? null
|
|
165
|
+
}), b.value = !1;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
case "error": {
|
|
169
|
+
n.push({
|
|
170
|
+
_id: u("seg"),
|
|
171
|
+
type: "error",
|
|
172
|
+
content: e.message ?? "An error occurred"
|
|
173
|
+
}), i({
|
|
174
|
+
isStreaming: !1,
|
|
175
|
+
isError: !0
|
|
176
|
+
}), b.value = !1;
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
case "cancelled": {
|
|
180
|
+
i({
|
|
181
|
+
isStreaming: !1,
|
|
182
|
+
isCancelled: !0
|
|
183
|
+
}), b.value = !1;
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}, segments: n, flushText: f };
|
|
188
|
+
};
|
|
189
|
+
export {
|
|
190
|
+
S as createStreamHandler
|
|
191
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useChatState as h } from "./useChatState.js";
|
|
2
|
+
import { useClipboard as u } from "../node_modules/@vueuse/core/index.js";
|
|
3
|
+
const M = () => {
|
|
4
|
+
const {
|
|
5
|
+
messages: s,
|
|
6
|
+
isLoading: t,
|
|
7
|
+
hasMessages: o,
|
|
8
|
+
blueprints: a,
|
|
9
|
+
activeBlueprint: d,
|
|
10
|
+
sendMessage: r,
|
|
11
|
+
cancelStream: i,
|
|
12
|
+
retryLastUserMessage: c
|
|
13
|
+
} = h(), { copy: l } = u();
|
|
14
|
+
return {
|
|
15
|
+
messages: s,
|
|
16
|
+
isLoading: t,
|
|
17
|
+
hasMessages: o,
|
|
18
|
+
blueprints: a,
|
|
19
|
+
activeBlueprint: d,
|
|
20
|
+
handleSend: (n) => {
|
|
21
|
+
r(n);
|
|
22
|
+
},
|
|
23
|
+
handleStop: () => {
|
|
24
|
+
i();
|
|
25
|
+
},
|
|
26
|
+
handleRetry: () => {
|
|
27
|
+
c();
|
|
28
|
+
},
|
|
29
|
+
handleCopyMessage: (n) => {
|
|
30
|
+
const e = s.value.find((p) => p.id === n);
|
|
31
|
+
e != null && e.content && l(e.content);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export {
|
|
36
|
+
M as useConversationEvents
|
|
37
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useActionsApi as u } from "./useActionsApi.js";
|
|
2
|
+
import { useToaster as T } from "./useToaster.js";
|
|
3
|
+
import { useTranslations as f } from "./useTranslations.js";
|
|
4
|
+
import { ToasterTypeOptions as n } from "../enums/toaster.js";
|
|
5
|
+
import { ref as y } from "vue";
|
|
6
|
+
const h = 250, s = y({}), o = {}, j = () => {
|
|
7
|
+
const { updateHtmlAndCss: l } = u(), { showToaster: r } = T(), i = f(), c = (e, t, p) => {
|
|
8
|
+
s.value = { ...s.value, [e]: "applying" };
|
|
9
|
+
try {
|
|
10
|
+
l(t, p), s.value = { ...s.value, [e]: "applied" }, r({
|
|
11
|
+
type: n.Success,
|
|
12
|
+
message: i("newsletter.ai-template-applied")
|
|
13
|
+
});
|
|
14
|
+
} catch (a) {
|
|
15
|
+
s.value = { ...s.value, [e]: "failed" }, r({
|
|
16
|
+
type: n.Alert,
|
|
17
|
+
message: a instanceof Error ? a.message : "Failed to apply template"
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}, m = (e) => {
|
|
21
|
+
const t = o[e];
|
|
22
|
+
t && (clearTimeout(t), delete o[e]);
|
|
23
|
+
};
|
|
24
|
+
return { applyStatus: s, applyTemplate: (e, t) => {
|
|
25
|
+
t.html && (m(e), c(e, t.html, t.css ?? ""));
|
|
26
|
+
}, applyTemplateDebounced: (e, t) => {
|
|
27
|
+
if (!t.html)
|
|
28
|
+
return;
|
|
29
|
+
m(e);
|
|
30
|
+
const { html: p } = t, a = t.css ?? "";
|
|
31
|
+
o[e] = setTimeout(() => {
|
|
32
|
+
delete o[e], c(e, p, a);
|
|
33
|
+
}, h);
|
|
34
|
+
} };
|
|
35
|
+
}, w = () => {
|
|
36
|
+
Object.values(o).forEach(clearTimeout), Object.keys(o).forEach((l) => delete o[l]), s.value = {};
|
|
37
|
+
};
|
|
38
|
+
export {
|
|
39
|
+
w as resetEmailTemplateApplier,
|
|
40
|
+
j as useEmailTemplateApplier
|
|
41
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { RIBBON_SELECTOR as r } from "../enums/onboarding.js";
|
|
2
|
+
import { ref as f, onMounted as c, onBeforeUnmount as i } from "vue";
|
|
3
|
+
const m = () => {
|
|
4
|
+
const o = f(0);
|
|
5
|
+
let e = null;
|
|
6
|
+
const n = () => {
|
|
7
|
+
const t = document.querySelector(r), s = (t == null ? void 0 : t.offsetHeight) ?? 0;
|
|
8
|
+
o.value !== s && (o.value = s);
|
|
9
|
+
}, u = (t) => `${t + o.value}px`;
|
|
10
|
+
return c(() => {
|
|
11
|
+
n(), e = new MutationObserver(n), e.observe(document.body, {
|
|
12
|
+
childList: !0,
|
|
13
|
+
subtree: !0
|
|
14
|
+
});
|
|
15
|
+
}), i(() => {
|
|
16
|
+
e == null || e.disconnect();
|
|
17
|
+
}), { ribbonOffset: o, getTopPosition: u };
|
|
18
|
+
};
|
|
19
|
+
export {
|
|
20
|
+
m as useRibbonOffset
|
|
21
|
+
};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { useActionsApi as
|
|
2
|
-
import { useConfig as
|
|
3
|
-
import { useSaveStart as
|
|
4
|
-
import { useSyncModuleExtractor as
|
|
5
|
-
import { useStripoApi as
|
|
6
|
-
import { useTemplatePreparation as
|
|
7
|
-
import { useHtmlValidator as
|
|
8
|
-
import { useLiquidValidator as
|
|
9
|
-
const
|
|
10
|
-
const o =
|
|
11
|
-
return { save: async (m = !1
|
|
1
|
+
import { useActionsApi as S } from "./useActionsApi.js";
|
|
2
|
+
import { useConfig as V } from "./useConfig.js";
|
|
3
|
+
import { useSaveStart as x, useSaveComplete as y } from "./useGuidoActions.js";
|
|
4
|
+
import { useSyncModuleExtractor as w } from "./useSyncModuleExtractor.js";
|
|
5
|
+
import { useStripoApi as b } from "../services/stripoApi.js";
|
|
6
|
+
import { useTemplatePreparation as q } from "../utils/templatePreparation.js";
|
|
7
|
+
import { useHtmlValidator as H } from "./useHtmlValidator.js";
|
|
8
|
+
import { useLiquidValidator as L } from "./validators/useLiquidValidator.js";
|
|
9
|
+
const F = () => {
|
|
10
|
+
const o = x(), s = y(), { validateHtml: r } = H(), { validateLiquidSyntax: n } = L(), { callbacks: a, isFeatureEnabled: l } = V(), { extractSyncModuleData: d } = w(), { setSyncModuleUnsubscriptionPages: u } = b(), { editorSave: c } = S();
|
|
11
|
+
return { save: async (m = !1) => {
|
|
12
12
|
var i;
|
|
13
13
|
o();
|
|
14
|
-
const { prepareTemplateDetails:
|
|
14
|
+
const { prepareTemplateDetails: p } = q(), t = await p();
|
|
15
15
|
if (l("liquidSyntax")) {
|
|
16
16
|
if (!await n(t.compiledHtml))
|
|
17
17
|
return;
|
|
@@ -20,10 +20,10 @@ const U = () => {
|
|
|
20
20
|
if ((i = a.value) != null && i.externalValidation && !await a.value.externalValidation(t))
|
|
21
21
|
return;
|
|
22
22
|
await c();
|
|
23
|
-
const { unsubscribePayload:
|
|
24
|
-
return await u(
|
|
23
|
+
const { unsubscribePayload: f, stripoModules: v } = d(t.rawHtml);
|
|
24
|
+
return await u(f), t.modules = v, m || s(t), t;
|
|
25
25
|
} };
|
|
26
26
|
};
|
|
27
27
|
export {
|
|
28
|
-
|
|
28
|
+
F as useSave
|
|
29
29
|
};
|
|
@@ -1,41 +1,44 @@
|
|
|
1
|
-
import { usePartner as
|
|
2
|
-
import { LINK_REGEXES as p, LINK_TYPES as
|
|
3
|
-
import { parsePageList as
|
|
4
|
-
import { useConfigStore as
|
|
5
|
-
import { useDynamicContentStore as
|
|
6
|
-
import { useUnsubscribeStore as
|
|
7
|
-
|
|
1
|
+
import { usePartner as U } from "../../composables/usePartner.js";
|
|
2
|
+
import { LINK_REGEXES as p, PRODUCT_TYPE_URL_SEGMENTS as R, LINK_TYPES as _, INSIDER_ID as m, URLS as y } from "../../enums/unsubscribe.js";
|
|
3
|
+
import { parsePageList as N } from "../../extensions/Blocks/Unsubscribe/utils/utils.js";
|
|
4
|
+
import { useConfigStore as C } from "../../stores/config.js";
|
|
5
|
+
import { useDynamicContentStore as L } from "../../stores/dynamic-content.js";
|
|
6
|
+
import { useUnsubscribeStore as P } from "../../stores/unsubscribe.js";
|
|
7
|
+
import { ProductType as B } from "../../@types/config/schemas.js";
|
|
8
|
+
import "../../@types/config/defaults.js";
|
|
9
|
+
const F = [
|
|
8
10
|
{
|
|
9
11
|
id: "add-unsubscribe-link-values",
|
|
10
12
|
description: "Adding unsubscribe link values",
|
|
11
13
|
type: "custom",
|
|
12
|
-
processor: (
|
|
13
|
-
const { getPartnerName: i } =
|
|
14
|
-
if (!
|
|
15
|
-
return
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
processor: (s) => {
|
|
15
|
+
const { getPartnerName: i } = U(), n = C(), t = L(), E = P(), c = n.variationId;
|
|
16
|
+
if (!c)
|
|
17
|
+
return s;
|
|
18
|
+
const r = R[n.productType] ?? R[B.EMAIL];
|
|
19
|
+
let e = s;
|
|
20
|
+
const d = `/${i()}/${r}/${c}?user={{iid}}`, f = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".unsubscribe-block-v2[data-unsubscribe-page-list]");
|
|
21
|
+
let a = !1, l = !1;
|
|
22
|
+
return f.forEach((g) => {
|
|
23
|
+
var S;
|
|
24
|
+
const u = g.getAttribute("data-unsubscribe-page-list");
|
|
22
25
|
if (!u)
|
|
23
26
|
return;
|
|
24
|
-
const
|
|
25
|
-
(
|
|
27
|
+
const I = N(u), b = ((S = E.templates) == null ? void 0 : S.filter(
|
|
28
|
+
(o) => I.includes(o.id)
|
|
26
29
|
)) ?? [];
|
|
27
|
-
|
|
28
|
-
}), (
|
|
30
|
+
a = a || b.some((o) => o.type === _.UNSUBSCRIBE_LINK_TYPE), l = l || b.some((o) => o.type === _.PREFERENCES_LINK_TYPE);
|
|
31
|
+
}), (a || l) && (t.selectedDynamicContentList.some((u) => u.value === m) || t.selectedDynamicContentList.push({
|
|
29
32
|
text: m,
|
|
30
33
|
value: m,
|
|
31
34
|
fallback: ""
|
|
32
|
-
})),
|
|
35
|
+
})), a && (e = e.replace(
|
|
33
36
|
p.GLOBAL_UNSUBSCRIBE_LINK_REGEX,
|
|
34
|
-
|
|
37
|
+
y.UNSUBSCRIBE_URL + d
|
|
35
38
|
)), l && (e = e.replace(
|
|
36
39
|
p.PREFERENCES_UNSUBSCRIBE_LINK_REGEX,
|
|
37
|
-
|
|
38
|
-
)),
|
|
40
|
+
y.PREFERENCES_URL + d
|
|
41
|
+
)), f.length && (e = e.replace(p.UNSUBSCRIBE_LINK_REGEX, "")), e;
|
|
39
42
|
},
|
|
40
43
|
priority: 60
|
|
41
44
|
},
|
|
@@ -52,25 +55,25 @@ const G = [
|
|
|
52
55
|
id: "format-comment-braces",
|
|
53
56
|
description: "Adding spaces around comment braces for proper formatting",
|
|
54
57
|
type: "custom",
|
|
55
|
-
processor: (
|
|
58
|
+
processor: (s) => s.replace(/{#/g, "{ #").replace(/#}/g, "# }"),
|
|
56
59
|
priority: 62
|
|
57
60
|
},
|
|
58
61
|
{
|
|
59
62
|
id: "add-universal-link-flags",
|
|
60
63
|
description: "Adding universal link flags",
|
|
61
64
|
type: "custom",
|
|
62
|
-
processor: (
|
|
63
|
-
let i =
|
|
64
|
-
const
|
|
65
|
-
return
|
|
66
|
-
if (
|
|
65
|
+
processor: (s) => {
|
|
66
|
+
let i = s;
|
|
67
|
+
const n = i.match(/<a[^>]+>(.*?)<\/a>/gm);
|
|
68
|
+
return n && n.forEach((t) => {
|
|
69
|
+
if (t.includes("insEmail=1"))
|
|
67
70
|
return;
|
|
68
|
-
if (
|
|
69
|
-
const
|
|
70
|
-
const
|
|
71
|
-
return
|
|
71
|
+
if (t.match(/<a\s+(?:[^>]*?\s+)?href=(["'`”])(.*?)\1\s+(?:[^>]*?\s+)?universal=(["'`”])true\3/gm)) {
|
|
72
|
+
const c = t.replace(/href=(["'`”])(.*?)\1/gm, (r) => {
|
|
73
|
+
const e = r.slice(6, r.length - 1).trim();
|
|
74
|
+
return r.includes("?") || r.includes("#") ? e.slice(-1) === "&" ? r.replace(e, `${e}insEmail=1`) : r.replace(e, `${e}&insEmail=1`) : r.replace(e, `${e}?insEmail=1`);
|
|
72
75
|
});
|
|
73
|
-
i = i.replace(
|
|
76
|
+
i = i.replace(t, c);
|
|
74
77
|
}
|
|
75
78
|
}), i;
|
|
76
79
|
},
|
|
@@ -78,5 +81,5 @@ const G = [
|
|
|
78
81
|
}
|
|
79
82
|
];
|
|
80
83
|
export {
|
|
81
|
-
|
|
84
|
+
F as unsubscribeCompilerRules
|
|
82
85
|
};
|
package/dist/enums/onboarding.js
CHANGED
|
@@ -2,10 +2,15 @@ const e = [
|
|
|
2
2
|
".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-0.ng-star-inserted",
|
|
3
3
|
".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-1.ng-star-inserted",
|
|
4
4
|
".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-2.ng-star-inserted"
|
|
5
|
-
], t = "ui-editor", n = 'button[role="tab"][aria-label="Card Composition"]', s = 'button[role="tab"][aria-label="Settings"]',
|
|
5
|
+
], t = "ui-editor", n = 'button[role="tab"][aria-label="Card Composition"]', s = 'button[role="tab"][aria-label="Settings"]', E = ".in-ribbons-wrapper", o = ".guido__amp-toggle-html", a = ".in-segments-wrapper", O = '[data-testid="guido-header"]', _ = 158, i = 10;
|
|
6
6
|
export {
|
|
7
|
+
o as AMP_TOGGLE_BUTTON_SELECTOR,
|
|
8
|
+
a as AMP_TOGGLE_WRAPPER_SELECTOR,
|
|
7
9
|
n as CARD_COMPOSITION_TAB_SELECTOR,
|
|
8
|
-
|
|
10
|
+
O as HEADER_SELECTOR,
|
|
11
|
+
_ as POPOVER_LEFT_OFFSET,
|
|
12
|
+
i as POPOVER_TOP_GAP,
|
|
13
|
+
E as RIBBON_SELECTOR,
|
|
9
14
|
e as SERVICE_HOVER_SELECTORS,
|
|
10
15
|
s as SETTINGS_TAB_SELECTOR,
|
|
11
16
|
t as UI_EDITOR_SELECTOR
|
|
@@ -1,29 +1,35 @@
|
|
|
1
|
-
import { useTranslations as
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { useTranslations as R } from "../composables/useTranslations.js";
|
|
2
|
+
import { ProductType as s } from "../@types/config/schemas.js";
|
|
3
|
+
import "../@types/config/defaults.js";
|
|
4
|
+
import { getEnvironmentPrefix as S } from "../utils/environmentUtil.js";
|
|
5
|
+
const B = {
|
|
4
6
|
UNSUBSCRIBE_LINK_TYPE: 1,
|
|
5
7
|
PREFERENCES_LINK_TYPE: 3
|
|
6
|
-
},
|
|
8
|
+
}, i = {
|
|
7
9
|
UNSUBSCRIBE_LINK_REGEX: /{{ins-unsubscribe-link}}/g,
|
|
8
10
|
DATA_OGSB_BUTTON_CSS_REGEX: "\\[data-ogsb\\]\\s*\\.es-button\\.es-button-[0-9]+\\s*\\{(?:[^\\}]*)\\}",
|
|
9
11
|
GLOBAL_UNSUBSCRIBE_LINK_REGEX: /{{ins-global-unsubscribe-link}}/g,
|
|
10
12
|
PREFERENCES_UNSUBSCRIBE_LINK_REGEX: /{{ins-preferences-unsubscribe-link}}/g
|
|
11
|
-
}, n =
|
|
13
|
+
}, n = S(), C = {
|
|
12
14
|
UNSUBSCRIBE_URL: `https://mail.${n}.com/user/v1/unsub`,
|
|
13
15
|
PREFERENCES_URL: `https://mail.${n}.com/user/v1/prefs`
|
|
14
|
-
},
|
|
16
|
+
}, U = {
|
|
17
|
+
[s.EMAIL]: "email",
|
|
18
|
+
[s.ARCHITECT]: "journey",
|
|
19
|
+
[s.UNSUBSCRIBE_PAGES]: "email"
|
|
20
|
+
}, t = "iid", o = {
|
|
15
21
|
name: "Global Unsubscribe",
|
|
16
22
|
sendGridId: "G"
|
|
17
|
-
},
|
|
23
|
+
}, c = "/email/unsubscribe-pages", E = {
|
|
18
24
|
GLOBAL_UNSUBSCRIBE: 1,
|
|
19
25
|
GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE: 2,
|
|
20
26
|
SUBSCRIPTION_PREFERENCE_CENTER: 3,
|
|
21
27
|
SUBSCRIPTION_PREFERENCE_CONFIRMATION: 4,
|
|
22
28
|
RESUBSCRIBE: 5
|
|
23
|
-
},
|
|
29
|
+
}, u = {
|
|
24
30
|
[E.GLOBAL_UNSUBSCRIBE]: "custom-unsubscribe",
|
|
25
31
|
[E.SUBSCRIPTION_PREFERENCE_CENTER]: "custom-preferences"
|
|
26
|
-
},
|
|
32
|
+
}, T = {
|
|
27
33
|
[E.GLOBAL_UNSUBSCRIBE]: [
|
|
28
34
|
E.GLOBAL_UNSUBSCRIBE,
|
|
29
35
|
E.GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE,
|
|
@@ -33,30 +39,31 @@ const _ = {
|
|
|
33
39
|
E.SUBSCRIPTION_PREFERENCE_CENTER,
|
|
34
40
|
E.SUBSCRIPTION_PREFERENCE_CONFIRMATION
|
|
35
41
|
]
|
|
36
|
-
},
|
|
37
|
-
const
|
|
42
|
+
}, b = () => {
|
|
43
|
+
const e = R();
|
|
38
44
|
return {
|
|
39
|
-
[E.GLOBAL_UNSUBSCRIBE]:
|
|
40
|
-
[E.GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE]:
|
|
41
|
-
[E.RESUBSCRIBE]:
|
|
42
|
-
[E.SUBSCRIPTION_PREFERENCE_CENTER]:
|
|
43
|
-
[E.SUBSCRIPTION_PREFERENCE_CONFIRMATION]:
|
|
45
|
+
[E.GLOBAL_UNSUBSCRIBE]: e("unsubscription-preference.type-global-unsubscribe"),
|
|
46
|
+
[E.GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE]: e("unsubscription-preference.type-global-unsubscription-confirmation"),
|
|
47
|
+
[E.RESUBSCRIBE]: e("unsubscription-preference.type-resubscribe"),
|
|
48
|
+
[E.SUBSCRIPTION_PREFERENCE_CENTER]: e("unsubscription-preference.type-subscription-preferences-center"),
|
|
49
|
+
[E.SUBSCRIPTION_PREFERENCE_CONFIRMATION]: e("unsubscription-preference.type-subscription-preferences-confirmation")
|
|
44
50
|
};
|
|
45
|
-
},
|
|
51
|
+
}, P = {
|
|
46
52
|
default: "{{ins-unsubscribe-link}}",
|
|
47
53
|
[E.GLOBAL_UNSUBSCRIBE]: "{{ins-global-unsubscribe-link}}",
|
|
48
54
|
[E.SUBSCRIPTION_PREFERENCE_CENTER]: "{{ins-preferences-unsubscribe-link}}"
|
|
49
55
|
};
|
|
50
56
|
export {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
57
|
+
o as DEFAULT_UNSUBSCRIBE_GROUP,
|
|
58
|
+
t as INSIDER_ID,
|
|
59
|
+
i as LINK_REGEXES,
|
|
60
|
+
B as LINK_TYPES,
|
|
61
|
+
P as MERGE_TAGS,
|
|
56
62
|
E as PAGE_TYPES,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
U as PRODUCT_TYPE_URL_SEGMENTS,
|
|
64
|
+
T as TYPE_COLLECTIONS,
|
|
65
|
+
c as UNSUBSCRIBE_PAGES_LINK,
|
|
66
|
+
u as UNSUBSCRIBE_SYNC_MODULE_TYPES,
|
|
67
|
+
C as URLS,
|
|
68
|
+
b as getTypeTranslations
|
|
62
69
|
};
|
package/dist/guido.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.gap-16[data-v-3b53a736],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-cd76c125] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-195ab6d4]{position:relative;display:inline-block}.new-tag[data-v-195ab6d4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-195ab6d4] .guido__view-option-selection-desktop svg,[data-v-195ab6d4] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-195ab6d4] .in-segments-wrapper__button_selected,[data-v-195ab6d4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-195ab6d4] .in-tooltip-wrapper__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-64c52560]{gap:8px}.version-history__toolbar[data-v-64c52560]{gap:4px}.view-options-wrapper[data-v-d405ca59]{position:relative;display:inline-block}.new-tag[data-v-d405ca59]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-d405ca59] .guido__verion-history-view-option-selection-desktop svg,[data-v-d405ca59] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-d405ca59] .in-segments-wrapper__button_selected,[data-v-d405ca59] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-d405ca59] .in-tooltip-wrapper__icon{cursor:pointer}.auto-save-toggle[data-v-4cbf0abd]{position:relative}.auto-save-toggle__info-box[data-v-4cbf0abd]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-4e2a4adb]{gap:4px}.header-wrapper[data-v-5c02dcc7]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-fffc13d6]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-fffc13d6]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-fffc13d6]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-df672485]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-df672485]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-df672485]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-df672485]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-df672485]{object-fit:cover;transform:scale(1)}[data-v-43c617a7] .guido__verion-history-view-option-selection-desktop svg,[data-v-43c617a7] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-43c617a7] .in-segments-wrapper__button_selected,[data-v-43c617a7] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-988f8da6]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-988f8da6]{min-height:504px}.iframe-wrapper[data-v-e0424e99]{width:258px}.iframe-scaled[data-v-e0424e99]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-29b9af29] .vueperslides__bullets,[data-v-dd1a237a] .vueperslides__bullets{pointer-events:none!important}[data-v-dd1a237a] .vueperslides__parallax-wrapper{height:110px!important}[data-v-d073b1dc] .vueperslides__bullets{pointer-events:none!important}[data-v-d073b1dc] .vueperslides__parallax-wrapper{height:110px!important}
|
|
1
|
+
.chat-welcome[data-v-715e7d06]{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;font-family:Figtree,sans-serif}.chat-welcome__subtitle[data-v-715e7d06]{margin:0;font-size:15px;font-weight:400;line-height:24px;color:#393939}.chat-welcome__title[data-v-715e7d06]{margin:0;font-size:26px;font-weight:400;line-height:32px;color:#1c1c1c}.quick-action-chips[data-v-0d23f2b4]{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;width:100%;max-width:720px}.quick-action-chips--compact[data-v-0d23f2b4]{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;max-width:420px}.quick-action-chips--compact .quick-action-chips__chip[data-v-0d23f2b4]{padding:14px 16px;font-size:13px;line-height:20px;min-height:64px}.quick-action-chips__chip[data-v-0d23f2b4]{display:flex;align-items:flex-start;padding:8px 9px 8px 8px;background:#fff;border:none;border-radius:8px;box-shadow:0 4px 12px #39393926;font-family:Figtree,sans-serif;font-size:13px;font-weight:400;line-height:1.4;color:#393939;text-align:left;cursor:pointer;transition:box-shadow .15s}.quick-action-chips__chip[data-v-0d23f2b4]:hover{box-shadow:0 6px 18px #39393938}.quick-action-chips__chip[data-v-0d23f2b4]:focus{outline:none;box-shadow:0 6px 18px #39393938}.guido-agent-selector[data-v-1179a597]{display:inline-flex;align-items:center;padding:2px;background:#f5f5f7;border-radius:6px}.guido-agent-selector__option[data-v-1179a597]{padding:4px 10px;border:none;border-radius:4px;background:transparent;color:#666;font-family:Figtree,sans-serif;font-size:12px;font-weight:500;cursor:pointer;transition:background-color .15s,color .15s}.guido-agent-selector__option[data-v-1179a597]:hover:not(.guido-agent-selector__option--active){color:#292929}.guido-agent-selector__option--active[data-v-1179a597]{background:#fff;color:#292929;box-shadow:0 1px 3px #0000001a}.chat-input[data-v-dd031314]{width:100%;max-width:720px;position:relative}.chat-input__container[data-v-dd031314]{display:flex;flex-direction:column;position:relative;background:linear-gradient(180deg,#fff,#fafafc);border:1px solid #e1e1e1;border-radius:5px;box-shadow:0 4px 12px #39393926,inset 0 1px #fffc;overflow:visible}.chat-input__container--focused[data-v-dd031314]{border-color:#5f24af}.chat-input__text-area[data-v-dd031314]{display:flex;flex-direction:column;padding:16px}.chat-input__textarea[data-v-dd031314]{width:100%;min-height:24px;max-height:120px;padding:0;border:none;outline:none;resize:none;font-family:Figtree,sans-serif;font-size:15px;font-weight:400;line-height:24px;color:#1c1c1c;background:transparent}.chat-input__textarea[data-v-dd031314]::placeholder{color:#666}.chat-input__textarea[data-v-dd031314]:disabled{background:#f9fafb;cursor:not-allowed}.chat-input__toolbar[data-v-dd031314]{display:flex;align-items:center;padding:4px 8px 8px}.chat-input__toolbar-left[data-v-dd031314]{display:flex;align-items:center;gap:8px}.chat-input__actions[data-v-dd031314]{margin-left:auto}.chat-input__send-btn[data-v-dd031314]{display:flex;align-items:center;justify-content:center;height:40px;padding:8px;border:none;border-radius:4px;background:transparent;color:#222938;cursor:pointer;transition:background-color .2s,color .2s}.chat-input__send-btn[data-v-dd031314]:hover:not(:disabled){background:#f5f5f5}.chat-input__send-btn[data-v-dd031314]:disabled{opacity:.4;cursor:not-allowed}.blueprint-card[data-v-28b88292]{display:flex;align-items:center;gap:16px;width:100%;height:72px;padding:0 16px;background:#fff;border:1px solid #e1e1e1;border-radius:8px;cursor:pointer;text-align:left;overflow:hidden;box-shadow:0 4px 12px #39393926;transition:border-color .2s}.blueprint-card[data-v-28b88292]:hover{border-color:#0a2ecc}.blueprint-card__icon-box[data-v-28b88292]{display:flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:8px;background:#f9f9f9;border:1px solid #e1e1e1;color:#5f24af;flex-shrink:0}.blueprint-card__body[data-v-28b88292]{display:flex;flex-direction:column;flex:1;min-width:0}.blueprint-card__title[data-v-28b88292]{font-family:Figtree,sans-serif;font-size:15px;font-weight:400;line-height:24px;color:#292929;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}.blueprint-card__date[data-v-28b88292]{font-family:Figtree,sans-serif;font-size:13px;font-weight:400;line-height:16px;color:#666}.blueprint-card__chevron[data-v-28b88292]{flex-shrink:0;color:#666}.email-template-card[data-v-2853740d]{display:flex;align-items:center;gap:12px;width:100%;padding:12px 16px;background:#fff;border:1px solid #e1e1e1;border-radius:8px;box-shadow:0 4px 12px #3939391a;transition:border-color .2s}.email-template-card--applied[data-v-2853740d]{border-color:#27ae60}.email-template-card--failed[data-v-2853740d]{border-color:#d32f2f}.email-template-card__icon-box[data-v-2853740d]{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:8px;background:linear-gradient(135deg,#fa3a3a,#5f24af);color:#fff;flex-shrink:0}.email-template-card--applied .email-template-card__icon-box[data-v-2853740d]{background:#27ae60}.email-template-card--failed .email-template-card__icon-box[data-v-2853740d]{background:#d32f2f}.email-template-card__body[data-v-2853740d]{display:flex;flex-direction:column;flex:1;min-width:0}.email-template-card__title[data-v-2853740d]{font-family:Figtree,sans-serif;font-size:14px;font-weight:500;line-height:20px;color:#292929}.email-template-card__meta[data-v-2853740d]{font-family:Figtree,sans-serif;font-size:12px;font-weight:400;line-height:16px;color:#666}.email-template-card__action[data-v-2853740d]{padding:6px 12px;border:1px solid #e1e1e1;border-radius:6px;background:#fff;color:#292929;font-family:Figtree,sans-serif;font-size:13px;font-weight:500;cursor:pointer;transition:background-color .15s}.email-template-card__action[data-v-2853740d]:hover:not(:disabled){background:#f5f5f5}.email-template-card__action[data-v-2853740d]:disabled{opacity:.5;cursor:not-allowed}.ai-message-actions[data-v-4b57f736]{gap:8px}.ai-message-actions__btn[data-v-4b57f736]{width:32px;height:32px;padding:0;background:transparent;color:#292929;transition:background-color .15s}.ai-message-actions__btn[data-v-4b57f736]:hover:not(:disabled){background:#0000000f}.ai-message-actions__btn[data-v-4b57f736]:disabled{cursor:not-allowed;opacity:.4}.ai-message-actions__btn--success[data-v-4b57f736]{color:#27ae60}.chat-loading[data-v-4a52f577]{gap:8px}.chat-loading__icon[data-v-4a52f577]{width:24px;height:24px}.chat-loading__text[data-v-4a52f577]{font-family:Figtree,sans-serif;font-size:15px;line-height:24px;background:linear-gradient(90deg,#495366,#5f24af,#9b59b6,#5f24af,#495366);background-size:200% 100%;-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;animation:gradientShift-4a52f577 3s ease-in-out infinite}@keyframes gradientShift-4a52f577{0%{background-position:100% 50%}50%{background-position:0% 50%}to{background-position:100% 50%}}.ai-message__segments[data-v-b287766f],.ai-message__content[data-v-b287766f]{width:100%;align-self:stretch;font-family:Figtree,sans-serif;font-size:15px;line-height:24px;color:#292929}.ai-message__segments[data-v-b287766f] p,.ai-message__content[data-v-b287766f] p{margin:0 0 8px}.ai-message__segments[data-v-b287766f] p:last-child,.ai-message__content[data-v-b287766f] p:last-child{margin:0}.ai-message__segments[data-v-b287766f] strong,.ai-message__content[data-v-b287766f] strong{font-weight:600}.ai-message__segments[data-v-b287766f] ul,.ai-message__segments[data-v-b287766f] ol,.ai-message__content[data-v-b287766f] ul,.ai-message__content[data-v-b287766f] ol{margin:8px 0;padding-left:24px}.ai-message__segments[data-v-b287766f] li,.ai-message__content[data-v-b287766f] li{margin:4px 0}.ai-message__segments[data-v-b287766f] code,.ai-message__content[data-v-b287766f] code{background:#f4f4f4;padding:2px 6px;border-radius:4px;font-size:13px}.ai-message__segments[data-v-b287766f] pre,.ai-message__content[data-v-b287766f] pre{background:#f4f4f4;padding:12px;border-radius:8px;overflow-x:auto;margin:8px 0}.ai-message__segments[data-v-b287766f] pre code,.ai-message__content[data-v-b287766f] pre code{background:none;padding:0}.ai-message__segments[data-v-b287766f] a,.ai-message__content[data-v-b287766f] a{color:#0a2ecc;text-decoration:none}.ai-message__segments[data-v-b287766f] a:hover,.ai-message__content[data-v-b287766f] a:hover{text-decoration:underline}.ai-message__error[data-v-b287766f]{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:16px;background:#d32f2f14;color:#d32f2f;font-size:14px}.ai-message__error-text[data-v-b287766f]{font-family:Figtree,sans-serif;line-height:20px}.user-message__view-wrapper[data-v-bc03b908]{display:flex;flex-direction:column;align-items:flex-end;width:100%}.user-message__bubble[data-v-bc03b908]{max-width:364px;padding:8px 16px;background:#dcdfe6;border-radius:8px 8px 0}.user-message__text[data-v-bc03b908]{font-family:Figtree,sans-serif;font-size:15px;font-weight:400;line-height:24px;color:#222938;white-space:pre-wrap;word-break:break-word}.user-message__timestamp[data-v-bc03b908]{margin-top:8px;font-family:Figtree,sans-serif;font-size:13px;font-weight:400;line-height:16px;color:#666;white-space:nowrap}.user-message__bubble-row[data-v-bc03b908]{gap:16px}.user-message__actions[data-v-bc03b908]{gap:8px;padding:8px;opacity:0;transition:opacity .2s}.user-message:hover .user-message__actions[data-v-bc03b908]{opacity:1}.user-message__action-btn[data-v-bc03b908]{width:32px;height:32px;padding:0;background:transparent;color:#8c8c8c;transition:color .15s,background-color .15s}.user-message__action-btn[data-v-bc03b908]:hover{color:#393939;background:#0000000f}.user-message__action-btn--success[data-v-bc03b908]{color:#27ae60}.chat-messages[data-v-42f0f380]{position:relative}.chat-messages__list[data-v-42f0f380]{gap:16px}.chat-conversation[data-v-5a25bfc5]{flex:1 1 0;display:flex;flex-direction:column;align-items:center;position:relative;z-index:1;min-height:0;overflow-y:auto;scroll-behavior:smooth;scrollbar-width:none}.chat-conversation[data-v-5a25bfc5]::-webkit-scrollbar{display:none}.chat-conversation__header[data-v-5a25bfc5]{position:sticky;top:0;z-index:15;flex-shrink:0}.chat-conversation__messages[data-v-5a25bfc5]{flex:1;width:100%;max-width:720px}.chat-conversation__empty[data-v-5a25bfc5]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:32px;width:100%;height:100%;padding:16px;box-sizing:border-box}.chat-conversation__input[data-v-5a25bfc5]{position:sticky;bottom:0;display:flex;justify-content:center;width:100%;max-width:720px;padding:16px 0 0;z-index:10;background:#fff}.chatbox-panel[data-v-26934e62]{position:relative;width:100%;height:100%;background:#fff;overflow:hidden}.chatbox-panel__gradient[data-v-26934e62]{position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse at top right,rgba(95,36,175,.06) 0%,transparent 60%);pointer-events:none;z-index:0}.chatbox-panel__header[data-v-26934e62]{width:100%;padding:16px 20px;background:#fff;border-bottom:1px solid #eef0f4}.chatbox-panel__title[data-v-26934e62]{font-family:Figtree,sans-serif;font-size:16px;font-weight:600;line-height:24px;color:#1c1c1c}.chatbox-panel__close[data-v-26934e62]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:6px;background:transparent;color:#666;cursor:pointer;transition:background-color .15s,color .15s}.chatbox-panel__close[data-v-26934e62]:hover{background:#f5f5f5;color:#292929}.chatbox-container[data-v-a5430681]{position:fixed;top:64px;right:16px;bottom:16px;width:480px;max-width:calc(100vw - 32px);z-index:1000;pointer-events:none}.chatbox-container__shell[data-v-a5430681]{width:100%;height:100%;background:#fff;border-radius:12px;box-shadow:0 16px 48px #0000002e,0 4px 12px #00000014;overflow:hidden;pointer-events:auto}.gap-16[data-v-3b53a736],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-cd76c125] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-195ab6d4]{position:relative;display:inline-block}.new-tag[data-v-195ab6d4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-195ab6d4] .guido__view-option-selection-desktop svg,[data-v-195ab6d4] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-195ab6d4] .in-segments-wrapper__button_selected,[data-v-195ab6d4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-195ab6d4] .in-tooltip-wrapper__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-64c52560]{gap:8px}.version-history__toolbar[data-v-64c52560]{gap:4px}.view-options-wrapper[data-v-d405ca59]{position:relative;display:inline-block}.new-tag[data-v-d405ca59]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-d405ca59] .guido__verion-history-view-option-selection-desktop svg,[data-v-d405ca59] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-d405ca59] .in-segments-wrapper__button_selected,[data-v-d405ca59] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-d405ca59] .in-tooltip-wrapper__icon{cursor:pointer}.editor-actions[data-v-4e2a4adb]{gap:4px}.header-wrapper[data-v-5c02dcc7]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-ec575441]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-ec575441]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-ec575441]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-df672485]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-df672485]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-df672485]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-df672485]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-df672485]{object-fit:cover;transform:scale(1)}[data-v-43c617a7] .guido__verion-history-view-option-selection-desktop svg,[data-v-43c617a7] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-43c617a7] .in-segments-wrapper__button_selected,[data-v-43c617a7] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-988f8da6]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-988f8da6]{min-height:504px}.iframe-wrapper[data-v-e0424e99]{width:258px}.iframe-scaled[data-v-e0424e99]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-7419ae06] .vueperslides__bullets,[data-v-796d193b] .vueperslides__bullets{pointer-events:none!important}[data-v-796d193b] .vueperslides__parallax-wrapper{height:110px!important}[data-v-cadfc82d] .vueperslides__bullets{pointer-events:none!important}[data-v-cadfc82d] .vueperslides__parallax-wrapper{height:110px!important}
|