@limetech/lime-elements 39.6.0 → 39.7.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 (253) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/cjs/lime-elements.cjs.js +1 -1
  3. package/dist/cjs/{limel-action-bar_2.cjs.entry.js → limel-action-bar_3.cjs.entry.js} +111 -93
  4. package/dist/cjs/limel-ai-avatar.cjs.entry.js +1 -1
  5. package/dist/cjs/limel-breadcrumbs_7.cjs.entry.js +6 -6
  6. package/dist/cjs/limel-button-group.cjs.entry.js +7 -8
  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-diff.cjs.entry.js +1758 -0
  11. package/dist/cjs/limel-code-editor.cjs.entry.js +2 -2
  12. package/dist/cjs/limel-collapsible-section.cjs.entry.js +2 -2
  13. package/dist/cjs/limel-color-picker-palette.cjs.entry.js +2 -2
  14. package/dist/cjs/limel-color-picker.cjs.entry.js +1 -1
  15. package/dist/cjs/limel-dialog.cjs.entry.js +2 -2
  16. package/dist/cjs/limel-dock.cjs.entry.js +2 -2
  17. package/dist/cjs/limel-drag-handle.cjs.entry.js +2 -2
  18. package/dist/cjs/limel-email-viewer.cjs.entry.js +2 -2
  19. package/dist/cjs/limel-file-dropzone_2.cjs.entry.js +2 -2
  20. package/dist/cjs/limel-file-viewer.cjs.entry.js +1 -1
  21. package/dist/cjs/limel-file.cjs.entry.js +2 -2
  22. package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +2 -2
  23. package/dist/cjs/limel-flex-container.cjs.entry.js +1 -1
  24. package/dist/cjs/limel-form.cjs.entry.js +1 -1
  25. package/dist/cjs/limel-grid.cjs.entry.js +1 -1
  26. package/dist/cjs/limel-header.cjs.entry.js +1 -1
  27. package/dist/cjs/limel-help-content.cjs.entry.js +1 -1
  28. package/dist/cjs/limel-help.cjs.entry.js +2 -2
  29. package/dist/cjs/limel-helper-line_2.cjs.entry.js +3 -3
  30. package/dist/cjs/limel-icon-button.cjs.entry.js +1 -1
  31. package/dist/cjs/limel-icon.cjs.entry.js +1 -1
  32. package/dist/cjs/limel-info-tile.cjs.entry.js +2 -2
  33. package/dist/cjs/limel-linear-progress.cjs.entry.js +1 -1
  34. package/dist/cjs/limel-list-item.cjs.entry.js +3 -3
  35. package/dist/cjs/limel-markdown.cjs.entry.js +1 -1
  36. package/dist/cjs/limel-menu-item-meta.cjs.entry.js +1 -1
  37. package/dist/cjs/limel-picker.cjs.entry.js +1 -1
  38. package/dist/cjs/limel-popover_2.cjs.entry.js +2 -2
  39. package/dist/cjs/limel-portal_3.cjs.entry.js +4 -4
  40. package/dist/cjs/limel-profile-picture.cjs.entry.js +1 -1
  41. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +2 -2
  42. package/dist/cjs/limel-radio-button-group.cjs.entry.js +1 -1
  43. package/dist/cjs/limel-radio-button.cjs.entry.js +2 -2
  44. package/dist/cjs/limel-select.cjs.entry.js +1 -1
  45. package/dist/cjs/limel-shortcut.cjs.entry.js +1 -1
  46. package/dist/cjs/limel-slider.cjs.entry.js +1 -1
  47. package/dist/cjs/limel-snackbar.cjs.entry.js +3 -3
  48. package/dist/cjs/limel-split-button.cjs.entry.js +2 -2
  49. package/dist/cjs/limel-tab-bar.cjs.entry.js +2 -2
  50. package/dist/cjs/limel-tab-panel.cjs.entry.js +1 -1
  51. package/dist/cjs/limel-table.cjs.entry.js +4 -4
  52. package/dist/cjs/limel-text-editor-link-menu.cjs.entry.js +120 -0
  53. package/dist/cjs/limel-text-editor.cjs.entry.js +1 -1
  54. package/dist/cjs/loader.cjs.js +1 -1
  55. package/dist/cjs/{translations-BBGWKIVD.js → translations-Bu_0fli7.js} +236 -4
  56. package/dist/collection/collection-manifest.json +1 -0
  57. package/dist/collection/components/button-group/button-group.css +38 -650
  58. package/dist/collection/components/button-group/button-group.js +6 -7
  59. package/dist/collection/components/code-diff/code-diff.css +519 -0
  60. package/dist/collection/components/code-diff/code-diff.js +775 -0
  61. package/dist/collection/components/code-diff/content-utils.js +49 -0
  62. package/dist/collection/components/code-diff/diff-engine.js +308 -0
  63. package/dist/collection/components/code-diff/search-utils.js +41 -0
  64. package/dist/collection/components/code-diff/syntax-highlighter.js +87 -0
  65. package/dist/collection/components/code-diff/types.js +1 -0
  66. package/dist/collection/components/code-editor/code-editor.js +1 -1
  67. package/dist/collection/components/collapsible-section/collapsible-section.js +1 -1
  68. package/dist/collection/components/color-picker/color-picker-palette.js +2 -2
  69. package/dist/collection/components/color-picker/color-picker.js +1 -1
  70. package/dist/collection/components/date-picker/flatpickr-adapter/flatpickr-adapter.js +1 -1
  71. package/dist/collection/components/dialog/dialog.js +2 -2
  72. package/dist/collection/components/dock/dock.js +2 -2
  73. package/dist/collection/components/drag-handle/drag-handle.js +1 -1
  74. package/dist/collection/components/email-viewer/email-viewer.js +1 -1
  75. package/dist/collection/components/file/file.js +1 -1
  76. package/dist/collection/components/file-dropzone/file-dropzone.js +1 -1
  77. package/dist/collection/components/file-input/file-input.js +1 -1
  78. package/dist/collection/components/flex-container/flex-container.js +1 -1
  79. package/dist/collection/components/form/form.js +1 -1
  80. package/dist/collection/components/grid/grid.js +1 -1
  81. package/dist/collection/components/header/header.js +1 -1
  82. package/dist/collection/components/help/help-content.js +1 -1
  83. package/dist/collection/components/help/help.js +2 -2
  84. package/dist/collection/components/helper-line/helper-line.js +2 -2
  85. package/dist/collection/components/icon/icon.js +1 -1
  86. package/dist/collection/components/icon-button/icon-button.js +1 -1
  87. package/dist/collection/components/info-tile/info-tile.js +2 -2
  88. package/dist/collection/components/input-field/input-field.js +1 -1
  89. package/dist/collection/components/list/list.js +1 -1
  90. package/dist/collection/components/list-item/list-item.js +2 -2
  91. package/dist/collection/components/list-item/menu-item-meta/menu-item-meta.js +1 -1
  92. package/dist/collection/components/markdown/markdown.js +1 -1
  93. package/dist/collection/components/menu/menu.js +1 -1
  94. package/dist/collection/components/menu-list/menu-list.js +1 -1
  95. package/dist/collection/components/menu-surface/menu-surface.js +1 -1
  96. package/dist/collection/components/notched-outline/notched-outline.js +1 -1
  97. package/dist/collection/components/picker/picker.js +1 -1
  98. package/dist/collection/components/popover/popover.js +1 -1
  99. package/dist/collection/components/popover-surface/popover-surface.js +1 -1
  100. package/dist/collection/components/portal/portal.js +1 -1
  101. package/dist/collection/components/radio-button-group/radio-button-group.js +1 -1
  102. package/dist/collection/components/radio-button-group/radio-button.js +2 -2
  103. package/dist/collection/components/select/select.js +1 -1
  104. package/dist/collection/components/shortcut/shortcut.js +1 -1
  105. package/dist/collection/components/slider/slider.js +1 -1
  106. package/dist/collection/components/snackbar/snackbar.js +2 -2
  107. package/dist/collection/components/spinner/spinner.js +1 -1
  108. package/dist/collection/components/split-button/split-button.js +2 -2
  109. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  110. package/dist/collection/components/tab-panel/tab-panel.js +1 -1
  111. package/dist/collection/components/table/table.js +3 -3
  112. package/dist/collection/components/text-editor/link-menu/editor-link-menu.js +3 -3
  113. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +1 -1
  114. package/dist/collection/components/text-editor/text-editor.js +1 -1
  115. package/dist/collection/components/tooltip/tooltip-content.js +1 -1
  116. package/dist/collection/components/tooltip/tooltip.js +2 -2
  117. package/dist/collection/translations/da.js +29 -0
  118. package/dist/collection/translations/de.js +29 -0
  119. package/dist/collection/translations/en.js +29 -0
  120. package/dist/collection/translations/fi.js +29 -0
  121. package/dist/collection/translations/fr.js +33 -4
  122. package/dist/collection/translations/nl.js +29 -0
  123. package/dist/collection/translations/no.js +29 -0
  124. package/dist/collection/translations/sv.js +29 -0
  125. package/dist/esm/lime-elements.js +1 -1
  126. package/dist/esm/{limel-action-bar_2.entry.js → limel-action-bar_3.entry.js} +110 -93
  127. package/dist/esm/limel-ai-avatar.entry.js +1 -1
  128. package/dist/esm/limel-breadcrumbs_7.entry.js +6 -6
  129. package/dist/esm/limel-button-group.entry.js +7 -8
  130. package/dist/esm/limel-callout.entry.js +1 -1
  131. package/dist/esm/limel-chart.entry.js +1 -1
  132. package/dist/esm/limel-chip_2.entry.js +1 -1
  133. package/dist/esm/limel-code-diff.entry.js +1756 -0
  134. package/dist/esm/limel-code-editor.entry.js +2 -2
  135. package/dist/esm/limel-collapsible-section.entry.js +2 -2
  136. package/dist/esm/limel-color-picker-palette.entry.js +2 -2
  137. package/dist/esm/limel-color-picker.entry.js +1 -1
  138. package/dist/esm/limel-dialog.entry.js +2 -2
  139. package/dist/esm/limel-dock.entry.js +2 -2
  140. package/dist/esm/limel-drag-handle.entry.js +2 -2
  141. package/dist/esm/limel-email-viewer.entry.js +2 -2
  142. package/dist/esm/limel-file-dropzone_2.entry.js +2 -2
  143. package/dist/esm/limel-file-viewer.entry.js +1 -1
  144. package/dist/esm/limel-file.entry.js +2 -2
  145. package/dist/esm/limel-flatpickr-adapter.entry.js +2 -2
  146. package/dist/esm/limel-flex-container.entry.js +1 -1
  147. package/dist/esm/limel-form.entry.js +1 -1
  148. package/dist/esm/limel-grid.entry.js +1 -1
  149. package/dist/esm/limel-header.entry.js +1 -1
  150. package/dist/esm/limel-help-content.entry.js +1 -1
  151. package/dist/esm/limel-help.entry.js +2 -2
  152. package/dist/esm/limel-helper-line_2.entry.js +3 -3
  153. package/dist/esm/limel-icon-button.entry.js +1 -1
  154. package/dist/esm/limel-icon.entry.js +1 -1
  155. package/dist/esm/limel-info-tile.entry.js +2 -2
  156. package/dist/esm/limel-linear-progress.entry.js +1 -1
  157. package/dist/esm/limel-list-item.entry.js +3 -3
  158. package/dist/esm/limel-markdown.entry.js +1 -1
  159. package/dist/esm/limel-menu-item-meta.entry.js +1 -1
  160. package/dist/esm/limel-picker.entry.js +1 -1
  161. package/dist/esm/limel-popover_2.entry.js +2 -2
  162. package/dist/esm/limel-portal_3.entry.js +4 -4
  163. package/dist/esm/limel-profile-picture.entry.js +1 -1
  164. package/dist/esm/limel-prosemirror-adapter.entry.js +2 -2
  165. package/dist/esm/limel-radio-button-group.entry.js +1 -1
  166. package/dist/esm/limel-radio-button.entry.js +2 -2
  167. package/dist/esm/limel-select.entry.js +1 -1
  168. package/dist/esm/limel-shortcut.entry.js +1 -1
  169. package/dist/esm/limel-slider.entry.js +1 -1
  170. package/dist/esm/limel-snackbar.entry.js +3 -3
  171. package/dist/esm/limel-split-button.entry.js +2 -2
  172. package/dist/esm/limel-tab-bar.entry.js +2 -2
  173. package/dist/esm/limel-tab-panel.entry.js +1 -1
  174. package/dist/esm/limel-table.entry.js +4 -4
  175. package/dist/esm/limel-text-editor-link-menu.entry.js +118 -0
  176. package/dist/esm/limel-text-editor.entry.js +1 -1
  177. package/dist/esm/loader.js +1 -1
  178. package/dist/esm/{translations-BHybIZJs.js → translations-DVRaJQvC.js} +236 -4
  179. package/dist/lime-elements/lime-elements.esm.js +1 -1
  180. package/dist/lime-elements/{p-58176f7b.entry.js → p-05ff053d.entry.js} +1 -1
  181. package/dist/lime-elements/{p-7dd4e4bb.entry.js → p-08d1b87a.entry.js} +1 -1
  182. package/dist/lime-elements/{p-94f78e7a.entry.js → p-0fa2add8.entry.js} +1 -1
  183. package/dist/lime-elements/{p-40883e25.entry.js → p-1547b9c8.entry.js} +1 -1
  184. package/dist/lime-elements/{p-16a5f421.entry.js → p-1c244f85.entry.js} +1 -1
  185. package/dist/lime-elements/{p-ba9d6d42.entry.js → p-21dc4586.entry.js} +1 -1
  186. package/dist/lime-elements/{p-8e6a36a7.entry.js → p-2292181d.entry.js} +1 -1
  187. package/dist/lime-elements/{p-889d0000.entry.js → p-26bc957e.entry.js} +1 -1
  188. package/dist/lime-elements/{p-d4a51f0a.entry.js → p-287c4fb1.entry.js} +1 -1
  189. package/dist/lime-elements/p-358b277c.entry.js +1 -0
  190. package/dist/lime-elements/{p-f43e4cb8.entry.js → p-44295cc0.entry.js} +1 -1
  191. package/dist/lime-elements/{p-78fffaa9.entry.js → p-5178cc39.entry.js} +1 -1
  192. package/dist/lime-elements/{p-ec5b360a.entry.js → p-518fe33c.entry.js} +2 -2
  193. package/dist/lime-elements/{p-911db0aa.entry.js → p-53b94806.entry.js} +1 -1
  194. package/dist/lime-elements/p-5be668d8.entry.js +1 -0
  195. package/dist/lime-elements/{p-f49e5d8a.entry.js → p-68ffd790.entry.js} +1 -1
  196. package/dist/lime-elements/{p-fdfecf3d.entry.js → p-6a26ea78.entry.js} +1 -1
  197. package/dist/lime-elements/{p-5f593160.entry.js → p-6b05db4a.entry.js} +1 -1
  198. package/dist/lime-elements/p-70e2e60c.entry.js +1 -0
  199. package/dist/lime-elements/{p-3ad102a1.entry.js → p-756f452c.entry.js} +1 -1
  200. package/dist/lime-elements/{p-fa6aea91.entry.js → p-8784a57c.entry.js} +1 -1
  201. package/dist/lime-elements/{p-6d28c7b4.entry.js → p-89dfbd4a.entry.js} +1 -1
  202. package/dist/lime-elements/{p-5280d11e.entry.js → p-8ec4fdee.entry.js} +1 -1
  203. package/dist/lime-elements/{p-1b0eec07.entry.js → p-90f8d2ef.entry.js} +1 -1
  204. package/dist/lime-elements/p-965288d2.entry.js +1 -0
  205. package/dist/lime-elements/{p-8b77d2a8.entry.js → p-9908b57a.entry.js} +1 -1
  206. package/dist/lime-elements/{p-2d7a2258.entry.js → p-9e3e4f2c.entry.js} +1 -1
  207. package/dist/lime-elements/p-DVRaJQvC.js +1 -0
  208. package/dist/lime-elements/{p-3b18ef34.entry.js → p-a2295fa6.entry.js} +1 -1
  209. package/dist/lime-elements/{p-14bfd676.entry.js → p-a489f4b0.entry.js} +1 -1
  210. package/dist/lime-elements/{p-d5e954d4.entry.js → p-aeebf410.entry.js} +1 -1
  211. package/dist/lime-elements/{p-f4c9301d.entry.js → p-b11751c9.entry.js} +1 -1
  212. package/dist/lime-elements/{p-a1c1c40d.entry.js → p-b6ccc921.entry.js} +1 -1
  213. package/dist/lime-elements/{p-60f12574.entry.js → p-b95a42ea.entry.js} +1 -1
  214. package/dist/lime-elements/{p-8118cd4f.entry.js → p-bb38bb3c.entry.js} +1 -1
  215. package/dist/lime-elements/{p-d93f1c5f.entry.js → p-c3d565e2.entry.js} +1 -1
  216. package/dist/lime-elements/{p-a113dc9d.entry.js → p-c3ff8518.entry.js} +1 -1
  217. package/dist/lime-elements/{p-e00a96bd.entry.js → p-c6b9425b.entry.js} +1 -1
  218. package/dist/lime-elements/{p-373b7df7.entry.js → p-c6e9af7c.entry.js} +1 -1
  219. package/dist/lime-elements/{p-7997c118.entry.js → p-ce22f3da.entry.js} +1 -1
  220. package/dist/lime-elements/{p-8c6dfb19.entry.js → p-d5da5b05.entry.js} +1 -1
  221. package/dist/lime-elements/{p-b255e8e6.entry.js → p-da4429a8.entry.js} +1 -1
  222. package/dist/lime-elements/{p-6aa7cd43.entry.js → p-dcf3cc71.entry.js} +1 -1
  223. package/dist/lime-elements/{p-97f719ae.entry.js → p-de1e5ad9.entry.js} +1 -1
  224. package/dist/lime-elements/{p-13d0ec04.entry.js → p-eaac5ad2.entry.js} +1 -1
  225. package/dist/lime-elements/{p-ce178fbd.entry.js → p-ed8129db.entry.js} +1 -1
  226. package/dist/lime-elements/{p-b92431c8.entry.js → p-ee3afb60.entry.js} +3 -3
  227. package/dist/lime-elements/{p-8eff8a18.entry.js → p-ef75eed9.entry.js} +1 -1
  228. package/dist/lime-elements/{p-46b95d7c.entry.js → p-ef9bb368.entry.js} +1 -1
  229. package/dist/lime-elements/{p-912f53a3.entry.js → p-f70b8487.entry.js} +1 -1
  230. package/dist/lime-elements/{p-d53b8de5.entry.js → p-f9d5513d.entry.js} +1 -1
  231. package/dist/lime-elements/{p-bc4b4e46.entry.js → p-fb6c42a6.entry.js} +1 -1
  232. package/dist/types/components/code-diff/code-diff.d.ts +147 -0
  233. package/dist/types/components/code-diff/content-utils.d.ts +27 -0
  234. package/dist/types/components/code-diff/diff-engine.d.ts +36 -0
  235. package/dist/types/components/code-diff/search-utils.d.ts +30 -0
  236. package/dist/types/components/code-diff/syntax-highlighter.d.ts +19 -0
  237. package/dist/types/components/code-diff/types.d.ts +50 -0
  238. package/dist/types/components.d.ts +175 -0
  239. package/dist/types/translations/da.d.ts +29 -0
  240. package/dist/types/translations/de.d.ts +29 -0
  241. package/dist/types/translations/en.d.ts +29 -0
  242. package/dist/types/translations/fi.d.ts +29 -0
  243. package/dist/types/translations/fr.d.ts +29 -0
  244. package/dist/types/translations/nl.d.ts +29 -0
  245. package/dist/types/translations/no.d.ts +29 -0
  246. package/dist/types/translations/sv.d.ts +29 -0
  247. package/package.json +2 -1
  248. package/dist/cjs/limel-action-bar-item_2.cjs.entry.js +0 -137
  249. package/dist/esm/limel-action-bar-item_2.entry.js +0 -134
  250. package/dist/lime-elements/p-854a3ffe.entry.js +0 -1
  251. package/dist/lime-elements/p-8f2ac274.entry.js +0 -1
  252. package/dist/lime-elements/p-BHybIZJs.js +0 -1
  253. package/dist/lime-elements/p-accc6cc0.entry.js +0 -1
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Pure utility functions for extracting text content from diff structures.
3
+ */
4
+ /**
5
+ * Extract the text content of removed lines from a unified change block.
6
+ *
7
+ * @param lines - consecutive changed lines from a unified diff hunk
8
+ * @returns the removed lines joined by newlines, or empty string if none
9
+ */
10
+ export function extractRemovedContent(lines) {
11
+ return lines
12
+ .filter((line) => line.type === 'removed')
13
+ .map((line) => line.content)
14
+ .join('\n');
15
+ }
16
+ /**
17
+ * Extract the text content of removed lines from a split change block.
18
+ *
19
+ * @param rows - consecutive changed rows from a split diff hunk
20
+ * @returns the removed lines joined by newlines, or empty string if none
21
+ */
22
+ export function extractRemovedContentFromSplit(rows) {
23
+ return rows
24
+ .filter((row) => { var _a; return ((_a = row.left) === null || _a === void 0 ? void 0 : _a.type) === 'removed'; })
25
+ .map((row) => row.left.content)
26
+ .join('\n');
27
+ }
28
+ /**
29
+ * Format a screen-reader summary of diff additions and deletions.
30
+ *
31
+ * @param additions - number of added lines
32
+ * @param deletions - number of removed lines
33
+ * @returns human-readable summary string, or null if no changes
34
+ */
35
+ export function formatDiffSummary(additions, deletions) {
36
+ if (additions === 0 && deletions === 0) {
37
+ return null;
38
+ }
39
+ const parts = [];
40
+ if (additions > 0) {
41
+ const suffix = additions === 1 ? '' : 's';
42
+ parts.push(`${additions} addition${suffix}`);
43
+ }
44
+ if (deletions > 0) {
45
+ const suffix = deletions === 1 ? '' : 's';
46
+ parts.push(`${deletions} deletion${suffix}`);
47
+ }
48
+ return `Diff: ${parts.join(', ')}. Use arrow keys to navigate lines.`;
49
+ }
@@ -0,0 +1,308 @@
1
+ import { diffLines, diffWords } from "diff";
2
+ /**
3
+ * Compute a structured diff between two strings.
4
+ *
5
+ * @param oldText - the "before" text
6
+ * @param newText - the "after" text
7
+ * @param contextLines - number of unchanged lines to show around each change
8
+ * @returns a DiffResult with hunks, additions, and deletions counts
9
+ */
10
+ export function computeDiff(oldText, newText, contextLines = 3) {
11
+ const allLines = buildDiffLines(oldText, newText);
12
+ return groupIntoHunks(allLines, contextLines);
13
+ }
14
+ /**
15
+ * Re-group previously computed flat lines into hunks.
16
+ * Used when expanding collapsed sections without re-diffing.
17
+ *
18
+ * @param allLines - the full flat diff lines from a previous computation
19
+ * @param contextLines - number of context lines around changes
20
+ * @returns a DiffResult with new hunk groupings
21
+ */
22
+ export function regroupLines(allLines, contextLines) {
23
+ return groupIntoHunks(allLines, contextLines);
24
+ }
25
+ /**
26
+ * Build paired rows for split (side-by-side) view from flat diff lines.
27
+ * Context lines appear on both sides. Adjacent removed+added lines
28
+ * are paired into the same row.
29
+ *
30
+ * @param lines - flat diff lines
31
+ * @returns paired rows for split rendering
32
+ */
33
+ export function buildSplitLines(lines) {
34
+ const rows = [];
35
+ let i = 0;
36
+ while (i < lines.length) {
37
+ const line = lines[i];
38
+ if (line.type === 'context') {
39
+ rows.push({ left: line, right: line });
40
+ i++;
41
+ continue;
42
+ }
43
+ i = collectAndPairChanges(lines, i, rows);
44
+ }
45
+ return rows;
46
+ }
47
+ /**
48
+ * Collect consecutive removed then added lines starting at `index`,
49
+ * pair them into split rows, and return the new index.
50
+ * @param lines - flat diff lines
51
+ * @param index - starting index
52
+ * @param rows - output array to push paired rows into
53
+ */
54
+ function collectAndPairChanges(lines, index, rows) {
55
+ const removed = [];
56
+ while (index < lines.length && lines[index].type === 'removed') {
57
+ removed.push(lines[index]);
58
+ index++;
59
+ }
60
+ const added = [];
61
+ while (index < lines.length && lines[index].type === 'added') {
62
+ added.push(lines[index]);
63
+ index++;
64
+ }
65
+ const maxPairs = Math.max(removed.length, added.length);
66
+ for (let j = 0; j < maxPairs; j++) {
67
+ rows.push({
68
+ left: j < removed.length ? removed[j] : undefined,
69
+ right: j < added.length ? added[j] : undefined,
70
+ });
71
+ }
72
+ return index;
73
+ }
74
+ /**
75
+ * Normalize values for diffing. If `reformatJson` is true,
76
+ * parse and re-stringify with sorted keys and consistent indentation.
77
+ * @param value
78
+ * @param reformatJson
79
+ */
80
+ export function normalizeForDiff(value, reformatJson = false) {
81
+ if (typeof value === 'object' && value !== null) {
82
+ return JSON.stringify(sortKeysDeep(value), null, 4);
83
+ }
84
+ if (typeof value === 'string' && reformatJson) {
85
+ try {
86
+ const parsed = JSON.parse(value);
87
+ return JSON.stringify(sortKeysDeep(parsed), null, 4);
88
+ }
89
+ catch (_a) {
90
+ return value;
91
+ }
92
+ }
93
+ return String(value !== null && value !== void 0 ? value : '');
94
+ }
95
+ function sortKeysDeep(obj) {
96
+ if (Array.isArray(obj)) {
97
+ return obj.map(sortKeysDeep);
98
+ }
99
+ if (obj !== null && typeof obj === 'object') {
100
+ const sorted = {};
101
+ const keys = Object.keys(obj).sort((a, b) => a.localeCompare(b));
102
+ for (const key of keys) {
103
+ sorted[key] = sortKeysDeep(obj[key]);
104
+ }
105
+ return sorted;
106
+ }
107
+ return obj;
108
+ }
109
+ /**
110
+ * Build a flat list of DiffLines from two text strings.
111
+ * @param oldText
112
+ * @param newText
113
+ */
114
+ function buildDiffLines(oldText, newText) {
115
+ const changes = diffLines(oldText, newText);
116
+ const lines = [];
117
+ let oldLineNum = 1;
118
+ let newLineNum = 1;
119
+ for (const change of changes) {
120
+ const changeLines = splitIntoLines(change.value);
121
+ for (const line of changeLines) {
122
+ if (change.added) {
123
+ lines.push({
124
+ type: 'added',
125
+ content: line,
126
+ newLineNumber: newLineNum++,
127
+ });
128
+ }
129
+ else if (change.removed) {
130
+ lines.push({
131
+ type: 'removed',
132
+ content: line,
133
+ oldLineNumber: oldLineNum++,
134
+ });
135
+ }
136
+ else {
137
+ lines.push({
138
+ type: 'context',
139
+ content: line,
140
+ oldLineNumber: oldLineNum++,
141
+ newLineNumber: newLineNum++,
142
+ });
143
+ }
144
+ }
145
+ }
146
+ addWordLevelHighlighting(lines);
147
+ return lines;
148
+ }
149
+ /**
150
+ * Split a string into lines, handling the trailing newline
151
+ * that jsdiff includes in each change value.
152
+ * @param text
153
+ */
154
+ function splitIntoLines(text) {
155
+ if (!text) {
156
+ return [];
157
+ }
158
+ const lines = text.split('\n');
159
+ // jsdiff includes a trailing newline, producing an empty last element
160
+ if (lines.length > 0 && lines.at(-1) === '') {
161
+ lines.pop();
162
+ }
163
+ return lines;
164
+ }
165
+ /**
166
+ * Pair adjacent removed+added lines and compute word-level diffs
167
+ * to highlight only the specific segments that changed.
168
+ * @param lines
169
+ */
170
+ function addWordLevelHighlighting(lines) {
171
+ let i = 0;
172
+ while (i < lines.length) {
173
+ // Find consecutive removed lines
174
+ const removedStart = i;
175
+ while (i < lines.length && lines[i].type === 'removed') {
176
+ i++;
177
+ }
178
+ const removedEnd = i;
179
+ // Find consecutive added lines right after
180
+ const addedStart = i;
181
+ while (i < lines.length && lines[i].type === 'added') {
182
+ i++;
183
+ }
184
+ const addedEnd = i;
185
+ const removedCount = removedEnd - removedStart;
186
+ const addedCount = addedEnd - addedStart;
187
+ // Pair them up for word-level highlighting
188
+ if (removedCount > 0 && addedCount > 0) {
189
+ const pairCount = Math.min(removedCount, addedCount);
190
+ for (let j = 0; j < pairCount; j++) {
191
+ const removedLine = lines[removedStart + j];
192
+ const addedLine = lines[addedStart + j];
193
+ const [removedSegments, addedSegments] = computeWordSegments(removedLine.content, addedLine.content);
194
+ removedLine.segments = removedSegments;
195
+ addedLine.segments = addedSegments;
196
+ }
197
+ }
198
+ // Skip context lines
199
+ if (i === removedStart) {
200
+ i++;
201
+ }
202
+ }
203
+ }
204
+ /**
205
+ * Compute word-level diff segments for a pair of lines.
206
+ * @param oldContent
207
+ * @param newContent
208
+ */
209
+ function computeWordSegments(oldContent, newContent) {
210
+ const wordChanges = diffWords(oldContent, newContent);
211
+ const removedSegments = [];
212
+ const addedSegments = [];
213
+ for (const change of wordChanges) {
214
+ if (change.added) {
215
+ addedSegments.push({ value: change.value, type: 'added' });
216
+ }
217
+ else if (change.removed) {
218
+ removedSegments.push({ value: change.value, type: 'removed' });
219
+ }
220
+ else {
221
+ removedSegments.push({ value: change.value, type: 'equal' });
222
+ addedSegments.push({ value: change.value, type: 'equal' });
223
+ }
224
+ }
225
+ return [removedSegments, addedSegments];
226
+ }
227
+ /**
228
+ * Group a flat list of diff lines into hunks with context.
229
+ * @param lines
230
+ * @param contextLines
231
+ */
232
+ function groupIntoHunks(lines, contextLines) {
233
+ if (lines.length === 0) {
234
+ return { hunks: [], additions: 0, deletions: 0, allLines: lines };
235
+ }
236
+ let additions = 0;
237
+ let deletions = 0;
238
+ for (const line of lines) {
239
+ if (line.type === 'added') {
240
+ additions++;
241
+ }
242
+ else if (line.type === 'removed') {
243
+ deletions++;
244
+ }
245
+ }
246
+ // If there are no changes, return a single empty result
247
+ if (additions === 0 && deletions === 0) {
248
+ return { hunks: [], additions: 0, deletions: 0, allLines: lines };
249
+ }
250
+ // Find ranges of changed lines with their context
251
+ const changeIndices = [];
252
+ for (const [i, line] of lines.entries()) {
253
+ if (line.type !== 'context') {
254
+ changeIndices.push(i);
255
+ }
256
+ }
257
+ // Build hunk boundaries
258
+ const hunkBoundaries = buildHunkBoundaries(changeIndices, lines.length, contextLines);
259
+ const hunks = [];
260
+ let prevEnd = 0;
261
+ for (const boundary of hunkBoundaries) {
262
+ const hunkLines = lines.slice(boundary.start, boundary.end);
263
+ const hiddenBefore = boundary.start - prevEnd;
264
+ const collapsedBefore = hiddenBefore > 0 ? hiddenBefore : undefined;
265
+ hunks.push({
266
+ lines: hunkLines,
267
+ collapsedBefore,
268
+ startIndex: boundary.start,
269
+ });
270
+ prevEnd = boundary.end;
271
+ }
272
+ // Calculate collapsed lines after the last hunk
273
+ const lastBoundary = hunkBoundaries.at(-1);
274
+ const collapsedAfter = lastBoundary.end < lines.length
275
+ ? lines.length - lastBoundary.end
276
+ : undefined;
277
+ return { hunks, additions, deletions, collapsedAfter, allLines: lines };
278
+ }
279
+ /**
280
+ * Build the start/end boundaries of each hunk based on change positions.
281
+ * Merges hunks that overlap or are adjacent.
282
+ * @param changeIndices
283
+ * @param totalLines
284
+ * @param contextLines
285
+ */
286
+ function buildHunkBoundaries(changeIndices, totalLines, contextLines) {
287
+ if (changeIndices.length === 0) {
288
+ return [];
289
+ }
290
+ const boundaries = [];
291
+ let currentStart = Math.max(0, changeIndices[0] - contextLines);
292
+ let currentEnd = Math.min(totalLines, changeIndices[0] + contextLines + 1);
293
+ for (let i = 1; i < changeIndices.length; i++) {
294
+ const changeStart = Math.max(0, changeIndices[i] - contextLines);
295
+ const changeEnd = Math.min(totalLines, changeIndices[i] + contextLines + 1);
296
+ if (changeStart <= currentEnd) {
297
+ // Merge overlapping hunks
298
+ currentEnd = Math.max(currentEnd, changeEnd);
299
+ }
300
+ else {
301
+ boundaries.push({ start: currentStart, end: currentEnd });
302
+ currentStart = changeStart;
303
+ currentEnd = changeEnd;
304
+ }
305
+ }
306
+ boundaries.push({ start: currentStart, end: currentEnd });
307
+ return boundaries;
308
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Pure utility functions for search-within-diff functionality.
3
+ */
4
+ /**
5
+ * Escape special regex characters in a search term so it can
6
+ * be used as a literal pattern in a RegExp constructor.
7
+ *
8
+ * @param term - the raw search string
9
+ * @returns regex-safe string
10
+ */
11
+ export function escapeRegex(term) {
12
+ return term.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw `\$&`);
13
+ }
14
+ /**
15
+ * Build a case-insensitive regex that captures the search term.
16
+ * Returns `null` when the term is empty.
17
+ *
18
+ * @param term - the raw search string
19
+ * @returns a RegExp with a single capture group, or null
20
+ */
21
+ export function buildSearchRegex(term) {
22
+ if (!term) {
23
+ return null;
24
+ }
25
+ return new RegExp(`(${escapeRegex(term)})`, 'gi');
26
+ }
27
+ /**
28
+ * Calculate the next match index when navigating forward or backward,
29
+ * wrapping around at the boundaries.
30
+ *
31
+ * @param currentIndex - current zero-based match index
32
+ * @param direction - +1 for next, -1 for previous
33
+ * @param total - total number of matches
34
+ * @returns the new match index
35
+ */
36
+ export function navigateMatchIndex(currentIndex, direction, total) {
37
+ if (total === 0) {
38
+ return 0;
39
+ }
40
+ return (currentIndex + direction + total) % total;
41
+ }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Tokenize a text fragment for syntax highlighting.
3
+ * Returns the original text as a single plain token when the
4
+ * language is not supported.
5
+ *
6
+ * @param text - the text to tokenize
7
+ * @param language - the language identifier (e.g. "json")
8
+ * @returns array of syntax tokens
9
+ */
10
+ export function tokenize(text, language) {
11
+ if (!language || text.length === 0) {
12
+ return [{ value: text, type: 'plain' }];
13
+ }
14
+ if (language === 'json') {
15
+ return tokenizeJson(text);
16
+ }
17
+ return [{ value: text, type: 'plain' }];
18
+ }
19
+ // ─── JSON tokenizer ─────────────────────────────────────────────────
20
+ /**
21
+ * Regex-based JSON tokenizer.
22
+ * Handles partial lines (individual lines of a JSON document).
23
+ */
24
+ const JSON_PATTERNS = [
25
+ // String literals (keys and values)
26
+ [/"(?:[^"\\]|\\.)*"/, 'string'],
27
+ // Numbers
28
+ [/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/, 'number'],
29
+ // Booleans
30
+ [/\b(?:true|false)\b/, 'boolean'],
31
+ // Null
32
+ [/\bnull\b/, 'null'],
33
+ // Punctuation
34
+ [/[{}[\]:,]/, 'punctuation'],
35
+ ];
36
+ const JSON_REGEX = new RegExp(JSON_PATTERNS.map(([re]) => `(${re.source})`).join('|'), 'g');
37
+ function tokenizeJson(text) {
38
+ const tokens = [];
39
+ let lastIndex = 0;
40
+ JSON_REGEX.lastIndex = 0;
41
+ let match = JSON_REGEX.exec(text);
42
+ while (match !== null) {
43
+ // Plain text before this match
44
+ if (match.index > lastIndex) {
45
+ tokens.push({
46
+ value: text.slice(lastIndex, match.index),
47
+ type: 'plain',
48
+ });
49
+ }
50
+ // Determine which capture group matched
51
+ const tokenType = getMatchedTokenType(match);
52
+ const value = match[0];
53
+ // Distinguish JSON keys from string values:
54
+ // A key is a string followed by optional whitespace and a colon
55
+ if (tokenType === 'string') {
56
+ const afterMatch = text.slice(match.index + value.length);
57
+ if (/^\s*:/.test(afterMatch)) {
58
+ tokens.push({ value, type: 'key' });
59
+ }
60
+ else {
61
+ tokens.push({ value, type: 'string' });
62
+ }
63
+ }
64
+ else {
65
+ tokens.push({ value, type: tokenType });
66
+ }
67
+ lastIndex = match.index + value.length;
68
+ match = JSON_REGEX.exec(text);
69
+ }
70
+ // Remaining plain text
71
+ if (lastIndex < text.length) {
72
+ tokens.push({ value: text.slice(lastIndex), type: 'plain' });
73
+ }
74
+ return tokens;
75
+ }
76
+ /**
77
+ * Determine which pattern matched by checking capture groups.
78
+ * @param match - the regex match result
79
+ */
80
+ function getMatchedTokenType(match) {
81
+ for (const [index, [, type]] of JSON_PATTERNS.entries()) {
82
+ if (match[index + 1] !== undefined) {
83
+ return type;
84
+ }
85
+ }
86
+ return 'plain';
87
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -250,7 +250,7 @@ export class CodeEditor {
250
250
  'is-dark-mode': this.isDarkMode(),
251
251
  'is-light-mode': !this.isDarkMode(),
252
252
  };
253
- return (h(Host, { key: '47f27484ea6a4271fba45f81aa97a9ab9c0d7c28' }, this.renderCopyButton(), h("limel-notched-outline", { key: 'cc455855470c242d667b80a1b778007c6582439b', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid, disabled: this.disabled, readonly: this.readonly, hasValue: !!this.value, hasFloatingLabel: true }, h("div", { key: '11942b528f9110ee14cf8ef54f6c588fde1a6113', slot: "content", class: classList })), this.renderHelperLine()));
253
+ return (h(Host, { key: 'fd59cdeb74135398c33210af68d6129820c586bd' }, this.renderCopyButton(), h("limel-notched-outline", { key: '41214ae1f04b85a9462f3b71cd03871a7fd0401d', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid, disabled: this.disabled, readonly: this.readonly, hasValue: !!this.value, hasFloatingLabel: true }, h("div", { key: '4d5caf3e80e342af2b8ea54411b11348949babd1', slot: "content", class: classList })), this.renderHelperLine()));
254
254
  }
255
255
  forceRedraw() {
256
256
  // eslint-disable-next-line sonarjs/pseudo-random
@@ -111,7 +111,7 @@ export class CollapsibleSection {
111
111
  removeEnterClickable(button);
112
112
  }
113
113
  render() {
114
- return (h("section", { key: '8105890d7039702755935af1290f3ac170a6f724', class: `${this.isOpen ? 'open' : ''}`, "aria-invalid": this.invalid, "aria-labelledby": this.header ? this.headingId : null }, h("header", { key: '31e93e837d63d2a5954ec4c2780c2159467e0e8e' }, h("button", { key: '126c518c39c010b3745f26c8542e4a7e667687a2', class: "open-close-toggle", onClick: this.onClick, "aria-controls": this.bodyId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-label": this.getCollapsibleSectionAriaLabel(), type: "button" }), this.renderExpandCollapseSign(), this.renderIcon(), this.renderHeading(), h("div", { key: 'db0c2822ebcacee830c60a035386973a3680469b', class: "divider-line", role: "presentation" }), this.renderHeaderSlot(), this.renderActions()), h("div", { key: '5a4456a8c5a783fad2389c8d013a6eccf70990f1', class: "body", "aria-hidden": String(!this.isOpen), id: this.bodyId, role: "region" }, h("slot", { key: '4db8829dfc0ba669b555c18130541e54ec84f4b0' }))));
114
+ return (h("section", { key: 'a40f48753cc7e5ae281b0e2a169e19510e54cc55', class: `${this.isOpen ? 'open' : ''}`, "aria-invalid": this.invalid, "aria-labelledby": this.header ? this.headingId : null }, h("header", { key: '55784166942971de68e351914a6d96dc77ea75c4' }, h("button", { key: '0432b0b5a4af99b94fea4073de496785c8f87d36', class: "open-close-toggle", onClick: this.onClick, "aria-controls": this.bodyId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-label": this.getCollapsibleSectionAriaLabel(), type: "button" }), this.renderExpandCollapseSign(), this.renderIcon(), this.renderHeading(), h("div", { key: '11efcd91907a79ed0945749b4672809e466c1e00', class: "divider-line", role: "presentation" }), this.renderHeaderSlot(), this.renderActions()), h("div", { key: '4b74f9d5fc9533eb14180a23e20c402a436b53f7', class: "body", "aria-hidden": String(!this.isOpen), id: this.bodyId, role: "region" }, h("slot", { key: '42c969ae7787768247a41952f9cf6d528ca7d4fd' }))));
115
115
  }
116
116
  renderHeaderSlot() {
117
117
  return h("slot", { name: "header" });
@@ -39,10 +39,10 @@ export class Palette {
39
39
  render() {
40
40
  const background = this.value ? { '--background': this.value } : {};
41
41
  return [
42
- h("div", { key: 'd38a4c31e9d40150f157ba3954f7f14148c605a0', class: "color-picker-palette", style: {
42
+ h("div", { key: '184f8b9b74ebeb5611aa28ff3b14dbb225118af2', class: "color-picker-palette", style: {
43
43
  '--color-picker-column-count': `${this.getColumnCount()}`,
44
44
  } }, this.renderSwatches()),
45
- h("div", { key: 'fd7b5ea679162d628a00f8f6c045aba5fde06ce5', class: "chosen-color-name" }, h("limel-input-field", { key: '11f4cb92ef40da77334d211d5a773abeb97fea7b', label: this.label, helperText: this.helperText, value: this.value, onChange: this.handleChange, required: this.required, invalid: this.invalid, placeholder: this.placeholder, disabled: !this.manualInput }), h("div", { key: '1d751628e6391e640005c63765a9e20f03b0386d', class: "chosen-color-preview", style: background })),
45
+ h("div", { key: '27b19d8906e5f28c86c27476ebe0287b6043eb66', class: "chosen-color-name" }, h("limel-input-field", { key: 'd055b72d5570bcb085b728eb0cf4698b80a44643', label: this.label, helperText: this.helperText, value: this.value, onChange: this.handleChange, required: this.required, invalid: this.invalid, placeholder: this.placeholder, disabled: !this.manualInput }), h("div", { key: '051cc6a16e9659aabb01f4b6b9f0b30036d440b4', class: "chosen-color-preview", style: background })),
46
46
  ];
47
47
  }
48
48
  getPalette() {
@@ -86,7 +86,7 @@ export class ColorPicker {
86
86
  }
87
87
  }
88
88
  render() {
89
- return (h(Host, { key: 'e5e7516bc0e5e496acb92490b5ce638a1d8140f2' }, this.renderTooltip(), this.renderPickerPalette(), h("limel-input-field", { key: '147b1c5a85b6497c96ea471f7e2e101b0d98e3d8', label: this.label, helperText: this.helperText, value: this.value, onChange: this.handleChange, required: this.required, readonly: this.readonly, disabled: this.disabled || !this.manualInput, invalid: this.invalid, placeholder: this.placeholder })));
89
+ return (h(Host, { key: '33ce47843041f982dc448a4f954a434418d376ba' }, this.renderTooltip(), this.renderPickerPalette(), h("limel-input-field", { key: '74e6e705f7633d4a0ebba49352c24592209421d5', label: this.label, helperText: this.helperText, value: this.value, onChange: this.handleChange, required: this.required, readonly: this.readonly, disabled: this.disabled || !this.manualInput, invalid: this.invalid, placeholder: this.placeholder })));
90
90
  }
91
91
  static get is() { return "limel-color-picker"; }
92
92
  static get encapsulation() { return "shadow"; }
@@ -89,7 +89,7 @@ export class DatePickerCalendar {
89
89
  this.flatPickrCreated = false;
90
90
  }
91
91
  render() {
92
- return (h("div", { key: '33ab0c2d6f9f7f9907b98730d5f0f81de0c80535', class: "container", ref: (el) => (this.container = el), style: {
92
+ return (h("div", { key: '95bd84a535e4bcbf91a356e47b2fbaf440daf15d', class: "container", ref: (el) => (this.container = el), style: {
93
93
  '--today-label': `"${translate.get('date-picker.today')}"`,
94
94
  } }));
95
95
  }
@@ -84,10 +84,10 @@ export class Dialog {
84
84
  this.mdcDialog.destroy();
85
85
  }
86
86
  render() {
87
- return (h("div", { key: 'accd952fd2cd38b2bad0b70efd36a2d4c1144bc4', class: {
87
+ return (h("div", { key: '590a7ad1dc1deeab0481f36b9aaeea0aca24d34f', class: {
88
88
  'mdc-dialog': true,
89
89
  'full-screen': !!this.fullscreen,
90
- }, role: "alertdialog", "aria-modal": "true", "aria-labelledby": 'limel-dialog-title-' + this.id, "aria-describedby": 'limel-dialog-content-' + this.id }, h("input", { key: '2df038083000033391b00e58a926de3c7c1599ea', hidden: true, id: "initialFocusEl" }), h("div", { key: 'cb46e1c402ce481f6221512a0ad37a79b52feb99', class: "mdc-dialog__container" }, h("div", { key: '4aecff6699303e13bdaf17811a66f08d6478a3f2', class: "mdc-dialog__surface" }, h("input", { key: '722ccb246db135c965475e5090ae5d5390e9b4f6', type: "button", id: "initialFocusElement" }), this.renderHeading(), h("div", { key: 'f7ba5d2eaafdc6da575be3be83057e6e2792448f', class: "mdc-dialog__content", id: 'limel-dialog-content-' + this.id }, h("slot", { key: 'c35e9ad834b08b8ad032a4108f7fa5607e59b2e1' })), this.renderFooter())), h("div", { key: '55cbe15e4e45fe34b7e2232c218c1e534b7d7d31', class: "mdc-dialog__scrim" })));
90
+ }, role: "alertdialog", "aria-modal": "true", "aria-labelledby": 'limel-dialog-title-' + this.id, "aria-describedby": 'limel-dialog-content-' + this.id }, h("input", { key: 'f7a96d6e0f7086ac47791cb895bb78a296e23ec7', hidden: true, id: "initialFocusEl" }), h("div", { key: 'c0755b202346c3b6bcf257d94872c1fb81f49db5', class: "mdc-dialog__container" }, h("div", { key: '6ccc11dae44838539b2e1fa6a074c74a0b76364c', class: "mdc-dialog__surface" }, h("input", { key: 'ae6bdad52ac6e44f25fa0396797f0ec013d27ab9', type: "button", id: "initialFocusElement" }), this.renderHeading(), h("div", { key: '45e3b2e05bed5dc4c8039502b81ca2384821fe6f', class: "mdc-dialog__content", id: 'limel-dialog-content-' + this.id }, h("slot", { key: '64979e861d307be41993ace61a7b0c5a616a6e2c' })), this.renderFooter())), h("div", { key: '0b7c0e8c2d8f0cac26e926a685ba5c985db976f8', class: "mdc-dialog__scrim" })));
91
91
  }
92
92
  watchHandler(newValue, oldValue) {
93
93
  if (oldValue === newValue) {
@@ -79,11 +79,11 @@ export class Dock {
79
79
  this.resizeObserver.disconnect();
80
80
  }
81
81
  render() {
82
- return (h(Host, { key: 'a91777f29921127c54eb5b0bc6998a7d1caabaec', class: {
82
+ return (h(Host, { key: '3a859df9c1fb4b56bb1ba18b846a2da353075b0f', class: {
83
83
  dock: true,
84
84
  expanded: this.expanded,
85
85
  'has-mobile-layout': this.useMobileLayout,
86
- } }, h("nav", { key: '4aa4ffb606964daa058b4f81aba420a3a62b1597', "aria-label": this.accessibleLabel }, this.dockItems.map(this.renderDockItem), this.renderSeparator(), this.dockFooterItems.map(this.renderDockItem)), this.renderExpandShrinkToggle()));
86
+ } }, h("nav", { key: '75303da2b5c8f86a4a6e1be7e76811e3dce8a303', "aria-label": this.accessibleLabel }, this.dockItems.map(this.renderDockItem), this.renderSeparator(), this.dockFooterItems.map(this.renderDockItem)), this.renderExpandShrinkToggle()));
87
87
  }
88
88
  renderExpandShrinkToggle() {
89
89
  if (this.useMobileLayout || !this.allowResize) {
@@ -51,7 +51,7 @@ export class DragHandleComponent {
51
51
  render() {
52
52
  const tooltipLabel = translate.get('drag-handle.drag-to-reorder', this.language);
53
53
  const ariaLabel = translate.get('drag-handle.drag-handle', this.language);
54
- return (h(Host, { key: 'cdc2934af9efc0aa9cd9a10ca95512c6585d59bd' }, h("button", { key: '77523e84ce813eed4b31f66dcdba296de46d2dd9', "data-drag-handle": true, type: "button", class: "limel-drag-handle", tabindex: -1, "aria-label": ariaLabel, id: this.dragHandleId, onClick: this.handleClick }, h("div", { key: '02c38fbc191483c6b1e8197516c3d462e8a2d894', class: "drag-icon", role: "presentation", "aria-hidden": "true" }, h("div", { key: "1" }), h("div", { key: "2" }), h("div", { key: "3" }), h("div", { key: "4" }), h("div", { key: "5" }), h("div", { key: "6" })), h("limel-tooltip", { key: '4cf2b4324230fae2faa607e7cec9758b4850b587', openDirection: this.tooltipOpenDirection, elementId: this.dragHandleId, label: tooltipLabel }))));
54
+ return (h(Host, { key: 'e83ce402fe42d2b8f457e381ace449847333ddc2' }, h("button", { key: '56956b7efc28c4c72a5d2538026495055ed810ff', "data-drag-handle": true, type: "button", class: "limel-drag-handle", tabindex: -1, "aria-label": ariaLabel, id: this.dragHandleId, onClick: this.handleClick }, h("div", { key: 'e51e6c69aeef13b6edd48f46e12e830cfdd3016c', class: "drag-icon", role: "presentation", "aria-hidden": "true" }, h("div", { key: "1" }), h("div", { key: "2" }), h("div", { key: "3" }), h("div", { key: "4" }), h("div", { key: "5" }), h("div", { key: "6" })), h("limel-tooltip", { key: 'ca44d8fe5178e099976c41a517f95ebfff780bcf', openDirection: this.tooltipOpenDirection, elementId: this.dragHandleId, label: tooltipLabel }))));
55
55
  }
56
56
  static get is() { return "limel-drag-handle"; }
57
57
  static get originalStyleUrls() {
@@ -61,7 +61,7 @@ export class EmailViewer {
61
61
  }
62
62
  }
63
63
  render() {
64
- return (h(Host, { key: 'a004af12989a477f4a9404ee86e0429bc5c2d427' }, h("div", { key: 'fc3bdeb81d823ff1cd39b4f6d52b4a88d9326392', class: "email", part: "email" }, this.renderHeaders(), this.renderRemoteImageBanner(), h("section", { key: '6fdd1cfe50cc4b41f7e70413541dc5950d7c44fa' }, this.renderAttachments(), this.renderBody()))));
64
+ return (h(Host, { key: 'b37cad79c4d85f9cef78ef741d882d5384c039db' }, h("div", { key: '89e9fa6c9c39234ec9268d93837f0b27f328d046', class: "email", part: "email" }, this.renderHeaders(), this.renderRemoteImageBanner(), h("section", { key: '01f4c97918464218bc0d4ab4e79214027993360d' }, this.renderAttachments(), this.renderBody()))));
65
65
  }
66
66
  renderHeaders() {
67
67
  const headerFields = [
@@ -89,7 +89,7 @@ export class File {
89
89
  };
90
90
  }
91
91
  render() {
92
- return (h(Host, { key: '2de03c65bb1c1aba3d2bb09717cc45f3ef618ebc' }, h("limel-file-dropzone", { key: '8cb9d8dcbbe0ca9b667bfea72992a11a25f73fdb', disabled: this.disabled || this.readonly || !!this.value, accept: this.accept, onFilesSelected: this.handleNewFiles }, this.renderChipset()), this.renderDragAndDropTip()));
92
+ return (h(Host, { key: '09d8f61392d489c41a083edb516b680f481d7b55' }, h("limel-file-dropzone", { key: '36812196ad3a91ce98ec13df0e26927fbe67b4a4', disabled: this.disabled || this.readonly || !!this.value, accept: this.accept, onFilesSelected: this.handleNewFiles }, this.renderChipset()), this.renderDragAndDropTip()));
93
93
  }
94
94
  renderDragAndDropTip() {
95
95
  if (this.value || this.disabled || this.readonly) {
@@ -90,7 +90,7 @@ export class FileDropzone {
90
90
  };
91
91
  }
92
92
  render() {
93
- return (h(Host, { key: '4a002d8108fcb9d87b3f063171e0a531de31c1b1', onDrop: this.handleDrop, onDragOver: this.handleDragOver, onDragLeave: this.handleDragLeave }, h("slot", { key: 'ed0aa907729aab6bee39bad7c6f9f74fc718e286' }), this.renderOnDragLayout()));
93
+ return (h(Host, { key: '70e5213cc5470868f2442b908d9ffd39466edbac', onDrop: this.handleDrop, onDragOver: this.handleDragOver, onDragLeave: this.handleDragLeave }, h("slot", { key: '4d886da6bfad382dc9c579ad17ea73d62ccdf1d3' }), this.renderOnDragLayout()));
94
94
  }
95
95
  static get is() { return "limel-file-dropzone"; }
96
96
  static get encapsulation() { return "shadow"; }
@@ -71,7 +71,7 @@ export class FileInput {
71
71
  this.fileInput = this.element.shadowRoot.getElementById(this.fileInputId);
72
72
  }
73
73
  render() {
74
- return (h(Host, { key: '64b0de513357ed03fa7ae508ec6382acd600f392', onClick: this.handleClick, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown }, h("input", { key: '0685cf5051c06e7e246631a38b349c2492dbb5b8', hidden: true, id: this.fileInputId, onChange: this.handleFileChange, type: "file", accept: this.accept, disabled: this.disabled, multiple: this.multiple }), h("slot", { key: 'da931d302eef5ed81663cce0b2d191166539a51d' })));
74
+ return (h(Host, { key: '4ec87952fba90e1fff07a60b977edd1980e33738', onClick: this.handleClick, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown }, h("input", { key: '2fdc5fbb81294f85ad02a175b0720f53ad13c4f0', hidden: true, id: this.fileInputId, onChange: this.handleFileChange, type: "file", accept: this.accept, disabled: this.disabled, multiple: this.multiple }), h("slot", { key: 'd72890dd7c622c71e6b46217891d88f770607bda' })));
75
75
  }
76
76
  handleKeyDown(event) {
77
77
  if (event.code === 'Tab' ||
@@ -31,7 +31,7 @@ export class FlexContainer {
31
31
  console.warn('limel-flex-container is deprecated, please use CSS instead: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox');
32
32
  }
33
33
  render() {
34
- return h("slot", { key: '7e8db5fb4b796ae12f76ae2684599226f1229928' });
34
+ return h("slot", { key: 'f308350023b1ced85d78be3fe3f2365cb30aeabd' });
35
35
  }
36
36
  static get is() { return "limel-flex-container"; }
37
37
  static get encapsulation() { return "shadow"; }
@@ -72,7 +72,7 @@ export class Form {
72
72
  }
73
73
  }
74
74
  render() {
75
- return h("div", { key: 'd78a035d42497e4b3204d04bccc30b4956b128a1', class: "root" });
75
+ return h("div", { key: '338235611cd3fd70cb5f0ce1728917bd648cb573', class: "root" });
76
76
  }
77
77
  reactRender() {
78
78
  if (!this.root) {