@heliyos/heliyos-api-core 1.0.62 → 1.0.64
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/email/index.js +42 -1
- package/dist/email/notification-daily-summary.html +36 -50
- package/dist/email/notification-immediate.html +2 -2
- package/dist/email/organization-daily-summary.html +44 -15
- package/package.json +1 -1
- package/src/email/index.ts +48 -1
- package/src/email/notification-daily-summary.html +36 -50
- package/src/email/notification-immediate.html +2 -2
- package/src/email/organization-daily-summary.html +44 -15
package/dist/email/index.js
CHANGED
|
@@ -41,11 +41,52 @@ exports.emailTemplates = {
|
|
|
41
41
|
notificationDailySummary: "notification-daily-summary.html",
|
|
42
42
|
organizationDailySummary: "organization-daily-summary.html",
|
|
43
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* Simple markdown to HTML converter for email templates
|
|
46
|
+
*/
|
|
47
|
+
const markdownToHtml = (text) => {
|
|
48
|
+
if (!text || typeof text !== "string")
|
|
49
|
+
return text;
|
|
50
|
+
return text
|
|
51
|
+
// Bold: **text** or __text__
|
|
52
|
+
.replace(/\*\*(.*?)\*\*/g, "<strong>$1</strong>")
|
|
53
|
+
.replace(/__(.*?)__/g, "<strong>$1</strong>")
|
|
54
|
+
// Italics: *text* or _text_
|
|
55
|
+
.replace(/\*(.*?)\*/g, "<em>$1</em>")
|
|
56
|
+
.replace(/_(.*?)_/g, "<em>$1</em>")
|
|
57
|
+
// Newlines to <br>
|
|
58
|
+
.replace(/\n/g, "<br>");
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Recursively process object values to convert markdown to HTML
|
|
62
|
+
*/
|
|
63
|
+
const processMarkdownData = (data) => {
|
|
64
|
+
if (!data)
|
|
65
|
+
return data;
|
|
66
|
+
if (typeof data === "string") {
|
|
67
|
+
return markdownToHtml(data);
|
|
68
|
+
}
|
|
69
|
+
if (Array.isArray(data)) {
|
|
70
|
+
return data.map((item) => processMarkdownData(item));
|
|
71
|
+
}
|
|
72
|
+
if (typeof data === "object") {
|
|
73
|
+
const processed = {};
|
|
74
|
+
for (const key in data) {
|
|
75
|
+
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
76
|
+
processed[key] = processMarkdownData(data[key]);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return processed;
|
|
80
|
+
}
|
|
81
|
+
return data;
|
|
82
|
+
};
|
|
44
83
|
const getEmailTemplate = (template, data) => {
|
|
45
84
|
const filePath = path.join(__dirname, template);
|
|
46
85
|
const htmlContent = fs.readFileSync(filePath, "utf8");
|
|
86
|
+
// Process data to convert markdown to HTML in strings
|
|
87
|
+
const processedData = processMarkdownData(data);
|
|
47
88
|
const handlebarsTemplate = handlebars_1.default.compile(htmlContent);
|
|
48
|
-
const result = handlebarsTemplate(Object.assign(Object.assign({},
|
|
89
|
+
const result = handlebarsTemplate(Object.assign(Object.assign({}, processedData), { year: new Date().getFullYear(), company_name: "Heliyos AI" }));
|
|
49
90
|
return result;
|
|
50
91
|
};
|
|
51
92
|
exports.getEmailTemplate = getEmailTemplate;
|
|
@@ -69,9 +69,6 @@
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
.section-header {
|
|
72
|
-
display: flex;
|
|
73
|
-
justify-content: space-between;
|
|
74
|
-
align-items: center;
|
|
75
72
|
margin-bottom: 12px;
|
|
76
73
|
padding-bottom: 8px;
|
|
77
74
|
border-bottom: 1px solid #e5e7eb;
|
|
@@ -82,6 +79,7 @@
|
|
|
82
79
|
font-weight: bold;
|
|
83
80
|
color: #111827;
|
|
84
81
|
margin: 0;
|
|
82
|
+
line-height: 1;
|
|
85
83
|
}
|
|
86
84
|
|
|
87
85
|
.section-count {
|
|
@@ -151,10 +149,6 @@
|
|
|
151
149
|
color: #374151;
|
|
152
150
|
}
|
|
153
151
|
|
|
154
|
-
.item-link {
|
|
155
|
-
margin-top: 10px;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
152
|
.org-summary-box {
|
|
159
153
|
background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%);
|
|
160
154
|
color: #ffffff;
|
|
@@ -168,39 +162,6 @@
|
|
|
168
162
|
font-size: 18px;
|
|
169
163
|
}
|
|
170
164
|
|
|
171
|
-
.org-summary-box p {
|
|
172
|
-
margin: 8px 0;
|
|
173
|
-
line-height: 1.6;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.button {
|
|
177
|
-
display: inline-block;
|
|
178
|
-
padding: 10px 20px;
|
|
179
|
-
background-color: #7c3aed;
|
|
180
|
-
color: #ffffff !important;
|
|
181
|
-
text-decoration: none;
|
|
182
|
-
border-radius: 6px;
|
|
183
|
-
font-weight: bold;
|
|
184
|
-
font-size: 13px;
|
|
185
|
-
margin-top: 8px;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
.button:hover {
|
|
189
|
-
background-color: #6d28d9;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
.view-all-link {
|
|
193
|
-
text-align: right;
|
|
194
|
-
margin-top: 12px;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
.view-all-link a {
|
|
198
|
-
color: #7c3aed;
|
|
199
|
-
text-decoration: none;
|
|
200
|
-
font-weight: bold;
|
|
201
|
-
font-size: 14px;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
165
|
.footer {
|
|
205
166
|
background-color: #7c3aed;
|
|
206
167
|
padding: 20px;
|
|
@@ -237,16 +198,26 @@
|
|
|
237
198
|
|
|
238
199
|
{{#if has_org_summary}}
|
|
239
200
|
<div class="org-summary-box">
|
|
240
|
-
<
|
|
241
|
-
|
|
201
|
+
<table border="0" cellpadding="0" cellspacing="0">
|
|
202
|
+
<tr>
|
|
203
|
+
<td style="vertical-align: middle; padding-right: 8px; font-size: 20px;">📊</td>
|
|
204
|
+
<td style="vertical-align: middle;"><h3 style="margin: 0;">Organization Summary</h3></td>
|
|
205
|
+
</tr>
|
|
206
|
+
</table>
|
|
207
|
+
<p style="margin-top: 12px; line-height: 1.6;">{{{org_summary}}}</p>
|
|
242
208
|
</div>
|
|
243
209
|
{{/if}}
|
|
244
210
|
|
|
245
211
|
{{#if has_tasks}}
|
|
246
212
|
<div class="section">
|
|
247
213
|
<div class="section-header">
|
|
248
|
-
<
|
|
249
|
-
|
|
214
|
+
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
|
215
|
+
<tr>
|
|
216
|
+
<td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✓</td>
|
|
217
|
+
<td style="vertical-align: middle;"><h2 class="section-title">Tasks</h2></td>
|
|
218
|
+
<td style="vertical-align: middle; text-align: right;"><span class="section-count">{{tasks_count}}</span></td>
|
|
219
|
+
</tr>
|
|
220
|
+
</table>
|
|
250
221
|
</div>
|
|
251
222
|
<div class="section-content">
|
|
252
223
|
{{#each tasks}}
|
|
@@ -292,8 +263,13 @@
|
|
|
292
263
|
{{#if has_deals}}
|
|
293
264
|
<div class="section">
|
|
294
265
|
<div class="section-header">
|
|
295
|
-
<
|
|
296
|
-
|
|
266
|
+
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
|
267
|
+
<tr>
|
|
268
|
+
<td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">💰</td>
|
|
269
|
+
<td style="vertical-align: middle;"><h2 class="section-title">Deals</h2></td>
|
|
270
|
+
<td style="vertical-align: middle; text-align: right;"><span class="section-count">{{deals_count}}</span></td>
|
|
271
|
+
</tr>
|
|
272
|
+
</table>
|
|
297
273
|
</div>
|
|
298
274
|
<div class="section-content">
|
|
299
275
|
{{#each deals}}
|
|
@@ -339,8 +315,13 @@
|
|
|
339
315
|
{{#if has_approvals}}
|
|
340
316
|
<div class="section">
|
|
341
317
|
<div class="section-header">
|
|
342
|
-
<
|
|
343
|
-
|
|
318
|
+
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
|
319
|
+
<tr>
|
|
320
|
+
<td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✔️</td>
|
|
321
|
+
<td style="vertical-align: middle;"><h2 class="section-title">Reviews</h2></td>
|
|
322
|
+
<td style="vertical-align: middle; text-align: right;"><span class="section-count">{{approvals_count}}</span></td>
|
|
323
|
+
</tr>
|
|
324
|
+
</table>
|
|
344
325
|
</div>
|
|
345
326
|
<div class="section-content">
|
|
346
327
|
{{#each approvals}}
|
|
@@ -386,8 +367,13 @@
|
|
|
386
367
|
{{#if has_leadsets}}
|
|
387
368
|
<div class="section">
|
|
388
369
|
<div class="section-header">
|
|
389
|
-
<
|
|
390
|
-
|
|
370
|
+
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
|
371
|
+
<tr>
|
|
372
|
+
<td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✨</td>
|
|
373
|
+
<td style="vertical-align: middle;"><h2 class="section-title">Leadsets</h2></td>
|
|
374
|
+
<td style="vertical-align: middle; text-align: right;"><span class="section-count">{{leadsets_count}}</span></td>
|
|
375
|
+
</tr>
|
|
376
|
+
</table>
|
|
391
377
|
</div>
|
|
392
378
|
<div class="section-content">
|
|
393
379
|
{{#each leadsets}}
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
|
|
157
157
|
<div class="event-card">
|
|
158
158
|
<div class="event-badge">{{event_type_label}}</div>
|
|
159
|
-
<div class="event-title">{{object_name}}</div>
|
|
159
|
+
<div class="event-title">{{{object_name}}}</div>
|
|
160
160
|
{{#if details}}
|
|
161
161
|
<div class="event-details">
|
|
162
162
|
<table class="detail-table">
|
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
{{#each details}}
|
|
165
165
|
<td class="detail-cell">
|
|
166
166
|
<div class="detail-label">{{this.label}}</div>
|
|
167
|
-
<div class="detail-value">{{this.value}}</div>
|
|
167
|
+
<div class="detail-value">{{{this.value}}}</div>
|
|
168
168
|
</td>
|
|
169
169
|
{{/each}}
|
|
170
170
|
</tr>
|
|
@@ -51,13 +51,17 @@
|
|
|
51
51
|
|
|
52
52
|
.badge {
|
|
53
53
|
display: inline-block;
|
|
54
|
-
padding: 6px 14px;
|
|
55
54
|
background-color: rgba(255, 255, 255, 0.2);
|
|
56
55
|
border-radius: 20px;
|
|
56
|
+
margin-top: 10px;
|
|
57
|
+
padding: 0 14px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.badge-text {
|
|
57
61
|
font-size: 13px;
|
|
58
62
|
color: #ffffff;
|
|
59
63
|
font-weight: 600;
|
|
60
|
-
|
|
64
|
+
line-height: 28px;
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
.content {
|
|
@@ -80,9 +84,6 @@
|
|
|
80
84
|
}
|
|
81
85
|
|
|
82
86
|
.section-header {
|
|
83
|
-
display: flex;
|
|
84
|
-
justify-content: space-between;
|
|
85
|
-
align-items: center;
|
|
86
87
|
margin-bottom: 12px;
|
|
87
88
|
padding-bottom: 8px;
|
|
88
89
|
border-bottom: 1px solid #e5e7eb;
|
|
@@ -93,6 +94,7 @@
|
|
|
93
94
|
font-weight: bold;
|
|
94
95
|
color: #111827;
|
|
95
96
|
margin: 0;
|
|
97
|
+
line-height: 1;
|
|
96
98
|
}
|
|
97
99
|
|
|
98
100
|
.summary-text {
|
|
@@ -104,7 +106,6 @@
|
|
|
104
106
|
border-radius: 8px;
|
|
105
107
|
border-left: 4px solid #7c3aed;
|
|
106
108
|
margin-bottom: 20px;
|
|
107
|
-
white-space: pre-wrap;
|
|
108
109
|
word-wrap: break-word;
|
|
109
110
|
}
|
|
110
111
|
|
|
@@ -151,7 +152,14 @@
|
|
|
151
152
|
<img src="https://assets.heliyos.ai/heliyos-logo-white.png" alt="Heliyos AI">
|
|
152
153
|
<div class="header-title">{{organization_name}} Daily Briefing</div>
|
|
153
154
|
<div class="header-date">{{date}}</div>
|
|
154
|
-
<div class="badge"
|
|
155
|
+
<div class="badge">
|
|
156
|
+
<table border="0" cellpadding="0" cellspacing="0" style="margin: 0 auto;">
|
|
157
|
+
<tr>
|
|
158
|
+
<td style="vertical-align: middle; padding-right: 5px; font-size: 14px; line-height: 28px;">📊</td>
|
|
159
|
+
<td style="vertical-align: middle;" class="badge-text">Organization summary</td>
|
|
160
|
+
</tr>
|
|
161
|
+
</table>
|
|
162
|
+
</div>
|
|
155
163
|
</div>
|
|
156
164
|
|
|
157
165
|
<div class="content">
|
|
@@ -163,20 +171,30 @@
|
|
|
163
171
|
<!-- Summary Section -->
|
|
164
172
|
<div class="section">
|
|
165
173
|
<div class="section-header">
|
|
166
|
-
<
|
|
174
|
+
<table border="0" cellpadding="0" cellspacing="0">
|
|
175
|
+
<tr>
|
|
176
|
+
<td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">📋</td>
|
|
177
|
+
<td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Daily Overview</h2></td>
|
|
178
|
+
</tr>
|
|
179
|
+
</table>
|
|
167
180
|
</div>
|
|
168
|
-
<div class="summary-text">{{summary}}</div>
|
|
181
|
+
<div class="summary-text">{{{summary}}}</div>
|
|
169
182
|
</div>
|
|
170
183
|
|
|
171
184
|
<!-- Key Highlights -->
|
|
172
185
|
{{#if key_highlights}}
|
|
173
186
|
<div class="section">
|
|
174
187
|
<div class="section-header">
|
|
175
|
-
<
|
|
188
|
+
<table border="0" cellpadding="0" cellspacing="0">
|
|
189
|
+
<tr>
|
|
190
|
+
<td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">✨</td>
|
|
191
|
+
<td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Key Highlights</h2></td>
|
|
192
|
+
</tr>
|
|
193
|
+
</table>
|
|
176
194
|
</div>
|
|
177
195
|
<div class="list-container">
|
|
178
196
|
{{#each key_highlights}}
|
|
179
|
-
<div class="list-item">{{this}}</div>
|
|
197
|
+
<div class="list-item">{{{this}}}</div>
|
|
180
198
|
{{/each}}
|
|
181
199
|
</div>
|
|
182
200
|
</div>
|
|
@@ -186,11 +204,16 @@
|
|
|
186
204
|
{{#if action_items}}
|
|
187
205
|
<div class="section">
|
|
188
206
|
<div class="section-header">
|
|
189
|
-
<
|
|
207
|
+
<table border="0" cellpadding="0" cellspacing="0">
|
|
208
|
+
<tr>
|
|
209
|
+
<td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">✓</td>
|
|
210
|
+
<td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Action Items</h2></td>
|
|
211
|
+
</tr>
|
|
212
|
+
</table>
|
|
190
213
|
</div>
|
|
191
214
|
<div class="list-container">
|
|
192
215
|
{{#each action_items}}
|
|
193
|
-
<div class="list-item">{{this}}</div>
|
|
216
|
+
<div class="list-item">{{{this}}}</div>
|
|
194
217
|
{{/each}}
|
|
195
218
|
</div>
|
|
196
219
|
</div>
|
|
@@ -200,11 +223,16 @@
|
|
|
200
223
|
{{#if upcoming_priorities}}
|
|
201
224
|
<div class="section">
|
|
202
225
|
<div class="section-header">
|
|
203
|
-
<
|
|
226
|
+
<table border="0" cellpadding="0" cellspacing="0">
|
|
227
|
+
<tr>
|
|
228
|
+
<td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">🎯</td>
|
|
229
|
+
<td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Upcoming Priorities</h2></td>
|
|
230
|
+
</tr>
|
|
231
|
+
</table>
|
|
204
232
|
</div>
|
|
205
233
|
<div class="list-container">
|
|
206
234
|
{{#each upcoming_priorities}}
|
|
207
|
-
<div class="list-item">{{this}}</div>
|
|
235
|
+
<div class="list-item">{{{this}}}</div>
|
|
208
236
|
{{/each}}
|
|
209
237
|
</div>
|
|
210
238
|
</div>
|
|
@@ -226,4 +254,5 @@
|
|
|
226
254
|
</div>
|
|
227
255
|
</div>
|
|
228
256
|
</body>
|
|
257
|
+
|
|
229
258
|
</html>
|
package/package.json
CHANGED
package/src/email/index.ts
CHANGED
|
@@ -14,13 +14,60 @@ export const emailTemplates = {
|
|
|
14
14
|
organizationDailySummary: "organization-daily-summary.html",
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Simple markdown to HTML converter for email templates
|
|
19
|
+
*/
|
|
20
|
+
const markdownToHtml = (text: string): string => {
|
|
21
|
+
if (!text || typeof text !== "string") return text;
|
|
22
|
+
|
|
23
|
+
return text
|
|
24
|
+
// Bold: **text** or __text__
|
|
25
|
+
.replace(/\*\*(.*?)\*\*/g, "<strong>$1</strong>")
|
|
26
|
+
.replace(/__(.*?)__/g, "<strong>$1</strong>")
|
|
27
|
+
// Italics: *text* or _text_
|
|
28
|
+
.replace(/\*(.*?)\*/g, "<em>$1</em>")
|
|
29
|
+
.replace(/_(.*?)_/g, "<em>$1</em>")
|
|
30
|
+
// Newlines to <br>
|
|
31
|
+
.replace(/\n/g, "<br>");
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Recursively process object values to convert markdown to HTML
|
|
36
|
+
*/
|
|
37
|
+
const processMarkdownData = (data: any): any => {
|
|
38
|
+
if (!data) return data;
|
|
39
|
+
|
|
40
|
+
if (typeof data === "string") {
|
|
41
|
+
return markdownToHtml(data);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (Array.isArray(data)) {
|
|
45
|
+
return data.map((item) => processMarkdownData(item));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (typeof data === "object") {
|
|
49
|
+
const processed: any = {};
|
|
50
|
+
for (const key in data) {
|
|
51
|
+
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
52
|
+
processed[key] = processMarkdownData(data[key]);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return processed;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return data;
|
|
59
|
+
};
|
|
60
|
+
|
|
17
61
|
export const getEmailTemplate = (template: string, data: object) => {
|
|
18
62
|
const filePath = path.join(__dirname, template);
|
|
19
63
|
const htmlContent = fs.readFileSync(filePath, "utf8");
|
|
20
64
|
|
|
65
|
+
// Process data to convert markdown to HTML in strings
|
|
66
|
+
const processedData = processMarkdownData(data);
|
|
67
|
+
|
|
21
68
|
const handlebarsTemplate = Handlebars.compile(htmlContent);
|
|
22
69
|
const result = handlebarsTemplate({
|
|
23
|
-
...
|
|
70
|
+
...processedData,
|
|
24
71
|
year: new Date().getFullYear(),
|
|
25
72
|
company_name: "Heliyos AI",
|
|
26
73
|
});
|
|
@@ -69,9 +69,6 @@
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
.section-header {
|
|
72
|
-
display: flex;
|
|
73
|
-
justify-content: space-between;
|
|
74
|
-
align-items: center;
|
|
75
72
|
margin-bottom: 12px;
|
|
76
73
|
padding-bottom: 8px;
|
|
77
74
|
border-bottom: 1px solid #e5e7eb;
|
|
@@ -82,6 +79,7 @@
|
|
|
82
79
|
font-weight: bold;
|
|
83
80
|
color: #111827;
|
|
84
81
|
margin: 0;
|
|
82
|
+
line-height: 1;
|
|
85
83
|
}
|
|
86
84
|
|
|
87
85
|
.section-count {
|
|
@@ -151,10 +149,6 @@
|
|
|
151
149
|
color: #374151;
|
|
152
150
|
}
|
|
153
151
|
|
|
154
|
-
.item-link {
|
|
155
|
-
margin-top: 10px;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
152
|
.org-summary-box {
|
|
159
153
|
background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%);
|
|
160
154
|
color: #ffffff;
|
|
@@ -168,39 +162,6 @@
|
|
|
168
162
|
font-size: 18px;
|
|
169
163
|
}
|
|
170
164
|
|
|
171
|
-
.org-summary-box p {
|
|
172
|
-
margin: 8px 0;
|
|
173
|
-
line-height: 1.6;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.button {
|
|
177
|
-
display: inline-block;
|
|
178
|
-
padding: 10px 20px;
|
|
179
|
-
background-color: #7c3aed;
|
|
180
|
-
color: #ffffff !important;
|
|
181
|
-
text-decoration: none;
|
|
182
|
-
border-radius: 6px;
|
|
183
|
-
font-weight: bold;
|
|
184
|
-
font-size: 13px;
|
|
185
|
-
margin-top: 8px;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
.button:hover {
|
|
189
|
-
background-color: #6d28d9;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
.view-all-link {
|
|
193
|
-
text-align: right;
|
|
194
|
-
margin-top: 12px;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
.view-all-link a {
|
|
198
|
-
color: #7c3aed;
|
|
199
|
-
text-decoration: none;
|
|
200
|
-
font-weight: bold;
|
|
201
|
-
font-size: 14px;
|
|
202
|
-
}
|
|
203
|
-
|
|
204
165
|
.footer {
|
|
205
166
|
background-color: #7c3aed;
|
|
206
167
|
padding: 20px;
|
|
@@ -237,16 +198,26 @@
|
|
|
237
198
|
|
|
238
199
|
{{#if has_org_summary}}
|
|
239
200
|
<div class="org-summary-box">
|
|
240
|
-
<
|
|
241
|
-
|
|
201
|
+
<table border="0" cellpadding="0" cellspacing="0">
|
|
202
|
+
<tr>
|
|
203
|
+
<td style="vertical-align: middle; padding-right: 8px; font-size: 20px;">📊</td>
|
|
204
|
+
<td style="vertical-align: middle;"><h3 style="margin: 0;">Organization Summary</h3></td>
|
|
205
|
+
</tr>
|
|
206
|
+
</table>
|
|
207
|
+
<p style="margin-top: 12px; line-height: 1.6;">{{{org_summary}}}</p>
|
|
242
208
|
</div>
|
|
243
209
|
{{/if}}
|
|
244
210
|
|
|
245
211
|
{{#if has_tasks}}
|
|
246
212
|
<div class="section">
|
|
247
213
|
<div class="section-header">
|
|
248
|
-
<
|
|
249
|
-
|
|
214
|
+
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
|
215
|
+
<tr>
|
|
216
|
+
<td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✓</td>
|
|
217
|
+
<td style="vertical-align: middle;"><h2 class="section-title">Tasks</h2></td>
|
|
218
|
+
<td style="vertical-align: middle; text-align: right;"><span class="section-count">{{tasks_count}}</span></td>
|
|
219
|
+
</tr>
|
|
220
|
+
</table>
|
|
250
221
|
</div>
|
|
251
222
|
<div class="section-content">
|
|
252
223
|
{{#each tasks}}
|
|
@@ -292,8 +263,13 @@
|
|
|
292
263
|
{{#if has_deals}}
|
|
293
264
|
<div class="section">
|
|
294
265
|
<div class="section-header">
|
|
295
|
-
<
|
|
296
|
-
|
|
266
|
+
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
|
267
|
+
<tr>
|
|
268
|
+
<td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">💰</td>
|
|
269
|
+
<td style="vertical-align: middle;"><h2 class="section-title">Deals</h2></td>
|
|
270
|
+
<td style="vertical-align: middle; text-align: right;"><span class="section-count">{{deals_count}}</span></td>
|
|
271
|
+
</tr>
|
|
272
|
+
</table>
|
|
297
273
|
</div>
|
|
298
274
|
<div class="section-content">
|
|
299
275
|
{{#each deals}}
|
|
@@ -339,8 +315,13 @@
|
|
|
339
315
|
{{#if has_approvals}}
|
|
340
316
|
<div class="section">
|
|
341
317
|
<div class="section-header">
|
|
342
|
-
<
|
|
343
|
-
|
|
318
|
+
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
|
319
|
+
<tr>
|
|
320
|
+
<td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✔️</td>
|
|
321
|
+
<td style="vertical-align: middle;"><h2 class="section-title">Reviews</h2></td>
|
|
322
|
+
<td style="vertical-align: middle; text-align: right;"><span class="section-count">{{approvals_count}}</span></td>
|
|
323
|
+
</tr>
|
|
324
|
+
</table>
|
|
344
325
|
</div>
|
|
345
326
|
<div class="section-content">
|
|
346
327
|
{{#each approvals}}
|
|
@@ -386,8 +367,13 @@
|
|
|
386
367
|
{{#if has_leadsets}}
|
|
387
368
|
<div class="section">
|
|
388
369
|
<div class="section-header">
|
|
389
|
-
<
|
|
390
|
-
|
|
370
|
+
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
|
371
|
+
<tr>
|
|
372
|
+
<td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✨</td>
|
|
373
|
+
<td style="vertical-align: middle;"><h2 class="section-title">Leadsets</h2></td>
|
|
374
|
+
<td style="vertical-align: middle; text-align: right;"><span class="section-count">{{leadsets_count}}</span></td>
|
|
375
|
+
</tr>
|
|
376
|
+
</table>
|
|
391
377
|
</div>
|
|
392
378
|
<div class="section-content">
|
|
393
379
|
{{#each leadsets}}
|
|
@@ -156,7 +156,7 @@
|
|
|
156
156
|
|
|
157
157
|
<div class="event-card">
|
|
158
158
|
<div class="event-badge">{{event_type_label}}</div>
|
|
159
|
-
<div class="event-title">{{object_name}}</div>
|
|
159
|
+
<div class="event-title">{{{object_name}}}</div>
|
|
160
160
|
{{#if details}}
|
|
161
161
|
<div class="event-details">
|
|
162
162
|
<table class="detail-table">
|
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
{{#each details}}
|
|
165
165
|
<td class="detail-cell">
|
|
166
166
|
<div class="detail-label">{{this.label}}</div>
|
|
167
|
-
<div class="detail-value">{{this.value}}</div>
|
|
167
|
+
<div class="detail-value">{{{this.value}}}</div>
|
|
168
168
|
</td>
|
|
169
169
|
{{/each}}
|
|
170
170
|
</tr>
|
|
@@ -51,13 +51,17 @@
|
|
|
51
51
|
|
|
52
52
|
.badge {
|
|
53
53
|
display: inline-block;
|
|
54
|
-
padding: 6px 14px;
|
|
55
54
|
background-color: rgba(255, 255, 255, 0.2);
|
|
56
55
|
border-radius: 20px;
|
|
56
|
+
margin-top: 10px;
|
|
57
|
+
padding: 0 14px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.badge-text {
|
|
57
61
|
font-size: 13px;
|
|
58
62
|
color: #ffffff;
|
|
59
63
|
font-weight: 600;
|
|
60
|
-
|
|
64
|
+
line-height: 28px;
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
.content {
|
|
@@ -80,9 +84,6 @@
|
|
|
80
84
|
}
|
|
81
85
|
|
|
82
86
|
.section-header {
|
|
83
|
-
display: flex;
|
|
84
|
-
justify-content: space-between;
|
|
85
|
-
align-items: center;
|
|
86
87
|
margin-bottom: 12px;
|
|
87
88
|
padding-bottom: 8px;
|
|
88
89
|
border-bottom: 1px solid #e5e7eb;
|
|
@@ -93,6 +94,7 @@
|
|
|
93
94
|
font-weight: bold;
|
|
94
95
|
color: #111827;
|
|
95
96
|
margin: 0;
|
|
97
|
+
line-height: 1;
|
|
96
98
|
}
|
|
97
99
|
|
|
98
100
|
.summary-text {
|
|
@@ -104,7 +106,6 @@
|
|
|
104
106
|
border-radius: 8px;
|
|
105
107
|
border-left: 4px solid #7c3aed;
|
|
106
108
|
margin-bottom: 20px;
|
|
107
|
-
white-space: pre-wrap;
|
|
108
109
|
word-wrap: break-word;
|
|
109
110
|
}
|
|
110
111
|
|
|
@@ -151,7 +152,14 @@
|
|
|
151
152
|
<img src="https://assets.heliyos.ai/heliyos-logo-white.png" alt="Heliyos AI">
|
|
152
153
|
<div class="header-title">{{organization_name}} Daily Briefing</div>
|
|
153
154
|
<div class="header-date">{{date}}</div>
|
|
154
|
-
<div class="badge"
|
|
155
|
+
<div class="badge">
|
|
156
|
+
<table border="0" cellpadding="0" cellspacing="0" style="margin: 0 auto;">
|
|
157
|
+
<tr>
|
|
158
|
+
<td style="vertical-align: middle; padding-right: 5px; font-size: 14px; line-height: 28px;">📊</td>
|
|
159
|
+
<td style="vertical-align: middle;" class="badge-text">Organization summary</td>
|
|
160
|
+
</tr>
|
|
161
|
+
</table>
|
|
162
|
+
</div>
|
|
155
163
|
</div>
|
|
156
164
|
|
|
157
165
|
<div class="content">
|
|
@@ -163,20 +171,30 @@
|
|
|
163
171
|
<!-- Summary Section -->
|
|
164
172
|
<div class="section">
|
|
165
173
|
<div class="section-header">
|
|
166
|
-
<
|
|
174
|
+
<table border="0" cellpadding="0" cellspacing="0">
|
|
175
|
+
<tr>
|
|
176
|
+
<td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">📋</td>
|
|
177
|
+
<td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Daily Overview</h2></td>
|
|
178
|
+
</tr>
|
|
179
|
+
</table>
|
|
167
180
|
</div>
|
|
168
|
-
<div class="summary-text">{{summary}}</div>
|
|
181
|
+
<div class="summary-text">{{{summary}}}</div>
|
|
169
182
|
</div>
|
|
170
183
|
|
|
171
184
|
<!-- Key Highlights -->
|
|
172
185
|
{{#if key_highlights}}
|
|
173
186
|
<div class="section">
|
|
174
187
|
<div class="section-header">
|
|
175
|
-
<
|
|
188
|
+
<table border="0" cellpadding="0" cellspacing="0">
|
|
189
|
+
<tr>
|
|
190
|
+
<td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">✨</td>
|
|
191
|
+
<td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Key Highlights</h2></td>
|
|
192
|
+
</tr>
|
|
193
|
+
</table>
|
|
176
194
|
</div>
|
|
177
195
|
<div class="list-container">
|
|
178
196
|
{{#each key_highlights}}
|
|
179
|
-
<div class="list-item">{{this}}</div>
|
|
197
|
+
<div class="list-item">{{{this}}}</div>
|
|
180
198
|
{{/each}}
|
|
181
199
|
</div>
|
|
182
200
|
</div>
|
|
@@ -186,11 +204,16 @@
|
|
|
186
204
|
{{#if action_items}}
|
|
187
205
|
<div class="section">
|
|
188
206
|
<div class="section-header">
|
|
189
|
-
<
|
|
207
|
+
<table border="0" cellpadding="0" cellspacing="0">
|
|
208
|
+
<tr>
|
|
209
|
+
<td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">✓</td>
|
|
210
|
+
<td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Action Items</h2></td>
|
|
211
|
+
</tr>
|
|
212
|
+
</table>
|
|
190
213
|
</div>
|
|
191
214
|
<div class="list-container">
|
|
192
215
|
{{#each action_items}}
|
|
193
|
-
<div class="list-item">{{this}}</div>
|
|
216
|
+
<div class="list-item">{{{this}}}</div>
|
|
194
217
|
{{/each}}
|
|
195
218
|
</div>
|
|
196
219
|
</div>
|
|
@@ -200,11 +223,16 @@
|
|
|
200
223
|
{{#if upcoming_priorities}}
|
|
201
224
|
<div class="section">
|
|
202
225
|
<div class="section-header">
|
|
203
|
-
<
|
|
226
|
+
<table border="0" cellpadding="0" cellspacing="0">
|
|
227
|
+
<tr>
|
|
228
|
+
<td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">🎯</td>
|
|
229
|
+
<td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Upcoming Priorities</h2></td>
|
|
230
|
+
</tr>
|
|
231
|
+
</table>
|
|
204
232
|
</div>
|
|
205
233
|
<div class="list-container">
|
|
206
234
|
{{#each upcoming_priorities}}
|
|
207
|
-
<div class="list-item">{{this}}</div>
|
|
235
|
+
<div class="list-item">{{{this}}}</div>
|
|
208
236
|
{{/each}}
|
|
209
237
|
</div>
|
|
210
238
|
</div>
|
|
@@ -226,4 +254,5 @@
|
|
|
226
254
|
</div>
|
|
227
255
|
</div>
|
|
228
256
|
</body>
|
|
257
|
+
|
|
229
258
|
</html>
|