@limetech/lime-elements 39.0.3 → 39.1.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 (254) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/cjs/index-nxo2UO7I.js +20355 -0
  3. package/dist/cjs/lime-elements.cjs.js +1 -1
  4. package/dist/cjs/limel-action-bar_2.cjs.entry.js +4 -4
  5. package/dist/cjs/limel-ai-avatar.cjs.entry.js +1 -1
  6. package/dist/cjs/limel-breadcrumbs_7.cjs.entry.js +6 -6
  7. package/dist/cjs/limel-callout.cjs.entry.js +1 -1
  8. package/dist/cjs/limel-chart.cjs.entry.js +1 -1
  9. package/dist/cjs/limel-chip_2.cjs.entry.js +1 -1
  10. package/dist/cjs/limel-code-editor.cjs.entry.js +1 -1
  11. package/dist/cjs/limel-collapsible-section.cjs.entry.js +2 -2
  12. package/dist/cjs/limel-drag-handle.cjs.entry.js +1 -1
  13. package/dist/cjs/limel-email-viewer.cjs.entry.js +351 -0
  14. package/dist/cjs/limel-file-dropzone_2.cjs.entry.js +2 -2
  15. package/dist/cjs/limel-file-viewer.cjs.entry.js +4967 -26
  16. package/dist/cjs/limel-file.cjs.entry.js +2 -2
  17. package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +1 -1
  18. package/dist/cjs/limel-flex-container.cjs.entry.js +1 -1
  19. package/dist/cjs/limel-form.cjs.entry.js +1 -1
  20. package/dist/cjs/limel-grid.cjs.entry.js +1 -1
  21. package/dist/cjs/limel-header.cjs.entry.js +1 -1
  22. package/dist/cjs/limel-help-content.cjs.entry.js +1 -1
  23. package/dist/cjs/limel-help.cjs.entry.js +2 -2
  24. package/dist/cjs/limel-helper-line_2.cjs.entry.js +3 -3
  25. package/dist/cjs/limel-icon-button.cjs.entry.js +1 -1
  26. package/dist/cjs/limel-icon.cjs.entry.js +1 -1
  27. package/dist/cjs/limel-info-tile.cjs.entry.js +2 -2
  28. package/dist/cjs/limel-linear-progress.cjs.entry.js +1 -1
  29. package/dist/cjs/limel-list-item.cjs.entry.js +3 -3
  30. package/dist/cjs/limel-markdown.cjs.entry.js +3 -2
  31. package/dist/cjs/limel-menu-item-meta.cjs.entry.js +1 -1
  32. package/dist/cjs/limel-picker.cjs.entry.js +1 -1
  33. package/dist/cjs/limel-popover_2.cjs.entry.js +2 -2
  34. package/dist/cjs/limel-portal_3.cjs.entry.js +4 -4
  35. package/dist/cjs/limel-profile-picture.cjs.entry.js +1 -1
  36. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +15 -14
  37. package/dist/cjs/limel-radio-button-group.cjs.entry.js +1 -1
  38. package/dist/cjs/limel-radio-button.cjs.entry.js +2 -2
  39. package/dist/cjs/limel-select.cjs.entry.js +1 -1
  40. package/dist/cjs/limel-shortcut.cjs.entry.js +1 -1
  41. package/dist/cjs/limel-slider.cjs.entry.js +1 -1
  42. package/dist/cjs/limel-snackbar.cjs.entry.js +3 -3
  43. package/dist/cjs/limel-split-button.cjs.entry.js +2 -2
  44. package/dist/cjs/limel-tab-bar.cjs.entry.js +2 -2
  45. package/dist/cjs/limel-tab-panel.cjs.entry.js +1 -1
  46. package/dist/cjs/limel-table.cjs.entry.js +4 -4
  47. package/dist/cjs/limel-text-editor.cjs.entry.js +1 -1
  48. package/dist/cjs/loader.cjs.js +1 -1
  49. package/dist/cjs/{markdown-parser-_1bsy-5h.js → markdown-parser-B66l_Zvo.js} +20342 -40680
  50. package/dist/cjs/{translations-BIHr3B9O.js → translations-B0hzD08N.js} +112 -0
  51. package/dist/collection/collection-manifest.json +1 -0
  52. package/dist/collection/components/collapsible-section/collapsible-section.css +1 -0
  53. package/dist/collection/components/email-viewer/email-loader.js +206 -0
  54. package/dist/collection/components/email-viewer/email-viewer.css +293 -0
  55. package/dist/collection/components/email-viewer/email-viewer.js +294 -0
  56. package/dist/collection/components/email-viewer/email-viewer.types.js +1 -0
  57. package/dist/collection/components/email-viewer/remote-images.js +50 -0
  58. package/dist/collection/components/email-viewer/sanitize-email-html.js +245 -0
  59. package/dist/collection/components/email-viewer/split-email-address-list.js +106 -0
  60. package/dist/collection/components/file/file.js +1 -1
  61. package/dist/collection/components/file-dropzone/file-dropzone.js +1 -1
  62. package/dist/collection/components/file-input/file-input.js +1 -1
  63. package/dist/collection/components/file-viewer/extension-mapping.js +1 -0
  64. package/dist/collection/components/file-viewer/file-viewer.js +54 -7
  65. package/dist/collection/components/flex-container/flex-container.js +1 -1
  66. package/dist/collection/components/form/form.js +1 -1
  67. package/dist/collection/components/grid/grid.js +1 -1
  68. package/dist/collection/components/header/header.js +1 -1
  69. package/dist/collection/components/help/help-content.js +1 -1
  70. package/dist/collection/components/help/help.js +2 -2
  71. package/dist/collection/components/helper-line/helper-line.js +2 -2
  72. package/dist/collection/components/icon/icon.js +1 -1
  73. package/dist/collection/components/icon-button/icon-button.js +1 -1
  74. package/dist/collection/components/info-tile/info-tile.js +2 -2
  75. package/dist/collection/components/input-field/input-field.js +1 -1
  76. package/dist/collection/components/list/list.js +1 -1
  77. package/dist/collection/components/list-item/list-item.js +2 -2
  78. package/dist/collection/components/list-item/menu-item-meta/menu-item-meta.js +1 -1
  79. package/dist/collection/components/markdown/markdown.js +1 -1
  80. package/dist/collection/components/menu/menu.js +1 -1
  81. package/dist/collection/components/menu-list/menu-list.js +1 -1
  82. package/dist/collection/components/menu-surface/menu-surface.js +1 -1
  83. package/dist/collection/components/notched-outline/notched-outline.js +1 -1
  84. package/dist/collection/components/picker/picker.js +1 -1
  85. package/dist/collection/components/popover/popover.js +1 -1
  86. package/dist/collection/components/popover-surface/popover-surface.js +1 -1
  87. package/dist/collection/components/portal/portal.js +1 -1
  88. package/dist/collection/components/radio-button-group/radio-button-group.js +1 -1
  89. package/dist/collection/components/radio-button-group/radio-button.js +2 -2
  90. package/dist/collection/components/select/select.js +1 -1
  91. package/dist/collection/components/shortcut/shortcut.js +1 -1
  92. package/dist/collection/components/slider/slider.js +1 -1
  93. package/dist/collection/components/snackbar/snackbar.js +2 -2
  94. package/dist/collection/components/spinner/spinner.js +1 -1
  95. package/dist/collection/components/split-button/split-button.js +2 -2
  96. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  97. package/dist/collection/components/tab-panel/tab-panel.js +1 -1
  98. package/dist/collection/components/table/table.js +3 -3
  99. package/dist/collection/components/text-editor/link-menu/editor-link-menu.js +3 -3
  100. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +1 -1
  101. package/dist/collection/components/text-editor/text-editor.js +1 -1
  102. package/dist/collection/components/tooltip/tooltip-content.js +1 -1
  103. package/dist/collection/components/tooltip/tooltip.js +2 -2
  104. package/dist/collection/interface.js +1 -0
  105. package/dist/collection/translations/da.js +14 -0
  106. package/dist/collection/translations/de.js +14 -0
  107. package/dist/collection/translations/en.js +14 -0
  108. package/dist/collection/translations/fi.js +14 -0
  109. package/dist/collection/translations/fr.js +14 -0
  110. package/dist/collection/translations/nl.js +14 -0
  111. package/dist/collection/translations/no.js +14 -0
  112. package/dist/collection/translations/sv.js +14 -0
  113. package/dist/collection/util/format-bytes.js +38 -0
  114. package/dist/esm/{file-metadata-D5joHaqk.js → file-metadata-BwF9vTXN.js} +1 -1
  115. package/dist/esm/{files-CkgibGPZ.js → files-P324wLau.js} +1 -1
  116. package/dist/esm/{get-icon-props-COzG_Mhw.js → get-icon-props-CgNJbSP4.js} +1 -1
  117. package/dist/esm/index-CJ0GYrWG.js +20341 -0
  118. package/dist/esm/lime-elements.js +1 -1
  119. package/dist/esm/limel-action-bar-item_2.entry.js +1 -1
  120. package/dist/esm/limel-action-bar_2.entry.js +4 -4
  121. package/dist/esm/limel-ai-avatar.entry.js +1 -1
  122. package/dist/esm/limel-breadcrumbs_7.entry.js +7 -7
  123. package/dist/esm/limel-button.entry.js +1 -1
  124. package/dist/esm/limel-callout.entry.js +1 -1
  125. package/dist/esm/limel-card.entry.js +1 -1
  126. package/dist/esm/limel-chart.entry.js +1 -1
  127. package/dist/esm/limel-chip_2.entry.js +2 -2
  128. package/dist/esm/limel-code-editor.entry.js +1 -1
  129. package/dist/esm/limel-collapsible-section.entry.js +3 -3
  130. package/dist/esm/limel-drag-handle.entry.js +1 -1
  131. package/dist/esm/limel-dynamic-label.entry.js +1 -1
  132. package/dist/esm/limel-email-viewer.entry.js +349 -0
  133. package/dist/esm/limel-file-dropzone_2.entry.js +5 -5
  134. package/dist/esm/limel-file-viewer.entry.js +4948 -7
  135. package/dist/esm/limel-file.entry.js +4 -4
  136. package/dist/esm/limel-flatpickr-adapter.entry.js +1 -1
  137. package/dist/esm/limel-flex-container.entry.js +1 -1
  138. package/dist/esm/limel-form.entry.js +1 -1
  139. package/dist/esm/limel-grid.entry.js +1 -1
  140. package/dist/esm/limel-header.entry.js +2 -2
  141. package/dist/esm/limel-help-content.entry.js +1 -1
  142. package/dist/esm/limel-help.entry.js +2 -2
  143. package/dist/esm/limel-helper-line_2.entry.js +3 -3
  144. package/dist/esm/limel-icon-button.entry.js +2 -2
  145. package/dist/esm/limel-icon.entry.js +1 -1
  146. package/dist/esm/limel-info-tile.entry.js +2 -2
  147. package/dist/esm/limel-linear-progress.entry.js +1 -1
  148. package/dist/esm/limel-list-item.entry.js +4 -4
  149. package/dist/esm/limel-markdown.entry.js +3 -2
  150. package/dist/esm/limel-menu-item-meta.entry.js +1 -1
  151. package/dist/esm/limel-picker.entry.js +2 -2
  152. package/dist/esm/limel-popover_2.entry.js +2 -2
  153. package/dist/esm/limel-portal_3.entry.js +4 -4
  154. package/dist/esm/limel-profile-picture.entry.js +4 -4
  155. package/dist/esm/limel-progress-flow-item.entry.js +1 -1
  156. package/dist/esm/limel-progress-flow.entry.js +1 -1
  157. package/dist/esm/limel-prosemirror-adapter.entry.js +7 -6
  158. package/dist/esm/limel-radio-button-group.entry.js +1 -1
  159. package/dist/esm/limel-radio-button.entry.js +2 -2
  160. package/dist/esm/limel-select.entry.js +2 -2
  161. package/dist/esm/limel-shortcut.entry.js +1 -1
  162. package/dist/esm/limel-slider.entry.js +1 -1
  163. package/dist/esm/limel-snackbar.entry.js +3 -3
  164. package/dist/esm/limel-split-button.entry.js +2 -2
  165. package/dist/esm/limel-tab-bar.entry.js +3 -3
  166. package/dist/esm/limel-tab-panel.entry.js +1 -1
  167. package/dist/esm/limel-table.entry.js +4 -4
  168. package/dist/esm/limel-text-editor.entry.js +1 -1
  169. package/dist/esm/loader.js +1 -1
  170. package/dist/esm/{markdown-parser-DkmQCwAi.js → markdown-parser-DJi1w622.js} +20287 -40624
  171. package/dist/esm/{translations-6rJPElLH.js → translations-Cdx3I2X8.js} +112 -0
  172. package/dist/lime-elements/lime-elements.esm.js +1 -1
  173. package/dist/lime-elements/{p-927622ec.entry.js → p-00fdb26c.entry.js} +1 -1
  174. package/dist/lime-elements/{p-880b9683.entry.js → p-1244d687.entry.js} +2 -2
  175. package/dist/lime-elements/p-1d71e9c8.entry.js +1 -0
  176. package/dist/lime-elements/p-21aef7f4.entry.js +1 -0
  177. package/dist/lime-elements/{p-68f49d6f.entry.js → p-278356b3.entry.js} +1 -1
  178. package/dist/lime-elements/{p-a6fae24d.entry.js → p-28dae22e.entry.js} +1 -1
  179. package/dist/lime-elements/{p-6951136b.entry.js → p-2d31cf0d.entry.js} +1 -1
  180. package/dist/lime-elements/{p-6e3666e5.entry.js → p-2ef38dac.entry.js} +1 -1
  181. package/dist/lime-elements/{p-dd36d57b.entry.js → p-2f788e92.entry.js} +7 -7
  182. package/dist/lime-elements/p-2kcqdtMr.js +1 -0
  183. package/dist/lime-elements/{p-11f716f5.entry.js → p-3000785f.entry.js} +1 -1
  184. package/dist/lime-elements/{p-2a5b259e.entry.js → p-3130d348.entry.js} +1 -1
  185. package/dist/lime-elements/{p-feeae1e4.entry.js → p-38097fa1.entry.js} +1 -1
  186. package/dist/lime-elements/p-3b299849.entry.js +1 -0
  187. package/dist/lime-elements/{p-00859fac.entry.js → p-3e6ce4e1.entry.js} +2 -2
  188. package/dist/lime-elements/{p-23f7956e.entry.js → p-3ec31835.entry.js} +1 -1
  189. package/dist/lime-elements/{p-52edfe86.entry.js → p-44396c0d.entry.js} +1 -1
  190. package/dist/lime-elements/{p-ec42a4aa.entry.js → p-494f880b.entry.js} +1 -1
  191. package/dist/lime-elements/{p-d1fa6da3.entry.js → p-4f6e3057.entry.js} +3 -3
  192. package/dist/lime-elements/{p-e6d74062.entry.js → p-504ae59f.entry.js} +1 -1
  193. package/dist/lime-elements/{p-7d5bd4a2.entry.js → p-51565372.entry.js} +1 -1
  194. package/dist/lime-elements/{p-5ddeb498.entry.js → p-52098c47.entry.js} +1 -1
  195. package/dist/lime-elements/{p-d2123236.entry.js → p-521a0204.entry.js} +1 -1
  196. package/dist/lime-elements/{p-38fb97fe.entry.js → p-54d85ae4.entry.js} +1 -1
  197. package/dist/lime-elements/{p-88f503eb.entry.js → p-59a522ee.entry.js} +1 -1
  198. package/dist/lime-elements/{p-2c1538f0.entry.js → p-5af72e1b.entry.js} +1 -1
  199. package/dist/lime-elements/p-64cc5094.entry.js +1 -0
  200. package/dist/lime-elements/{p-045c6027.entry.js → p-67a2c7f5.entry.js} +1 -1
  201. package/dist/lime-elements/{p-8db6b7d9.entry.js → p-68b1605f.entry.js} +1 -1
  202. package/dist/lime-elements/{p-7457bc07.entry.js → p-770981e6.entry.js} +1 -1
  203. package/dist/lime-elements/{p-9ea564fe.entry.js → p-7ed97446.entry.js} +1 -1
  204. package/dist/lime-elements/{p-cbb7d624.entry.js → p-8053727c.entry.js} +1 -1
  205. package/dist/lime-elements/{p-fc3209db.entry.js → p-80f9f2d3.entry.js} +1 -1
  206. package/dist/lime-elements/{p-34ef71f2.entry.js → p-95fb9ef8.entry.js} +1 -1
  207. package/dist/lime-elements/{p-6275668f.entry.js → p-961dff13.entry.js} +1 -1
  208. package/dist/lime-elements/{p-abef62d7.entry.js → p-97952658.entry.js} +1 -1
  209. package/dist/lime-elements/{p-d6270e4a.entry.js → p-982b9f50.entry.js} +1 -1
  210. package/dist/lime-elements/p-9c4156c6.entry.js +1 -0
  211. package/dist/lime-elements/p-BRCcjfVu.js +7 -0
  212. package/dist/lime-elements/{p-DSjFzQmB.js → p-CWuGCKo1.js} +1 -1
  213. package/dist/lime-elements/p-Cdx3I2X8.js +1 -0
  214. package/dist/lime-elements/{p-COzG_Mhw.js → p-CgNJbSP4.js} +1 -1
  215. package/dist/lime-elements/{p-BQY2kAWs.js → p-DlJXKdhK.js} +1 -1
  216. package/dist/lime-elements/{p-bbaf35ce.entry.js → p-a9f3f90c.entry.js} +1 -1
  217. package/dist/lime-elements/{p-c9e934af.entry.js → p-af5f2052.entry.js} +1 -1
  218. package/dist/lime-elements/{p-e11c9b40.entry.js → p-c2478225.entry.js} +1 -1
  219. package/dist/lime-elements/{p-6aebcf60.entry.js → p-c7f2e189.entry.js} +1 -1
  220. package/dist/lime-elements/{p-d424688d.entry.js → p-cb2cc243.entry.js} +1 -1
  221. package/dist/lime-elements/{p-c118eac0.entry.js → p-cce53162.entry.js} +1 -1
  222. package/dist/lime-elements/{p-6896d5c8.entry.js → p-d4fea438.entry.js} +1 -1
  223. package/dist/lime-elements/{p-534fdf9b.entry.js → p-df1fa930.entry.js} +1 -1
  224. package/dist/lime-elements/{p-52bb74b9.entry.js → p-e05ad4f8.entry.js} +1 -1
  225. package/dist/lime-elements/{p-303d01e5.entry.js → p-e6b0e0a2.entry.js} +1 -1
  226. package/dist/lime-elements/{p-80d35f8f.entry.js → p-e975cc29.entry.js} +1 -1
  227. package/dist/lime-elements/{p-9ed578ec.entry.js → p-f532b60f.entry.js} +1 -1
  228. package/dist/lime-elements/{p-4be18a57.entry.js → p-ff845f5c.entry.js} +1 -1
  229. package/dist/types/components/email-viewer/email-loader.d.ts +19 -0
  230. package/dist/types/components/email-viewer/email-viewer.d.ts +69 -0
  231. package/dist/types/components/email-viewer/email-viewer.types.d.ts +70 -0
  232. package/dist/types/components/email-viewer/remote-images.d.ts +22 -0
  233. package/dist/types/components/email-viewer/sanitize-email-html.d.ts +14 -0
  234. package/dist/types/components/email-viewer/split-email-address-list.d.ts +25 -0
  235. package/dist/types/components/file-viewer/file-viewer.d.ts +9 -0
  236. package/dist/types/components/file-viewer/file-viewer.types.d.ts +1 -1
  237. package/dist/types/components.d.ts +116 -0
  238. package/dist/types/interface.d.ts +1 -0
  239. package/dist/types/translations/da.d.ts +10 -0
  240. package/dist/types/translations/de.d.ts +10 -0
  241. package/dist/types/translations/en.d.ts +10 -0
  242. package/dist/types/translations/fi.d.ts +10 -0
  243. package/dist/types/translations/fr.d.ts +10 -0
  244. package/dist/types/translations/nl.d.ts +10 -0
  245. package/dist/types/translations/no.d.ts +10 -0
  246. package/dist/types/translations/sv.d.ts +10 -0
  247. package/dist/types/util/format-bytes.d.ts +21 -0
  248. package/package.json +4 -5
  249. package/dist/lime-elements/p-017dd326.entry.js +0 -1
  250. package/dist/lime-elements/p-4beeec39.entry.js +0 -1
  251. package/dist/lime-elements/p-55596d9a.entry.js +0 -1
  252. package/dist/lime-elements/p-6rJPElLH.js +0 -1
  253. package/dist/lime-elements/p-Df0HAtSs.js +0 -7
  254. package/dist/lime-elements/p-f395fbe3.entry.js +0 -1
@@ -0,0 +1,69 @@
1
+ import { EventEmitter } from '../../stencil-public-runtime';
2
+ import { Languages } from '../date-picker/date.types';
3
+ import { Email } from './email-viewer.types';
4
+ /**
5
+ * This is a private component, used to render `.eml` files inside
6
+ * `limel-file-viewer`.
7
+ *
8
+ * :::note
9
+ * If `bodyHtml` is provided, it will be rendered using `innerHTML`.
10
+ * Consumers should pre-sanitize `bodyHtml` before passing it to the component.
11
+ * :::
12
+ *
13
+ * @exampleComponent limel-example-email-viewer-plain-text
14
+ * @exampleComponent limel-example-email-viewer-inline-image
15
+ * @exampleComponent limel-example-email-viewer-remote-image-policy
16
+ *
17
+ * @private
18
+ */
19
+ export declare class EmailViewer {
20
+ /**
21
+ * The email message to display.
22
+ *
23
+ * If `email.bodyHtml` is set directly, consumers must provide sanitized
24
+ * HTML.
25
+ */
26
+ email?: Email;
27
+ /**
28
+ * Optional URL to render as a final fallback using an `<object type="text/plain">`.
29
+ */
30
+ fallbackUrl?: string;
31
+ /**
32
+ * Defines the localization for translations.
33
+ */
34
+ language: Languages;
35
+ /**
36
+ * Controls whether remote images (http/https) are loaded.
37
+ *
38
+ * If omitted, the component treats this as a per-email setting.
39
+ * Consumers that want to remember the choice (per session/global) can
40
+ * provide this prop and listen for `allowRemoteImagesChange`.
41
+ */
42
+ allowRemoteImages?: boolean;
43
+ private allowRemoteImagesState;
44
+ /**
45
+ * Emitted when the user requests remote images to be loaded.
46
+ *
47
+ * @internal
48
+ */
49
+ allowRemoteImagesChange: EventEmitter<boolean>;
50
+ protected resetAllowRemoteImages(newEmail?: Email, oldEmail?: Email): void;
51
+ render(): any;
52
+ private renderHeaders;
53
+ private renderBody;
54
+ private renderBodyHtml;
55
+ private renderBodyText;
56
+ private renderFallbackUrl;
57
+ private renderEmailHeader;
58
+ private getHeaderValues;
59
+ private renderAttachments;
60
+ private renderAttachment;
61
+ private renderSizeBadge;
62
+ private getTranslation;
63
+ private shouldShowRemoteImagesBanner;
64
+ private renderRemoteImageBanner;
65
+ private onEnableRemoteImagesClick;
66
+ private enableRemoteImages;
67
+ private getAllowRemoteImages;
68
+ }
69
+ //# sourceMappingURL=email-viewer.d.ts.map
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Attachment metadata extracted from an email message.
3
+ *
4
+ * This is intentionally limited to display-friendly metadata; attachment
5
+ * contents are not included.
6
+ *
7
+ * @alpha
8
+ */
9
+ export interface EmailAttachment {
10
+ /**
11
+ * Suggested filename for the attachment.
12
+ */
13
+ filename?: string;
14
+ /**
15
+ * MIME type (Content-Type) of the attachment.
16
+ */
17
+ mimeType?: string;
18
+ /**
19
+ * Attachment size in bytes, when known.
20
+ */
21
+ size?: number;
22
+ }
23
+ /**
24
+ * A simplified view-model for a parsed RFC 5322 / MIME email message.
25
+ *
26
+ * @alpha
27
+ */
28
+ export interface Email {
29
+ /**
30
+ * Subject line of the email.
31
+ */
32
+ subject?: string;
33
+ /**
34
+ * Sender address, formatted for display.
35
+ */
36
+ from?: string;
37
+ /**
38
+ * Primary recipient list, formatted for display.
39
+ */
40
+ to?: string;
41
+ /**
42
+ * Carbon-copy recipient list, formatted for display.
43
+ */
44
+ cc?: string;
45
+ /**
46
+ * Message date/time as provided by the source email.
47
+ */
48
+ date?: string;
49
+ /**
50
+ * HTML body content for rendering.
51
+ * Must be sanitized by the caller before assignment when set directly.
52
+ */
53
+ bodyHtml?: string;
54
+ /**
55
+ * Plain-text body content for rendering.
56
+ */
57
+ bodyText?: string;
58
+ /**
59
+ * Parsed attachment metadata as {@link EmailAttachment} items.
60
+ */
61
+ attachments?: EmailAttachment[];
62
+ }
63
+ /**
64
+ * The header field keys of an {@link Email} that are rendered
65
+ * in the email viewer header section.
66
+ *
67
+ * @alpha
68
+ */
69
+ export type EmailHeaderType = 'subject' | 'from' | 'to' | 'cc' | 'date';
70
+ //# sourceMappingURL=email-viewer.types.d.ts.map
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Checks whether the given HTML contains any images with a `data-remote-src`
3
+ * attribute, indicating they reference external (remote) resources.
4
+ *
5
+ * @param html - The HTML string to inspect.
6
+ */
7
+ export declare function containsRemoteImages(html: string): boolean;
8
+ /**
9
+ * If `allowRemoteImages` is `true`, replaces the `src` attribute of every
10
+ * `<img data-remote-src="...">` element with the value of `data-remote-src`
11
+ * (provided it points to an http(s) URL) and removes the data attribute.
12
+ *
13
+ * When `allowRemoteImages` is `false` the HTML is returned unchanged.
14
+ *
15
+ * Returns an HTML fragment that is safe to assign to `innerHTML` on a regular
16
+ * container element (not a full `<html>/<head>/<body>` document string).
17
+ *
18
+ * @param html - The HTML string to process.
19
+ * @param allowRemoteImages - Whether to restore remote image sources.
20
+ */
21
+ export declare function applyRemoteImagesPolicy(html: string, allowRemoteImages: boolean): string;
22
+ //# sourceMappingURL=remote-images.d.ts.map
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Sanitizes email HTML to prevent XSS and other security issues while
3
+ * preserving the original visual appearance (layout, colors, fonts, etc.).
4
+ *
5
+ * This differs from the markdown sanitizer (`sanitizeHTML`) in that:
6
+ * - **All inline CSS is preserved** (no style property filtering).
7
+ * - Dangerous CSS properties like `behavior`, `expression`, `-moz-binding` are removed.
8
+ * - Standard dangerous tags/attributes are blocked (script, event handlers, javascript: URLs).
9
+ *
10
+ * @param html - The HTML string to sanitize (typically an email body).
11
+ * @returns The sanitized HTML string.
12
+ */
13
+ export declare function sanitizeEmailHTML(html: string): Promise<string>;
14
+ //# sourceMappingURL=sanitize-email-html.d.ts.map
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Splits a comma-separated email address list (e.g. `To:` / `Cc:`) into individual
3
+ * recipient strings.
4
+ *
5
+ * In RFC 5322, address lists are comma-separated. However, commas can also appear
6
+ * inside quoted display names (quoted-string) and must then be ignored as separators.
7
+ * This splitter only treats a comma as a separator when it is outside quoted strings
8
+ * and outside angle-bracketed address parts (`<...>`).
9
+ *
10
+ * Notes:
11
+ * - If a display name contains a comma, it should be quoted or encoded to be
12
+ * unambiguous, e.g. `"Doe, Jane" <jane.doe@example.com>` or
13
+ * `=?UTF-8?Q?Doe,_Jane?= <jane.doe@example.com>`.
14
+ * - Real-world `.eml` files are usually RFC-ish but not always perfectly compliant.
15
+ * Malformed input with unquoted commas in display names may be split incorrectly.
16
+ *
17
+ * @param value - A comma-separated list of recipients.
18
+ * @returns An array of trimmed recipient strings.
19
+ *
20
+ * @example
21
+ * splitEmailAddressList('"Doe, Jane" <jane@example.com>, Team <team@example.com>');
22
+ * // => ['"Doe, Jane" <jane@example.com>', 'Team <team@example.com>']
23
+ */
24
+ export declare function splitEmailAddressList(value: string): string[];
25
+ //# sourceMappingURL=split-email-address-list.d.ts.map
@@ -25,6 +25,7 @@ import { OfficeViewer } from './file-viewer.types';
25
25
  *
26
26
  * @exampleComponent limel-example-file-viewer-basic
27
27
  * @exampleComponent limel-example-file-viewer-office
28
+ * @exampleComponent limel-example-file-viewer-eml
28
29
  * @exampleComponent limel-example-file-viewer-filename
29
30
  * @exampleComponent limel-example-file-viewer-inbuilt-actions
30
31
  * @exampleComponent limel-example-file-viewer-custom-actions
@@ -100,7 +101,10 @@ export declare class FileViewer {
100
101
  */
101
102
  private loading;
102
103
  private fileUrl;
104
+ private email?;
105
+ private pdfBlobUrl?;
103
106
  constructor();
107
+ disconnectedCallback(): void;
104
108
  componentWillLoad(): Promise<void>;
105
109
  render(): any;
106
110
  protected watchUrl(newUrl: string, oldUrl: string): Promise<void>;
@@ -110,6 +114,7 @@ export declare class FileViewer {
110
114
  private renderVideo;
111
115
  private renderAudio;
112
116
  private renderText;
117
+ private renderEmail;
113
118
  private renderOffice;
114
119
  private isOfficeFileAccessibleViaURL;
115
120
  private getOfficeViewerUrl;
@@ -120,6 +125,10 @@ export declare class FileViewer {
120
125
  private renderOpenInNewTabButton;
121
126
  private renderActionMenu;
122
127
  private createURL;
128
+ private loadPdf;
129
+ private loadEmail;
130
+ private loadDefault;
131
+ private revokePdfBlobUrl;
123
132
  private handleToggleFullscreen;
124
133
  private emitOnAction;
125
134
  private sanitizeUrl;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @public
3
3
  */
4
- export type FileType = 'pdf' | 'image' | 'video' | 'audio' | 'text' | 'office' | 'unknown';
4
+ export type FileType = 'pdf' | 'image' | 'video' | 'audio' | 'text' | 'email' | 'office' | 'unknown';
5
5
  /**
6
6
  * @public
7
7
  */
@@ -26,6 +26,7 @@ import { CustomColorSwatch, CustomPalette } from "./components/color-picker/colo
26
26
  import { Config } from "./global/config";
27
27
  import { ClosingActions, DialogHeading } from "./components/dialog/dialog.types";
28
28
  import { DockItem } from "./components/dock/dock.types";
29
+ import { Email } from "./components/email-viewer/email-viewer.types";
29
30
  import { FileInfo } from "./global/shared-types/file.types";
30
31
  import { OfficeViewer } from "./components/file-viewer/file-viewer.types";
31
32
  import { FlexContainerAlign, FlexContainerDirection, FlexContainerJustify } from "./components/flex-container/flex-container.types";
@@ -69,6 +70,7 @@ export { CustomColorSwatch, CustomPalette } from "./components/color-picker/colo
69
70
  export { Config } from "./global/config";
70
71
  export { ClosingActions, DialogHeading } from "./components/dialog/dialog.types";
71
72
  export { DockItem } from "./components/dock/dock.types";
73
+ export { Email } from "./components/email-viewer/email-viewer.types";
72
74
  export { FileInfo } from "./global/shared-types/file.types";
73
75
  export { OfficeViewer } from "./components/file-viewer/file-viewer.types";
74
76
  export { FlexContainerAlign, FlexContainerDirection, FlexContainerJustify } from "./components/flex-container/flex-container.types";
@@ -1433,6 +1435,37 @@ export namespace Components {
1433
1435
  */
1434
1436
  "value": LabelValue;
1435
1437
  }
1438
+ /**
1439
+ * This is a private component, used to render `.eml` files inside
1440
+ * `limel-file-viewer`.
1441
+ * :::note
1442
+ * If `bodyHtml` is provided, it will be rendered using `innerHTML`.
1443
+ * Consumers should pre-sanitize `bodyHtml` before passing it to the component.
1444
+ * :::
1445
+ * @exampleComponent limel-example-email-viewer-plain-text
1446
+ * @exampleComponent limel-example-email-viewer-inline-image
1447
+ * @exampleComponent limel-example-email-viewer-remote-image-policy
1448
+ * @private
1449
+ */
1450
+ interface LimelEmailViewer {
1451
+ /**
1452
+ * Controls whether remote images (http/https) are loaded. If omitted, the component treats this as a per-email setting. Consumers that want to remember the choice (per session/global) can provide this prop and listen for `allowRemoteImagesChange`.
1453
+ */
1454
+ "allowRemoteImages"?: boolean;
1455
+ /**
1456
+ * The email message to display. If `email.bodyHtml` is set directly, consumers must provide sanitized HTML.
1457
+ */
1458
+ "email"?: Email;
1459
+ /**
1460
+ * Optional URL to render as a final fallback using an `<object type="text/plain">`.
1461
+ */
1462
+ "fallbackUrl"?: string;
1463
+ /**
1464
+ * Defines the localization for translations.
1465
+ * @default 'en'
1466
+ */
1467
+ "language": Languages;
1468
+ }
1436
1469
  /**
1437
1470
  * This component lets end-users select a *single* file from their device
1438
1471
  * storage. Regardless of the user's device or operating system, this component
@@ -1586,6 +1619,7 @@ export namespace Components {
1586
1619
  * functionalities.
1587
1620
  * @exampleComponent limel-example-file-viewer-basic
1588
1621
  * @exampleComponent limel-example-file-viewer-office
1622
+ * @exampleComponent limel-example-file-viewer-eml
1589
1623
  * @exampleComponent limel-example-file-viewer-filename
1590
1624
  * @exampleComponent limel-example-file-viewer-inbuilt-actions
1591
1625
  * @exampleComponent limel-example-file-viewer-custom-actions
@@ -3787,6 +3821,10 @@ export interface LimelDockButtonCustomEvent<T> extends CustomEvent<T> {
3787
3821
  detail: T;
3788
3822
  target: HTMLLimelDockButtonElement;
3789
3823
  }
3824
+ export interface LimelEmailViewerCustomEvent<T> extends CustomEvent<T> {
3825
+ detail: T;
3826
+ target: HTMLLimelEmailViewerElement;
3827
+ }
3790
3828
  export interface LimelFileCustomEvent<T> extends CustomEvent<T> {
3791
3829
  detail: T;
3792
3830
  target: HTMLLimelFileElement;
@@ -4724,6 +4762,35 @@ declare global {
4724
4762
  prototype: HTMLLimelDynamicLabelElement;
4725
4763
  new (): HTMLLimelDynamicLabelElement;
4726
4764
  };
4765
+ interface HTMLLimelEmailViewerElementEventMap {
4766
+ "allowRemoteImagesChange": boolean;
4767
+ }
4768
+ /**
4769
+ * This is a private component, used to render `.eml` files inside
4770
+ * `limel-file-viewer`.
4771
+ * :::note
4772
+ * If `bodyHtml` is provided, it will be rendered using `innerHTML`.
4773
+ * Consumers should pre-sanitize `bodyHtml` before passing it to the component.
4774
+ * :::
4775
+ * @exampleComponent limel-example-email-viewer-plain-text
4776
+ * @exampleComponent limel-example-email-viewer-inline-image
4777
+ * @exampleComponent limel-example-email-viewer-remote-image-policy
4778
+ * @private
4779
+ */
4780
+ interface HTMLLimelEmailViewerElement extends Components.LimelEmailViewer, HTMLStencilElement {
4781
+ addEventListener<K extends keyof HTMLLimelEmailViewerElementEventMap>(type: K, listener: (this: HTMLLimelEmailViewerElement, ev: LimelEmailViewerCustomEvent<HTMLLimelEmailViewerElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
4782
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
4783
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
4784
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
4785
+ removeEventListener<K extends keyof HTMLLimelEmailViewerElementEventMap>(type: K, listener: (this: HTMLLimelEmailViewerElement, ev: LimelEmailViewerCustomEvent<HTMLLimelEmailViewerElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
4786
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
4787
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
4788
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
4789
+ }
4790
+ var HTMLLimelEmailViewerElement: {
4791
+ prototype: HTMLLimelEmailViewerElement;
4792
+ new (): HTMLLimelEmailViewerElement;
4793
+ };
4727
4794
  interface HTMLLimelFileElementEventMap {
4728
4795
  "change": FileInfo;
4729
4796
  "interact": number | string;
@@ -4853,6 +4920,7 @@ declare global {
4853
4920
  * functionalities.
4854
4921
  * @exampleComponent limel-example-file-viewer-basic
4855
4922
  * @exampleComponent limel-example-file-viewer-office
4923
+ * @exampleComponent limel-example-file-viewer-eml
4856
4924
  * @exampleComponent limel-example-file-viewer-filename
4857
4925
  * @exampleComponent limel-example-file-viewer-inbuilt-actions
4858
4926
  * @exampleComponent limel-example-file-viewer-custom-actions
@@ -6121,6 +6189,7 @@ declare global {
6121
6189
  "limel-dock-button": HTMLLimelDockButtonElement;
6122
6190
  "limel-drag-handle": HTMLLimelDragHandleElement;
6123
6191
  "limel-dynamic-label": HTMLLimelDynamicLabelElement;
6192
+ "limel-email-viewer": HTMLLimelEmailViewerElement;
6124
6193
  "limel-file": HTMLLimelFileElement;
6125
6194
  "limel-file-dropzone": HTMLLimelFileDropzoneElement;
6126
6195
  "limel-file-input": HTMLLimelFileInputElement;
@@ -7617,6 +7686,37 @@ declare namespace LocalJSX {
7617
7686
  */
7618
7687
  "value"?: LabelValue;
7619
7688
  }
7689
+ /**
7690
+ * This is a private component, used to render `.eml` files inside
7691
+ * `limel-file-viewer`.
7692
+ * :::note
7693
+ * If `bodyHtml` is provided, it will be rendered using `innerHTML`.
7694
+ * Consumers should pre-sanitize `bodyHtml` before passing it to the component.
7695
+ * :::
7696
+ * @exampleComponent limel-example-email-viewer-plain-text
7697
+ * @exampleComponent limel-example-email-viewer-inline-image
7698
+ * @exampleComponent limel-example-email-viewer-remote-image-policy
7699
+ * @private
7700
+ */
7701
+ interface LimelEmailViewer {
7702
+ /**
7703
+ * Controls whether remote images (http/https) are loaded. If omitted, the component treats this as a per-email setting. Consumers that want to remember the choice (per session/global) can provide this prop and listen for `allowRemoteImagesChange`.
7704
+ */
7705
+ "allowRemoteImages"?: boolean;
7706
+ /**
7707
+ * The email message to display. If `email.bodyHtml` is set directly, consumers must provide sanitized HTML.
7708
+ */
7709
+ "email"?: Email;
7710
+ /**
7711
+ * Optional URL to render as a final fallback using an `<object type="text/plain">`.
7712
+ */
7713
+ "fallbackUrl"?: string;
7714
+ /**
7715
+ * Defines the localization for translations.
7716
+ * @default 'en'
7717
+ */
7718
+ "language"?: Languages;
7719
+ }
7620
7720
  /**
7621
7721
  * This component lets end-users select a *single* file from their device
7622
7722
  * storage. Regardless of the user's device or operating system, this component
@@ -7791,6 +7891,7 @@ declare namespace LocalJSX {
7791
7891
  * functionalities.
7792
7892
  * @exampleComponent limel-example-file-viewer-basic
7793
7893
  * @exampleComponent limel-example-file-viewer-office
7894
+ * @exampleComponent limel-example-file-viewer-eml
7794
7895
  * @exampleComponent limel-example-file-viewer-filename
7795
7896
  * @exampleComponent limel-example-file-viewer-inbuilt-actions
7796
7897
  * @exampleComponent limel-example-file-viewer-custom-actions
@@ -10153,6 +10254,7 @@ declare namespace LocalJSX {
10153
10254
  "limel-dock-button": LimelDockButton;
10154
10255
  "limel-drag-handle": LimelDragHandle;
10155
10256
  "limel-dynamic-label": LimelDynamicLabel;
10257
+ "limel-email-viewer": LimelEmailViewer;
10156
10258
  "limel-file": LimelFile;
10157
10259
  "limel-file-dropzone": LimelFileDropzone;
10158
10260
  "limel-file-input": LimelFileInput;
@@ -10681,6 +10783,19 @@ declare module "@stencil/core" {
10681
10783
  * @exampleComponent limel-example-dynamic-label-readonly-boolean
10682
10784
  */
10683
10785
  "limel-dynamic-label": LocalJSX.LimelDynamicLabel & JSXBase.HTMLAttributes<HTMLLimelDynamicLabelElement>;
10786
+ /**
10787
+ * This is a private component, used to render `.eml` files inside
10788
+ * `limel-file-viewer`.
10789
+ * :::note
10790
+ * If `bodyHtml` is provided, it will be rendered using `innerHTML`.
10791
+ * Consumers should pre-sanitize `bodyHtml` before passing it to the component.
10792
+ * :::
10793
+ * @exampleComponent limel-example-email-viewer-plain-text
10794
+ * @exampleComponent limel-example-email-viewer-inline-image
10795
+ * @exampleComponent limel-example-email-viewer-remote-image-policy
10796
+ * @private
10797
+ */
10798
+ "limel-email-viewer": LocalJSX.LimelEmailViewer & JSXBase.HTMLAttributes<HTMLLimelEmailViewerElement>;
10684
10799
  /**
10685
10800
  * This component lets end-users select a *single* file from their device
10686
10801
  * storage. Regardless of the user's device or operating system, this component
@@ -10757,6 +10872,7 @@ declare module "@stencil/core" {
10757
10872
  * functionalities.
10758
10873
  * @exampleComponent limel-example-file-viewer-basic
10759
10874
  * @exampleComponent limel-example-file-viewer-office
10875
+ * @exampleComponent limel-example-file-viewer-eml
10760
10876
  * @exampleComponent limel-example-file-viewer-filename
10761
10877
  * @exampleComponent limel-example-file-viewer-inbuilt-actions
10762
10878
  * @exampleComponent limel-example-file-viewer-custom-actions
@@ -11,6 +11,7 @@ export * from './components/date-picker/date.types';
11
11
  export * from './components/dialog/dialog.types';
12
12
  export * from './components/dock/dock.types';
13
13
  export * from './components/color-picker/color-picker.types';
14
+ export * from './components/email-viewer/email-viewer.types';
14
15
  export * from './components/file-viewer/file-viewer.types';
15
16
  export * from './global/shared-types/file.types';
16
17
  export * from './components/flex-container/flex-container.types';
@@ -38,6 +38,16 @@ declare const _default: {
38
38
  'file-viewer.open-in-fullscreen': string;
39
39
  'file-viewer.open-in-new-tab': string;
40
40
  'file-viewer.more-actions': string;
41
+ 'file-viewer.email.subject': string;
42
+ 'file-viewer.email.from': string;
43
+ 'file-viewer.email.to': string;
44
+ 'file-viewer.email.cc': string;
45
+ 'file-viewer.email.date': string;
46
+ 'file-viewer.email.attachments': string;
47
+ 'file-viewer.email.attachment.unnamed': string;
48
+ 'file-viewer.email.remote-images.warning': string;
49
+ 'file-viewer.email.remote-images.warning.description': string;
50
+ 'file-viewer.email.remote-images.load': string;
41
51
  'editor-menu.bold': string;
42
52
  'editor-menu.italic': string;
43
53
  'editor-menu.strikethrough': string;
@@ -38,6 +38,16 @@ declare const _default: {
38
38
  'file-viewer.open-in-fullscreen': string;
39
39
  'file-viewer.open-in-new-tab': string;
40
40
  'file-viewer.more-actions': string;
41
+ 'file-viewer.email.subject': string;
42
+ 'file-viewer.email.from': string;
43
+ 'file-viewer.email.to': string;
44
+ 'file-viewer.email.cc': string;
45
+ 'file-viewer.email.date': string;
46
+ 'file-viewer.email.attachments': string;
47
+ 'file-viewer.email.attachment.unnamed': string;
48
+ 'file-viewer.email.remote-images.warning': string;
49
+ 'file-viewer.email.remote-images.warning.description': string;
50
+ 'file-viewer.email.remote-images.load': string;
41
51
  'editor-menu.bold': string;
42
52
  'editor-menu.italic': string;
43
53
  'editor-menu.strikethrough': string;
@@ -38,6 +38,16 @@ declare const _default: {
38
38
  'file-viewer.open-in-fullscreen': string;
39
39
  'file-viewer.open-in-new-tab': string;
40
40
  'file-viewer.more-actions': string;
41
+ 'file-viewer.email.subject': string;
42
+ 'file-viewer.email.from': string;
43
+ 'file-viewer.email.to': string;
44
+ 'file-viewer.email.cc': string;
45
+ 'file-viewer.email.date': string;
46
+ 'file-viewer.email.attachments': string;
47
+ 'file-viewer.email.attachment.unnamed': string;
48
+ 'file-viewer.email.remote-images.warning': string;
49
+ 'file-viewer.email.remote-images.warning.description': string;
50
+ 'file-viewer.email.remote-images.load': string;
41
51
  'editor-menu.bold': string;
42
52
  'editor-menu.italic': string;
43
53
  'editor-menu.strikethrough': string;
@@ -38,6 +38,16 @@ declare const _default: {
38
38
  'file-viewer.open-in-fullscreen': string;
39
39
  'file-viewer.open-in-new-tab': string;
40
40
  'file-viewer.more-actions': string;
41
+ 'file-viewer.email.subject': string;
42
+ 'file-viewer.email.from': string;
43
+ 'file-viewer.email.to': string;
44
+ 'file-viewer.email.cc': string;
45
+ 'file-viewer.email.date': string;
46
+ 'file-viewer.email.attachments': string;
47
+ 'file-viewer.email.attachment.unnamed': string;
48
+ 'file-viewer.email.remote-images.warning': string;
49
+ 'file-viewer.email.remote-images.warning.description': string;
50
+ 'file-viewer.email.remote-images.load': string;
41
51
  'editor-menu.bold': string;
42
52
  'editor-menu.italic': string;
43
53
  'editor-menu.strikethrough': string;
@@ -38,6 +38,16 @@ declare const _default: {
38
38
  'file-viewer.open-in-fullscreen': string;
39
39
  'file-viewer.open-in-new-tab': string;
40
40
  'file-viewer.more-actions': string;
41
+ 'file-viewer.email.subject': string;
42
+ 'file-viewer.email.from': string;
43
+ 'file-viewer.email.to': string;
44
+ 'file-viewer.email.cc': string;
45
+ 'file-viewer.email.date': string;
46
+ 'file-viewer.email.attachments': string;
47
+ 'file-viewer.email.attachment.unnamed': string;
48
+ 'file-viewer.email.remote-images.warning': string;
49
+ 'file-viewer.email.remote-images.warning.description': string;
50
+ 'file-viewer.email.remote-images.load': string;
41
51
  'editor-menu.bold': string;
42
52
  'editor-menu.italic': string;
43
53
  'editor-menu.strikethrough': string;
@@ -38,6 +38,16 @@ declare const _default: {
38
38
  'file-viewer.open-in-fullscreen': string;
39
39
  'file-viewer.open-in-new-tab': string;
40
40
  'file-viewer.more-actions': string;
41
+ 'file-viewer.email.subject': string;
42
+ 'file-viewer.email.from': string;
43
+ 'file-viewer.email.to': string;
44
+ 'file-viewer.email.cc': string;
45
+ 'file-viewer.email.date': string;
46
+ 'file-viewer.email.attachments': string;
47
+ 'file-viewer.email.attachment.unnamed': string;
48
+ 'file-viewer.email.remote-images.warning': string;
49
+ 'file-viewer.email.remote-images.warning.description': string;
50
+ 'file-viewer.email.remote-images.load': string;
41
51
  'editor-menu.bold': string;
42
52
  'editor-menu.italic': string;
43
53
  'editor-menu.strikethrough': string;
@@ -37,6 +37,16 @@ declare const _default: {
37
37
  'file-viewer.open-in-fullscreen': string;
38
38
  'file-viewer.open-in-new-tab': string;
39
39
  'file-viewer.more-actions': string;
40
+ 'file-viewer.email.subject': string;
41
+ 'file-viewer.email.from': string;
42
+ 'file-viewer.email.to': string;
43
+ 'file-viewer.email.cc': string;
44
+ 'file-viewer.email.date': string;
45
+ 'file-viewer.email.attachments': string;
46
+ 'file-viewer.email.attachment.unnamed': string;
47
+ 'file-viewer.email.remote-images.warning': string;
48
+ 'file-viewer.email.remote-images.warning.description': string;
49
+ 'file-viewer.email.remote-images.load': string;
40
50
  'editor-menu.bold': string;
41
51
  'editor-menu.italic': string;
42
52
  'editor-menu.strikethrough': string;
@@ -38,6 +38,16 @@ declare const _default: {
38
38
  'file-viewer.open-in-fullscreen': string;
39
39
  'file-viewer.open-in-new-tab': string;
40
40
  'file-viewer.more-actions': string;
41
+ 'file-viewer.email.subject': string;
42
+ 'file-viewer.email.from': string;
43
+ 'file-viewer.email.to': string;
44
+ 'file-viewer.email.cc': string;
45
+ 'file-viewer.email.date': string;
46
+ 'file-viewer.email.attachments': string;
47
+ 'file-viewer.email.attachment.unnamed': string;
48
+ 'file-viewer.email.remote-images.warning': string;
49
+ 'file-viewer.email.remote-images.warning.description': string;
50
+ 'file-viewer.email.remote-images.load': string;
41
51
  'editor-menu.bold': string;
42
52
  'editor-menu.italic': string;
43
53
  'editor-menu.strikethrough': string;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Format a file size in bytes into a human readable string.
3
+ *
4
+ * Uses base 1024 units (binary prefixes without the "i" designation)
5
+ * and applies adaptive precision: one decimal for values < 10 of the
6
+ * chosen unit, otherwise no decimals.
7
+ *
8
+ * Examples:
9
+ * - 0 => "0 B"
10
+ * - 512 => "512 B"
11
+ * - 1536 => "1.5 KB"
12
+ * - 1048576 => "1 MB"
13
+ * - 5368709120 => "5 GB"
14
+ * - formatBytes(5347737600, 2) => "4.98 GB" (value < 10 so two decimals)
15
+ *
16
+ * @param bytes - the size in bytes
17
+ * @param decimals - max number of decimals for small unit values (default: 1)
18
+ * @returns formatted size string
19
+ */
20
+ export declare function formatBytes(bytes: number | undefined | null, decimals?: number): string;
21
+ //# sourceMappingURL=format-bytes.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@limetech/lime-elements",
3
- "version": "39.0.3",
3
+ "version": "39.1.0",
4
4
  "description": "Lime Elements",
5
5
  "author": "Lime Technologies",
6
6
  "license": "Apache-2.0",
@@ -70,6 +70,7 @@
70
70
  "moment": "^2.30.1",
71
71
  "number-abbreviate": "^2.0.0",
72
72
  "parse-css-color": "^0.2.1",
73
+ "postal-mime": "^2.7.3",
73
74
  "prettier": "^3.5.0",
74
75
  "prosemirror-example-setup": "^1.2.3",
75
76
  "prosemirror-markdown": "^1.13.2",
@@ -90,6 +91,7 @@
90
91
  "replace-in-file": "^7.2.0",
91
92
  "shelljs": "0.10.0",
92
93
  "shx": "^0.4.0",
94
+ "sortablejs": "^1.15.6",
93
95
  "style-to-object": "^1.0.9",
94
96
  "tabulator-tables": "^6.3.1",
95
97
  "typescript": "^4.9.5",
@@ -117,8 +119,5 @@
117
119
  "url": "https://github.com/Lundalogik/lime-elements/issues"
118
120
  },
119
121
  "homepage": "https://github.com/Lundalogik/lime-elements#readme",
120
- "packageManager": "npm@>=10.9",
121
- "dependencies": {
122
- "sortablejs": "^1.15.6"
123
- }
122
+ "packageManager": "npm@>=10.9"
124
123
  }