@mobilizehub/payload-plugin 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/adapters/index.d.ts +1 -0
  2. package/dist/adapters/index.js +3 -0
  3. package/dist/adapters/index.js.map +1 -0
  4. package/dist/adapters/resend-adapter.d.ts +34 -0
  5. package/dist/adapters/resend-adapter.js +219 -0
  6. package/dist/adapters/resend-adapter.js.map +1 -0
  7. package/dist/collections/broadcasts/generateBroadcastsCollection.d.ts +3 -0
  8. package/dist/collections/broadcasts/generateBroadcastsCollection.js +241 -0
  9. package/dist/collections/broadcasts/generateBroadcastsCollection.js.map +1 -0
  10. package/dist/collections/emails/generateEmailsCollection.d.ts +3 -0
  11. package/dist/collections/emails/generateEmailsCollection.js +204 -0
  12. package/dist/collections/emails/generateEmailsCollection.js.map +1 -0
  13. package/dist/collections/emails/hooks/sync-status-from-activity.d.ts +5 -0
  14. package/dist/collections/emails/hooks/sync-status-from-activity.js +64 -0
  15. package/dist/collections/emails/hooks/sync-status-from-activity.js.map +1 -0
  16. package/dist/collections/unsubscribe-tokens/generateUnsubscribeTokens.d.ts +2 -0
  17. package/dist/collections/unsubscribe-tokens/generateUnsubscribeTokens.js +48 -0
  18. package/dist/collections/unsubscribe-tokens/generateUnsubscribeTokens.js.map +1 -0
  19. package/dist/components/broadcast-metrics-card.d.ts +7 -0
  20. package/dist/components/broadcast-metrics-card.js +159 -0
  21. package/dist/components/broadcast-metrics-card.js.map +1 -0
  22. package/dist/components/broadcast-send-modal.d.ts +9 -0
  23. package/dist/components/broadcast-send-modal.js +51 -0
  24. package/dist/components/broadcast-send-modal.js.map +1 -0
  25. package/dist/components/broadcast-send-test-drawer.d.ts +7 -0
  26. package/dist/components/broadcast-send-test-drawer.js +154 -0
  27. package/dist/components/broadcast-send-test-drawer.js.map +1 -0
  28. package/dist/components/email-activity.d.ts +4 -0
  29. package/dist/components/email-activity.js +359 -0
  30. package/dist/components/email-activity.js.map +1 -0
  31. package/dist/components/email-preview.d.ts +2 -0
  32. package/dist/components/email-preview.js +95 -0
  33. package/dist/components/email-preview.js.map +1 -0
  34. package/dist/endpoints/sendBroadcastHandler.d.ts +9 -0
  35. package/dist/endpoints/sendBroadcastHandler.js +107 -0
  36. package/dist/endpoints/sendBroadcastHandler.js.map +1 -0
  37. package/dist/endpoints/sendTestBroadcastHandler.d.ts +10 -0
  38. package/dist/endpoints/sendTestBroadcastHandler.js +143 -0
  39. package/dist/endpoints/sendTestBroadcastHandler.js.map +1 -0
  40. package/dist/endpoints/unsubscribeHandler.d.ts +9 -0
  41. package/dist/endpoints/unsubscribeHandler.js +153 -0
  42. package/dist/endpoints/unsubscribeHandler.js.map +1 -0
  43. package/dist/exports/client.d.ts +3 -1
  44. package/dist/exports/client.js +3 -0
  45. package/dist/exports/client.js.map +1 -1
  46. package/dist/exports/rsc.d.ts +2 -1
  47. package/dist/exports/rsc.js +2 -0
  48. package/dist/exports/rsc.js.map +1 -1
  49. package/dist/index.js +48 -3
  50. package/dist/index.js.map +1 -1
  51. package/dist/react/index.d.ts +1 -0
  52. package/dist/react/index.js +3 -0
  53. package/dist/react/index.js.map +1 -0
  54. package/dist/react/unsubscribe.d.ts +6 -0
  55. package/dist/react/unsubscribe.js +16 -0
  56. package/dist/react/unsubscribe.js.map +1 -0
  57. package/dist/tasks/sendBroadcastsTask.d.ts +11 -0
  58. package/dist/tasks/sendBroadcastsTask.js +196 -0
  59. package/dist/tasks/sendBroadcastsTask.js.map +1 -0
  60. package/dist/tasks/sendEmailTask.d.ts +9 -0
  61. package/dist/tasks/sendEmailTask.js +167 -0
  62. package/dist/tasks/sendEmailTask.js.map +1 -0
  63. package/dist/types/index.d.ts +124 -1
  64. package/dist/types/index.js.map +1 -1
  65. package/dist/utils/api-response.d.ts +72 -0
  66. package/dist/utils/api-response.js +66 -0
  67. package/dist/utils/api-response.js.map +1 -0
  68. package/dist/utils/email.d.ts +36 -0
  69. package/dist/utils/email.js +40 -0
  70. package/dist/utils/email.js.map +1 -0
  71. package/dist/utils/lexical.d.ts +13 -0
  72. package/dist/utils/lexical.js +27 -0
  73. package/dist/utils/lexical.js.map +1 -0
  74. package/dist/utils/unsubscribe-token.d.ts +67 -0
  75. package/dist/utils/unsubscribe-token.js +103 -0
  76. package/dist/utils/unsubscribe-token.js.map +1 -0
  77. package/package.json +20 -9
@@ -0,0 +1,154 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Button, Drawer, toast, useDocumentInfo, useFormModified, useModal } from '@payloadcms/ui';
4
+ import React, { useCallback, useState } from 'react';
5
+ import { isValidEmail } from '../utils/email.js';
6
+ const apiEndpoint = '/api/send-test-email';
7
+ export const SendTestBroadcastDrawer = ({ buttonLabel = 'Test email' })=>{
8
+ const [email, setEmail] = useState('');
9
+ const [isLoading, setIsLoading] = useState(false);
10
+ const [error, setError] = useState(null);
11
+ const { id, initialData } = useDocumentInfo();
12
+ const { toggleModal } = useModal();
13
+ const modified = useFormModified();
14
+ const isDraft = initialData?.status === 'draft';
15
+ const drawerSlug = 'test-broadcast-drawer';
16
+ const handleSendTest = useCallback(async ()=>{
17
+ setError(null);
18
+ if (!email) {
19
+ setError('Please enter an email address');
20
+ return;
21
+ }
22
+ if (!isValidEmail(email)) {
23
+ setError('Please enter a valid email address');
24
+ return;
25
+ }
26
+ setIsLoading(true);
27
+ try {
28
+ const response = await fetch(apiEndpoint, {
29
+ body: JSON.stringify({
30
+ broadcastId: id,
31
+ testEmail: email
32
+ }),
33
+ headers: {
34
+ 'Content-Type': 'application/json'
35
+ },
36
+ method: 'POST'
37
+ });
38
+ const data = await response.json();
39
+ if (response.ok) {
40
+ setEmail(''); // Clear the input
41
+ toast.success('Test broadcast sent successfully');
42
+ toggleModal(drawerSlug);
43
+ } else {
44
+ toast.error('Failed to send test broadcast');
45
+ setError(data.message || 'Failed to send test broadcast');
46
+ }
47
+ } catch {
48
+ toast.error('Failed to send test broadcast');
49
+ setError('An error occurred while sending the test broadcast');
50
+ } finally{
51
+ setIsLoading(false);
52
+ }
53
+ }, [
54
+ email,
55
+ id,
56
+ toggleModal
57
+ ]);
58
+ if (!id) {
59
+ return null;
60
+ }
61
+ return /*#__PURE__*/ _jsxs(_Fragment, {
62
+ children: [
63
+ /*#__PURE__*/ _jsx(Button, {
64
+ disabled: !isDraft || modified,
65
+ onClick: ()=>toggleModal(drawerSlug),
66
+ size: "medium",
67
+ children: buttonLabel
68
+ }),
69
+ /*#__PURE__*/ _jsx(Drawer, {
70
+ slug: drawerSlug,
71
+ title: "Send Test",
72
+ children: /*#__PURE__*/ _jsxs("form", {
73
+ className: "form",
74
+ noValidate: true,
75
+ onSubmit: handleSendTest,
76
+ children: [
77
+ /*#__PURE__*/ _jsxs("div", {
78
+ className: "render-fields",
79
+ children: [
80
+ error && /*#__PURE__*/ _jsx("div", {
81
+ className: "field-type",
82
+ style: {
83
+ backgroundColor: 'var(--theme-error-50)',
84
+ border: '1px solid var(--theme-error-500)',
85
+ borderRadius: '4px',
86
+ color: 'var(--theme-error-900)',
87
+ marginBottom: 'var(--base-unit)',
88
+ padding: '0.75rem'
89
+ },
90
+ children: error
91
+ }),
92
+ /*#__PURE__*/ _jsxs("div", {
93
+ className: "field-type text",
94
+ children: [
95
+ /*#__PURE__*/ _jsxs("label", {
96
+ className: "field-label",
97
+ htmlFor: "field-test-email",
98
+ children: [
99
+ "Email Address",
100
+ /*#__PURE__*/ _jsx("span", {
101
+ className: "required",
102
+ children: "*"
103
+ })
104
+ ]
105
+ }),
106
+ /*#__PURE__*/ _jsx("div", {
107
+ className: "field-type__wrap",
108
+ children: /*#__PURE__*/ _jsx("input", {
109
+ "aria-label": "Email address",
110
+ "data-rtl": "false",
111
+ disabled: isLoading,
112
+ id: "field-test-email",
113
+ name: "testEmail",
114
+ onChange: (e)=>{
115
+ setEmail(e.target.value);
116
+ setError(null);
117
+ },
118
+ placeholder: "name@example.com",
119
+ type: "email",
120
+ value: email
121
+ })
122
+ }),
123
+ /*#__PURE__*/ _jsx("div", {
124
+ className: "field-description field-description-testEmail",
125
+ children: "A test version of this broadcast will be sent to the email address above. The test email will be clearly marked as a test."
126
+ })
127
+ ]
128
+ })
129
+ ]
130
+ }),
131
+ /*#__PURE__*/ _jsx("div", {
132
+ className: "form-submit",
133
+ children: /*#__PURE__*/ _jsx("button", {
134
+ "aria-label": "Send test broadcast",
135
+ className: "btn btn--icon-style-without-border btn--size-medium btn--style-primary",
136
+ disabled: isLoading || !email,
137
+ type: "submit",
138
+ children: /*#__PURE__*/ _jsx("span", {
139
+ className: "btn__content",
140
+ children: /*#__PURE__*/ _jsx("span", {
141
+ className: "btn__label",
142
+ children: isLoading ? 'Sending...' : 'Send Test'
143
+ })
144
+ })
145
+ })
146
+ })
147
+ ]
148
+ })
149
+ })
150
+ ]
151
+ });
152
+ };
153
+
154
+ //# sourceMappingURL=broadcast-send-test-drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/broadcast-send-test-drawer.tsx"],"sourcesContent":["'use client'\n\nimport { Button, Drawer, toast, useDocumentInfo, useFormModified, useModal } from '@payloadcms/ui'\nimport React, { useCallback, useState } from 'react'\n\nimport { isValidEmail } from '../utils/email.js'\n\ninterface TestBroadcastDrawerProps {\n broadcastId?: string\n buttonLabel?: string\n}\n\nconst apiEndpoint = '/api/send-test-email'\n\nexport const SendTestBroadcastDrawer: React.FC<TestBroadcastDrawerProps> = ({\n buttonLabel = 'Test email',\n}) => {\n const [email, setEmail] = useState('')\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<null | string>(null)\n const { id, initialData } = useDocumentInfo()\n const { toggleModal } = useModal()\n const modified = useFormModified()\n\n const isDraft = initialData?.status === 'draft'\n\n const drawerSlug = 'test-broadcast-drawer'\n\n const handleSendTest = useCallback(async () => {\n setError(null)\n\n if (!email) {\n setError('Please enter an email address')\n return\n }\n\n if (!isValidEmail(email)) {\n setError('Please enter a valid email address')\n return\n }\n\n setIsLoading(true)\n\n try {\n const response = await fetch(apiEndpoint, {\n body: JSON.stringify({\n broadcastId: id,\n testEmail: email,\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n const data = await response.json()\n\n if (response.ok) {\n setEmail('') // Clear the input\n toast.success('Test broadcast sent successfully')\n toggleModal(drawerSlug)\n } else {\n toast.error('Failed to send test broadcast')\n setError(data.message || 'Failed to send test broadcast')\n }\n } catch {\n toast.error('Failed to send test broadcast')\n setError('An error occurred while sending the test broadcast')\n } finally {\n setIsLoading(false)\n }\n }, [email, id, toggleModal])\n\n if (!id) {\n return null\n }\n\n return (\n <>\n <Button disabled={!isDraft || modified} onClick={() => toggleModal(drawerSlug)} size=\"medium\">\n {buttonLabel}\n </Button>\n\n <Drawer slug={drawerSlug} title=\"Send Test\">\n <form className=\"form\" noValidate onSubmit={handleSendTest}>\n <div className=\"render-fields\">\n {error && (\n <div\n className=\"field-type\"\n style={{\n backgroundColor: 'var(--theme-error-50)',\n border: '1px solid var(--theme-error-500)',\n borderRadius: '4px',\n color: 'var(--theme-error-900)',\n marginBottom: 'var(--base-unit)',\n padding: '0.75rem',\n }}\n >\n {error}\n </div>\n )}\n\n <div className=\"field-type text\">\n <label className=\"field-label\" htmlFor=\"field-test-email\">\n Email Address\n <span className=\"required\">*</span>\n </label>\n <div className=\"field-type__wrap\">\n <input\n aria-label=\"Email address\"\n data-rtl=\"false\"\n disabled={isLoading}\n id=\"field-test-email\"\n name=\"testEmail\"\n onChange={(e) => {\n setEmail(e.target.value)\n setError(null)\n }}\n placeholder=\"name@example.com\"\n type=\"email\"\n value={email}\n />\n </div>\n <div className=\"field-description field-description-testEmail\">\n A test version of this broadcast will be sent to the email address above. The test\n email will be clearly marked as a test.\n </div>\n </div>\n </div>\n\n <div className=\"form-submit\">\n <button\n aria-label=\"Send test broadcast\"\n className=\"btn btn--icon-style-without-border btn--size-medium btn--style-primary\"\n disabled={isLoading || !email}\n type=\"submit\"\n >\n <span className=\"btn__content\">\n <span className=\"btn__label\">{isLoading ? 'Sending...' : 'Send Test'}</span>\n </span>\n </button>\n </div>\n </form>\n </Drawer>\n </>\n )\n}\n"],"names":["Button","Drawer","toast","useDocumentInfo","useFormModified","useModal","React","useCallback","useState","isValidEmail","apiEndpoint","SendTestBroadcastDrawer","buttonLabel","email","setEmail","isLoading","setIsLoading","error","setError","id","initialData","toggleModal","modified","isDraft","status","drawerSlug","handleSendTest","response","fetch","body","JSON","stringify","broadcastId","testEmail","headers","method","data","json","ok","success","message","disabled","onClick","size","slug","title","form","className","noValidate","onSubmit","div","style","backgroundColor","border","borderRadius","color","marginBottom","padding","label","htmlFor","span","input","aria-label","data-rtl","name","onChange","e","target","value","placeholder","type","button"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const EmailActivityField: ({ data }: {
3
+ data: Record<string, unknown>;
4
+ }) => React.JSX.Element;
@@ -0,0 +1,359 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ function getIconForEventType(type) {
4
+ switch(type){
5
+ case 'bounced':
6
+ return /*#__PURE__*/ _jsxs("svg", {
7
+ fill: "none",
8
+ height: "14",
9
+ stroke: "var(--theme-elevation-500)",
10
+ strokeLinecap: "round",
11
+ strokeLinejoin: "round",
12
+ strokeWidth: "2",
13
+ viewBox: "0 0 24 24",
14
+ width: "14",
15
+ xmlns: "http://www.w3.org/2000/svg",
16
+ children: [
17
+ /*#__PURE__*/ _jsx("path", {
18
+ d: "M11.1 7.1a16.55 16.55 0 0 1 10.9 4"
19
+ }),
20
+ /*#__PURE__*/ _jsx("path", {
21
+ d: "M12 12a12.6 12.6 0 0 1-8.7 5"
22
+ }),
23
+ /*#__PURE__*/ _jsx("path", {
24
+ d: "M16.8 13.6a16.55 16.55 0 0 1-9 7.5"
25
+ }),
26
+ /*#__PURE__*/ _jsx("path", {
27
+ d: "M20.7 17a12.8 12.8 0 0 0-8.7-5 13.3 13.3 0 0 1 0-10"
28
+ }),
29
+ /*#__PURE__*/ _jsx("path", {
30
+ d: "M6.3 3.8a16.55 16.55 0 0 0 1.9 11.5"
31
+ }),
32
+ /*#__PURE__*/ _jsx("circle", {
33
+ cx: "12",
34
+ cy: "12",
35
+ r: "10"
36
+ })
37
+ ]
38
+ });
39
+ case 'canceled':
40
+ return /*#__PURE__*/ _jsxs("svg", {
41
+ fill: "none",
42
+ height: "14",
43
+ stroke: "var(--theme-elevation-500)",
44
+ strokeLinecap: "round",
45
+ strokeLinejoin: "round",
46
+ strokeWidth: "2",
47
+ viewBox: "0 0 24 24",
48
+ width: "14",
49
+ xmlns: "http://www.w3.org/2000/svg",
50
+ children: [
51
+ /*#__PURE__*/ _jsx("circle", {
52
+ cx: "12",
53
+ cy: "12",
54
+ r: "10"
55
+ }),
56
+ /*#__PURE__*/ _jsx("line", {
57
+ x1: "15",
58
+ x2: "9",
59
+ y1: "9",
60
+ y2: "15"
61
+ }),
62
+ /*#__PURE__*/ _jsx("line", {
63
+ x1: "9",
64
+ x2: "15",
65
+ y1: "9",
66
+ y2: "15"
67
+ })
68
+ ]
69
+ });
70
+ case 'clicked':
71
+ return /*#__PURE__*/ _jsx("svg", {
72
+ fill: "none",
73
+ height: "14",
74
+ stroke: "var(--theme-elevation-500)",
75
+ strokeLinecap: "round",
76
+ strokeLinejoin: "round",
77
+ strokeWidth: "2",
78
+ viewBox: "0 0 24 24",
79
+ width: "14",
80
+ xmlns: "http://www.w3.org/2000/svg",
81
+ children: /*#__PURE__*/ _jsx("path", {
82
+ d: "M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z"
83
+ })
84
+ });
85
+ case 'complained':
86
+ return /*#__PURE__*/ _jsxs("svg", {
87
+ fill: "none",
88
+ height: "14",
89
+ stroke: "var(--theme-elevation-500)",
90
+ strokeLinecap: "round",
91
+ strokeLinejoin: "round",
92
+ strokeWidth: "2",
93
+ viewBox: "0 0 24 24",
94
+ width: "14",
95
+ xmlns: "http://www.w3.org/2000/svg",
96
+ children: [
97
+ /*#__PURE__*/ _jsx("path", {
98
+ d: "M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719"
99
+ }),
100
+ /*#__PURE__*/ _jsx("path", {
101
+ d: "M12 8v4"
102
+ }),
103
+ /*#__PURE__*/ _jsx("path", {
104
+ d: "M12 16h.01"
105
+ })
106
+ ]
107
+ });
108
+ case 'delivered':
109
+ return /*#__PURE__*/ _jsxs("svg", {
110
+ fill: "none",
111
+ height: "14",
112
+ stroke: "var(--theme-elevation-500)",
113
+ strokeLinecap: "round",
114
+ strokeLinejoin: "round",
115
+ strokeWidth: "2",
116
+ viewBox: "0 0 24 24",
117
+ width: "14",
118
+ xmlns: "http://www.w3.org/2000/svg",
119
+ children: [
120
+ /*#__PURE__*/ _jsx("path", {
121
+ d: "M22 17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9.5C2 7 4 5 6.5 5H18c2.2 0 4 1.8 4 4v8Z"
122
+ }),
123
+ /*#__PURE__*/ _jsx("polyline", {
124
+ points: "15,9 18,9 18,11"
125
+ }),
126
+ /*#__PURE__*/ _jsx("path", {
127
+ d: "M6.5 5C9 5 11 7 11 9.5V17a2 2 0 0 1-2 2"
128
+ }),
129
+ /*#__PURE__*/ _jsx("line", {
130
+ x1: "6",
131
+ x2: "7",
132
+ y1: "10",
133
+ y2: "10"
134
+ })
135
+ ]
136
+ });
137
+ case 'delivery_delayed':
138
+ return /*#__PURE__*/ _jsxs("svg", {
139
+ fill: "none",
140
+ height: "14",
141
+ stroke: "var(--theme-elevation-500)",
142
+ strokeLinecap: "round",
143
+ strokeLinejoin: "round",
144
+ strokeWidth: "2",
145
+ viewBox: "0 0 24 24",
146
+ width: "14",
147
+ xmlns: "http://www.w3.org/2000/svg",
148
+ children: [
149
+ /*#__PURE__*/ _jsx("path", {
150
+ d: "M12 6v6l4 2"
151
+ }),
152
+ /*#__PURE__*/ _jsx("path", {
153
+ d: "M20 12v5"
154
+ }),
155
+ /*#__PURE__*/ _jsx("path", {
156
+ d: "M20 21h.01"
157
+ }),
158
+ /*#__PURE__*/ _jsx("path", {
159
+ d: "M21.25 8.2A10 10 0 1 0 16 21.16"
160
+ })
161
+ ]
162
+ });
163
+ case 'failed':
164
+ return /*#__PURE__*/ _jsxs("svg", {
165
+ fill: "none",
166
+ height: "14",
167
+ stroke: "var(--theme-elevation-500)",
168
+ strokeLinecap: "round",
169
+ strokeLinejoin: "round",
170
+ strokeWidth: "2",
171
+ viewBox: "0 0 24 24",
172
+ width: "14",
173
+ xmlns: "http://www.w3.org/2000/svg",
174
+ children: [
175
+ /*#__PURE__*/ _jsx("path", {
176
+ d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"
177
+ }),
178
+ /*#__PURE__*/ _jsx("path", {
179
+ d: "M12 9v4"
180
+ }),
181
+ /*#__PURE__*/ _jsx("path", {
182
+ d: "M12 17h.01"
183
+ })
184
+ ]
185
+ });
186
+ case 'opened':
187
+ return /*#__PURE__*/ _jsxs("svg", {
188
+ fill: "none",
189
+ height: "14",
190
+ stroke: "var(--theme-elevation-500)",
191
+ strokeLinecap: "round",
192
+ strokeLinejoin: "round",
193
+ strokeWidth: "2",
194
+ viewBox: "0 0 24 24",
195
+ width: "14",
196
+ xmlns: "http://www.w3.org/2000/svg",
197
+ children: [
198
+ /*#__PURE__*/ _jsx("path", {
199
+ d: "M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z"
200
+ }),
201
+ /*#__PURE__*/ _jsx("path", {
202
+ d: "m22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10"
203
+ })
204
+ ]
205
+ });
206
+ case 'queued':
207
+ return /*#__PURE__*/ _jsxs("svg", {
208
+ fill: "none",
209
+ height: "14",
210
+ stroke: "var(--theme-elevation-500)",
211
+ strokeLinecap: "round",
212
+ strokeLinejoin: "round",
213
+ strokeWidth: "2",
214
+ viewBox: "0 0 24 24",
215
+ width: "14",
216
+ xmlns: "http://www.w3.org/2000/svg",
217
+ children: [
218
+ /*#__PURE__*/ _jsx("path", {
219
+ d: "M3 5h.01"
220
+ }),
221
+ /*#__PURE__*/ _jsx("path", {
222
+ d: "M3 12h.01"
223
+ }),
224
+ /*#__PURE__*/ _jsx("path", {
225
+ d: "M3 19h.01"
226
+ }),
227
+ /*#__PURE__*/ _jsx("path", {
228
+ d: "M8 5h13"
229
+ }),
230
+ /*#__PURE__*/ _jsx("path", {
231
+ d: "M8 12h13"
232
+ }),
233
+ /*#__PURE__*/ _jsx("path", {
234
+ d: "M8 19h13"
235
+ })
236
+ ]
237
+ });
238
+ case 'sent':
239
+ return /*#__PURE__*/ _jsxs("svg", {
240
+ fill: "none",
241
+ height: "14",
242
+ stroke: "var(--theme-elevation-500)",
243
+ strokeLinecap: "round",
244
+ strokeLinejoin: "round",
245
+ strokeWidth: "2",
246
+ viewBox: "0 0 24 24",
247
+ width: "14",
248
+ xmlns: "http://www.w3.org/2000/svg",
249
+ children: [
250
+ /*#__PURE__*/ _jsx("path", {
251
+ d: "M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z"
252
+ }),
253
+ /*#__PURE__*/ _jsx("path", {
254
+ d: "M6 12h16"
255
+ })
256
+ ]
257
+ });
258
+ default:
259
+ return null;
260
+ }
261
+ }
262
+ export const EmailActivityField = ({ data })=>{
263
+ const activity = data.activity;
264
+ return /*#__PURE__*/ _jsxs("div", {
265
+ style: {
266
+ paddingTop: '1rem'
267
+ },
268
+ children: [
269
+ /*#__PURE__*/ _jsx("div", {
270
+ style: {
271
+ marginBottom: '1.5rem'
272
+ },
273
+ children: /*#__PURE__*/ _jsx("p", {
274
+ children: "Email Events"
275
+ })
276
+ }),
277
+ (!activity || activity.length === 0) && /*#__PURE__*/ _jsx("div", {
278
+ children: /*#__PURE__*/ _jsx("p", {
279
+ style: {
280
+ color: 'var(--theme-text-secondary-color)',
281
+ fontSize: '12px'
282
+ },
283
+ children: "No email events recorded."
284
+ })
285
+ }),
286
+ activity?.map((event, index)=>/*#__PURE__*/ _jsxs("div", {
287
+ style: {
288
+ alignItems: 'flex-start',
289
+ display: 'flex',
290
+ position: 'relative'
291
+ },
292
+ children: [
293
+ /*#__PURE__*/ _jsxs("div", {
294
+ style: {
295
+ alignItems: 'center',
296
+ display: 'flex',
297
+ flexDirection: 'column',
298
+ marginRight: '16px'
299
+ },
300
+ children: [
301
+ /*#__PURE__*/ _jsx("div", {
302
+ style: {
303
+ alignItems: 'center',
304
+ border: '1px solid var(--theme-border-color)',
305
+ borderRadius: 'var(--style-radius-m)',
306
+ display: 'flex',
307
+ fontSize: '10px',
308
+ height: '34px',
309
+ justifyContent: 'center',
310
+ width: '34px',
311
+ zIndex: 1
312
+ },
313
+ children: getIconForEventType(event.type)
314
+ }),
315
+ index < activity.length - 1 && /*#__PURE__*/ _jsx("div", {
316
+ style: {
317
+ backgroundColor: 'var(--theme-border-color)',
318
+ height: '40px',
319
+ width: '1px'
320
+ }
321
+ })
322
+ ]
323
+ }),
324
+ /*#__PURE__*/ _jsxs("div", {
325
+ style: {
326
+ marginTop: '-2px',
327
+ paddingBottom: '16px'
328
+ },
329
+ children: [
330
+ /*#__PURE__*/ _jsx("p", {
331
+ style: {
332
+ fontSize: '12px',
333
+ fontWeight: 'bold',
334
+ textTransform: 'capitalize'
335
+ },
336
+ children: event.type.replace('_', ' ')
337
+ }),
338
+ /*#__PURE__*/ _jsx("p", {
339
+ style: {
340
+ color: 'var(--theme-text-secondary-color)',
341
+ fontSize: '12px'
342
+ },
343
+ children: new Date(event.timestamp).toLocaleString('en-US', {
344
+ day: 'numeric',
345
+ hour: '2-digit',
346
+ minute: '2-digit',
347
+ month: 'long',
348
+ year: 'numeric'
349
+ })
350
+ })
351
+ ]
352
+ })
353
+ ]
354
+ }, event.id ?? index))
355
+ ]
356
+ });
357
+ };
358
+
359
+ //# sourceMappingURL=email-activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/email-activity.tsx"],"sourcesContent":["import React from 'react'\n\ninterface EmailEvent {\n id?: string\n timestamp: string\n type:\n | 'bounced'\n | 'canceled'\n | 'clicked'\n | 'complained'\n | 'delivered'\n | 'delivery_delayed'\n | 'failed'\n | 'opened'\n | 'queued'\n | 'sent'\n}\n\nfunction getIconForEventType(type: EmailEvent['type']): React.ReactNode {\n switch (type) {\n case 'bounced':\n return (\n <svg\n fill=\"none\"\n height=\"14\"\n stroke=\"var(--theme-elevation-500)\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M11.1 7.1a16.55 16.55 0 0 1 10.9 4\" />\n <path d=\"M12 12a12.6 12.6 0 0 1-8.7 5\" />\n <path d=\"M16.8 13.6a16.55 16.55 0 0 1-9 7.5\" />\n <path d=\"M20.7 17a12.8 12.8 0 0 0-8.7-5 13.3 13.3 0 0 1 0-10\" />\n <path d=\"M6.3 3.8a16.55 16.55 0 0 0 1.9 11.5\" />\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n </svg>\n )\n case 'canceled':\n return (\n <svg\n fill=\"none\"\n height=\"14\"\n stroke=\"var(--theme-elevation-500)\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" x2=\"9\" y1=\"9\" y2=\"15\" />\n <line x1=\"9\" x2=\"15\" y1=\"9\" y2=\"15\" />\n </svg>\n )\n case 'clicked':\n return (\n <svg\n fill=\"none\"\n height=\"14\"\n stroke=\"var(--theme-elevation-500)\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z\" />\n </svg>\n )\n case 'complained':\n return (\n <svg\n fill=\"none\"\n height=\"14\"\n stroke=\"var(--theme-elevation-500)\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n </svg>\n )\n case 'delivered':\n return (\n <svg\n fill=\"none\"\n height=\"14\"\n stroke=\"var(--theme-elevation-500)\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M22 17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9.5C2 7 4 5 6.5 5H18c2.2 0 4 1.8 4 4v8Z\" />\n <polyline points=\"15,9 18,9 18,11\" />\n <path d=\"M6.5 5C9 5 11 7 11 9.5V17a2 2 0 0 1-2 2\" />\n <line x1=\"6\" x2=\"7\" y1=\"10\" y2=\"10\" />\n </svg>\n )\n case 'delivery_delayed':\n return (\n <svg\n fill=\"none\"\n height=\"14\"\n stroke=\"var(--theme-elevation-500)\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M12 6v6l4 2\" />\n <path d=\"M20 12v5\" />\n <path d=\"M20 21h.01\" />\n <path d=\"M21.25 8.2A10 10 0 1 0 16 21.16\" />\n </svg>\n )\n case 'failed':\n return (\n <svg\n fill=\"none\"\n height=\"14\"\n stroke=\"var(--theme-elevation-500)\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n )\n case 'opened':\n return (\n <svg\n fill=\"none\"\n height=\"14\"\n stroke=\"var(--theme-elevation-500)\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z\" />\n <path d=\"m22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10\" />\n </svg>\n )\n case 'queued':\n return (\n <svg\n fill=\"none\"\n height=\"14\"\n stroke=\"var(--theme-elevation-500)\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M3 5h.01\" />\n <path d=\"M3 12h.01\" />\n <path d=\"M3 19h.01\" />\n <path d=\"M8 5h13\" />\n <path d=\"M8 12h13\" />\n <path d=\"M8 19h13\" />\n </svg>\n )\n case 'sent':\n return (\n <svg\n fill=\"none\"\n height=\"14\"\n stroke=\"var(--theme-elevation-500)\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n width=\"14\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z\" />\n <path d=\"M6 12h16\" />\n </svg>\n )\n default:\n return null\n }\n}\n\nexport const EmailActivityField = ({ data }: { data: Record<string, unknown> }) => {\n const activity = data.activity as EmailEvent[] | undefined\n\n return (\n <div style={{ paddingTop: '1rem' }}>\n <div style={{ marginBottom: '1.5rem' }}>\n <p>Email Events</p>\n </div>\n {(!activity || activity.length === 0) && (\n <div>\n <p style={{ color: 'var(--theme-text-secondary-color)', fontSize: '12px' }}>\n No email events recorded.\n </p>\n </div>\n )}\n {activity?.map((event, index) => (\n <div\n key={event.id ?? index}\n style={{ alignItems: 'flex-start', display: 'flex', position: 'relative' }}\n >\n <div\n style={{\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n marginRight: '16px',\n }}\n >\n <div\n style={{\n alignItems: 'center',\n border: '1px solid var(--theme-border-color)',\n borderRadius: 'var(--style-radius-m)',\n display: 'flex',\n fontSize: '10px',\n height: '34px',\n justifyContent: 'center',\n width: '34px',\n zIndex: 1,\n }}\n >\n {getIconForEventType(event.type)}\n </div>\n {index < activity.length - 1 && (\n <div\n style={{\n backgroundColor: 'var(--theme-border-color)',\n height: '40px',\n width: '1px',\n }}\n />\n )}\n </div>\n <div style={{ marginTop: '-2px', paddingBottom: '16px' }}>\n <p style={{ fontSize: '12px', fontWeight: 'bold', textTransform: 'capitalize' }}>\n {event.type.replace('_', ' ')}\n </p>\n <p style={{ color: 'var(--theme-text-secondary-color)', fontSize: '12px' }}>\n {new Date(event.timestamp).toLocaleString('en-US', {\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n month: 'long',\n year: 'numeric',\n })}\n </p>\n </div>\n </div>\n ))}\n </div>\n )\n}\n"],"names":["React","getIconForEventType","type","svg","fill","height","stroke","strokeLinecap","strokeLinejoin","strokeWidth","viewBox","width","xmlns","path","d","circle","cx","cy","r","line","x1","x2","y1","y2","polyline","points","EmailActivityField","data","activity","div","style","paddingTop","marginBottom","p","length","color","fontSize","map","event","index","alignItems","display","position","flexDirection","marginRight","border","borderRadius","justifyContent","zIndex","backgroundColor","marginTop","paddingBottom","fontWeight","textTransform","replace","Date","timestamp","toLocaleString","day","hour","minute","month","year","id"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const EmailPreviewField: React.FC;