@happyvertical/smrt-messages 0.30.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 (153) hide show
  1. package/AGENTS.md +31 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +103 -0
  5. package/dist/__smrt-register__.d.ts +2 -0
  6. package/dist/__smrt-register__.d.ts.map +1 -0
  7. package/dist/collections/AccountCollection.d.ts +42 -0
  8. package/dist/collections/AccountCollection.d.ts.map +1 -0
  9. package/dist/collections/AttachmentCollection.d.ts +67 -0
  10. package/dist/collections/AttachmentCollection.d.ts.map +1 -0
  11. package/dist/collections/BlacklistCollection.d.ts +14 -0
  12. package/dist/collections/BlacklistCollection.d.ts.map +1 -0
  13. package/dist/collections/EmailAccountCollection.d.ts +74 -0
  14. package/dist/collections/EmailAccountCollection.d.ts.map +1 -0
  15. package/dist/collections/EmailAttachmentCollection.d.ts +38 -0
  16. package/dist/collections/EmailAttachmentCollection.d.ts.map +1 -0
  17. package/dist/collections/EmailCollection.d.ts +81 -0
  18. package/dist/collections/EmailCollection.d.ts.map +1 -0
  19. package/dist/collections/EmailFolderCollection.d.ts +85 -0
  20. package/dist/collections/EmailFolderCollection.d.ts.map +1 -0
  21. package/dist/collections/MessageCollection.d.ts +74 -0
  22. package/dist/collections/MessageCollection.d.ts.map +1 -0
  23. package/dist/collections/WhitelistCollection.d.ts +18 -0
  24. package/dist/collections/WhitelistCollection.d.ts.map +1 -0
  25. package/dist/index.d.ts +27 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +3068 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/manifest.json +10576 -0
  30. package/dist/models/Account.d.ts +47 -0
  31. package/dist/models/Account.d.ts.map +1 -0
  32. package/dist/models/Attachment.d.ts +48 -0
  33. package/dist/models/Attachment.d.ts.map +1 -0
  34. package/dist/models/Blacklist.d.ts +21 -0
  35. package/dist/models/Blacklist.d.ts.map +1 -0
  36. package/dist/models/Email.d.ts +98 -0
  37. package/dist/models/Email.d.ts.map +1 -0
  38. package/dist/models/EmailAccount.d.ts +65 -0
  39. package/dist/models/EmailAccount.d.ts.map +1 -0
  40. package/dist/models/EmailAttachment.d.ts +19 -0
  41. package/dist/models/EmailAttachment.d.ts.map +1 -0
  42. package/dist/models/EmailFolder.d.ts +65 -0
  43. package/dist/models/EmailFolder.d.ts.map +1 -0
  44. package/dist/models/Message.d.ts +105 -0
  45. package/dist/models/Message.d.ts.map +1 -0
  46. package/dist/models/SlackAccount.d.ts +13 -0
  47. package/dist/models/SlackAccount.d.ts.map +1 -0
  48. package/dist/models/SlackMessage.d.ts +34 -0
  49. package/dist/models/SlackMessage.d.ts.map +1 -0
  50. package/dist/models/Tweet.d.ts +31 -0
  51. package/dist/models/Tweet.d.ts.map +1 -0
  52. package/dist/models/TwitterAccount.d.ts +12 -0
  53. package/dist/models/TwitterAccount.d.ts.map +1 -0
  54. package/dist/models/Whitelist.d.ts +21 -0
  55. package/dist/models/Whitelist.d.ts.map +1 -0
  56. package/dist/playground.d.ts +2 -0
  57. package/dist/playground.d.ts.map +1 -0
  58. package/dist/playground.js +176 -0
  59. package/dist/playground.js.map +1 -0
  60. package/dist/senders/EmailSender.d.ts +13 -0
  61. package/dist/senders/EmailSender.d.ts.map +1 -0
  62. package/dist/senders/SlackSender.d.ts +11 -0
  63. package/dist/senders/SlackSender.d.ts.map +1 -0
  64. package/dist/senders/TweetSender.d.ts +11 -0
  65. package/dist/senders/TweetSender.d.ts.map +1 -0
  66. package/dist/smrt-knowledge.json +4234 -0
  67. package/dist/svelte/components/AccountAvatar.svelte +107 -0
  68. package/dist/svelte/components/AccountAvatar.svelte.d.ts +12 -0
  69. package/dist/svelte/components/AccountAvatar.svelte.d.ts.map +1 -0
  70. package/dist/svelte/components/AccountCard.svelte +173 -0
  71. package/dist/svelte/components/AccountCard.svelte.d.ts +12 -0
  72. package/dist/svelte/components/AccountCard.svelte.d.ts.map +1 -0
  73. package/dist/svelte/components/AccountList.svelte +90 -0
  74. package/dist/svelte/components/AccountList.svelte.d.ts +12 -0
  75. package/dist/svelte/components/AccountList.svelte.d.ts.map +1 -0
  76. package/dist/svelte/components/AttachmentChip.svelte +99 -0
  77. package/dist/svelte/components/AttachmentChip.svelte.d.ts +12 -0
  78. package/dist/svelte/components/AttachmentChip.svelte.d.ts.map +1 -0
  79. package/dist/svelte/components/AttachmentUpload.svelte +160 -0
  80. package/dist/svelte/components/AttachmentUpload.svelte.d.ts +11 -0
  81. package/dist/svelte/components/AttachmentUpload.svelte.d.ts.map +1 -0
  82. package/dist/svelte/components/ComposeForm.svelte +387 -0
  83. package/dist/svelte/components/ComposeForm.svelte.d.ts +13 -0
  84. package/dist/svelte/components/ComposeForm.svelte.d.ts.map +1 -0
  85. package/dist/svelte/components/EmailAccountManager.svelte +690 -0
  86. package/dist/svelte/components/EmailAccountManager.svelte.d.ts +15 -0
  87. package/dist/svelte/components/EmailAccountManager.svelte.d.ts.map +1 -0
  88. package/dist/svelte/components/EmailFilterManager.svelte +687 -0
  89. package/dist/svelte/components/EmailFilterManager.svelte.d.ts +14 -0
  90. package/dist/svelte/components/EmailFilterManager.svelte.d.ts.map +1 -0
  91. package/dist/svelte/components/FolderNav.svelte +171 -0
  92. package/dist/svelte/components/FolderNav.svelte.d.ts +11 -0
  93. package/dist/svelte/components/FolderNav.svelte.d.ts.map +1 -0
  94. package/dist/svelte/components/ForwardForm.svelte +166 -0
  95. package/dist/svelte/components/ForwardForm.svelte.d.ts +10 -0
  96. package/dist/svelte/components/ForwardForm.svelte.d.ts.map +1 -0
  97. package/dist/svelte/components/MessageCard.svelte +336 -0
  98. package/dist/svelte/components/MessageCard.svelte.d.ts +20 -0
  99. package/dist/svelte/components/MessageCard.svelte.d.ts.map +1 -0
  100. package/dist/svelte/components/MessageDetail.svelte +309 -0
  101. package/dist/svelte/components/MessageDetail.svelte.d.ts +18 -0
  102. package/dist/svelte/components/MessageDetail.svelte.d.ts.map +1 -0
  103. package/dist/svelte/components/MessageFilters.svelte +228 -0
  104. package/dist/svelte/components/MessageFilters.svelte.d.ts +13 -0
  105. package/dist/svelte/components/MessageFilters.svelte.d.ts.map +1 -0
  106. package/dist/svelte/components/MessageList.svelte +101 -0
  107. package/dist/svelte/components/MessageList.svelte.d.ts +23 -0
  108. package/dist/svelte/components/MessageList.svelte.d.ts.map +1 -0
  109. package/dist/svelte/components/MessageStatusIndicator.svelte +82 -0
  110. package/dist/svelte/components/MessageStatusIndicator.svelte.d.ts +11 -0
  111. package/dist/svelte/components/MessageStatusIndicator.svelte.d.ts.map +1 -0
  112. package/dist/svelte/components/MessageToolbar.svelte +131 -0
  113. package/dist/svelte/components/MessageToolbar.svelte.d.ts +14 -0
  114. package/dist/svelte/components/MessageToolbar.svelte.d.ts.map +1 -0
  115. package/dist/svelte/components/MessageTypeBadge.svelte +59 -0
  116. package/dist/svelte/components/MessageTypeBadge.svelte.d.ts +9 -0
  117. package/dist/svelte/components/MessageTypeBadge.svelte.d.ts.map +1 -0
  118. package/dist/svelte/components/RecipientInput.svelte +150 -0
  119. package/dist/svelte/components/RecipientInput.svelte.d.ts +11 -0
  120. package/dist/svelte/components/RecipientInput.svelte.d.ts.map +1 -0
  121. package/dist/svelte/components/ReplyForm.svelte +159 -0
  122. package/dist/svelte/components/ReplyForm.svelte.d.ts +11 -0
  123. package/dist/svelte/components/ReplyForm.svelte.d.ts.map +1 -0
  124. package/dist/svelte/components/SendStatusBadge.svelte +64 -0
  125. package/dist/svelte/components/SendStatusBadge.svelte.d.ts +8 -0
  126. package/dist/svelte/components/SendStatusBadge.svelte.d.ts.map +1 -0
  127. package/dist/svelte/components/ThreadView.svelte +240 -0
  128. package/dist/svelte/components/ThreadView.svelte.d.ts +12 -0
  129. package/dist/svelte/components/ThreadView.svelte.d.ts.map +1 -0
  130. package/dist/svelte/i18n.d.ts +42 -0
  131. package/dist/svelte/i18n.d.ts.map +1 -0
  132. package/dist/svelte/i18n.js +60 -0
  133. package/dist/svelte/i18n.messages.d.ts +32 -0
  134. package/dist/svelte/i18n.messages.d.ts.map +1 -0
  135. package/dist/svelte/i18n.messages.js +46 -0
  136. package/dist/svelte/index.d.ts +54 -0
  137. package/dist/svelte/index.d.ts.map +1 -0
  138. package/dist/svelte/index.js +44 -0
  139. package/dist/svelte/playground.d.ts +341 -0
  140. package/dist/svelte/playground.d.ts.map +1 -0
  141. package/dist/svelte/playground.js +171 -0
  142. package/dist/svelte/types.d.ts +195 -0
  143. package/dist/svelte/types.d.ts.map +1 -0
  144. package/dist/svelte/types.js +6 -0
  145. package/dist/types.d.ts +316 -0
  146. package/dist/types.d.ts.map +1 -0
  147. package/dist/types.js +2 -0
  148. package/dist/types.js.map +1 -0
  149. package/dist/ui.d.ts +4 -0
  150. package/dist/ui.d.ts.map +1 -0
  151. package/dist/ui.js +103 -0
  152. package/dist/ui.js.map +1 -0
  153. package/package.json +104 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReplyForm.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ReplyForm.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,KAAK;IACpB,eAAe,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAoED,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -0,0 +1,64 @@
1
+ <script lang="ts" module>
2
+ export interface Props {
3
+ status: 'draft' | 'pending' | 'sending' | 'sent' | 'failed' | 'scheduled';
4
+ size?: 'sm' | 'md';
5
+ }
6
+ </script>
7
+
8
+ <script lang="ts">
9
+ let { status, size = 'sm' }: Props = $props();
10
+
11
+ const statusConfig = $derived.by(() => {
12
+ switch (status) {
13
+ case 'draft':
14
+ return { label: 'Draft', color: 'var(--smrt-color-outline, #79747e)', icon: '✎' };
15
+ case 'pending':
16
+ return { label: 'Pending', color: 'var(--smrt-color-tertiary, #7d5260)', icon: '◷' };
17
+ case 'sending':
18
+ return { label: 'Sending', color: 'var(--smrt-color-primary, #6750a4)', icon: '↑' };
19
+ case 'sent':
20
+ return { label: 'Sent', color: 'var(--smrt-color-primary, #006d3b)', icon: '✓' };
21
+ case 'failed':
22
+ return { label: 'Failed', color: 'var(--smrt-color-error, #ba1a1a)', icon: '✕' };
23
+ case 'scheduled':
24
+ return { label: 'Scheduled', color: 'var(--smrt-color-secondary, #625b71)', icon: '⏰' };
25
+ default:
26
+ return { label: status, color: 'var(--smrt-color-outline, #79747e)', icon: '?' };
27
+ }
28
+ });
29
+ </script>
30
+
31
+ <span
32
+ class="send-status-badge {size}"
33
+ style="--badge-color: {statusConfig.color}"
34
+ >
35
+ <span class="icon">{statusConfig.icon}</span>
36
+ <span class="label">{statusConfig.label}</span>
37
+ </span>
38
+
39
+ <style>
40
+ .send-status-badge {
41
+ display: inline-flex;
42
+ align-items: center;
43
+ gap: var(--smrt-spacing-1, 4px);
44
+ border-radius: var(--smrt-radius-sm, 8px);
45
+ border: 1px solid var(--badge-color);
46
+ color: var(--badge-color);
47
+ font-family: var(--smrt-font-family, system-ui);
48
+ white-space: nowrap;
49
+ }
50
+
51
+ .sm {
52
+ padding: var(--smrt-spacing-1, 4px) var(--smrt-spacing-2, 8px);
53
+ font-size: var(--smrt-typography-label-small-size, 11px);
54
+ }
55
+
56
+ .md {
57
+ padding: var(--smrt-spacing-1, 4px) var(--smrt-spacing-3, 12px);
58
+ font-size: var(--smrt-typography-label-large-size, 13px);
59
+ }
60
+
61
+ .icon {
62
+ font-size: inherit;
63
+ }
64
+ </style>
@@ -0,0 +1,8 @@
1
+ export interface Props {
2
+ status: 'draft' | 'pending' | 'sending' | 'sent' | 'failed' | 'scheduled';
3
+ size?: 'sm' | 'md';
4
+ }
5
+ declare const SendStatusBadge: import("svelte").Component<Props, {}, "">;
6
+ type SendStatusBadge = ReturnType<typeof SendStatusBadge>;
7
+ export default SendStatusBadge;
8
+ //# sourceMappingURL=SendStatusBadge.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SendStatusBadge.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/SendStatusBadge.svelte.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC1E,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB;AAoCD,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -0,0 +1,240 @@
1
+ <script lang="ts">
2
+ /**
3
+ * ThreadView - Conversation thread with collapsible messages
4
+ */
5
+ import { useI18n } from '@happyvertical/smrt-ui/i18n';
6
+ import { M } from '../i18n.messages.js';
7
+ import type { MessageData } from '../types.js';
8
+ import MessageDetail from './MessageDetail.svelte';
9
+
10
+ const { t } = useI18n();
11
+
12
+ export interface Props {
13
+ messages: MessageData[];
14
+ activeMessageId?: string;
15
+ initialCollapsed?: Set<string>;
16
+ onmessageclick?: (message: MessageData) => void;
17
+ onreply?: (message: MessageData) => void;
18
+ }
19
+
20
+ const {
21
+ messages,
22
+ activeMessageId,
23
+ initialCollapsed = new Set<string>(),
24
+ onmessageclick,
25
+ onreply,
26
+ }: Props = $props();
27
+
28
+ function getInitialThreadState() {
29
+ return {
30
+ collapsed: new Set(initialCollapsed),
31
+ initialCollapsed,
32
+ };
33
+ }
34
+
35
+ const initialThreadState = getInitialThreadState();
36
+ let collapsed: Set<string> = $state(initialThreadState.collapsed);
37
+ let appliedInitialCollapsed: Set<string> | undefined =
38
+ initialThreadState.initialCollapsed;
39
+
40
+ $effect(() => {
41
+ if (appliedInitialCollapsed === initialCollapsed) {
42
+ return;
43
+ }
44
+
45
+ appliedInitialCollapsed = initialCollapsed;
46
+ collapsed = new Set(initialCollapsed);
47
+ });
48
+
49
+ function handleMessageClick(message: MessageData) {
50
+ onmessageclick?.(message);
51
+ }
52
+
53
+ function handleMessageKeydown(event: KeyboardEvent, message: MessageData) {
54
+ if (event.target !== event.currentTarget) {
55
+ return;
56
+ }
57
+
58
+ if (event.key === 'Enter' || event.key === ' ') {
59
+ event.preventDefault();
60
+ handleMessageClick(message);
61
+ }
62
+ }
63
+
64
+ function toggleCollapse(messageId: string) {
65
+ if (collapsed.has(messageId)) {
66
+ collapsed.delete(messageId);
67
+ } else {
68
+ collapsed.add(messageId);
69
+ }
70
+ collapsed = new Set(collapsed);
71
+ }
72
+
73
+ const _sortedMessages = $derived(
74
+ [...messages].sort((a, b) => {
75
+ const dateA =
76
+ typeof a.date === 'string'
77
+ ? new Date(a.date).getTime()
78
+ : a.date?.getTime() || 0;
79
+ const dateB =
80
+ typeof b.date === 'string'
81
+ ? new Date(b.date).getTime()
82
+ : b.date?.getTime() || 0;
83
+ return dateA - dateB;
84
+ }),
85
+ );
86
+ </script>
87
+
88
+ <div class="thread-view" role="list" aria-label={t(M['messages.thread_view.conversation_thread'])}>
89
+ {#each _sortedMessages as message, i (message.id)}
90
+ <div
91
+ class="thread-message"
92
+ class:thread-message--active={message.id === activeMessageId}
93
+ class:thread-message--collapsed={collapsed.has(message.id)}
94
+ role="listitem"
95
+ >
96
+ {#if collapsed.has(message.id)}
97
+ <button
98
+ class="collapsed-header"
99
+ type="button"
100
+ onclick={() => toggleCollapse(message.id)}
101
+ >
102
+ <span class="collapsed-sender">
103
+ {message.senderName || message.senderAddress}
104
+ </span>
105
+ <span class="collapsed-preview">
106
+ {message.body?.slice(0, 80) || '(no content)'}...
107
+ </span>
108
+ <span class="collapsed-date">
109
+ {typeof message.date === 'string'
110
+ ? new Date(message.date).toLocaleDateString()
111
+ : message.date?.toLocaleDateString() || ''}
112
+ </span>
113
+ </button>
114
+ {:else}
115
+ <div class="message-wrapper">
116
+ {#if messages.length > 1}
117
+ <button
118
+ class="collapse-btn"
119
+ type="button"
120
+ onclick={() => toggleCollapse(message.id)}
121
+ title={t(M['messages.thread_view.collapse'])}
122
+ aria-label={t(M['messages.thread_view.collapse_message'])}
123
+ >
124
+
125
+ </button>
126
+ {/if}
127
+ {#if onmessageclick}
128
+ <div
129
+ role="button"
130
+ tabindex="0"
131
+ onclick={() => handleMessageClick(message)}
132
+ onkeydown={(event) => handleMessageKeydown(event, message)}
133
+ >
134
+ <MessageDetail
135
+ {message}
136
+ onreply={onreply}
137
+ />
138
+ </div>
139
+ {:else}
140
+ <div>
141
+ <MessageDetail
142
+ {message}
143
+ onreply={onreply}
144
+ />
145
+ </div>
146
+ {/if}
147
+ </div>
148
+ {/if}
149
+
150
+ {#if i < _sortedMessages.length - 1}
151
+ <div class="thread-connector"></div>
152
+ {/if}
153
+ </div>
154
+ {/each}
155
+ </div>
156
+
157
+ <style>
158
+ .thread-view {
159
+ display: flex;
160
+ flex-direction: column;
161
+ gap: 0;
162
+ }
163
+
164
+ .thread-message {
165
+ position: relative;
166
+ }
167
+
168
+ .thread-message--active {
169
+ box-shadow: -3px 0 0 0 var(--smrt-color-primary, #005ac1);
170
+ }
171
+
172
+ .thread-connector {
173
+ width: 2px;
174
+ height: 1rem;
175
+ background: var(--smrt-color-outline-variant, #c4c6d0);
176
+ margin-left: 1.5rem;
177
+ }
178
+
179
+ .message-wrapper {
180
+ position: relative;
181
+ }
182
+
183
+ .collapse-btn {
184
+ position: absolute;
185
+ top: 0.75rem;
186
+ right: 0.75rem;
187
+ border: none;
188
+ background: none;
189
+ cursor: pointer;
190
+ font-size: var(--smrt-typography-label-medium-size, 0.75rem);
191
+ color: var(--smrt-color-on-surface-variant, #43474e);
192
+ z-index: 1;
193
+ padding: 0.25rem;
194
+ border-radius: var(--smrt-radius-small, 0.25rem);
195
+ }
196
+
197
+ .collapse-btn:hover {
198
+ background: var(--smrt-color-surface-variant, #e1e2ec);
199
+ }
200
+
201
+ .collapsed-header {
202
+ display: flex;
203
+ align-items: center;
204
+ gap: 0.75rem;
205
+ width: 100%;
206
+ padding: 0.75rem;
207
+ border: 1px solid var(--smrt-color-outline-variant, #c4c6d0);
208
+ border-radius: var(--smrt-radius-medium, 0.5rem);
209
+ background: var(--smrt-color-surface-variant, #e1e2ec);
210
+ cursor: pointer;
211
+ text-align: left;
212
+ color: inherit;
213
+ font: inherit;
214
+ }
215
+
216
+ .collapsed-header:hover {
217
+ background: color-mix(in srgb, var(--smrt-color-surface-variant, #e1e2ec) 92%, var(--smrt-color-shadow, #000));
218
+ }
219
+
220
+ .collapsed-sender {
221
+ font: var(--smrt-typography-body-medium-font, 0.875rem / 1.25 sans-serif);
222
+ font-weight: var(--smrt-typography-weight-medium, 500);
223
+ flex-shrink: 0;
224
+ }
225
+
226
+ .collapsed-preview {
227
+ flex: 1;
228
+ font: var(--smrt-typography-body-small-font, 0.75rem / 1.33 sans-serif);
229
+ color: var(--smrt-color-on-surface-variant, #43474e);
230
+ overflow: hidden;
231
+ text-overflow: ellipsis;
232
+ white-space: nowrap;
233
+ }
234
+
235
+ .collapsed-date {
236
+ flex-shrink: 0;
237
+ font: var(--smrt-typography-label-small-font, 500 0.6875rem / 1 sans-serif);
238
+ color: var(--smrt-color-on-surface-variant, #43474e);
239
+ }
240
+ </style>
@@ -0,0 +1,12 @@
1
+ import type { MessageData } from '../types.js';
2
+ export interface Props {
3
+ messages: MessageData[];
4
+ activeMessageId?: string;
5
+ initialCollapsed?: Set<string>;
6
+ onmessageclick?: (message: MessageData) => void;
7
+ onreply?: (message: MessageData) => void;
8
+ }
9
+ declare const ThreadView: import("svelte").Component<Props, {}, "">;
10
+ type ThreadView = ReturnType<typeof ThreadView>;
11
+ export default ThreadView;
12
+ //# sourceMappingURL=ThreadView.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThreadView.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/ThreadView.svelte.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;CAC1C;AA8HD,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,42 @@
1
+ export declare const M: {
2
+ readonly 'messages.account_list.accounts': "messages.account_list.accounts";
3
+ readonly 'messages.account_list.loading': "messages.account_list.loading";
4
+ readonly 'messages.account_list.empty': "messages.account_list.empty";
5
+ readonly 'messages.attachment_upload.drop_files': "messages.attachment_upload.drop_files";
6
+ readonly 'messages.compose_form.subject_placeholder': "messages.compose_form.subject_placeholder";
7
+ readonly 'messages.compose_form.channel_id_placeholder': "messages.compose_form.channel_id_placeholder";
8
+ readonly 'messages.compose_form.save_draft': "messages.compose_form.save_draft";
9
+ readonly 'messages.email_account_manager.section_description': "messages.email_account_manager.section_description";
10
+ readonly 'messages.email_account_manager.add_account': "messages.email_account_manager.add_account";
11
+ readonly 'messages.email_account_manager.mail_account': "messages.email_account_manager.mail_account";
12
+ readonly 'messages.email_account_manager.account_name': "messages.email_account_manager.account_name";
13
+ readonly 'messages.email_account_manager.account_name_placeholder': "messages.email_account_manager.account_name_placeholder";
14
+ readonly 'messages.email_account_manager.email_address': "messages.email_account_manager.email_address";
15
+ readonly 'messages.email_account_manager.email_placeholder': "messages.email_account_manager.email_placeholder";
16
+ readonly 'messages.email_account_manager.incoming_mail': "messages.email_account_manager.incoming_mail";
17
+ readonly 'messages.email_account_manager.imap_host_placeholder': "messages.email_account_manager.imap_host_placeholder";
18
+ readonly 'messages.email_account_manager.outgoing_mail': "messages.email_account_manager.outgoing_mail";
19
+ readonly 'messages.email_account_manager.smtp_host_placeholder': "messages.email_account_manager.smtp_host_placeholder";
20
+ readonly 'messages.email_account_manager.username_placeholder': "messages.email_account_manager.username_placeholder";
21
+ readonly 'messages.email_account_manager.connection_successful': "messages.email_account_manager.connection_successful";
22
+ readonly 'messages.email_account_manager.connection_failed': "messages.email_account_manager.connection_failed";
23
+ readonly 'messages.email_account_manager.empty': "messages.email_account_manager.empty";
24
+ readonly 'messages.email_account_manager.imap_host_title': "messages.email_account_manager.imap_host_title";
25
+ readonly 'messages.email_account_manager.test_connection': "messages.email_account_manager.test_connection";
26
+ readonly 'messages.email_account_manager.remove': "messages.email_account_manager.remove";
27
+ readonly 'messages.email_filter_manager.whitelist_description': "messages.email_filter_manager.whitelist_description";
28
+ readonly 'messages.email_filter_manager.add_whitelist_entry': "messages.email_filter_manager.add_whitelist_entry";
29
+ readonly 'messages.email_filter_manager.category_placeholder': "messages.email_filter_manager.category_placeholder";
30
+ readonly 'messages.email_filter_manager.whitelist_description_placeholder': "messages.email_filter_manager.whitelist_description_placeholder";
31
+ readonly 'messages.email_filter_manager.no_whitelist_entries': "messages.email_filter_manager.no_whitelist_entries";
32
+ readonly 'messages.email_filter_manager.whitelist_remove': "messages.email_filter_manager.whitelist_remove";
33
+ readonly 'messages.email_filter_manager.blacklist_description': "messages.email_filter_manager.blacklist_description";
34
+ readonly 'messages.email_filter_manager.add_blacklist_entry': "messages.email_filter_manager.add_blacklist_entry";
35
+ readonly 'messages.email_filter_manager.reason_placeholder': "messages.email_filter_manager.reason_placeholder";
36
+ readonly 'messages.email_filter_manager.no_blacklist_entries': "messages.email_filter_manager.no_blacklist_entries";
37
+ readonly 'messages.email_filter_manager.blacklist_remove': "messages.email_filter_manager.blacklist_remove";
38
+ readonly 'messages.forward_form.header': "messages.forward_form.header";
39
+ readonly 'messages.forward_form.note_placeholder': "messages.forward_form.note_placeholder";
40
+ readonly 'messages.reply_form.body_placeholder': "messages.reply_form.body_placeholder";
41
+ };
42
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DZ,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * smrt-messages Svelte component message catalog (Sweep S13 #1418).
3
+ *
4
+ * English code defaults for user-facing strings in a subset of the messages
5
+ * components under `src/svelte/components/`. Keys use the `messages.` namespace
6
+ * (`messages.<component>.<descriptor>`). Importing this module registers the
7
+ * defaults so `useI18n().t` renders correctly even without a server snapshot.
8
+ *
9
+ * `M` is a typed key map — `M['messages.account_list.loading']` is the key
10
+ * literal — so component call sites stay typo-safe.
11
+ */
12
+ import { defineMessages } from '@happyvertical/smrt-ui/i18n';
13
+ export const M = defineMessages({
14
+ // AccountList
15
+ 'messages.account_list.accounts': 'Accounts',
16
+ 'messages.account_list.loading': 'Loading accounts...',
17
+ 'messages.account_list.empty': 'No accounts configured.',
18
+ // AttachmentUpload
19
+ 'messages.attachment_upload.drop_files': 'Drop files or click to attach',
20
+ // ComposeForm
21
+ 'messages.compose_form.subject_placeholder': 'Subject',
22
+ 'messages.compose_form.channel_id_placeholder': 'Channel ID',
23
+ 'messages.compose_form.save_draft': 'Save Draft',
24
+ // EmailAccountManager
25
+ 'messages.email_account_manager.section_description': 'Configure email accounts for mailbox access and message routing.',
26
+ 'messages.email_account_manager.add_account': '+ Add Account',
27
+ 'messages.email_account_manager.mail_account': 'Mail Account',
28
+ 'messages.email_account_manager.account_name': 'Account Name',
29
+ 'messages.email_account_manager.account_name_placeholder': 'e.g. Work, Personal',
30
+ 'messages.email_account_manager.email_address': 'Email Address',
31
+ 'messages.email_account_manager.email_placeholder': 'user@example.com',
32
+ 'messages.email_account_manager.incoming_mail': 'Incoming Mail (IMAP)',
33
+ 'messages.email_account_manager.imap_host_placeholder': 'imap.example.com',
34
+ 'messages.email_account_manager.outgoing_mail': 'Outgoing Mail (SMTP)',
35
+ 'messages.email_account_manager.smtp_host_placeholder': 'smtp.example.com',
36
+ 'messages.email_account_manager.username_placeholder': 'user@example.com',
37
+ 'messages.email_account_manager.connection_successful': 'Connection successful',
38
+ 'messages.email_account_manager.connection_failed': 'Connection failed:',
39
+ 'messages.email_account_manager.empty': 'No mail accounts configured yet.',
40
+ 'messages.email_account_manager.imap_host_title': 'IMAP: {host}:{port}',
41
+ 'messages.email_account_manager.test_connection': 'Test connection',
42
+ 'messages.email_account_manager.remove': 'Remove',
43
+ // EmailFilterManager
44
+ 'messages.email_filter_manager.whitelist_description': 'Whitelisted senders bypass blacklist checks and are always allowed through.',
45
+ 'messages.email_filter_manager.add_whitelist_entry': 'Add Whitelist Entry',
46
+ 'messages.email_filter_manager.category_placeholder': 'e.g. support, sales',
47
+ 'messages.email_filter_manager.whitelist_description_placeholder': 'Why is this entry whitelisted?',
48
+ 'messages.email_filter_manager.no_whitelist_entries': 'No whitelist entries yet.',
49
+ 'messages.email_filter_manager.whitelist_remove': 'Remove',
50
+ 'messages.email_filter_manager.blacklist_description': 'Blacklisted senders are automatically blocked or archived.',
51
+ 'messages.email_filter_manager.add_blacklist_entry': 'Add Blacklist Entry',
52
+ 'messages.email_filter_manager.reason_placeholder': 'Why is this entry blocked?',
53
+ 'messages.email_filter_manager.no_blacklist_entries': 'No blacklist entries yet.',
54
+ 'messages.email_filter_manager.blacklist_remove': 'Remove',
55
+ // ForwardForm
56
+ 'messages.forward_form.header': 'Forward message',
57
+ 'messages.forward_form.note_placeholder': 'Add a note (optional)...',
58
+ // ReplyForm
59
+ 'messages.reply_form.body_placeholder': 'Write your reply...',
60
+ });
@@ -0,0 +1,32 @@
1
+ export declare const M: {
2
+ readonly 'messages.message_status_indicator.status': "messages.message_status_indicator.status";
3
+ readonly 'messages.message_status_indicator.unread': "messages.message_status_indicator.unread";
4
+ readonly 'messages.message_status_indicator.flagged': "messages.message_status_indicator.flagged";
5
+ readonly 'messages.message_status_indicator.has_attachments': "messages.message_status_indicator.has_attachments";
6
+ readonly 'messages.message_status_indicator.replied': "messages.message_status_indicator.replied";
7
+ readonly 'messages.message_status_indicator.draft': "messages.message_status_indicator.draft";
8
+ readonly 'messages.message_filters.filters_label': "messages.message_filters.filters_label";
9
+ readonly 'messages.message_filters.search_placeholder': "messages.message_filters.search_placeholder";
10
+ readonly 'messages.message_filters.search_label': "messages.message_filters.search_label";
11
+ readonly 'messages.message_filters.filter_by_type': "messages.message_filters.filter_by_type";
12
+ readonly 'messages.message_filters.all_types': "messages.message_filters.all_types";
13
+ readonly 'messages.message_filters.filter_by_account': "messages.message_filters.filter_by_account";
14
+ readonly 'messages.message_filters.all_accounts': "messages.message_filters.all_accounts";
15
+ readonly 'messages.message_filters.filter_by_read_status': "messages.message_filters.filter_by_read_status";
16
+ readonly 'messages.message_filters.unread_only': "messages.message_filters.unread_only";
17
+ readonly 'messages.message_filters.read_only': "messages.message_filters.read_only";
18
+ readonly 'messages.message_filters.clear_filters': "messages.message_filters.clear_filters";
19
+ readonly 'messages.message_list.messages_label': "messages.message_list.messages_label";
20
+ readonly 'messages.message_list.loading': "messages.message_list.loading";
21
+ readonly 'messages.message_toolbar.actions_label': "messages.message_toolbar.actions_label";
22
+ readonly 'messages.message_toolbar.count_selected': "messages.message_toolbar.count_selected";
23
+ readonly 'messages.message_toolbar.select_all': "messages.message_toolbar.select_all";
24
+ readonly 'messages.message_toolbar.mark_read': "messages.message_toolbar.mark_read";
25
+ readonly 'messages.message_toolbar.mark_unread': "messages.message_toolbar.mark_unread";
26
+ readonly 'messages.thread_view.conversation_thread': "messages.thread_view.conversation_thread";
27
+ readonly 'messages.thread_view.collapse': "messages.thread_view.collapse";
28
+ readonly 'messages.thread_view.collapse_message': "messages.thread_view.collapse_message";
29
+ readonly 'messages.message_card.select_message': "messages.message_card.select_message";
30
+ readonly 'messages.folder_nav.folders': "messages.folder_nav.folders";
31
+ };
32
+ //# sourceMappingURL=i18n.messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.messages.d.ts","sourceRoot":"","sources":["../../src/svelte/i18n.messages.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CZ,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Messages component message catalog (i18n, Sweep S13 #1418).
3
+ *
4
+ * English code defaults for user-facing strings in a subset of the messages
5
+ * Svelte components under `components/`. Keys follow
6
+ * `messages.<component>.<descriptor>`.
7
+ */
8
+ import { defineMessages } from '@happyvertical/smrt-ui/i18n';
9
+ export const M = defineMessages({
10
+ // MessageStatusIndicator
11
+ 'messages.message_status_indicator.status': 'Message status',
12
+ 'messages.message_status_indicator.unread': 'Unread',
13
+ 'messages.message_status_indicator.flagged': 'Flagged',
14
+ 'messages.message_status_indicator.has_attachments': 'Has attachments',
15
+ 'messages.message_status_indicator.replied': 'Replied',
16
+ 'messages.message_status_indicator.draft': 'Draft',
17
+ // MessageFilters
18
+ 'messages.message_filters.filters_label': 'Message filters',
19
+ 'messages.message_filters.search_placeholder': 'Search messages...',
20
+ 'messages.message_filters.search_label': 'Search messages',
21
+ 'messages.message_filters.filter_by_type': 'Filter by type',
22
+ 'messages.message_filters.all_types': 'All types',
23
+ 'messages.message_filters.filter_by_account': 'Filter by account',
24
+ 'messages.message_filters.all_accounts': 'All accounts',
25
+ 'messages.message_filters.filter_by_read_status': 'Filter by read status',
26
+ 'messages.message_filters.unread_only': 'Unread only',
27
+ 'messages.message_filters.read_only': 'Read only',
28
+ 'messages.message_filters.clear_filters': 'Clear filters',
29
+ // MessageList
30
+ 'messages.message_list.messages_label': 'Messages',
31
+ 'messages.message_list.loading': 'Loading messages...',
32
+ // MessageToolbar
33
+ 'messages.message_toolbar.actions_label': 'Message actions',
34
+ 'messages.message_toolbar.count_selected': '{selectedCount} of {totalCount} selected',
35
+ 'messages.message_toolbar.select_all': 'Select all',
36
+ 'messages.message_toolbar.mark_read': 'Mark read',
37
+ 'messages.message_toolbar.mark_unread': 'Mark unread',
38
+ // ThreadView
39
+ 'messages.thread_view.conversation_thread': 'Conversation thread',
40
+ 'messages.thread_view.collapse': 'Collapse',
41
+ 'messages.thread_view.collapse_message': 'Collapse message',
42
+ // MessageCard
43
+ 'messages.message_card.select_message': 'Select message',
44
+ // FolderNav
45
+ 'messages.folder_nav.folders': 'Folders',
46
+ });
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Messages Module Svelte Components
3
+ *
4
+ * Optional Svelte UI components for multi-channel messaging.
5
+ * Auto-registers components with ModuleUIRegistry on import.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import type { ComponentProps } from 'svelte';
10
+ import AccountAvatar from './components/AccountAvatar.svelte';
11
+ import AccountCard from './components/AccountCard.svelte';
12
+ import AccountList from './components/AccountList.svelte';
13
+ import AttachmentChip from './components/AttachmentChip.svelte';
14
+ import AttachmentUpload from './components/AttachmentUpload.svelte';
15
+ import ComposeForm from './components/ComposeForm.svelte';
16
+ import EmailAccountManager from './components/EmailAccountManager.svelte';
17
+ import EmailFilterManager from './components/EmailFilterManager.svelte';
18
+ import FolderNav from './components/FolderNav.svelte';
19
+ import ForwardForm from './components/ForwardForm.svelte';
20
+ import MessageCard from './components/MessageCard.svelte';
21
+ import MessageDetail from './components/MessageDetail.svelte';
22
+ import MessageFilters from './components/MessageFilters.svelte';
23
+ import MessageList from './components/MessageList.svelte';
24
+ import MessageStatusIndicator from './components/MessageStatusIndicator.svelte';
25
+ import MessageToolbar from './components/MessageToolbar.svelte';
26
+ import MessageTypeBadge from './components/MessageTypeBadge.svelte';
27
+ import RecipientInput from './components/RecipientInput.svelte';
28
+ import ReplyForm from './components/ReplyForm.svelte';
29
+ import SendStatusBadge from './components/SendStatusBadge.svelte';
30
+ import ThreadView from './components/ThreadView.svelte';
31
+ export { AccountAvatar, AccountCard, AccountList, AttachmentChip, AttachmentUpload, ComposeForm, EmailAccountManager, EmailFilterManager, FolderNav, ForwardForm, MessageCard, MessageDetail, MessageFilters, MessageList, MessageStatusIndicator, MessageToolbar, MessageTypeBadge, RecipientInput, ReplyForm, SendStatusBadge, ThreadView, };
32
+ export type AccountAvatarProps = ComponentProps<typeof AccountAvatar>;
33
+ export type AccountCardProps = ComponentProps<typeof AccountCard>;
34
+ export type AccountListProps = ComponentProps<typeof AccountList>;
35
+ export type AttachmentChipProps = ComponentProps<typeof AttachmentChip>;
36
+ export type AttachmentUploadProps = ComponentProps<typeof AttachmentUpload>;
37
+ export type ComposeFormProps = ComponentProps<typeof ComposeForm>;
38
+ export type EmailAccountManagerProps = ComponentProps<typeof EmailAccountManager>;
39
+ export type EmailFilterManagerProps = ComponentProps<typeof EmailFilterManager>;
40
+ export type FolderNavProps = ComponentProps<typeof FolderNav>;
41
+ export type ForwardFormProps = ComponentProps<typeof ForwardForm>;
42
+ export type MessageCardProps = ComponentProps<typeof MessageCard>;
43
+ export type MessageDetailProps = ComponentProps<typeof MessageDetail>;
44
+ export type MessageFiltersProps = ComponentProps<typeof MessageFilters>;
45
+ export type MessageListProps = ComponentProps<typeof MessageList>;
46
+ export type MessageStatusIndicatorProps = ComponentProps<typeof MessageStatusIndicator>;
47
+ export type MessageToolbarProps = ComponentProps<typeof MessageToolbar>;
48
+ export type MessageTypeBadgeProps = ComponentProps<typeof MessageTypeBadge>;
49
+ export type RecipientInputProps = ComponentProps<typeof RecipientInput>;
50
+ export type ReplyFormProps = ComponentProps<typeof ReplyForm>;
51
+ export type SendStatusBadgeProps = ComponentProps<typeof SendStatusBadge>;
52
+ export type ThreadViewProps = ComponentProps<typeof ThreadView>;
53
+ export type { AccountData, AttachmentData, BlacklistEntry, BulkAction, ComposeState, DraftData, EmailAccountData, FolderData, MessageData, MessageFilterState, MessageSort, MessageType, RecipientEntry, SendStatusDisplay, WhitelistEntry, } from './types.js';
54
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svelte/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Messages Module Svelte Components
3
+ *
4
+ * Optional Svelte UI components for multi-channel messaging.
5
+ * Auto-registers components with ModuleUIRegistry on import.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { ModuleUIRegistry } from '@happyvertical/smrt-ui/registry';
10
+ import { MESSAGES_MODULE_META } from '../ui.js';
11
+ // Import components
12
+ import AccountAvatar from './components/AccountAvatar.svelte';
13
+ import AccountCard from './components/AccountCard.svelte';
14
+ import AccountList from './components/AccountList.svelte';
15
+ import AttachmentChip from './components/AttachmentChip.svelte';
16
+ import AttachmentUpload from './components/AttachmentUpload.svelte';
17
+ import ComposeForm from './components/ComposeForm.svelte';
18
+ import EmailAccountManager from './components/EmailAccountManager.svelte';
19
+ import EmailFilterManager from './components/EmailFilterManager.svelte';
20
+ import FolderNav from './components/FolderNav.svelte';
21
+ import ForwardForm from './components/ForwardForm.svelte';
22
+ import MessageCard from './components/MessageCard.svelte';
23
+ import MessageDetail from './components/MessageDetail.svelte';
24
+ import MessageFilters from './components/MessageFilters.svelte';
25
+ import MessageList from './components/MessageList.svelte';
26
+ import MessageStatusIndicator from './components/MessageStatusIndicator.svelte';
27
+ import MessageToolbar from './components/MessageToolbar.svelte';
28
+ import MessageTypeBadge from './components/MessageTypeBadge.svelte';
29
+ import RecipientInput from './components/RecipientInput.svelte';
30
+ import ReplyForm from './components/ReplyForm.svelte';
31
+ import SendStatusBadge from './components/SendStatusBadge.svelte';
32
+ import ThreadView from './components/ThreadView.svelte';
33
+ // Export components
34
+ export { AccountAvatar, AccountCard, AccountList, AttachmentChip, AttachmentUpload, ComposeForm, EmailAccountManager, EmailFilterManager, FolderNav, ForwardForm, MessageCard, MessageDetail, MessageFilters, MessageList, MessageStatusIndicator, MessageToolbar, MessageTypeBadge, RecipientInput, ReplyForm, SendStatusBadge, ThreadView, };
35
+ // Auto-register with ModuleUIRegistry
36
+ ModuleUIRegistry.registerModule(MESSAGES_MODULE_META);
37
+ ModuleUIRegistry.register('@happyvertical/smrt-messages', 'message-card', MessageCard);
38
+ ModuleUIRegistry.register('@happyvertical/smrt-messages', 'message-list', MessageList);
39
+ ModuleUIRegistry.register('@happyvertical/smrt-messages', 'message-detail', MessageDetail);
40
+ ModuleUIRegistry.register('@happyvertical/smrt-messages', 'message-filters', MessageFilters);
41
+ ModuleUIRegistry.register('@happyvertical/smrt-messages', 'account-list', AccountList);
42
+ ModuleUIRegistry.register('@happyvertical/smrt-messages', 'thread-view', ThreadView);
43
+ ModuleUIRegistry.register('@happyvertical/smrt-messages', 'compose-form', ComposeForm);
44
+ ModuleUIRegistry.register('@happyvertical/smrt-messages', 'reply-form', ReplyForm);