@rapidmx/web-client 0.4.0 → 0.6.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 (320) hide show
  1. package/README.md +88 -0
  2. package/apps/admin/audit-log/index.tsx +35 -8
  3. package/apps/admin/data-requests/index.tsx +480 -485
  4. package/apps/admin/distribution-lists/[uid].tsx +19 -1
  5. package/apps/admin/escrow-scopes/[uid].tsx +348 -237
  6. package/apps/admin/escrow-scopes/new/index.tsx +8 -2
  7. package/apps/admin/index.tsx +19 -1
  8. package/apps/admin/ingest-queue/index.tsx +44 -5
  9. package/apps/admin/mailboxes/[uid].tsx +211 -184
  10. package/apps/admin/quarantine/index.tsx +46 -14
  11. package/apps/admin/transport-rules/[uid].tsx +30 -1
  12. package/apps/admin/transport-rules/_transportRuleConfig.tsx +38 -2
  13. package/apps/admin/transport-rules/index.tsx +24 -6
  14. package/apps/admin/transport-rules/new/index.tsx +30 -1
  15. package/apps/escrow/_layout.tsx +2 -3
  16. package/apps/escrow/audit-log/index.tsx +196 -168
  17. package/apps/escrow/matters/[uid].tsx +621 -521
  18. package/apps/shared/components/admin/escrowScopes/EscrowScopeKeyAndHoldersFields.tsx +22 -1
  19. package/apps/shared/components/admin/layout/AdminShell.tsx +28 -9
  20. package/apps/shared/components/admin/mailboxes/EscrowScopeCard.tsx +152 -0
  21. package/apps/shared/components/admin/mailboxes/ResourceSettingsCard.tsx +3 -3
  22. package/apps/shared/components/admin/mailboxes/ShareAccessCard.tsx +55 -11
  23. package/apps/shared/components/admin/settings/BrandingForm.tsx +15 -4
  24. package/apps/shared/components/admin/settings/DomainDnsSetup.tsx +18 -7
  25. package/apps/shared/components/admin/settings/EncryptionPolicyForm.tsx +10 -2
  26. package/apps/shared/components/admin/settings/MailboxCreateForm.tsx +6 -0
  27. package/apps/shared/components/admin/settings/MailboxPolicyForm.tsx +45 -12
  28. package/apps/shared/components/admin/settings/PluginsManager.tsx +1235 -595
  29. package/apps/shared/components/admin/settings/RetentionPolicyForm.tsx +174 -98
  30. package/apps/shared/components/admin/setup/EscrowSetupStep.tsx +49 -13
  31. package/apps/shared/components/admin/setup/SetupWizard.tsx +150 -34
  32. package/apps/shared/components/admin/signOut.ts +79 -0
  33. package/apps/shared/components/admin/usePagedList.tsx +129 -0
  34. package/apps/shared/components/calendar/EventModal.tsx +717 -549
  35. package/apps/shared/components/calendar/MonthView.tsx +173 -139
  36. package/apps/shared/components/calendar/RecurrenceEditor.tsx +222 -180
  37. package/apps/shared/components/calendar/SplitDayView.tsx +143 -137
  38. package/apps/shared/components/calendar/TimeGridView.tsx +244 -198
  39. package/apps/shared/components/calendar/allDay.ts +124 -0
  40. package/apps/shared/components/calendar/layout/CalendarShell.tsx +194 -192
  41. package/apps/shared/components/contacts/ContactDetailPane.tsx +100 -21
  42. package/apps/shared/components/contacts/ContactForm.tsx +377 -348
  43. package/apps/shared/components/contacts/ContactsSidebar.tsx +6 -2
  44. package/apps/shared/components/contacts/KeyChangeReview.tsx +192 -0
  45. package/apps/shared/components/contacts/contactKeys.ts +78 -0
  46. package/apps/shared/components/contacts/layout/ContactsShell.tsx +199 -197
  47. package/apps/shared/components/escrow/layout/EscrowShell.tsx +148 -134
  48. package/apps/shared/components/layout/AppShell.tsx +123 -33
  49. package/apps/shared/components/layout/BrandingChrome.tsx +48 -10
  50. package/apps/shared/components/layout/KeyEnrollmentGate.tsx +389 -298
  51. package/apps/shared/components/layout/MailboxProvisioning.tsx +19 -3
  52. package/apps/shared/components/layout/RecoveryCodeUnlock.tsx +350 -0
  53. package/apps/shared/components/layout/UnlockPromptProvider.tsx +257 -128
  54. package/apps/shared/components/mail/ConversationThreadPane.tsx +216 -181
  55. package/apps/shared/components/mail/MessageDetailPane.tsx +1318 -630
  56. package/apps/shared/components/mail/compose/ComposeContext.tsx +20 -15
  57. package/apps/shared/components/mail/compose/ComposeWindow.tsx +854 -132
  58. package/apps/shared/components/mail/compose/composeFlushRegistry.ts +60 -0
  59. package/apps/shared/components/mail/layout/MailShell.tsx +420 -408
  60. package/apps/shared/components/mail/pinnedSigners.ts +124 -0
  61. package/apps/shared/components/mail/verificationSeals.ts +125 -0
  62. package/apps/shared/components/mail/writableMailboxes.ts +101 -0
  63. package/apps/shared/components/rules/RuleBuilder.tsx +311 -276
  64. package/apps/shared/components/settings/layout/SettingsShell.tsx +23 -9
  65. package/apps/shared/components/tasks/layout/TasksShell.tsx +201 -199
  66. package/apps/shared/mail/listAllPages.ts +39 -0
  67. package/apps/shared/plugins/pluginNav.ts +73 -0
  68. package/apps/shared/search/LocalIndexLifecycle.tsx +64 -55
  69. package/apps/shared/search/localIndexBuilder.ts +481 -179
  70. package/apps/shared/search/localIndexRpcClient.ts +231 -29
  71. package/apps/shared/search/localIndexSchema.ts +15 -6
  72. package/apps/shared/search/localIndexStorage.ts +98 -0
  73. package/apps/shared/search/localIndexVFS.ts +32 -1
  74. package/apps/shared/search/localIndexWorker.ts +648 -186
  75. package/apps/www/calendar/index.tsx +438 -417
  76. package/apps/www/contacts/[uid].tsx +21 -2
  77. package/apps/www/contacts/index.tsx +116 -12
  78. package/apps/www/index.tsx +1314 -1041
  79. package/apps/www/messages/[uid].tsx +18 -6
  80. package/apps/www/settings/auto-reply/index.tsx +134 -129
  81. package/apps/www/settings/encryption/index.tsx +739 -216
  82. package/apps/www/settings/filters/[uid].tsx +171 -155
  83. package/apps/www/settings/filters/new/index.tsx +8 -1
  84. package/apps/www/settings/focused-inbox/index.tsx +150 -148
  85. package/apps/www/settings/privacy/index.tsx +494 -436
  86. package/apps/www/settings/read-receipts/index.tsx +148 -125
  87. package/apps/www/settings/sharing/index.tsx +17 -14
  88. package/apps/www/tasks/index.tsx +638 -579
  89. package/dist/apps/admin/_404.d.ts +2 -0
  90. package/dist/apps/admin/_500.d.ts +2 -0
  91. package/dist/apps/admin/_layout.d.ts +8 -0
  92. package/dist/apps/admin/audit-log/index.d.ts +11 -0
  93. package/dist/apps/admin/audit-log/index.js +38 -8
  94. package/dist/apps/admin/branding/index.d.ts +3 -0
  95. package/dist/apps/admin/data-requests/index.d.ts +3 -0
  96. package/dist/apps/admin/data-requests/index.js +52 -72
  97. package/dist/apps/admin/distribution-lists/[uid].d.ts +7 -0
  98. package/dist/apps/admin/distribution-lists/[uid].js +1 -1
  99. package/dist/apps/admin/distribution-lists/index.d.ts +3 -0
  100. package/dist/apps/admin/distribution-lists/new/index.d.ts +3 -0
  101. package/dist/apps/admin/domains/[uid].d.ts +7 -0
  102. package/dist/apps/admin/domains/index.d.ts +3 -0
  103. package/dist/apps/admin/domains/new/index.d.ts +3 -0
  104. package/dist/apps/admin/encryption-policy/index.d.ts +3 -0
  105. package/dist/apps/admin/escrow-scopes/[uid].d.ts +21 -0
  106. package/dist/apps/admin/escrow-scopes/[uid].js +91 -12
  107. package/dist/apps/admin/escrow-scopes/index.d.ts +3 -0
  108. package/dist/apps/admin/escrow-scopes/new/index.d.ts +3 -0
  109. package/dist/apps/admin/escrow-scopes/new/index.js +8 -3
  110. package/dist/apps/admin/index.d.ts +3 -0
  111. package/dist/apps/admin/index.js +4 -1
  112. package/dist/apps/admin/ingest-queue/index.d.ts +4 -0
  113. package/dist/apps/admin/ingest-queue/index.js +24 -6
  114. package/dist/apps/admin/mailbox-policy/index.d.ts +3 -0
  115. package/dist/apps/admin/mailboxes/[uid].d.ts +7 -0
  116. package/dist/apps/admin/mailboxes/[uid].js +20 -4
  117. package/dist/apps/admin/mailboxes/new/index.d.ts +3 -0
  118. package/dist/apps/admin/plugins/index.d.ts +3 -0
  119. package/dist/apps/admin/quarantine/index.d.ts +6 -0
  120. package/dist/apps/admin/quarantine/index.js +20 -11
  121. package/dist/apps/admin/retention-policy/index.d.ts +3 -0
  122. package/dist/apps/admin/setup/index.d.ts +3 -0
  123. package/dist/apps/admin/transport-rules/[uid].d.ts +7 -0
  124. package/dist/apps/admin/transport-rules/[uid].js +18 -2
  125. package/dist/apps/admin/transport-rules/_transportRuleConfig.d.ts +21 -0
  126. package/dist/apps/admin/transport-rules/_transportRuleConfig.js +19 -0
  127. package/dist/apps/admin/transport-rules/index.d.ts +3 -0
  128. package/dist/apps/admin/transport-rules/index.js +22 -6
  129. package/dist/apps/admin/transport-rules/new/index.d.ts +3 -0
  130. package/dist/apps/admin/transport-rules/new/index.js +18 -2
  131. package/dist/apps/escrow/_layout.d.ts +10 -0
  132. package/dist/apps/escrow/_layout.js +3 -3
  133. package/dist/apps/escrow/audit-log/index.d.ts +9 -0
  134. package/dist/apps/escrow/audit-log/index.js +26 -1
  135. package/dist/apps/escrow/index.d.ts +3 -0
  136. package/dist/apps/escrow/matters/[uid].d.ts +7 -0
  137. package/dist/apps/escrow/matters/[uid].js +77 -42
  138. package/dist/apps/escrow/matters/new/index.d.ts +3 -0
  139. package/dist/apps/shared/components/admin/distributionLists/MemberListCard.d.ts +17 -0
  140. package/dist/apps/shared/components/admin/escrowScopes/EscrowScopeKeyAndHoldersFields.d.ts +32 -0
  141. package/dist/apps/shared/components/admin/escrowScopes/EscrowScopeKeyAndHoldersFields.js +11 -2
  142. package/dist/apps/shared/components/admin/layout/AdminShell.d.ts +32 -0
  143. package/dist/apps/shared/components/admin/layout/AdminShell.js +15 -6
  144. package/dist/apps/shared/components/admin/mailboxes/EscrowScopeCard.d.ts +12 -0
  145. package/dist/apps/shared/components/admin/mailboxes/EscrowScopeCard.js +72 -0
  146. package/dist/apps/shared/components/admin/mailboxes/MailboxTable.d.ts +6 -0
  147. package/dist/apps/shared/components/admin/mailboxes/ResourceSettingsCard.d.ts +19 -0
  148. package/dist/apps/shared/components/admin/mailboxes/ResourceSettingsCard.js +3 -3
  149. package/dist/apps/shared/components/admin/mailboxes/ShareAccessCard.d.ts +12 -0
  150. package/dist/apps/shared/components/admin/mailboxes/ShareAccessCard.js +22 -4
  151. package/dist/apps/shared/components/admin/settings/BrandingForm.d.ts +9 -0
  152. package/dist/apps/shared/components/admin/settings/BrandingForm.js +15 -4
  153. package/dist/apps/shared/components/admin/settings/DomainDnsSetup.d.ts +12 -0
  154. package/dist/apps/shared/components/admin/settings/DomainDnsSetup.js +13 -7
  155. package/dist/apps/shared/components/admin/settings/EncryptionPolicyForm.d.ts +12 -0
  156. package/dist/apps/shared/components/admin/settings/EncryptionPolicyForm.js +7 -2
  157. package/dist/apps/shared/components/admin/settings/LoadedSettingsForm.d.ts +9 -0
  158. package/dist/apps/shared/components/admin/settings/MailboxCreateForm.d.ts +19 -0
  159. package/dist/apps/shared/components/admin/settings/MailboxCreateForm.js +6 -0
  160. package/dist/apps/shared/components/admin/settings/MailboxPolicyForm.d.ts +10 -0
  161. package/dist/apps/shared/components/admin/settings/MailboxPolicyForm.js +34 -12
  162. package/dist/apps/shared/components/admin/settings/PluginsManager.d.ts +4 -0
  163. package/dist/apps/shared/components/admin/settings/PluginsManager.js +390 -78
  164. package/dist/apps/shared/components/admin/settings/RetentionPolicyForm.d.ts +9 -0
  165. package/dist/apps/shared/components/admin/settings/RetentionPolicyForm.js +40 -11
  166. package/dist/apps/shared/components/admin/setup/EscrowSetupStep.d.ts +14 -0
  167. package/dist/apps/shared/components/admin/setup/EscrowSetupStep.js +29 -13
  168. package/dist/apps/shared/components/admin/setup/SetupWizard.d.ts +36 -0
  169. package/dist/apps/shared/components/admin/setup/SetupWizard.js +87 -21
  170. package/dist/apps/shared/components/admin/signOut.d.ts +23 -0
  171. package/dist/apps/shared/components/admin/signOut.js +75 -0
  172. package/dist/apps/shared/components/admin/usePagedList.d.ts +39 -0
  173. package/dist/apps/shared/components/admin/usePagedList.js +99 -0
  174. package/dist/apps/shared/components/calendar/CalendarListSidebar.d.ts +26 -0
  175. package/dist/apps/shared/components/calendar/EventModal.d.ts +46 -0
  176. package/dist/apps/shared/components/calendar/EventModal.js +142 -21
  177. package/dist/apps/shared/components/calendar/MonthView.d.ts +15 -0
  178. package/dist/apps/shared/components/calendar/MonthView.js +12 -5
  179. package/dist/apps/shared/components/calendar/RecurrenceEditor.d.ts +20 -0
  180. package/dist/apps/shared/components/calendar/RecurrenceEditor.js +40 -5
  181. package/dist/apps/shared/components/calendar/ResourcePicker.d.ts +19 -0
  182. package/dist/apps/shared/components/calendar/SplitDayView.d.ts +28 -0
  183. package/dist/apps/shared/components/calendar/SplitDayView.js +10 -4
  184. package/dist/apps/shared/components/calendar/TimeGridView.d.ts +17 -0
  185. package/dist/apps/shared/components/calendar/TimeGridView.js +23 -7
  186. package/dist/apps/shared/components/calendar/allDay.d.ts +51 -0
  187. package/dist/apps/shared/components/calendar/allDay.js +111 -0
  188. package/dist/apps/shared/components/calendar/layout/CalendarShell.d.ts +40 -0
  189. package/dist/apps/shared/components/calendar/layout/CalendarShell.js +3 -3
  190. package/dist/apps/shared/components/contacts/ContactDetailPane.d.ts +23 -0
  191. package/dist/apps/shared/components/contacts/ContactDetailPane.js +43 -5
  192. package/dist/apps/shared/components/contacts/ContactForm.d.ts +20 -0
  193. package/dist/apps/shared/components/contacts/ContactForm.js +32 -10
  194. package/dist/apps/shared/components/contacts/ContactsSidebar.d.ts +40 -0
  195. package/dist/apps/shared/components/contacts/ContactsSidebar.js +2 -2
  196. package/dist/apps/shared/components/contacts/ContactsToolbar.d.ts +25 -0
  197. package/dist/apps/shared/components/contacts/KeyChangeReview.d.ts +40 -0
  198. package/dist/apps/shared/components/contacts/KeyChangeReview.js +63 -0
  199. package/dist/apps/shared/components/contacts/contactKeys.d.ts +29 -0
  200. package/dist/apps/shared/components/contacts/contactKeys.js +64 -0
  201. package/dist/apps/shared/components/contacts/layout/ContactsShell.d.ts +21 -0
  202. package/dist/apps/shared/components/contacts/layout/ContactsShell.js +2 -2
  203. package/dist/apps/shared/components/escrow/layout/EscrowShell.d.ts +25 -0
  204. package/dist/apps/shared/components/escrow/layout/EscrowShell.js +24 -5
  205. package/dist/apps/shared/components/forms/StringListField.d.ts +22 -0
  206. package/dist/apps/shared/components/layout/AppShell.d.ts +49 -0
  207. package/dist/apps/shared/components/layout/AppShell.js +97 -26
  208. package/dist/apps/shared/components/layout/BrandingChrome.d.ts +18 -0
  209. package/dist/apps/shared/components/layout/BrandingChrome.js +45 -10
  210. package/dist/apps/shared/components/layout/KeyEnrollmentGate.d.ts +51 -0
  211. package/dist/apps/shared/components/layout/KeyEnrollmentGate.js +49 -12
  212. package/dist/apps/shared/components/layout/MailboxProvisioning.d.ts +13 -0
  213. package/dist/apps/shared/components/layout/MailboxProvisioning.js +10 -2
  214. package/dist/apps/shared/components/layout/RecoveryCodeUnlock.d.ts +66 -0
  215. package/dist/apps/shared/components/layout/RecoveryCodeUnlock.js +174 -0
  216. package/dist/apps/shared/components/layout/UnlockPromptProvider.d.ts +45 -0
  217. package/dist/apps/shared/components/layout/UnlockPromptProvider.js +73 -14
  218. package/dist/apps/shared/components/layout/UserMenu.d.ts +23 -0
  219. package/dist/apps/shared/components/mail/ConversationList.d.ts +11 -0
  220. package/dist/apps/shared/components/mail/ConversationThreadPane.d.ts +23 -0
  221. package/dist/apps/shared/components/mail/ConversationThreadPane.js +50 -12
  222. package/dist/apps/shared/components/mail/MessageDetailPane.d.ts +93 -0
  223. package/dist/apps/shared/components/mail/MessageDetailPane.js +441 -36
  224. package/dist/apps/shared/components/mail/compose/ComposeContext.d.ts +58 -0
  225. package/dist/apps/shared/components/mail/compose/ComposeContext.js +9 -6
  226. package/dist/apps/shared/components/mail/compose/ComposeToolbar.d.ts +15 -0
  227. package/dist/apps/shared/components/mail/compose/ComposeWindow.d.ts +37 -0
  228. package/dist/apps/shared/components/mail/compose/ComposeWindow.js +699 -128
  229. package/dist/apps/shared/components/mail/compose/EmojiPicker.d.ts +14 -0
  230. package/dist/apps/shared/components/mail/compose/GifPicker.d.ts +13 -0
  231. package/dist/apps/shared/components/mail/compose/RichTextEditor.d.ts +34 -0
  232. package/dist/apps/shared/components/mail/compose/ScheduleSendPicker.d.ts +16 -0
  233. package/dist/apps/shared/components/mail/compose/composeFlushRegistry.d.ts +27 -0
  234. package/dist/apps/shared/components/mail/compose/composeFlushRegistry.js +50 -0
  235. package/dist/apps/shared/components/mail/layout/MailShell.d.ts +57 -0
  236. package/dist/apps/shared/components/mail/layout/MailShell.js +13 -4
  237. package/dist/apps/shared/components/mail/pinnedSigners.d.ts +33 -0
  238. package/dist/apps/shared/components/mail/pinnedSigners.js +98 -0
  239. package/dist/apps/shared/components/mail/verificationSeals.d.ts +22 -0
  240. package/dist/apps/shared/components/mail/verificationSeals.js +112 -0
  241. package/dist/apps/shared/components/mail/writableMailboxes.d.ts +15 -0
  242. package/dist/apps/shared/components/mail/writableMailboxes.js +87 -0
  243. package/dist/apps/shared/components/rules/RuleBuilder.d.ts +70 -0
  244. package/dist/apps/shared/components/rules/RuleBuilder.js +34 -6
  245. package/dist/apps/shared/components/settings/layout/SettingsShell.d.ts +41 -0
  246. package/dist/apps/shared/components/settings/layout/SettingsShell.js +19 -9
  247. package/dist/apps/shared/components/tasks/TasksSidebar.d.ts +41 -0
  248. package/dist/apps/shared/components/tasks/TasksToolbar.d.ts +14 -0
  249. package/dist/apps/shared/components/tasks/layout/TasksShell.d.ts +24 -0
  250. package/dist/apps/shared/components/tasks/layout/TasksShell.js +2 -2
  251. package/dist/apps/shared/mail/findWellKnownFolderUid.d.ts +5 -0
  252. package/dist/apps/shared/mail/listAllPages.d.ts +17 -0
  253. package/dist/apps/shared/mail/listAllPages.js +25 -0
  254. package/dist/apps/shared/plugins/pluginNav.d.ts +39 -0
  255. package/dist/apps/shared/plugins/pluginNav.js +33 -0
  256. package/dist/apps/shared/search/LocalIndexLifecycle.d.ts +13 -0
  257. package/dist/apps/shared/search/LocalIndexLifecycle.js +58 -54
  258. package/dist/apps/shared/search/localIndexBlockCipher.d.ts +36 -0
  259. package/dist/apps/shared/search/localIndexBuilder.d.ts +85 -0
  260. package/dist/apps/shared/search/localIndexBuilder.js +292 -37
  261. package/dist/apps/shared/search/localIndexKey.d.ts +4 -0
  262. package/dist/apps/shared/search/localIndexRpcClient.d.ts +71 -0
  263. package/dist/apps/shared/search/localIndexRpcClient.js +191 -26
  264. package/dist/apps/shared/search/localIndexSchema.d.ts +111 -0
  265. package/dist/apps/shared/search/localIndexSchema.js +12 -6
  266. package/dist/apps/shared/search/localIndexSizePreference.d.ts +27 -0
  267. package/dist/apps/shared/search/localIndexStorage.d.ts +28 -0
  268. package/dist/apps/shared/search/localIndexStorage.js +86 -0
  269. package/dist/apps/shared/search/localIndexVFS.d.ts +101 -0
  270. package/dist/apps/shared/search/localIndexVFS.js +68 -40
  271. package/dist/apps/shared/search/localIndexWorker.d.ts +145 -0
  272. package/dist/apps/shared/search/localIndexWorker.js +519 -173
  273. package/dist/apps/shared/search/searchTier2.d.ts +30 -0
  274. package/dist/apps/www/_404.d.ts +2 -0
  275. package/dist/apps/www/_500.d.ts +2 -0
  276. package/dist/apps/www/_layout.d.ts +14 -0
  277. package/dist/apps/www/calendar/index.d.ts +3 -0
  278. package/dist/apps/www/calendar/index.js +28 -10
  279. package/dist/apps/www/contacts/[uid].d.ts +13 -0
  280. package/dist/apps/www/contacts/[uid].js +13 -2
  281. package/dist/apps/www/contacts/index.d.ts +3 -0
  282. package/dist/apps/www/contacts/index.js +80 -10
  283. package/dist/apps/www/index.d.ts +3 -0
  284. package/dist/apps/www/index.js +339 -108
  285. package/dist/apps/www/messages/[uid].d.ts +11 -0
  286. package/dist/apps/www/messages/[uid].js +18 -6
  287. package/dist/apps/www/settings/auto-reply/index.d.ts +4 -0
  288. package/dist/apps/www/settings/auto-reply/index.js +9 -4
  289. package/dist/apps/www/settings/encryption/index.d.ts +7 -0
  290. package/dist/apps/www/settings/encryption/index.js +514 -97
  291. package/dist/apps/www/settings/filters/[uid].d.ts +8 -0
  292. package/dist/apps/www/settings/filters/[uid].js +22 -7
  293. package/dist/apps/www/settings/filters/_mailFilterRuleConfig.d.ts +11 -0
  294. package/dist/apps/www/settings/filters/index.d.ts +4 -0
  295. package/dist/apps/www/settings/filters/new/index.d.ts +4 -0
  296. package/dist/apps/www/settings/filters/new/index.js +8 -2
  297. package/dist/apps/www/settings/focused-inbox/index.d.ts +4 -0
  298. package/dist/apps/www/settings/focused-inbox/index.js +3 -1
  299. package/dist/apps/www/settings/labels/index.d.ts +4 -0
  300. package/dist/apps/www/settings/privacy/index.d.ts +4 -0
  301. package/dist/apps/www/settings/privacy/index.js +57 -22
  302. package/dist/apps/www/settings/read-receipts/index.d.ts +4 -0
  303. package/dist/apps/www/settings/read-receipts/index.js +10 -3
  304. package/dist/apps/www/settings/sharing/index.d.ts +4 -0
  305. package/dist/apps/www/settings/sharing/index.js +7 -11
  306. package/dist/apps/www/settings/signatures/[uid].d.ts +8 -0
  307. package/dist/apps/www/settings/signatures/index.d.ts +4 -0
  308. package/dist/apps/www/settings/signatures/new/index.d.ts +4 -0
  309. package/dist/apps/www/settings/signatures/signatureDefaults.d.ts +10 -0
  310. package/dist/apps/www/tasks/index.d.ts +3 -0
  311. package/dist/apps/www/tasks/index.js +50 -10
  312. package/package.json +3 -3
  313. package/apps/shared/components/booking/AvailabilityEditor.tsx +0 -118
  314. package/apps/www/settings/booking-types/[uid].tsx +0 -300
  315. package/apps/www/settings/booking-types/index.tsx +0 -98
  316. package/apps/www/settings/booking-types/new/index.tsx +0 -212
  317. package/dist/apps/shared/components/booking/AvailabilityEditor.js +0 -45
  318. package/dist/apps/www/settings/booking-types/[uid].js +0 -129
  319. package/dist/apps/www/settings/booking-types/index.js +0 -29
  320. package/dist/apps/www/settings/booking-types/new/index.js +0 -86
@@ -1,197 +1,199 @@
1
- ///////////////////////////////////////////////////////////////////////////////
2
- // Copyright (C) 2026 Jean-Philippe Steinmetz
3
- // SPDX-License-Identifier: MPL-2.0
4
- ///////////////////////////////////////////////////////////////////////////////
5
- import React, { createContext, PropsWithChildren, ReactNode, useContext, useEffect, useMemo, useState } from "react";
6
- import { HiOutlineBars3 } from "react-icons/hi2";
7
- import { ApiRequestError } from "@rapidmx/react-shared/util/api.js";
8
- import Drawer from "@rapidmx/react-shared/components/overlays/Drawer.js";
9
- import { Folder, Mailbox, listFolders, listMailboxes } from "@rapidmx/react-shared/mail/mailApi.js";
10
- import Alert from "@rapidmx/react-shared/components/feedback/Alert.js";
11
- import Skeleton, { SkeletonList } from "@rapidmx/react-shared/components/feedback/Skeleton.js";
12
- import AppShell, { AppShellProps } from "../../layout/AppShell.js";
13
- import MailboxProvisioning from "../../layout/MailboxProvisioning.js";
14
-
15
- export type ContactsShellProps = Omit<AppShellProps, "active">;
16
-
17
- export interface ContactsShellContextValue {
18
- /** The mailbox currently selected (`?mailboxUid=`, or the caller's first accessible mailbox). */
19
- mailboxUid?: string;
20
- /** The selected mailbox's single `contacts`-type folder. */
21
- folderUid?: string;
22
- mailboxes: Mailbox[];
23
- }
24
-
25
- const ContactsShellContext = createContext<ContactsShellContextValue>({ mailboxes: [] });
26
-
27
- /** Reads the mailbox/folder Contacts is currently showing, as resolved by the enclosing `ContactsShell`. */
28
- export function useContactsShell(): ContactsShellContextValue {
29
- return useContext(ContactsShellContext);
30
- }
31
-
32
- type Status = "checking" | "error" | "ready";
33
-
34
- /**
35
- * The Contacts app's shell: unlike `MailShell` (a folder tree, since a mailbox has many mail folders),
36
- * a mailbox has exactly one well-known `contacts` folder — see `BaseMailboxRoute.create()`'s eager
37
- * provisioning in `@rapidmx/restapi`, which guarantees it exists for every mailbox. This shell's own
38
- * sidebar is therefore just a mailbox switcher (when the caller has more than one); the actual contact
39
- * list/detail UI is `apps/www/contacts/index.tsx`'s own content, rendered as `children` here.
40
- */
41
- export default function ContactsShell({
42
- userUid,
43
- authServerUrl,
44
- impersonating,
45
- impersonationBaseUrl,
46
- trusted,
47
- children,
48
- }: PropsWithChildren<ContactsShellProps>) {
49
- const [status, setStatus] = useState<Status>("checking");
50
- const [error, setError] = useState<string | null>(null);
51
- const [mailboxes, setMailboxes] = useState<Mailbox[]>([]);
52
- const [folders, setFolders] = useState<Folder[]>([]);
53
- const [folderError, setFolderError] = useState<string | null>(null);
54
- const [requestedMailboxUid, setRequestedMailboxUid] = useState<string | null>(null);
55
- const [drawerOpen, setDrawerOpen] = useState(false);
56
-
57
- useEffect(() => {
58
- setRequestedMailboxUid(new URLSearchParams(window.location.search).get("mailboxUid"));
59
- }, []);
60
-
61
- useEffect(() => {
62
- if (!userUid) {
63
- return;
64
- }
65
- listMailboxes({ limit: 100 })
66
- .then((result) => {
67
- setMailboxes(result);
68
- setStatus("ready");
69
- })
70
- .catch((err) => {
71
- setError(err instanceof ApiRequestError ? err.message : "Could not load your mailboxes.");
72
- setStatus("error");
73
- });
74
- }, [userUid]);
75
-
76
- const mailboxUid: string | undefined =
77
- (requestedMailboxUid && mailboxes.some((mb) => mb.uid === requestedMailboxUid) ? requestedMailboxUid : undefined) ??
78
- mailboxes[0]?.uid;
79
-
80
- useEffect(() => {
81
- if (!mailboxUid) {
82
- setFolders([]);
83
- return;
84
- }
85
- setFolderError(null);
86
- listFolders(mailboxUid)
87
- .then(setFolders)
88
- .catch((err) => setFolderError(err instanceof ApiRequestError ? err.message : "Could not load this mailbox's contacts folder."));
89
- }, [mailboxUid]);
90
-
91
- const folderUid: string | undefined = folders.find((f) => f.type === "contacts")?.uid;
92
-
93
- const contextValue = useMemo<ContactsShellContextValue>(
94
- () => ({ mailboxUid, folderUid, mailboxes }),
95
- [mailboxUid, folderUid, mailboxes],
96
- );
97
-
98
- // A full-screen takeover, not nested inside the rest of the app's chrome — there's nothing else
99
- // for a mailbox-less caller to do here yet, so the icon rail/header don't render at all.
100
- if (userUid && status === "ready" && !mailboxUid) {
101
- return <MailboxProvisioning />;
102
- }
103
-
104
- let inner: ReactNode = null;
105
- if (userUid && status === "checking") {
106
- // Renders immediately (no network round trip needed) so switching into Contacts never shows a
107
- // blank pane while `listMailboxes()` is in flight — the real sidebar (favorites/lists/categories)
108
- // lives in `apps/www/contacts/index.tsx`'s own content, so this mimics its rough shape rather
109
- // than the (minimal, mailbox-switcher-only) shape of this shell's own sidebar.
110
- inner = (
111
- <div className="w-56 shrink-0 border-r border-border flex flex-col gap-4 p-3">
112
- <Skeleton height="h-9" />
113
- <SkeletonList count={5} />
114
- </div>
115
- );
116
- } else if (userUid && status === "error") {
117
- inner = (
118
- <div className="flex-1 flex items-center justify-center p-8">
119
- <div className="w-full max-w-md">
120
- <Alert>{error}</Alert>
121
- </div>
122
- </div>
123
- );
124
- } else if (userUid && status === "ready") {
125
- // A function, not a plain JSX constant — see MailShell's identical comment: it's rendered twice
126
- // (desktop `<aside>` + mobile `Drawer`), possibly simultaneously mounted, so the `<select>`'s
127
- // `id`/its `<label>`'s `htmlFor` need a distinct value per instance to avoid a duplicate-id
128
- // label-association break.
129
- const sidebarContent = (idPrefix: string) => (
130
- <>
131
- {mailboxes.length > 1 && (
132
- <div>
133
- <label
134
- className="block text-xs font-bold uppercase tracking-wide text-text-muted mb-1"
135
- htmlFor={`${idPrefix}-contacts-mailbox-switcher`}
136
- >
137
- Mailbox
138
- </label>
139
- <select
140
- id={`${idPrefix}-contacts-mailbox-switcher`}
141
- className="w-full text-sm border border-border rounded-sm py-1.5 px-2 bg-surface"
142
- value={mailboxUid}
143
- onChange={(e) => {
144
- window.location.href = `/contacts?mailboxUid=${encodeURIComponent(e.target.value)}`;
145
- }}
146
- >
147
- {mailboxes.map((mb) => (
148
- <option key={mb.uid} value={mb.uid}>
149
- {mb.displayName}
150
- {mb.ownerUserUid ? "" : " (shared)"}
151
- </option>
152
- ))}
153
- </select>
154
- </div>
155
- )}
156
- {folderError && <Alert>{folderError}</Alert>}
157
- </>
158
- );
159
-
160
- inner = (
161
- <>
162
- <aside className="hidden md:flex w-56 shrink-0 bg-surface border-r border-border flex-col p-3 gap-3">
163
- {sidebarContent("desktop")}
164
- </aside>
165
- <Drawer open={drawerOpen} onClose={() => setDrawerOpen(false)} title="Mailbox">
166
- <div className="flex flex-col gap-3">{sidebarContent("mobile")}</div>
167
- </Drawer>
168
- <main className="flex-1 min-w-0 flex flex-col">
169
- {(mailboxes.length > 1 || folderError) && (
170
- <button
171
- type="button"
172
- className="md:hidden m-3 w-9 h-9 flex items-center justify-center rounded-sm text-text-muted hover:bg-surface-alt hover:text-text"
173
- aria-label="Open mailbox switcher"
174
- onClick={() => setDrawerOpen(true)}
175
- >
176
- <HiOutlineBars3 size={20} aria-hidden="true" />
177
- </button>
178
- )}
179
- <ContactsShellContext.Provider value={contextValue}>{children}</ContactsShellContext.Provider>
180
- </main>
181
- </>
182
- );
183
- }
184
-
185
- return (
186
- <AppShell
187
- active="contacts"
188
- userUid={userUid}
189
- authServerUrl={authServerUrl}
190
- impersonating={impersonating}
191
- impersonationBaseUrl={impersonationBaseUrl}
192
- trusted={trusted}
193
- >
194
- {inner}
195
- </AppShell>
196
- );
197
- }
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ // Copyright (C) 2026 Jean-Philippe Steinmetz
3
+ // SPDX-License-Identifier: MPL-2.0
4
+ ///////////////////////////////////////////////////////////////////////////////
5
+ import React, { createContext, PropsWithChildren, ReactNode, useContext, useEffect, useMemo, useState } from "react";
6
+ import { HiOutlineBars3 } from "react-icons/hi2";
7
+ import { ApiRequestError } from "@rapidmx/react-shared/util/api.js";
8
+ import Drawer from "@rapidmx/react-shared/components/overlays/Drawer.js";
9
+ import { Folder, Mailbox, listFolders, listMailboxes } from "@rapidmx/react-shared/mail/mailApi.js";
10
+ import Alert from "@rapidmx/react-shared/components/feedback/Alert.js";
11
+ import Skeleton, { SkeletonList } from "@rapidmx/react-shared/components/feedback/Skeleton.js";
12
+ import AppShell, { AppShellProps } from "../../layout/AppShell.js";
13
+ import MailboxProvisioning from "../../layout/MailboxProvisioning.js";
14
+
15
+ export type ContactsShellProps = Omit<AppShellProps, "active">;
16
+
17
+ export interface ContactsShellContextValue {
18
+ /** The mailbox currently selected (`?mailboxUid=`, or the caller's first accessible mailbox). */
19
+ mailboxUid?: string;
20
+ /** The selected mailbox's single `contacts`-type folder. */
21
+ folderUid?: string;
22
+ mailboxes: Mailbox[];
23
+ }
24
+
25
+ const ContactsShellContext = createContext<ContactsShellContextValue>({ mailboxes: [] });
26
+
27
+ /** Reads the mailbox/folder Contacts is currently showing, as resolved by the enclosing `ContactsShell`. */
28
+ export function useContactsShell(): ContactsShellContextValue {
29
+ return useContext(ContactsShellContext);
30
+ }
31
+
32
+ type Status = "checking" | "error" | "ready";
33
+
34
+ /**
35
+ * The Contacts app's shell: unlike `MailShell` (a folder tree, since a mailbox has many mail folders),
36
+ * a mailbox has exactly one well-known `contacts` folder — see `BaseMailboxRoute.create()`'s eager
37
+ * provisioning in `@rapidmx/restapi`, which guarantees it exists for every mailbox. This shell's own
38
+ * sidebar is therefore just a mailbox switcher (when the caller has more than one); the actual contact
39
+ * list/detail UI is `apps/www/contacts/index.tsx`'s own content, rendered as `children` here.
40
+ */
41
+ export default function ContactsShell({
42
+ userUid,
43
+ authServerUrl,
44
+ impersonating,
45
+ impersonationBaseUrl,
46
+ trusted,
47
+ pluginNav,
48
+ children,
49
+ }: PropsWithChildren<ContactsShellProps>) {
50
+ const [status, setStatus] = useState<Status>("checking");
51
+ const [error, setError] = useState<string | null>(null);
52
+ const [mailboxes, setMailboxes] = useState<Mailbox[]>([]);
53
+ const [folders, setFolders] = useState<Folder[]>([]);
54
+ const [folderError, setFolderError] = useState<string | null>(null);
55
+ const [requestedMailboxUid, setRequestedMailboxUid] = useState<string | null>(null);
56
+ const [drawerOpen, setDrawerOpen] = useState(false);
57
+
58
+ useEffect(() => {
59
+ setRequestedMailboxUid(new URLSearchParams(window.location.search).get("mailboxUid"));
60
+ }, []);
61
+
62
+ useEffect(() => {
63
+ if (!userUid) {
64
+ return;
65
+ }
66
+ listMailboxes({ limit: 100 })
67
+ .then((result) => {
68
+ setMailboxes(result);
69
+ setStatus("ready");
70
+ })
71
+ .catch((err) => {
72
+ setError(err instanceof ApiRequestError ? err.message : "Could not load your mailboxes.");
73
+ setStatus("error");
74
+ });
75
+ }, [userUid]);
76
+
77
+ const mailboxUid: string | undefined =
78
+ (requestedMailboxUid && mailboxes.some((mb) => mb.uid === requestedMailboxUid) ? requestedMailboxUid : undefined) ??
79
+ mailboxes[0]?.uid;
80
+
81
+ useEffect(() => {
82
+ if (!mailboxUid) {
83
+ setFolders([]);
84
+ return;
85
+ }
86
+ setFolderError(null);
87
+ listFolders(mailboxUid)
88
+ .then(setFolders)
89
+ .catch((err) => setFolderError(err instanceof ApiRequestError ? err.message : "Could not load this mailbox's contacts folder."));
90
+ }, [mailboxUid]);
91
+
92
+ const folderUid: string | undefined = folders.find((f) => f.type === "contacts")?.uid;
93
+
94
+ const contextValue = useMemo<ContactsShellContextValue>(
95
+ () => ({ mailboxUid, folderUid, mailboxes }),
96
+ [mailboxUid, folderUid, mailboxes],
97
+ );
98
+
99
+ // A full-screen takeover, not nested inside the rest of the app's chrome — there's nothing else
100
+ // for a mailbox-less caller to do here yet, so the icon rail/header don't render at all.
101
+ if (userUid && status === "ready" && !mailboxUid) {
102
+ return <MailboxProvisioning />;
103
+ }
104
+
105
+ let inner: ReactNode = null;
106
+ if (userUid && status === "checking") {
107
+ // Renders immediately (no network round trip needed) so switching into Contacts never shows a
108
+ // blank pane while `listMailboxes()` is in flight — the real sidebar (favorites/lists/categories)
109
+ // lives in `apps/www/contacts/index.tsx`'s own content, so this mimics its rough shape rather
110
+ // than the (minimal, mailbox-switcher-only) shape of this shell's own sidebar.
111
+ inner = (
112
+ <div className="w-56 shrink-0 border-r border-border flex flex-col gap-4 p-3">
113
+ <Skeleton height="h-9" />
114
+ <SkeletonList count={5} />
115
+ </div>
116
+ );
117
+ } else if (userUid && status === "error") {
118
+ inner = (
119
+ <div className="flex-1 flex items-center justify-center p-8">
120
+ <div className="w-full max-w-md">
121
+ <Alert>{error}</Alert>
122
+ </div>
123
+ </div>
124
+ );
125
+ } else if (userUid && status === "ready") {
126
+ // A function, not a plain JSX constant — see MailShell's identical comment: it's rendered twice
127
+ // (desktop `<aside>` + mobile `Drawer`), possibly simultaneously mounted, so the `<select>`'s
128
+ // `id`/its `<label>`'s `htmlFor` need a distinct value per instance to avoid a duplicate-id
129
+ // label-association break.
130
+ const sidebarContent = (idPrefix: string) => (
131
+ <>
132
+ {mailboxes.length > 1 && (
133
+ <div>
134
+ <label
135
+ className="block text-xs font-bold uppercase tracking-wide text-text-muted mb-1"
136
+ htmlFor={`${idPrefix}-contacts-mailbox-switcher`}
137
+ >
138
+ Mailbox
139
+ </label>
140
+ <select
141
+ id={`${idPrefix}-contacts-mailbox-switcher`}
142
+ className="w-full text-sm border border-border rounded-sm py-1.5 px-2 bg-surface"
143
+ value={mailboxUid}
144
+ onChange={(e) => {
145
+ window.location.href = `/contacts?mailboxUid=${encodeURIComponent(e.target.value)}`;
146
+ }}
147
+ >
148
+ {mailboxes.map((mb) => (
149
+ <option key={mb.uid} value={mb.uid}>
150
+ {mb.displayName}
151
+ {mb.ownerUserUid ? "" : " (shared)"}
152
+ </option>
153
+ ))}
154
+ </select>
155
+ </div>
156
+ )}
157
+ {folderError && <Alert>{folderError}</Alert>}
158
+ </>
159
+ );
160
+
161
+ inner = (
162
+ <>
163
+ <aside className="hidden md:flex w-56 shrink-0 bg-surface border-r border-border flex-col p-3 gap-3">
164
+ {sidebarContent("desktop")}
165
+ </aside>
166
+ <Drawer open={drawerOpen} onClose={() => setDrawerOpen(false)} title="Mailbox">
167
+ <div className="flex flex-col gap-3">{sidebarContent("mobile")}</div>
168
+ </Drawer>
169
+ <main className="flex-1 min-w-0 flex flex-col">
170
+ {(mailboxes.length > 1 || folderError) && (
171
+ <button
172
+ type="button"
173
+ className="md:hidden m-3 w-9 h-9 flex items-center justify-center rounded-sm text-text-muted hover:bg-surface-alt hover:text-text"
174
+ aria-label="Open mailbox switcher"
175
+ onClick={() => setDrawerOpen(true)}
176
+ >
177
+ <HiOutlineBars3 size={20} aria-hidden="true" />
178
+ </button>
179
+ )}
180
+ <ContactsShellContext.Provider value={contextValue}>{children}</ContactsShellContext.Provider>
181
+ </main>
182
+ </>
183
+ );
184
+ }
185
+
186
+ return (
187
+ <AppShell
188
+ active="contacts"
189
+ userUid={userUid}
190
+ authServerUrl={authServerUrl}
191
+ impersonating={impersonating}
192
+ impersonationBaseUrl={impersonationBaseUrl}
193
+ trusted={trusted}
194
+ pluginNav={pluginNav}
195
+ >
196
+ {inner}
197
+ </AppShell>
198
+ );
199
+ }