@bobfrankston/mailx 1.0.465 → 1.0.500

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 (344) hide show
  1. package/.globalize.json5 +25 -0
  2. package/README.md +17 -420
  3. package/bin/mailx.js +87 -84
  4. package/bin/mailx.js.map +1 -1
  5. package/bin/mailx.ts +87 -84
  6. package/client/android.html +5 -5
  7. package/client/app.js +42 -38
  8. package/client/components/folder-tree.js +7 -5
  9. package/client/components/message-list.js +485 -448
  10. package/client/components/message-viewer.js +36 -41
  11. package/client/index.html +8 -8
  12. package/client/lib/message-state.js +46 -65
  13. package/index.js +59 -0
  14. package/package.json +12 -114
  15. package/packages/mailx-send/mailsend/{package-lock.json → node_modules/.package-lock.json} +0 -16
  16. package/packages/mailx-send/mailsend/node_modules/@types/node/LICENSE +21 -0
  17. package/packages/mailx-send/mailsend/node_modules/@types/node/README.md +15 -0
  18. package/packages/mailx-send/mailsend/node_modules/@types/node/assert/strict.d.ts +111 -0
  19. package/packages/mailx-send/mailsend/node_modules/@types/node/assert.d.ts +1078 -0
  20. package/packages/mailx-send/mailsend/node_modules/@types/node/async_hooks.d.ts +603 -0
  21. package/packages/mailx-send/mailsend/node_modules/@types/node/buffer.buffer.d.ts +472 -0
  22. package/packages/mailx-send/mailsend/node_modules/@types/node/buffer.d.ts +1934 -0
  23. package/packages/mailx-send/mailsend/node_modules/@types/node/child_process.d.ts +1476 -0
  24. package/packages/mailx-send/mailsend/node_modules/@types/node/cluster.d.ts +578 -0
  25. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
  26. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/index.d.ts +9 -0
  27. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
  28. package/packages/mailx-send/mailsend/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
  29. package/packages/mailx-send/mailsend/node_modules/@types/node/console.d.ts +452 -0
  30. package/packages/mailx-send/mailsend/node_modules/@types/node/constants.d.ts +21 -0
  31. package/packages/mailx-send/mailsend/node_modules/@types/node/crypto.d.ts +4545 -0
  32. package/packages/mailx-send/mailsend/node_modules/@types/node/dgram.d.ts +600 -0
  33. package/packages/mailx-send/mailsend/node_modules/@types/node/diagnostics_channel.d.ts +578 -0
  34. package/packages/mailx-send/mailsend/node_modules/@types/node/dns/promises.d.ts +503 -0
  35. package/packages/mailx-send/mailsend/node_modules/@types/node/dns.d.ts +923 -0
  36. package/packages/mailx-send/mailsend/node_modules/@types/node/domain.d.ts +170 -0
  37. package/packages/mailx-send/mailsend/node_modules/@types/node/events.d.ts +976 -0
  38. package/packages/mailx-send/mailsend/node_modules/@types/node/fs/promises.d.ts +1295 -0
  39. package/packages/mailx-send/mailsend/node_modules/@types/node/fs.d.ts +4461 -0
  40. package/packages/mailx-send/mailsend/node_modules/@types/node/globals.d.ts +172 -0
  41. package/packages/mailx-send/mailsend/node_modules/@types/node/globals.typedarray.d.ts +38 -0
  42. package/packages/mailx-send/mailsend/node_modules/@types/node/http.d.ts +2089 -0
  43. package/packages/mailx-send/mailsend/node_modules/@types/node/http2.d.ts +2644 -0
  44. package/packages/mailx-send/mailsend/node_modules/@types/node/https.d.ts +579 -0
  45. package/packages/mailx-send/mailsend/node_modules/@types/node/index.d.ts +97 -0
  46. package/packages/mailx-send/mailsend/node_modules/@types/node/inspector.d.ts +253 -0
  47. package/packages/mailx-send/mailsend/node_modules/@types/node/inspector.generated.d.ts +4052 -0
  48. package/packages/mailx-send/mailsend/node_modules/@types/node/module.d.ts +891 -0
  49. package/packages/mailx-send/mailsend/node_modules/@types/node/net.d.ts +1057 -0
  50. package/packages/mailx-send/mailsend/node_modules/@types/node/os.d.ts +506 -0
  51. package/packages/mailx-send/mailsend/node_modules/@types/node/package.json +145 -0
  52. package/packages/mailx-send/mailsend/node_modules/@types/node/path.d.ts +200 -0
  53. package/packages/mailx-send/mailsend/node_modules/@types/node/perf_hooks.d.ts +968 -0
  54. package/packages/mailx-send/mailsend/node_modules/@types/node/process.d.ts +2084 -0
  55. package/packages/mailx-send/mailsend/node_modules/@types/node/punycode.d.ts +117 -0
  56. package/packages/mailx-send/mailsend/node_modules/@types/node/querystring.d.ts +152 -0
  57. package/packages/mailx-send/mailsend/node_modules/@types/node/readline/promises.d.ts +161 -0
  58. package/packages/mailx-send/mailsend/node_modules/@types/node/readline.d.ts +594 -0
  59. package/packages/mailx-send/mailsend/node_modules/@types/node/repl.d.ts +428 -0
  60. package/packages/mailx-send/mailsend/node_modules/@types/node/sea.d.ts +153 -0
  61. package/packages/mailx-send/mailsend/node_modules/@types/node/sqlite.d.ts +721 -0
  62. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/consumers.d.ts +38 -0
  63. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/promises.d.ts +90 -0
  64. package/packages/mailx-send/mailsend/node_modules/@types/node/stream/web.d.ts +622 -0
  65. package/packages/mailx-send/mailsend/node_modules/@types/node/stream.d.ts +1664 -0
  66. package/packages/mailx-send/mailsend/node_modules/@types/node/string_decoder.d.ts +67 -0
  67. package/packages/mailx-send/mailsend/node_modules/@types/node/test.d.ts +2163 -0
  68. package/packages/mailx-send/mailsend/node_modules/@types/node/timers/promises.d.ts +108 -0
  69. package/packages/mailx-send/mailsend/node_modules/@types/node/timers.d.ts +287 -0
  70. package/packages/mailx-send/mailsend/node_modules/@types/node/tls.d.ts +1319 -0
  71. package/packages/mailx-send/mailsend/node_modules/@types/node/trace_events.d.ts +197 -0
  72. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
  73. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
  74. package/packages/mailx-send/mailsend/node_modules/@types/node/ts5.6/index.d.ts +97 -0
  75. package/packages/mailx-send/mailsend/node_modules/@types/node/tty.d.ts +208 -0
  76. package/packages/mailx-send/mailsend/node_modules/@types/node/url.d.ts +984 -0
  77. package/packages/mailx-send/mailsend/node_modules/@types/node/util.d.ts +2606 -0
  78. package/packages/mailx-send/mailsend/node_modules/@types/node/v8.d.ts +920 -0
  79. package/packages/mailx-send/mailsend/node_modules/@types/node/vm.d.ts +1000 -0
  80. package/packages/mailx-send/mailsend/node_modules/@types/node/wasi.d.ts +181 -0
  81. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
  82. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  83. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/events.d.ts +97 -0
  84. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
  85. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
  86. package/packages/mailx-send/mailsend/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  87. package/packages/mailx-send/mailsend/node_modules/@types/node/worker_threads.d.ts +784 -0
  88. package/packages/mailx-send/mailsend/node_modules/@types/node/zlib.d.ts +747 -0
  89. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/LICENSE +21 -0
  90. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/README.md +15 -0
  91. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/index.d.ts +82 -0
  92. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/addressparser/index.d.ts +31 -0
  93. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/base64/index.d.ts +22 -0
  94. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/index.d.ts +45 -0
  95. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/message-parser.d.ts +75 -0
  96. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/relaxed-body.d.ts +75 -0
  97. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/dkim/sign.d.ts +21 -0
  98. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/fetch/cookies.d.ts +54 -0
  99. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/fetch/index.d.ts +38 -0
  100. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/json-transport/index.d.ts +53 -0
  101. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mail-composer/index.d.ts +25 -0
  102. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mailer/index.d.ts +283 -0
  103. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mailer/mail-message.d.ts +32 -0
  104. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-funcs/index.d.ts +87 -0
  105. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-funcs/mime-types.d.ts +2 -0
  106. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-node/index.d.ts +224 -0
  107. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/mime-node/last-newline.d.ts +9 -0
  108. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/qp/index.d.ts +23 -0
  109. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/index.d.ts +53 -0
  110. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/le-unix.d.ts +7 -0
  111. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/sendmail-transport/le-windows.d.ts +7 -0
  112. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/ses-transport/index.d.ts +146 -0
  113. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/shared/index.d.ts +58 -0
  114. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/data-stream.d.ts +11 -0
  115. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/http-proxy-client.d.ts +16 -0
  116. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-connection/index.d.ts +270 -0
  117. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-pool/index.d.ts +93 -0
  118. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-pool/pool-resource.d.ts +66 -0
  119. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/smtp-transport/index.d.ts +115 -0
  120. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/stream-transport/index.d.ts +59 -0
  121. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/well-known/index.d.ts +6 -0
  122. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/lib/xoauth2/index.d.ts +114 -0
  123. package/packages/mailx-send/mailsend/node_modules/@types/nodemailer/package.json +38 -0
  124. package/packages/mailx-send/mailsend/node_modules/nodemailer/.ncurc.js +9 -0
  125. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierignore +8 -0
  126. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierrc +12 -0
  127. package/packages/mailx-send/mailsend/node_modules/nodemailer/.prettierrc.js +10 -0
  128. package/packages/mailx-send/mailsend/node_modules/nodemailer/.release-please-config.json +9 -0
  129. package/packages/mailx-send/mailsend/node_modules/nodemailer/LICENSE +16 -0
  130. package/packages/mailx-send/mailsend/node_modules/nodemailer/README.md +86 -0
  131. package/packages/mailx-send/mailsend/node_modules/nodemailer/SECURITY.txt +22 -0
  132. package/packages/mailx-send/mailsend/node_modules/nodemailer/eslint.config.js +88 -0
  133. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/addressparser/index.js +383 -0
  134. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/base64/index.js +139 -0
  135. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/index.js +253 -0
  136. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/message-parser.js +155 -0
  137. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/relaxed-body.js +154 -0
  138. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/dkim/sign.js +117 -0
  139. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/fetch/cookies.js +281 -0
  140. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/fetch/index.js +280 -0
  141. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/json-transport/index.js +82 -0
  142. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mail-composer/index.js +629 -0
  143. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mailer/index.js +441 -0
  144. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mailer/mail-message.js +316 -0
  145. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-funcs/index.js +625 -0
  146. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-funcs/mime-types.js +2113 -0
  147. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/index.js +1316 -0
  148. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/last-newline.js +33 -0
  149. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/le-unix.js +43 -0
  150. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/mime-node/le-windows.js +52 -0
  151. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/nodemailer.js +157 -0
  152. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/punycode/index.js +460 -0
  153. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/qp/index.js +227 -0
  154. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/sendmail-transport/index.js +210 -0
  155. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/ses-transport/index.js +234 -0
  156. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/shared/index.js +754 -0
  157. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/data-stream.js +108 -0
  158. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/http-proxy-client.js +143 -0
  159. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-connection/index.js +1870 -0
  160. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-pool/index.js +652 -0
  161. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-pool/pool-resource.js +259 -0
  162. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/smtp-transport/index.js +421 -0
  163. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/stream-transport/index.js +135 -0
  164. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/well-known/index.js +47 -0
  165. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/well-known/services.json +611 -0
  166. package/packages/mailx-send/mailsend/node_modules/nodemailer/lib/xoauth2/index.js +427 -0
  167. package/packages/mailx-send/mailsend/node_modules/nodemailer/package.json +47 -0
  168. package/packages/mailx-send/mailsend/node_modules/undici-types/LICENSE +21 -0
  169. package/packages/mailx-send/mailsend/node_modules/undici-types/README.md +6 -0
  170. package/packages/mailx-send/mailsend/node_modules/undici-types/agent.d.ts +31 -0
  171. package/packages/mailx-send/mailsend/node_modules/undici-types/api.d.ts +43 -0
  172. package/packages/mailx-send/mailsend/node_modules/undici-types/balanced-pool.d.ts +29 -0
  173. package/packages/mailx-send/mailsend/node_modules/undici-types/cache.d.ts +36 -0
  174. package/packages/mailx-send/mailsend/node_modules/undici-types/client.d.ts +108 -0
  175. package/packages/mailx-send/mailsend/node_modules/undici-types/connector.d.ts +34 -0
  176. package/packages/mailx-send/mailsend/node_modules/undici-types/content-type.d.ts +21 -0
  177. package/packages/mailx-send/mailsend/node_modules/undici-types/cookies.d.ts +28 -0
  178. package/packages/mailx-send/mailsend/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
  179. package/packages/mailx-send/mailsend/node_modules/undici-types/dispatcher.d.ts +256 -0
  180. package/packages/mailx-send/mailsend/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
  181. package/packages/mailx-send/mailsend/node_modules/undici-types/errors.d.ts +149 -0
  182. package/packages/mailx-send/mailsend/node_modules/undici-types/eventsource.d.ts +61 -0
  183. package/packages/mailx-send/mailsend/node_modules/undici-types/fetch.d.ts +209 -0
  184. package/packages/mailx-send/mailsend/node_modules/undici-types/file.d.ts +39 -0
  185. package/packages/mailx-send/mailsend/node_modules/undici-types/filereader.d.ts +54 -0
  186. package/packages/mailx-send/mailsend/node_modules/undici-types/formdata.d.ts +108 -0
  187. package/packages/mailx-send/mailsend/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  188. package/packages/mailx-send/mailsend/node_modules/undici-types/global-origin.d.ts +7 -0
  189. package/packages/mailx-send/mailsend/node_modules/undici-types/handlers.d.ts +15 -0
  190. package/packages/mailx-send/mailsend/node_modules/undici-types/header.d.ts +4 -0
  191. package/packages/mailx-send/mailsend/node_modules/undici-types/index.d.ts +71 -0
  192. package/packages/mailx-send/mailsend/node_modules/undici-types/interceptors.d.ts +17 -0
  193. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-agent.d.ts +50 -0
  194. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-client.d.ts +25 -0
  195. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-errors.d.ts +12 -0
  196. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-interceptor.d.ts +93 -0
  197. package/packages/mailx-send/mailsend/node_modules/undici-types/mock-pool.d.ts +25 -0
  198. package/packages/mailx-send/mailsend/node_modules/undici-types/package.json +55 -0
  199. package/packages/mailx-send/mailsend/node_modules/undici-types/patch.d.ts +33 -0
  200. package/packages/mailx-send/mailsend/node_modules/undici-types/pool-stats.d.ts +19 -0
  201. package/packages/mailx-send/mailsend/node_modules/undici-types/pool.d.ts +39 -0
  202. package/packages/mailx-send/mailsend/node_modules/undici-types/proxy-agent.d.ts +28 -0
  203. package/packages/mailx-send/mailsend/node_modules/undici-types/readable.d.ts +65 -0
  204. package/packages/mailx-send/mailsend/node_modules/undici-types/retry-agent.d.ts +8 -0
  205. package/packages/mailx-send/mailsend/node_modules/undici-types/retry-handler.d.ts +116 -0
  206. package/packages/mailx-send/mailsend/node_modules/undici-types/util.d.ts +18 -0
  207. package/packages/mailx-send/mailsend/node_modules/undici-types/webidl.d.ts +228 -0
  208. package/packages/mailx-send/mailsend/node_modules/undici-types/websocket.d.ts +150 -0
  209. package/packages/mailx-server/index.js +1 -1
  210. package/packages/mailx-settings/cloud.js +12 -7
  211. package/packages/mailx-settings/index.js +22 -1
  212. package/client/.gitattributes +0 -10
  213. package/client/app.js.map +0 -1
  214. package/client/app.ts +0 -3190
  215. package/client/components/address-book.js.map +0 -1
  216. package/client/components/address-book.ts +0 -204
  217. package/client/components/alarms.js.map +0 -1
  218. package/client/components/alarms.ts +0 -276
  219. package/client/components/calendar-sidebar.js.map +0 -1
  220. package/client/components/calendar-sidebar.ts +0 -474
  221. package/client/components/calendar.js.map +0 -1
  222. package/client/components/calendar.ts +0 -211
  223. package/client/components/context-menu.js.map +0 -1
  224. package/client/components/context-menu.ts +0 -95
  225. package/client/components/folder-picker.js.map +0 -1
  226. package/client/components/folder-picker.ts +0 -127
  227. package/client/components/folder-tree.js.map +0 -1
  228. package/client/components/folder-tree.ts +0 -1069
  229. package/client/components/message-list.js.map +0 -1
  230. package/client/components/message-list.ts +0 -1129
  231. package/client/components/message-viewer.js.map +0 -1
  232. package/client/components/message-viewer.ts +0 -1257
  233. package/client/components/outbox-view.js.map +0 -1
  234. package/client/components/outbox-view.ts +0 -102
  235. package/client/components/tasks.js.map +0 -1
  236. package/client/components/tasks.ts +0 -234
  237. package/client/compose/compose.js.map +0 -1
  238. package/client/compose/compose.ts +0 -1231
  239. package/client/compose/editor.js.map +0 -1
  240. package/client/compose/editor.ts +0 -599
  241. package/client/compose/ghost-text.js.map +0 -1
  242. package/client/compose/ghost-text.ts +0 -140
  243. package/client/lib/android-bootstrap.js.map +0 -1
  244. package/client/lib/android-bootstrap.ts +0 -9
  245. package/client/lib/api-client.js.map +0 -1
  246. package/client/lib/api-client.ts +0 -439
  247. package/client/lib/local-service.js.map +0 -1
  248. package/client/lib/local-service.ts +0 -646
  249. package/client/lib/local-store.js.map +0 -1
  250. package/client/lib/local-store.ts +0 -283
  251. package/client/lib/message-state.js.map +0 -1
  252. package/client/lib/message-state.ts +0 -160
  253. package/client/tsconfig.json +0 -19
  254. package/packages/mailx-api/.gitattributes +0 -10
  255. package/packages/mailx-api/index.d.ts.map +0 -1
  256. package/packages/mailx-api/index.js.map +0 -1
  257. package/packages/mailx-api/index.ts +0 -283
  258. package/packages/mailx-api/tsconfig.json +0 -9
  259. package/packages/mailx-compose/.gitattributes +0 -10
  260. package/packages/mailx-compose/index.d.ts.map +0 -1
  261. package/packages/mailx-compose/index.js.map +0 -1
  262. package/packages/mailx-compose/index.ts +0 -85
  263. package/packages/mailx-compose/tsconfig.json +0 -9
  264. package/packages/mailx-host/.gitattributes +0 -10
  265. package/packages/mailx-host/index.d.ts +0 -21
  266. package/packages/mailx-host/index.d.ts.map +0 -1
  267. package/packages/mailx-host/index.js +0 -29
  268. package/packages/mailx-host/index.js.map +0 -1
  269. package/packages/mailx-host/index.ts +0 -38
  270. package/packages/mailx-host/package.json +0 -23
  271. package/packages/mailx-host/tsconfig.json +0 -9
  272. package/packages/mailx-host/types-shim.d.ts +0 -14
  273. package/packages/mailx-imap/.gitattributes +0 -10
  274. package/packages/mailx-imap/index.d.ts +0 -442
  275. package/packages/mailx-imap/index.d.ts.map +0 -1
  276. package/packages/mailx-imap/index.js +0 -3684
  277. package/packages/mailx-imap/index.js.map +0 -1
  278. package/packages/mailx-imap/index.ts +0 -3652
  279. package/packages/mailx-imap/package-lock.json +0 -131
  280. package/packages/mailx-imap/package.json +0 -28
  281. package/packages/mailx-imap/providers/gmail-api.d.ts +0 -8
  282. package/packages/mailx-imap/providers/gmail-api.d.ts.map +0 -1
  283. package/packages/mailx-imap/providers/gmail-api.js +0 -8
  284. package/packages/mailx-imap/providers/gmail-api.js.map +0 -1
  285. package/packages/mailx-imap/providers/gmail-api.ts +0 -8
  286. package/packages/mailx-imap/providers/outlook-api.ts +0 -7
  287. package/packages/mailx-imap/providers/types.d.ts +0 -9
  288. package/packages/mailx-imap/providers/types.d.ts.map +0 -1
  289. package/packages/mailx-imap/providers/types.js +0 -9
  290. package/packages/mailx-imap/providers/types.js.map +0 -1
  291. package/packages/mailx-imap/providers/types.ts +0 -9
  292. package/packages/mailx-imap/tsconfig.json +0 -9
  293. package/packages/mailx-imap/tsconfig.tsbuildinfo +0 -1
  294. package/packages/mailx-send/.gitattributes +0 -10
  295. package/packages/mailx-send/cli-queue.d.ts.map +0 -1
  296. package/packages/mailx-send/cli-queue.js.map +0 -1
  297. package/packages/mailx-send/cli-queue.ts +0 -62
  298. package/packages/mailx-send/cli-send.d.ts.map +0 -1
  299. package/packages/mailx-send/cli-send.js.map +0 -1
  300. package/packages/mailx-send/cli-send.ts +0 -83
  301. package/packages/mailx-send/cli.d.ts.map +0 -1
  302. package/packages/mailx-send/cli.js.map +0 -1
  303. package/packages/mailx-send/cli.ts +0 -126
  304. package/packages/mailx-send/index.d.ts.map +0 -1
  305. package/packages/mailx-send/index.js.map +0 -1
  306. package/packages/mailx-send/index.ts +0 -333
  307. package/packages/mailx-send/mailsend/cli.d.ts.map +0 -1
  308. package/packages/mailx-send/mailsend/cli.js.map +0 -1
  309. package/packages/mailx-send/mailsend/cli.ts +0 -81
  310. package/packages/mailx-send/mailsend/index.d.ts.map +0 -1
  311. package/packages/mailx-send/mailsend/index.js.map +0 -1
  312. package/packages/mailx-send/mailsend/index.ts +0 -333
  313. package/packages/mailx-send/mailsend/tsconfig.json +0 -21
  314. package/packages/mailx-send/package-lock.json +0 -65
  315. package/packages/mailx-send/tsconfig.json +0 -21
  316. package/packages/mailx-server/.gitattributes +0 -10
  317. package/packages/mailx-server/index.d.ts.map +0 -1
  318. package/packages/mailx-server/index.js.map +0 -1
  319. package/packages/mailx-server/index.ts +0 -429
  320. package/packages/mailx-server/tsconfig.json +0 -9
  321. package/packages/mailx-settings/.gitattributes +0 -10
  322. package/packages/mailx-settings/cloud.d.ts.map +0 -1
  323. package/packages/mailx-settings/cloud.js.map +0 -1
  324. package/packages/mailx-settings/cloud.ts +0 -388
  325. package/packages/mailx-settings/index.d.ts.map +0 -1
  326. package/packages/mailx-settings/index.js.map +0 -1
  327. package/packages/mailx-settings/index.ts +0 -892
  328. package/packages/mailx-settings/tsconfig.json +0 -9
  329. package/packages/mailx-store/.gitattributes +0 -10
  330. package/packages/mailx-store/db.d.ts.map +0 -1
  331. package/packages/mailx-store/db.js.map +0 -1
  332. package/packages/mailx-store/db.ts +0 -2007
  333. package/packages/mailx-store/file-store.d.ts.map +0 -1
  334. package/packages/mailx-store/file-store.js.map +0 -1
  335. package/packages/mailx-store/file-store.ts +0 -82
  336. package/packages/mailx-store/index.d.ts.map +0 -1
  337. package/packages/mailx-store/index.js.map +0 -1
  338. package/packages/mailx-store/index.ts +0 -7
  339. package/packages/mailx-store/tsconfig.json +0 -9
  340. package/packages/mailx-types/.gitattributes +0 -10
  341. package/packages/mailx-types/index.d.ts.map +0 -1
  342. package/packages/mailx-types/index.js.map +0 -1
  343. package/packages/mailx-types/index.ts +0 -498
  344. package/packages/mailx-types/tsconfig.json +0 -9
@@ -1 +0,0 @@
1
- {"version":3,"file":"editor.js","sourceRoot":"","sources":["editor.ts"],"names":[],"mappings":"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"}
@@ -1,599 +0,0 @@
1
- /**
2
- * Editor abstraction — wraps Quill or tiptap behind a common interface.
3
- * The compose window loads this module and calls createEditor() based on the user's setting.
4
- */
5
-
6
- export interface MailxEditor {
7
- setHtml(html: string): void;
8
- getHtml(): string;
9
- getText(): string;
10
- focus(): void;
11
- setCursor(pos: number): void;
12
- /** The editor's root editable element (for checking content) */
13
- root: HTMLElement;
14
- /** The scrollable container for positioning ghost text */
15
- getScrollContainer(): HTMLElement;
16
- /** Register a handler for content changes */
17
- onContentChange(handler: () => void): void;
18
- /** Register a keydown handler on the editor */
19
- onKeyDown(handler: (e: KeyboardEvent) => void): void;
20
- /** Insert plain text at the current cursor position */
21
- insertTextAtCursor(text: string): void;
22
- }
23
-
24
- // ── Quill ──
25
-
26
- declare const Quill: any;
27
-
28
- /** URL-ish test: accepts http(s)://, mailto:, tel:, and bare domains with a dot. */
29
- function looksLikeUrl(s: string): boolean {
30
- const t = s.trim();
31
- if (!t) return false;
32
- if (/^(https?|mailto|tel):/i.test(t)) return true;
33
- // bare domain (e.g. "example.com/path") — require a dot and no internal whitespace
34
- return /^[\w-]+(\.[\w-]+)+(\/\S*)?$/.test(t);
35
- }
36
- function normalizeUrl(s: string): string {
37
- const t = s.trim();
38
- if (!t) return t;
39
- if (/^(https?|mailto|tel):/i.test(t)) return t;
40
- if (/^[\w.+-]+@[\w-]+(\.[\w-]+)+$/.test(t)) return `mailto:${t}`;
41
- return `https://${t}`;
42
- }
43
-
44
- /** Floating modal that edits both link text and URL. Returns null on Cancel,
45
- * { text, url } on OK, or { text: "", url: "" } on "Remove link". */
46
- function openLinkDialog(initialText: string, initialUrl: string): Promise<{ text: string; url: string; remove?: boolean } | null> {
47
- return new Promise(resolve => {
48
- const backdrop = document.createElement("div");
49
- backdrop.className = "mailx-modal-backdrop";
50
- const panel = document.createElement("div");
51
- panel.className = "mailx-modal";
52
- panel.innerHTML = `
53
- <div class="mailx-modal-title">Edit link</div>
54
- <label class="mailx-modal-label">Text
55
- <input type="text" class="mailx-modal-input" id="mailx-link-text">
56
- </label>
57
- <label class="mailx-modal-label">URL
58
- <input type="text" class="mailx-modal-input" id="mailx-link-url" spellcheck="false" autocomplete="off">
59
- </label>
60
- <div class="mailx-modal-buttons">
61
- <button type="button" class="mailx-modal-btn" data-action="remove">Remove link</button>
62
- <span class="mailx-modal-spacer"></span>
63
- <button type="button" class="mailx-modal-btn" data-action="cancel">Cancel</button>
64
- <button type="button" class="mailx-modal-btn mailx-modal-btn-primary" data-action="ok">OK</button>
65
- </div>`;
66
- backdrop.appendChild(panel);
67
- document.body.appendChild(backdrop);
68
-
69
- const textInput = panel.querySelector<HTMLInputElement>("#mailx-link-text")!;
70
- const urlInput = panel.querySelector<HTMLInputElement>("#mailx-link-url")!;
71
- textInput.value = initialText;
72
- urlInput.value = initialUrl;
73
-
74
- const close = (result: { text: string; url: string; remove?: boolean } | null) => {
75
- backdrop.remove();
76
- document.removeEventListener("keydown", onKey, true);
77
- resolve(result);
78
- };
79
- const commit = () => close({ text: textInput.value, url: normalizeUrl(urlInput.value) });
80
- const onKey = (e: KeyboardEvent) => {
81
- if (e.key === "Escape") { e.stopPropagation(); e.preventDefault(); close(null); }
82
- else if (e.key === "Enter") { e.stopPropagation(); e.preventDefault(); commit(); }
83
- };
84
- document.addEventListener("keydown", onKey, true);
85
-
86
- panel.querySelectorAll<HTMLButtonElement>(".mailx-modal-btn").forEach(btn => {
87
- btn.addEventListener("click", () => {
88
- const action = btn.dataset.action;
89
- if (action === "cancel") close(null);
90
- else if (action === "remove") close({ text: textInput.value, url: "", remove: true });
91
- else commit();
92
- });
93
- });
94
- backdrop.addEventListener("mousedown", (e) => { if (e.target === backdrop) close(null); });
95
- // Focus URL if we have text, else text first
96
- (initialText ? urlInput : textInput).focus();
97
- (initialText ? urlInput : textInput).select();
98
- });
99
- }
100
-
101
- function createQuillEditor(container: HTMLElement): MailxEditor {
102
- /** Open the link dialog for the current selection or cursor. If range has
103
- * a selection, prefill text from the selected text; if cursor is inside
104
- * a link, prefill both from the link's range. */
105
- const openLinkForRange = async (quill: any, range: any) => {
106
- if (!range) return;
107
- // Expand a bare cursor inside a link to the full link range
108
- let linkRange = range;
109
- const format = quill.getFormat(range);
110
- if (range.length === 0 && format.link) {
111
- // Walk left and right to find the link extent
112
- const [leaf, offset] = quill.getLeaf(range.index);
113
- if (leaf) {
114
- // Build a range that spans the whole link
115
- const text = quill.getText();
116
- let start = range.index, end = range.index;
117
- while (start > 0 && quill.getFormat(start - 1, 1).link === format.link) start--;
118
- while (end < text.length - 1 && quill.getFormat(end, 1).link === format.link) end++;
119
- linkRange = { index: start, length: end - start };
120
- }
121
- }
122
- const currentText = linkRange.length ? quill.getText(linkRange.index, linkRange.length).replace(/\n$/, "") : "";
123
- const currentUrl = format.link || "";
124
- const result = await openLinkDialog(currentText, currentUrl);
125
- if (!result) return;
126
- if (result.remove) {
127
- if (linkRange.length) quill.formatText(linkRange.index, linkRange.length, "link", false);
128
- return;
129
- }
130
- if (!result.url) return;
131
- const newText = result.text || result.url;
132
- if (linkRange.length) {
133
- // Replace the existing text+link with new text+link
134
- quill.deleteText(linkRange.index, linkRange.length);
135
- quill.insertText(linkRange.index, newText, { link: result.url });
136
- quill.setSelection(linkRange.index + newText.length, 0);
137
- } else {
138
- quill.insertText(linkRange.index, newText, { link: result.url });
139
- quill.setSelection(linkRange.index + newText.length, 0);
140
- }
141
- };
142
-
143
- // Extra keybindings for formatting that Quill doesn't wire up by default.
144
- // Ctrl+K (insert/edit link) is the one most users expect; we also add shortcuts
145
- // for strikethrough, lists, indent, color, and clear-formatting.
146
- const extraBindings: any = {
147
- insertLink: {
148
- key: "K", shortKey: true,
149
- handler: function (this: any, range: any) {
150
- openLinkForRange(this.quill, range);
151
- },
152
- },
153
- removeLink: {
154
- key: "K", shortKey: true, shiftKey: true,
155
- handler: function (this: any) { this.quill.format("link", false); },
156
- },
157
- strike: {
158
- key: "X", shortKey: true, shiftKey: true,
159
- handler: function (this: any, range: any) {
160
- if (!range) return true;
161
- const cur = this.quill.getFormat(range).strike;
162
- this.quill.format("strike", !cur);
163
- },
164
- },
165
- orderedList: {
166
- key: "7", shortKey: true, shiftKey: true,
167
- handler: function (this: any) { this.quill.format("list", "ordered"); },
168
- },
169
- bulletList: {
170
- key: "8", shortKey: true, shiftKey: true,
171
- handler: function (this: any) { this.quill.format("list", "bullet"); },
172
- },
173
- indent: {
174
- key: "]", shortKey: true,
175
- handler: function (this: any, range: any, context: any) {
176
- this.quill.format("indent", (context.format.indent || 0) + 1);
177
- },
178
- },
179
- outdent: {
180
- key: "[", shortKey: true,
181
- handler: function (this: any, range: any, context: any) {
182
- this.quill.format("indent", Math.max(0, (context.format.indent || 0) - 1));
183
- },
184
- },
185
- color: {
186
- key: "C", shortKey: true, shiftKey: true,
187
- handler: function (this: any, range: any) {
188
- if (!range) return true;
189
- const current = this.quill.getFormat(range).color || "";
190
- const color = prompt("Text color (name or #hex, blank to clear):", current);
191
- if (color === null) return;
192
- this.quill.format("color", color || false);
193
- },
194
- },
195
- clearFormat: {
196
- key: "\\", shortKey: true,
197
- handler: function (this: any, range: any) {
198
- if (!range) return true;
199
- this.quill.removeFormat(range.index, range.length || 0);
200
- },
201
- },
202
- };
203
-
204
- const q = new Quill(container, {
205
- theme: "snow",
206
- placeholder: "Write your message...",
207
- modules: {
208
- toolbar: [
209
- [{ font: [] }, { size: ["small", false, "large", "huge"] }],
210
- [{ header: [1, 2, 3, false] }],
211
- ["bold", "italic", "underline", "strike"],
212
- [{ color: [] }, { background: [] }],
213
- [{ list: "ordered" }, { list: "bullet" }],
214
- [{ align: [] }],
215
- ["blockquote", "link", "image"],
216
- ["clean"]
217
- ],
218
- keyboard: { bindings: extraBindings },
219
- }
220
- });
221
-
222
- // Make toolbar buttons non-tabbable so Tab goes straight to editor body
223
- document.querySelectorAll(".ql-toolbar button, .ql-toolbar select, .ql-toolbar .ql-picker-label").forEach(
224
- el => (el as HTMLElement).setAttribute("tabindex", "-1")
225
- );
226
-
227
- // Native spell-check: WebView2 / Chromium underlines misspellings and the
228
- // right-click menu offers "Add to dictionary". Quill clears spellcheck on
229
- // its root by default AND may re-clear it asynchronously as part of its
230
- // setup (user-reported "spell-check broken again" with the one-shot set).
231
- // Set once now, again after the frame flushes so post-init clears can't
232
- // win, and install a MutationObserver to re-assert if anything later
233
- // strips the attribute. Cheap — fires at most on each clear.
234
- const applySpellcheck = () => {
235
- if (q.root.getAttribute("spellcheck") !== "true") q.root.setAttribute("spellcheck", "true");
236
- if (q.root.getAttribute("autocorrect") !== "on") q.root.setAttribute("autocorrect", "on");
237
- if (q.root.getAttribute("autocapitalize") !== "on") q.root.setAttribute("autocapitalize", "on");
238
- };
239
- applySpellcheck();
240
- requestAnimationFrame(applySpellcheck);
241
- setTimeout(applySpellcheck, 100);
242
- const spellObs = new MutationObserver(() => applySpellcheck());
243
- spellObs.observe(q.root, { attributes: true, attributeFilter: ["spellcheck", "autocorrect", "autocapitalize"] });
244
-
245
- // Toolbar link button: open our modal instead of Quill's built-in URL prompt.
246
- const toolbar = q.getModule("toolbar");
247
- toolbar?.addHandler("link", function (this: any) {
248
- openLinkForRange(q, q.getSelection() || { index: q.getLength() - 1, length: 0 });
249
- });
250
-
251
- // Paste handling:
252
- // - text/html clipboard with exactly one anchor (the common "copy a link
253
- // with anchor text from a webpage" case): take it over from Quill —
254
- // Quill's clipboard module was producing duplicates ("click here" as
255
- // text PLUS a separate "https://example.com" as a link tail). Insert
256
- // the anchor's text content as a single linked run.
257
- // - text/html with richer content: defer to Quill (preserves formatting).
258
- // - text/plain that's a URL: insert as a link, optionally wrapping any
259
- // currently-selected text.
260
- // - Anything else: default Quill behavior (verbatim plain or HTML).
261
- // C36: AI proofread on right-click → "Proofread selection" item.
262
- // Uses the existing aiTransform IPC. Gated by autocomplete.proofreadEnabled.
263
- q.root.addEventListener("contextmenu", async (e: MouseEvent) => {
264
- try {
265
- const sel = q.getSelection();
266
- if (!sel || sel.length === 0) return; // no selection — let native menu handle
267
- const settingsRaw = localStorage.getItem("mailx-ai-proofread-enabled");
268
- if (settingsRaw !== "true") return; // feature off
269
- const text = q.getText(sel.index, sel.length);
270
- if (!text.trim()) return;
271
- e.preventDefault();
272
- // Inline action menu next to the cursor
273
- const menu = document.createElement("div");
274
- menu.style.cssText = `position:fixed;z-index:2500;background:var(--color-bg);color:var(--color-text);border:1px solid var(--color-border);border-radius:6px;box-shadow:0 4px 16px rgba(0,0,0,0.2);padding:4px 0;font-size:13px;min-width:160px;`;
275
- menu.style.left = `${e.clientX}px`;
276
- menu.style.top = `${e.clientY}px`;
277
- const item = document.createElement("div");
278
- item.textContent = "Proofread selection";
279
- item.style.cssText = `padding:6px 12px;cursor:pointer;`;
280
- item.addEventListener("mouseenter", () => item.style.background = "var(--color-bg-hover)");
281
- item.addEventListener("mouseleave", () => item.style.background = "");
282
- item.addEventListener("click", async () => {
283
- menu.remove();
284
- try {
285
- const { aiTransform } = await import("../lib/api-client.js");
286
- const r = await aiTransform({ action: "proofread", text });
287
- if (r?.text && r.text !== text) {
288
- q.deleteText(sel.index, sel.length);
289
- q.insertText(sel.index, r.text);
290
- q.setSelection(sel.index, r.text.length);
291
- } else if (r?.reason) {
292
- alert(`Proofread: ${r.reason}`);
293
- }
294
- } catch (err: any) {
295
- alert(`Proofread failed: ${err?.message || err}`);
296
- }
297
- });
298
- menu.appendChild(item);
299
- document.body.appendChild(menu);
300
- const dismiss = () => { menu.remove(); document.removeEventListener("mousedown", dismiss); };
301
- setTimeout(() => document.addEventListener("mousedown", dismiss), 0);
302
- } catch { /* fall through to native menu */ }
303
- });
304
-
305
- // IMPORTANT: register on the capture phase AND use stopImmediatePropagation
306
- // when we handle the paste ourselves. Quill 2.x's clipboard module attaches
307
- // its own listener on the same root element; preventDefault only stops the
308
- // browser's default contenteditable insertion, NOT Quill's parallel listener.
309
- // Without stopImmediatePropagation the two handlers fire independently and
310
- // both insert — user sees the URL twice. Capture phase guarantees we run
311
- // before Quill so stopImmediatePropagation actually blocks it.
312
- q.root.addEventListener("paste", (e: ClipboardEvent) => {
313
- const cb = e.clipboardData;
314
- if (!cb) return;
315
-
316
- // Helper: call when we've handled the paste ourselves. Stops Quill's
317
- // own listener from also processing the same event.
318
- const consume = () => {
319
- e.preventDefault();
320
- e.stopImmediatePropagation();
321
- };
322
-
323
- // Q3: image-on-clipboard → inline as data: URL.
324
- for (const item of Array.from(cb.items)) {
325
- if (item.kind === "file" && item.type.startsWith("image/")) {
326
- const file = item.getAsFile();
327
- if (!file) continue;
328
- consume();
329
- const reader = new FileReader();
330
- reader.onload = () => {
331
- const dataUrl = String(reader.result || "");
332
- const range = q.getSelection(true) || { index: q.getLength(), length: 0 };
333
- q.insertEmbed(range.index, "image", dataUrl);
334
- q.setSelection(range.index + 1, 0);
335
- };
336
- reader.readAsDataURL(file);
337
- return;
338
- }
339
- }
340
-
341
- const html = cb.getData("text/html");
342
- const plain = cb.getData("text/plain");
343
-
344
- if (html) {
345
- // Detect "single anchor" clipboard — copy from a browser usually
346
- // produces something like:
347
- // <meta charset='utf-8'><a href="https://example.com">click here</a>
348
- // or wrapped in <html><body>. Parse and check.
349
- try {
350
- const tmp = document.createElement("div");
351
- tmp.innerHTML = html;
352
- // Strip script/style, then unwrap <html>/<body> noise.
353
- const root = tmp.querySelector("body") || tmp;
354
- // Walk for the only meaningful element
355
- const meaningful = Array.from(root.childNodes).filter(n => {
356
- if (n.nodeType === Node.TEXT_NODE) return (n.textContent || "").trim().length > 0;
357
- if (n.nodeType === Node.ELEMENT_NODE) {
358
- const tag = (n as Element).tagName.toLowerCase();
359
- return tag !== "meta" && tag !== "style" && tag !== "script";
360
- }
361
- return false;
362
- });
363
- if (meaningful.length === 1 && (meaningful[0] as HTMLElement).tagName?.toLowerCase() === "a") {
364
- const a = meaningful[0] as HTMLAnchorElement;
365
- const href = a.getAttribute("href") || "";
366
- const text = (a.textContent || "").trim();
367
- if (href && text) {
368
- consume();
369
- const range = q.getSelection(true);
370
- if (!range) return;
371
- if (range.length > 0) {
372
- // Selected text exists — replace with the linked anchor text
373
- q.deleteText(range.index, range.length);
374
- }
375
- q.insertText(range.index, text, { link: href });
376
- q.setSelection(range.index + text.length, 0);
377
- return;
378
- }
379
- }
380
- // Single text-node wrapping the URL — common when copying from
381
- // browser address bar (Chrome ships text/html as
382
- // `<meta><span>URL</span>` alongside text/plain). Fall through
383
- // to the plain-URL path below instead of letting Quill insert
384
- // the bare URL text AND our handler insert it linked — which
385
- // is exactly the double-paste the user reported.
386
- const textOnly = (root.textContent || "").trim();
387
- if (textOnly && looksLikeUrl(textOnly) && !root.querySelector("a")) {
388
- consume();
389
- const range = q.getSelection(true);
390
- if (!range) return;
391
- const url = normalizeUrl(textOnly);
392
- if (range.length > 0) {
393
- q.formatText(range.index, range.length, "link", url);
394
- q.setSelection(range.index + range.length, 0);
395
- } else {
396
- q.insertText(range.index, textOnly, { link: url });
397
- q.setSelection(range.index + textOnly.length, 0);
398
- }
399
- return;
400
- }
401
- } catch { /* fall through to Quill default */ }
402
- return; // Quill handles richer HTML clipboard (no consume → Quill runs)
403
- }
404
-
405
- if (plain && looksLikeUrl(plain)) {
406
- consume();
407
- const range = q.getSelection(true);
408
- if (!range) return;
409
- const url = normalizeUrl(plain);
410
- if (range.length > 0) {
411
- // Preserve existing selection text, just format it as a link
412
- q.formatText(range.index, range.length, "link", url);
413
- q.setSelection(range.index + range.length, 0);
414
- } else {
415
- q.insertText(range.index, plain.trim(), { link: url });
416
- q.setSelection(range.index + plain.trim().length, 0);
417
- }
418
- }
419
- }, true); // capture=true — run before Quill's own paste listener
420
-
421
- // Hover preview: show the target URL in a floating tooltip when the
422
- // pointer is over a link. Built on top of native mouseover/mouseout
423
- // rather than Quill's ql-tooltip (which is keyboard-triggered).
424
- let hoverTip: HTMLElement | null = null;
425
- q.root.addEventListener("mouseover", (e: MouseEvent) => {
426
- const a = (e.target as HTMLElement).closest("a[href]") as HTMLAnchorElement | null;
427
- if (!a) return;
428
- if (hoverTip) hoverTip.remove();
429
- hoverTip = document.createElement("div");
430
- hoverTip.className = "mailx-link-hover";
431
- hoverTip.textContent = a.getAttribute("href") || "";
432
- document.body.appendChild(hoverTip);
433
- const rect = a.getBoundingClientRect();
434
- hoverTip.style.left = `${Math.max(8, rect.left)}px`;
435
- hoverTip.style.top = `${rect.bottom + 4}px`;
436
- });
437
- q.root.addEventListener("mouseout", (e: MouseEvent) => {
438
- const to = e.relatedTarget as HTMLElement | null;
439
- if (to && to.closest("a[href]")) return;
440
- if (hoverTip) { hoverTip.remove(); hoverTip = null; }
441
- });
442
-
443
- return {
444
- setHtml(html: string): void {
445
- q.clipboard.dangerouslyPasteHTML(html);
446
- },
447
- getHtml(): string {
448
- return q.root.innerHTML;
449
- },
450
- getText(): string {
451
- return q.getText();
452
- },
453
- focus(): void {
454
- q.focus();
455
- },
456
- setCursor(pos: number): void {
457
- q.setSelection(pos, 0);
458
- },
459
- root: q.root,
460
- getScrollContainer(): HTMLElement {
461
- return q.root;
462
- },
463
- onContentChange(handler: () => void): void {
464
- q.on("text-change", handler);
465
- },
466
- onKeyDown(handler: (e: KeyboardEvent) => void): void {
467
- q.root.addEventListener("keydown", handler);
468
- },
469
- insertTextAtCursor(text: string): void {
470
- const sel = q.getSelection();
471
- if (sel) q.insertText(sel.index, text);
472
- }
473
- };
474
- }
475
-
476
- // ── tiptap ──
477
-
478
- async function createTiptapEditor(container: HTMLElement): Promise<MailxEditor> {
479
- // tiptap loaded via CDN — use global UMD bundles
480
- const { Editor } = (window as any).tiptapCore;
481
- const { StarterKit } = (window as any).tiptapStarterKit;
482
- const { Link } = (window as any).tiptapExtensionLink;
483
- const { Image } = (window as any).tiptapExtensionImage;
484
- const { Underline } = (window as any).tiptapExtensionUnderline;
485
- const { Placeholder } = (window as any).tiptapExtensionPlaceholder;
486
-
487
- // Build toolbar
488
- const toolbar = document.createElement("div");
489
- toolbar.className = "tt-toolbar";
490
- toolbar.innerHTML = `
491
- <select class="tt-heading" tabindex="-1">
492
- <option value="p">Normal</option>
493
- <option value="1">Heading 1</option>
494
- <option value="2">Heading 2</option>
495
- <option value="3">Heading 3</option>
496
- </select>
497
- <button class="tt-btn" data-cmd="bold" title="Bold" tabindex="-1"><b>B</b></button>
498
- <button class="tt-btn" data-cmd="italic" title="Italic" tabindex="-1"><i>I</i></button>
499
- <button class="tt-btn" data-cmd="underline" title="Underline" tabindex="-1"><u>U</u></button>
500
- <button class="tt-btn" data-cmd="strike" title="Strikethrough" tabindex="-1"><s>S</s></button>
501
- <button class="tt-btn" data-cmd="bulletList" title="Bullet list" tabindex="-1">&#8226;</button>
502
- <button class="tt-btn" data-cmd="orderedList" title="Ordered list" tabindex="-1">1.</button>
503
- <button class="tt-btn" data-cmd="blockquote" title="Blockquote" tabindex="-1">&ldquo;</button>
504
- <button class="tt-btn" data-cmd="link" title="Link" tabindex="-1">&#128279;</button>
505
- <button class="tt-btn" data-cmd="clearFormat" title="Clear formatting" tabindex="-1">&#8999;</button>
506
- `;
507
-
508
- // Content area
509
- const content = document.createElement("div");
510
- content.className = "tt-content";
511
-
512
- container.appendChild(toolbar);
513
- container.appendChild(content);
514
-
515
- const ed = new Editor({
516
- element: content,
517
- extensions: [
518
- StarterKit,
519
- Link.configure({ openOnClick: false }),
520
- Image,
521
- Underline,
522
- Placeholder.configure({ placeholder: "Write your message..." }),
523
- ],
524
- content: "",
525
- });
526
-
527
- // Wire toolbar buttons
528
- toolbar.querySelectorAll(".tt-btn").forEach((btn: Element) => {
529
- btn.addEventListener("mousedown", (e) => {
530
- e.preventDefault();
531
- const cmd = (btn as HTMLElement).dataset.cmd;
532
- switch (cmd) {
533
- case "bold": ed.chain().focus().toggleBold().run(); break;
534
- case "italic": ed.chain().focus().toggleItalic().run(); break;
535
- case "underline": ed.chain().focus().toggleUnderline().run(); break;
536
- case "strike": ed.chain().focus().toggleStrike().run(); break;
537
- case "bulletList": ed.chain().focus().toggleBulletList().run(); break;
538
- case "orderedList": ed.chain().focus().toggleOrderedList().run(); break;
539
- case "blockquote": ed.chain().focus().toggleBlockquote().run(); break;
540
- case "link": {
541
- const url = prompt("URL:");
542
- if (url) ed.chain().focus().setLink({ href: url }).run();
543
- break;
544
- }
545
- case "clearFormat": ed.chain().focus().clearNodes().unsetAllMarks().run(); break;
546
- }
547
- });
548
- });
549
-
550
- // Wire heading select
551
- const headingSelect = toolbar.querySelector(".tt-heading") as HTMLSelectElement;
552
- headingSelect?.addEventListener("change", () => {
553
- const val = headingSelect.value;
554
- if (val === "p") ed.chain().focus().setParagraph().run();
555
- else ed.chain().focus().toggleHeading({ level: parseInt(val) as 1 | 2 | 3 }).run();
556
- });
557
-
558
- const editorEl = content.querySelector(".tiptap") as HTMLElement || content;
559
-
560
- return {
561
- setHtml(html: string): void {
562
- ed.commands.setContent(html);
563
- },
564
- getHtml(): string {
565
- return ed.getHTML();
566
- },
567
- getText(): string {
568
- return ed.getText();
569
- },
570
- focus(): void {
571
- ed.commands.focus("start");
572
- },
573
- setCursor(pos: number): void {
574
- ed.commands.focus("start");
575
- },
576
- root: editorEl,
577
- getScrollContainer(): HTMLElement {
578
- return editorEl;
579
- },
580
- onContentChange(handler: () => void): void {
581
- ed.on("update", handler);
582
- },
583
- onKeyDown(handler: (e: KeyboardEvent) => void): void {
584
- editorEl.addEventListener("keydown", handler);
585
- },
586
- insertTextAtCursor(text: string): void {
587
- ed.commands.insertContent(text);
588
- }
589
- };
590
- }
591
-
592
- // ── Factory ──
593
-
594
- export async function createEditor(container: HTMLElement, type: "quill" | "tiptap"): Promise<MailxEditor> {
595
- if (type === "tiptap") {
596
- return createTiptapEditor(container);
597
- }
598
- return createQuillEditor(container);
599
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"ghost-text.js","sourceRoot":"","sources":["ghost-text.ts"],"names":[],"mappings":"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"}