@limetech/lime-elements 39.24.0 → 39.24.2

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 (154) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/{_assignValue-DpsLUlF4.js → _assignValue-DQh76m39.js} +2 -2
  3. package/dist/cjs/{_baseEach-C570gT5Y.js → _baseEach-Bygi-un6.js} +2 -2
  4. package/dist/cjs/{_baseIsEqual-aOPReRWl.js → _baseIsEqual-CQZKiKbe.js} +20 -365
  5. package/dist/cjs/{_baseIteratee-DggA4e7a.js → _baseIteratee-DDklwtn9.js} +6 -4
  6. package/dist/cjs/{_defineProperty-BDFOiqJL.js → _defineProperty-Csu6P9HT.js} +1 -1
  7. package/dist/cjs/{_getAllKeysIn-BQIV8aw7.js → _getAllKeysIn-BJsgUTAt.js} +5 -4
  8. package/dist/cjs/{_getNative-B4n5HX2B.js → _getNative-Cf52giNE.js} +2 -2
  9. package/dist/cjs/_getTag-BC28Za7d.js +355 -0
  10. package/dist/cjs/_isIndex-Bu45fvR7.js +27 -0
  11. package/dist/cjs/{_isIterateeCall-CPWXFS_s.js → _isIterateeCall-BUGt9SrH.js} +4 -3
  12. package/dist/cjs/{cloneDeep-CxFNKF1Y.js → cloneDeep-hE40Q8aw.js} +13 -12
  13. package/dist/cjs/{difference-Bfsq4sXB.js → difference-B543MGsY.js} +5 -4
  14. package/dist/cjs/eq-DFcUoVzv.js +39 -0
  15. package/dist/cjs/file-metadata-BrhOssGG.js +76 -0
  16. package/dist/cjs/{files-Cf615Ytp.js → files-Bt11HLi4.js} +1 -1
  17. package/dist/cjs/{focus-trigger-element-Brw8VubX.js → focus-trigger-element-BfnJmxKO.js} +1 -1
  18. package/dist/{esm/file-metadata-BwF9vTXN.js → cjs/icons-isR5V1X0.js} +4 -69
  19. package/dist/cjs/{isArrayLike-_dR1U5-Y.js → isArrayLike-C2RwZMG4.js} +2 -27
  20. package/dist/cjs/{isEmpty-EBCFxX1S.js → isEmpty-CCxl3bYc.js} +6 -6
  21. package/dist/cjs/{isEqual-bXyw7kXo.js → isEqual-Cd9J8a5-.js} +1 -1
  22. package/dist/cjs/{eq-B1KBAwmK.js → isFunction-RSHwsz1x.js} +0 -37
  23. package/dist/cjs/lime-elements.cjs.js +1 -1
  24. package/dist/cjs/{limel-breadcrumbs_7.cjs.entry.js → limel-breadcrumbs_8.cjs.entry.js} +74 -8
  25. package/dist/cjs/limel-chip-set.cjs.entry.js +578 -0
  26. package/dist/cjs/limel-chip_2.cjs.entry.js +33 -528
  27. package/dist/cjs/limel-dialog.cjs.entry.js +9 -6
  28. package/dist/cjs/limel-email-viewer.cjs.entry.js +15 -10
  29. package/dist/cjs/limel-file-dropzone_2.cjs.entry.js +12 -8
  30. package/dist/cjs/limel-file.cjs.entry.js +2 -1
  31. package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +5 -3
  32. package/dist/cjs/limel-form.cjs.entry.js +247 -71
  33. package/dist/cjs/limel-helper-line.cjs.entry.js +42 -0
  34. package/dist/cjs/limel-popover_2.cjs.entry.js +6 -5
  35. package/dist/cjs/limel-profile-picture.cjs.entry.js +3 -2
  36. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +16 -12
  37. package/dist/cjs/limel-tab-bar.cjs.entry.js +11 -8
  38. package/dist/cjs/limel-table.cjs.entry.js +14 -11
  39. package/dist/cjs/loader.cjs.js +1 -1
  40. package/dist/cjs/{pickBy-kLjYLoam.js → pickBy-D-X6S5kg.js} +5 -5
  41. package/dist/collection/components/chip-set/chip-set.js +14 -2
  42. package/dist/collection/components/email-viewer/email-viewer.css +12 -32
  43. package/dist/collection/components/email-viewer/email-viewer.js +16 -9
  44. package/dist/esm/{_assignValue-DOEO9byf.js → _assignValue-CEFvyZxO.js} +2 -2
  45. package/dist/esm/{_baseEach-C4UJIc96.js → _baseEach-lvj-g1Zj.js} +2 -2
  46. package/dist/esm/{_baseIsEqual-DCZXUzsZ.js → _baseIsEqual-B6bIeexY.js} +10 -346
  47. package/dist/esm/{_baseIteratee-CI-QZdpx.js → _baseIteratee-CEZRuq23.js} +4 -2
  48. package/dist/esm/{_defineProperty-yVdnnt__.js → _defineProperty-C69Btzid.js} +1 -1
  49. package/dist/esm/{_getAllKeysIn-v-KlW5r_.js → _getAllKeysIn-kT3KizYN.js} +3 -2
  50. package/dist/esm/{_getNative-aN4R8EiP.js → _getNative-COawFdVX.js} +1 -1
  51. package/dist/esm/_getTag-CMJL-6hk.js +344 -0
  52. package/dist/esm/_isIndex-B--C3qwe.js +25 -0
  53. package/dist/esm/{_isIterateeCall-CTcCv8Mb.js → _isIterateeCall-Bb4gUZLK.js} +3 -2
  54. package/dist/esm/{cloneDeep-V4fB8wfG.js → cloneDeep-CL7UD3mR.js} +4 -3
  55. package/dist/esm/{difference-CWrdq-hd.js → difference-DND5tWiA.js} +4 -3
  56. package/dist/esm/eq-CZ30nDJE.js +37 -0
  57. package/dist/esm/file-metadata-BHzkIH4g.js +71 -0
  58. package/dist/esm/{files-P324wLau.js → files-CZAZotms.js} +1 -1
  59. package/dist/esm/{focus-trigger-element-DubROLkE.js → focus-trigger-element-BOFcjLq3.js} +1 -1
  60. package/dist/{cjs/file-metadata-rQ0WzFlZ.js → esm/icons-Bu_YRgCL.js} +1 -75
  61. package/dist/esm/{isArrayLike-D1QkaJU2.js → isArrayLike-CyVGB489.js} +2 -26
  62. package/dist/esm/{isEmpty-BFxMjh_H.js → isEmpty-DHgukT5k.js} +2 -2
  63. package/dist/esm/{isEqual-CsrptmTU.js → isEqual-4tbMaaf_.js} +1 -1
  64. package/dist/esm/{eq-D7VMHFyO.js → isFunction-9zQTeQI8.js} +1 -37
  65. package/dist/esm/lime-elements.js +1 -1
  66. package/dist/esm/{limel-breadcrumbs_7.entry.js → limel-breadcrumbs_8.entry.js} +71 -6
  67. package/dist/esm/limel-chip-set.entry.js +576 -0
  68. package/dist/esm/limel-chip_2.entry.js +35 -530
  69. package/dist/esm/limel-dialog.entry.js +9 -6
  70. package/dist/esm/limel-email-viewer.entry.js +15 -10
  71. package/dist/esm/limel-file-dropzone_2.entry.js +12 -8
  72. package/dist/esm/limel-file.entry.js +2 -1
  73. package/dist/esm/limel-flatpickr-adapter.entry.js +5 -3
  74. package/dist/esm/limel-form.entry.js +237 -61
  75. package/dist/esm/limel-helper-line.entry.js +40 -0
  76. package/dist/esm/limel-popover_2.entry.js +6 -5
  77. package/dist/esm/limel-profile-picture.entry.js +3 -2
  78. package/dist/esm/limel-prosemirror-adapter.entry.js +16 -12
  79. package/dist/esm/limel-tab-bar.entry.js +11 -8
  80. package/dist/esm/limel-table.entry.js +14 -11
  81. package/dist/esm/loader.js +1 -1
  82. package/dist/esm/{pickBy-D8CUtxE4.js → pickBy-C4C3CM4m.js} +4 -4
  83. package/dist/lime-elements/lime-elements.esm.js +1 -1
  84. package/dist/lime-elements/p-00b424d7.entry.js +1 -0
  85. package/dist/lime-elements/p-01651634.entry.js +1 -0
  86. package/dist/lime-elements/p-4ecd565b.entry.js +1 -0
  87. package/dist/lime-elements/p-5442e09e.entry.js +13 -0
  88. package/dist/lime-elements/p-56bkn1D-.js +1 -0
  89. package/dist/lime-elements/p-60327283.entry.js +1 -0
  90. package/dist/lime-elements/{p-cfe85e59.entry.js → p-6eaa9776.entry.js} +10 -10
  91. package/dist/lime-elements/p-72b9d03e.entry.js +1 -0
  92. package/dist/lime-elements/p-80162ba0.entry.js +1 -0
  93. package/dist/lime-elements/p-86ff06d1.entry.js +1 -0
  94. package/dist/lime-elements/p-9W8bTt2G.js +1 -0
  95. package/dist/lime-elements/p-B--C3qwe.js +1 -0
  96. package/dist/lime-elements/p-B8yl2MCT.js +1 -0
  97. package/dist/lime-elements/p-BAR6am-7.js +1 -0
  98. package/dist/lime-elements/p-BCq5M9TE.js +1 -0
  99. package/dist/lime-elements/p-BE1Efiuj.js +1 -0
  100. package/dist/lime-elements/p-BYfPV0O4.js +1 -0
  101. package/dist/lime-elements/p-BcJ-TDVt.js +1 -0
  102. package/dist/lime-elements/p-BsX7ma3n.js +1 -0
  103. package/dist/lime-elements/p-Bu_YRgCL.js +1 -0
  104. package/dist/lime-elements/p-ByzvFNMm.js +1 -0
  105. package/dist/lime-elements/{p-CWuGCKo1.js → p-C4caLnTg.js} +1 -1
  106. package/dist/lime-elements/p-CR7u-m0b.js +1 -0
  107. package/dist/lime-elements/p-CVzgpz9P.js +1 -0
  108. package/dist/lime-elements/p-CZ30nDJE.js +1 -0
  109. package/dist/lime-elements/{p-BvDmWgCs.js → p-D0F7gOYG.js} +1 -1
  110. package/dist/lime-elements/p-D4RdItCq.js +1 -0
  111. package/dist/lime-elements/p-D8H5afYg.js +1 -0
  112. package/dist/lime-elements/p-DbBZn7JO.js +1 -0
  113. package/dist/lime-elements/p-DtrvybFR.js +1 -0
  114. package/dist/lime-elements/{p-8139d26a.entry.js → p-a712087a.entry.js} +3 -3
  115. package/dist/lime-elements/p-b1645d2d.entry.js +1 -0
  116. package/dist/lime-elements/{p-e720f65c.entry.js → p-d00ec6c2.entry.js} +3 -3
  117. package/dist/lime-elements/{p-a416d439.entry.js → p-e5c7cac0.entry.js} +2 -2
  118. package/dist/lime-elements/p-f6e58e6c.entry.js +1 -0
  119. package/dist/lime-elements/p-f867b424.entry.js +1 -0
  120. package/dist/lime-elements/p-mmkVLOjW.js +1 -0
  121. package/dist/types/components/chip-set/chip-set.d.ts +5 -0
  122. package/dist/types/components/email-viewer/email-viewer.d.ts +0 -1
  123. package/package.json +1 -1
  124. package/dist/cjs/limel-helper-line_2.cjs.entry.js +0 -107
  125. package/dist/cjs/limel-linear-progress.cjs.entry.js +0 -59
  126. package/dist/esm/limel-helper-line_2.entry.js +0 -104
  127. package/dist/esm/limel-linear-progress.entry.js +0 -57
  128. package/dist/lime-elements/p-34d1d00a.entry.js +0 -1
  129. package/dist/lime-elements/p-48db87d3.entry.js +0 -1
  130. package/dist/lime-elements/p-4e9baf08.entry.js +0 -1
  131. package/dist/lime-elements/p-59f1460d.entry.js +0 -1
  132. package/dist/lime-elements/p-7uuv3HUP.js +0 -1
  133. package/dist/lime-elements/p-811c4820.entry.js +0 -1
  134. package/dist/lime-elements/p-9758568e.entry.js +0 -13
  135. package/dist/lime-elements/p-9a378cf0.entry.js +0 -1
  136. package/dist/lime-elements/p-BTHqaZIi.js +0 -1
  137. package/dist/lime-elements/p-Bj622DVt.js +0 -1
  138. package/dist/lime-elements/p-Bp0tNo1s.js +0 -1
  139. package/dist/lime-elements/p-C3Myy3mA.js +0 -1
  140. package/dist/lime-elements/p-CXgJVvTe.js +0 -1
  141. package/dist/lime-elements/p-CxfAgSVd.js +0 -1
  142. package/dist/lime-elements/p-DNIqLXTL.js +0 -1
  143. package/dist/lime-elements/p-D_uMnX5g.js +0 -1
  144. package/dist/lime-elements/p-DbC-smVQ.js +0 -1
  145. package/dist/lime-elements/p-DlJXKdhK.js +0 -1
  146. package/dist/lime-elements/p-DtS35Df5.js +0 -1
  147. package/dist/lime-elements/p-SvuA3Boo.js +0 -1
  148. package/dist/lime-elements/p-b306735b.entry.js +0 -1
  149. package/dist/lime-elements/p-c1c635c1.entry.js +0 -1
  150. package/dist/lime-elements/p-cebdd797.entry.js +0 -1
  151. package/dist/lime-elements/p-efBXH4mj.js +0 -1
  152. package/dist/lime-elements/p-f_1nwOC8.js +0 -1
  153. package/dist/lime-elements/p-fd4a4f87.entry.js +0 -1
  154. package/dist/lime-elements/p-v6b303K5.js +0 -1
@@ -3,14 +3,17 @@ import { d as dispatchResizeEvent } from './dispatch-resize-event-z_E3sq3p.js';
3
3
  import { c as createRandomString } from './random-string-JbKhhoXs.js';
4
4
  import { _ as __extends, a as __assign, M as MDCFoundation, b as __values, c as MDCComponent, d as closest, m as matches } from './ponyfill-ChRGk668.js';
5
5
  import { M as MDCRipple } from './component-7QB0OUSF.js';
6
- import { i as isEqual } from './isEqual-CsrptmTU.js';
7
- import './_baseIsEqual-DCZXUzsZ.js';
8
- import './eq-D7VMHFyO.js';
6
+ import { i as isEqual } from './isEqual-4tbMaaf_.js';
7
+ import './_baseIsEqual-B6bIeexY.js';
8
+ import './eq-CZ30nDJE.js';
9
+ import './_getTag-CMJL-6hk.js';
9
10
  import './isObject-BJQylLSL.js';
10
- import './_getNative-aN4R8EiP.js';
11
- import './isArray-B8VKuhvH.js';
12
11
  import './isObjectLike-oiMYqRQ0.js';
13
- import './isArrayLike-D1QkaJU2.js';
12
+ import './isArrayLike-CyVGB489.js';
13
+ import './isFunction-9zQTeQI8.js';
14
+ import './_getNative-COawFdVX.js';
15
+ import './isArray-B8VKuhvH.js';
16
+ import './_isIndex-B--C3qwe.js';
14
17
 
15
18
  /**
16
19
  * @license
@@ -1,6 +1,7 @@
1
1
  import { r as registerInstance, c as createEvent, h, H as Host } from './index-DBTJNfo7.js';
2
2
  import { t as translate } from './translations-Dv3YcsA7.js';
3
3
  import { a as adaptColorContrast } from './adapt-color-contrast-Dgcw_h7C.js';
4
+ import { g as getIconBackgroundColorForFile, a as getIconFillColorForFile, b as getIconForFile } from './icons-Bu_YRgCL.js';
4
5
 
5
6
  /**
6
7
  * Checks whether the given HTML contains any images with a `data-remote-src`
@@ -199,7 +200,7 @@ function formatBytes(bytes, decimals = 1) {
199
200
  return `${rounded} ${sizes[i]}`;
200
201
  }
201
202
 
202
- const emailViewerCss = () => `@charset "UTF-8";:host(limel-email-viewer){display:block;width:100%;height:100%;box-sizing:border-box}*,*::before,*::after{box-sizing:border-box;min-width:0;min-height:0}.email{display:flex;flex-direction:column;width:100%;height:100%;padding-bottom:0.5rem;box-shadow:var(--shadow-depth-8)}.email-headers{position:relative;flex-shrink:0;display:flex;flex-direction:column}.email-headers dl,.email-headers dt,.email-headers dd{margin:0}.email-headers dl{display:flex;flex-wrap:wrap;gap:0 0.5rem;padding:0.5rem 0.75rem;font-size:0.75rem}.email-headers dl:nth-child(even){background-color:rgb(var(--contrast-800), 0.1)}.email-headers dl dt{opacity:0.6;min-width:3rem}.email-headers dl dt::after{content:":"}.email-headers dl dd:not(:last-child)::after{content:",";opacity:0.6}.email-headers dl.subject dd{font-weight:bold}.email-headers dl.date{position:absolute;right:0.25rem;bottom:0;transform:translateY(50%);font-size:0.625rem;border-radius:9rem;padding:0.125rem 0.25rem;background-color:rgb(var(--contrast-100), 0.8);border:rgb(var(--contrast-600)) solid 1px}.email-headers dl.date dt{position:absolute;width:0;height:0;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0, 0, 0, 0);clip-path:inset(50%);white-space:nowrap}.attachments{flex-shrink:0;padding:0.5rem;border-bottom:1px dashed rga(var(--contrast-700))}.attachments span{padding-left:0.25rem;font-size:0.75rem;opacity:0.6}.attachments span:first-child::after{content:":"}.attachments ul{all:unset;display:grid;grid-template-columns:repeat(auto-fill, minmax(8rem, 1fr));gap:0.5rem;padding:0.5rem 0}.attachments li{all:unset;position:relative;display:flex;flex-direction:column;gap:0.25rem;font-size:0.6875rem;line-height:normal;padding:0.5rem 0.5rem 1rem 0.5rem;border-radius:0.5rem;border:1px solid rgba(var(--contrast-600));background-color:rgba(var(--contrast-400))}.attachments .attachment-filename{font-weight:500}.attachments .attachment-mime-type{opacity:0.7}.attachments limel-badge{--badge-max-width:auto;--badge-background-color:rgb(var(--contrast-1000), 0.7);--badge-text-color:rgb(var(--color-white));position:absolute;bottom:0.125rem;right:0.125rem;box-shadow:var(--shadow-brighten-edges-outside)}section{flex-grow:1;display:flex;flex-direction:column;border-top:1px dashed rgba(var(--contrast-700));min-height:2rem;overflow-y:auto}limel-collapsible-section{--closed-header-background-color:var( --lime-elevated-surface-background-color );flex-grow:1;flex-shrink:0;margin:0.5rem;border-radius:0.75rem;box-shadow:var(--shadow-depth-8)}limel-collapsible-section button{appearance:none;background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;text-align:inherit;flex-shrink:0;border-radius:0.375rem;padding:0.25rem 0.5rem;font-size:var(--limel-theme-small-font-size);margin:0 0.5rem}limel-collapsible-section button.load-images{transition:color var(--limel-clickable-transition-speed, 0.4s) ease, background-color var(--limel-clickable-transition-speed, 0.4s) ease, box-shadow var(--limel-clickable-transform-speed, 0.4s) ease, transform var(--limel-clickable-transform-speed, 0.4s) var(--limel-clickable-transform-timing-function, ease);cursor:pointer;color:var(--lime-primary-color, var(--limel-theme-primary-color));background-color:var(--lime-elevated-surface-background-color);box-shadow:var(--button-shadow-normal)}limel-collapsible-section button.load-images:hover,limel-collapsible-section button.load-images:focus,limel-collapsible-section button.load-images:focus-visible{will-change:color, background-color, box-shadow, transform}limel-collapsible-section button.load-images:hover,limel-collapsible-section button.load-images:focus-visible{transform:translate3d(0, -0.04rem, 0);color:var(--limel-theme-on-surface-color);background-color:var(--lime-elevated-surface-background-color);box-shadow:var(--button-shadow-hovered)}limel-collapsible-section button.load-images:active{--limel-clickable-transform-timing-function:cubic-bezier( 0.83, -0.15, 0.49, 1.16 );transform:translate3d(0, 0.05rem, 0);box-shadow:var(--button-shadow-pressed)}limel-collapsible-section button.load-images:hover,limel-collapsible-section button.load-images:active{--limel-clickable-transition-speed:0.2s;--limel-clickable-transform-speed:0.16s}limel-collapsible-section limel-markdown{padding:0.5rem}.body{flex-grow:1;max-width:100%;padding:0.75rem}.body.plain-text{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-family:inherit}.body img{max-width:100% !important}`;
203
+ const emailViewerCss = () => `@charset "UTF-8";:host(limel-email-viewer){display:block;width:100%;height:100%;box-sizing:border-box}*,*::before,*::after{box-sizing:border-box;min-width:0;min-height:0}.email{display:flex;flex-direction:column;width:100%;height:100%;box-shadow:var(--shadow-depth-8)}.email-headers{position:relative;flex-shrink:0;display:flex;flex-direction:column}.email-headers dl,.email-headers dt,.email-headers dd{margin:0}.email-headers dl{display:flex;flex-wrap:wrap;gap:0 0.5rem;padding:0.5rem 0.75rem;font-size:0.75rem}.email-headers dl:nth-child(even){background-color:rgb(var(--contrast-800), 0.1)}.email-headers dl dt{opacity:0.6;min-width:3rem}.email-headers dl dt::after{content:":"}.email-headers dl dd:not(:last-child)::after{content:",";opacity:0.6}.email-headers dl.subject dd{font-weight:bold}.email-headers dl.date{position:absolute;right:0.25rem;bottom:0;transform:translateY(50%);font-size:0.625rem;border-radius:9rem;padding:0.125rem 0.25rem;background-color:rgb(var(--contrast-100), 0.8);border:rgb(var(--contrast-600)) solid 1px}.email-headers dl.date dt{position:absolute;width:0;height:0;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0, 0, 0, 0);clip-path:inset(50%);white-space:nowrap}.attachments{flex-shrink:0;padding:0.5rem;border-bottom:1px dashed rgba(var(--contrast-700))}.attachments span{padding-left:0.25rem;font-size:0.75rem;opacity:0.6}.attachments span:first-child::after{content:":"}.attachments .attachment-list{margin:0;padding:0.5rem 0;list-style:none;display:flex;flex-wrap:wrap;gap:0.5rem}.attachments li{display:inline-flex;max-width:100%}.attachments limel-chip{--chip-max-width:18rem;--badge-max-width:3rem}section{flex-grow:1;display:flex;flex-direction:column;border-top:1px dashed rgba(var(--contrast-700));min-height:2rem;overflow-y:auto}limel-collapsible-section{--closed-header-background-color:var( --lime-elevated-surface-background-color );flex-grow:1;flex-shrink:0;margin:0.5rem;border-radius:0.75rem;box-shadow:var(--shadow-depth-8)}limel-collapsible-section button{appearance:none;background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;text-align:inherit;flex-shrink:0;border-radius:0.375rem;padding:0.25rem 0.5rem;font-size:var(--limel-theme-small-font-size);margin:0 0.5rem}limel-collapsible-section button.load-images{transition:color var(--limel-clickable-transition-speed, 0.4s) ease, background-color var(--limel-clickable-transition-speed, 0.4s) ease, box-shadow var(--limel-clickable-transform-speed, 0.4s) ease, transform var(--limel-clickable-transform-speed, 0.4s) var(--limel-clickable-transform-timing-function, ease);cursor:pointer;color:var(--lime-primary-color, var(--limel-theme-primary-color));background-color:var(--lime-elevated-surface-background-color);box-shadow:var(--button-shadow-normal)}limel-collapsible-section button.load-images:hover,limel-collapsible-section button.load-images:focus,limel-collapsible-section button.load-images:focus-visible{will-change:color, background-color, box-shadow, transform}limel-collapsible-section button.load-images:hover,limel-collapsible-section button.load-images:focus-visible{transform:translate3d(0, -0.04rem, 0);color:var(--limel-theme-on-surface-color);background-color:var(--lime-elevated-surface-background-color);box-shadow:var(--button-shadow-hovered)}limel-collapsible-section button.load-images:active{--limel-clickable-transform-timing-function:cubic-bezier( 0.83, -0.15, 0.49, 1.16 );transform:translate3d(0, 0.05rem, 0);box-shadow:var(--button-shadow-pressed)}limel-collapsible-section button.load-images:hover,limel-collapsible-section button.load-images:active{--limel-clickable-transition-speed:0.2s;--limel-clickable-transform-speed:0.16s}limel-collapsible-section limel-markdown{padding:0.5rem}.body{flex-grow:1;max-width:100%;padding:0.75rem}.body.plain-text{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-family:inherit}.body img{max-width:100% !important}`;
203
204
 
204
205
  const EmailViewer = class {
205
206
  constructor(hostRef) {
@@ -215,13 +216,17 @@ const EmailViewer = class {
215
216
  const filename = ((_a = attachment.filename) === null || _a === void 0 ? void 0 : _a.trim()) ||
216
217
  this.getTranslation('file-viewer.email.attachment.unnamed');
217
218
  const mimeType = ((_b = attachment.mimeType) === null || _b === void 0 ? void 0 : _b.trim()) || '';
218
- return (h("li", { key: `attachment-${index}` }, h("span", { class: "attachment-filename" }, filename), h("span", { class: "attachment-mime-type" }, " ", mimeType), this.renderSizeBadge(attachment.size)));
219
- };
220
- this.renderSizeBadge = (size) => {
221
- if (typeof size !== 'number') {
222
- return;
223
- }
224
- return (h("limel-badge", { class: "attachment-size", label: formatBytes(size) }));
219
+ const dotIndex = filename.lastIndexOf('.');
220
+ const extension = dotIndex > 0 ? filename.slice(dotIndex + 1) : '';
221
+ const tooltip = mimeType ? `${filename}\n${mimeType}` : filename;
222
+ const fileSize = typeof attachment.size === 'number'
223
+ ? formatBytes(attachment.size)
224
+ : undefined;
225
+ return (h("li", { key: `attachment-${index}` }, h("limel-chip", { title: tooltip, text: filename, icon: {
226
+ name: getIconForFile(extension),
227
+ color: getIconFillColorForFile(extension),
228
+ backgroundColor: getIconBackgroundColorForFile(extension),
229
+ }, badge: fileSize, readonly: true, language: this.language })));
225
230
  };
226
231
  this.onEnableRemoteImagesClick = (event) => {
227
232
  var _a;
@@ -252,7 +257,7 @@ const EmailViewer = class {
252
257
  }
253
258
  }
254
259
  render() {
255
- return (h(Host, { key: '25592be91649a98427363488998f461470346f06' }, h("div", { key: 'e07d2c18bc5ebd7ff922afa4c8becb1f987bb0da', class: "email", part: "email" }, this.renderHeaders(), this.renderRemoteImageBanner(), h("section", { key: 'aa174224531cbcc77f1b29b0c828d7dc8fab5d7c' }, this.renderAttachments(), this.renderBody()))));
260
+ return (h(Host, { key: '675006a3bc305063d7205aef84da1652f0c082f4' }, h("div", { key: '10661de173c5fbac42362c903f1a1a5658e6c9e3', class: "email", part: "email" }, this.renderHeaders(), this.renderRemoteImageBanner(), h("section", { key: 'c8102541316aaf4749cbf298adb5c3c41d9dda47' }, this.renderAttachments(), this.renderBody()))));
256
261
  }
257
262
  renderHeaders() {
258
263
  const headerFields = [
@@ -315,7 +320,7 @@ const EmailViewer = class {
315
320
  return;
316
321
  }
317
322
  const label = this.getTranslation('file-viewer.email.attachments');
318
- return (h("div", { class: "attachments" }, h("span", null, label), h("ul", null, attachments.map((attachment, index) => this.renderAttachment(attachment, index)))));
323
+ return (h("div", { class: "attachments" }, h("span", { id: "attachments-label" }, label), h("ul", { class: "attachment-list", "aria-labelledby": "attachments-label" }, attachments.map((attachment, index) => this.renderAttachment(attachment, index)))));
319
324
  }
320
325
  getTranslation(key) {
321
326
  return translate.get(key, this.language);
@@ -1,17 +1,21 @@
1
1
  import { r as registerInstance, c as createEvent, h, H as Host, a as getElement } from './index-DBTJNfo7.js';
2
- import { c as createFileInfo, i as isTypeAccepted } from './files-P324wLau.js';
3
- import { a as baseEach } from './_baseEach-C4UJIc96.js';
4
- import { c as baseIteratee } from './_baseIteratee-CI-QZdpx.js';
2
+ import { c as createFileInfo, i as isTypeAccepted } from './files-CZAZotms.js';
3
+ import { a as baseEach } from './_baseEach-lvj-g1Zj.js';
4
+ import { c as baseIteratee } from './_baseIteratee-CEZRuq23.js';
5
5
  import { i as isArray } from './isArray-B8VKuhvH.js';
6
6
  import { c as createRandomString } from './random-string-JbKhhoXs.js';
7
- import './file-metadata-BwF9vTXN.js';
7
+ import './file-metadata-BHzkIH4g.js';
8
+ import './icons-Bu_YRgCL.js';
8
9
  import './get-icon-props-CgNJbSP4.js';
9
- import './_baseIsEqual-DCZXUzsZ.js';
10
- import './eq-D7VMHFyO.js';
10
+ import './_baseIsEqual-B6bIeexY.js';
11
+ import './eq-CZ30nDJE.js';
12
+ import './_getTag-CMJL-6hk.js';
11
13
  import './isObject-BJQylLSL.js';
12
- import './_getNative-aN4R8EiP.js';
13
14
  import './isObjectLike-oiMYqRQ0.js';
14
- import './isArrayLike-D1QkaJU2.js';
15
+ import './isArrayLike-CyVGB489.js';
16
+ import './isFunction-9zQTeQI8.js';
17
+ import './_getNative-COawFdVX.js';
18
+ import './_isIndex-B--C3qwe.js';
15
19
  import './isSymbol-ClAke5ga.js';
16
20
  import './identity-CK4jS9_E.js';
17
21
 
@@ -1,6 +1,7 @@
1
1
  import { r as registerInstance, c as createEvent, h, H as Host } from './index-DBTJNfo7.js';
2
2
  import { t as translate } from './translations-Dv3YcsA7.js';
3
- import { g as getFileBackgroundColor, a as getFileColor, b as getFileExtensionTitle, c as getFileIcon } from './file-metadata-BwF9vTXN.js';
3
+ import { g as getFileBackgroundColor, a as getFileColor, b as getFileExtensionTitle, c as getFileIcon } from './file-metadata-BHzkIH4g.js';
4
+ import './icons-Bu_YRgCL.js';
4
5
  import './get-icon-props-CgNJbSP4.js';
5
6
 
6
7
  const fileCss = () => `@charset "UTF-8";:host(limel-file){position:relative}.drag-and-drop-tip{pointer-events:none;position:absolute;box-sizing:border-box;margin:0.25rem;inset:0;display:flex;align-items:center;justify-content:flex-end;flex-wrap:nowrap;border-radius:0.25rem;border:1px dashed rgb(var(--contrast-700));padding:0 0.5rem}.drag-and-drop-tip .invisible-label-mock{flex-shrink:0;opacity:0;padding-right:1rem;padding-left:1.5rem}.drag-and-drop-tip .tip{font-size:smaller;color:var(--limel-theme-text-secondary-on-background-color);height:auto;max-height:3rem;line-height:1;display:-webkit-box;overflow:hidden;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}`;
@@ -4,13 +4,15 @@ import { g as getDefaultExportFromCjs } from './_commonjsHelpers-B85MJLTf.js';
4
4
  import './sv-CY-6-yEp.js';
5
5
  import { m as moment } from './moment-DQRNe8qq.js';
6
6
  import { i as isIOSDevice, a as isAndroidDevice } from './device-B-tmXAXV.js';
7
- import { i as isIterateeCall, t as toFinite } from './_isIterateeCall-CTcCv8Mb.js';
7
+ import { i as isIterateeCall, t as toFinite } from './_isIterateeCall-Bb4gUZLK.js';
8
8
  import './toNumber-D6JYpQI9.js';
9
9
  import './isObject-BJQylLSL.js';
10
10
  import './isSymbol-ClAke5ga.js';
11
11
  import './isObjectLike-oiMYqRQ0.js';
12
- import './eq-D7VMHFyO.js';
13
- import './isArrayLike-D1QkaJU2.js';
12
+ import './eq-CZ30nDJE.js';
13
+ import './isArrayLike-CyVGB489.js';
14
+ import './isFunction-9zQTeQI8.js';
15
+ import './_isIndex-B--C3qwe.js';
14
16
 
15
17
  /* Built-in method references for those with the same name as other `lodash` methods. */
16
18
  var nativeCeil = Math.ceil,
@@ -1,28 +1,31 @@
1
1
  import { r as registerInstance, c as createEvent, h as h$1, a as getElement } from './index-DBTJNfo7.js';
2
2
  import { g as getDefaultExportFromCjs } from './_commonjsHelpers-B85MJLTf.js';
3
- import { t as toString$1, a as arrayMap, b as baseGet, c as baseIteratee, d as castPath, e as toKey, h as hasIn, s as stringToPath, g as get } from './_baseIteratee-CI-QZdpx.js';
4
- import { b as basePickBy, a as baseSet, h as has, p as pickBy, n as negate } from './pickBy-D8CUtxE4.js';
5
- import { i as isBuffer, a as isTypedArray, b as isArguments, S as Stack, k as keys$1, c as SetCache, d as cacheHas, e as baseTimes, f as Set$1, s as setToArray } from './_baseIsEqual-DCZXUzsZ.js';
3
+ import { t as toString$1, a as arrayMap, b as baseGet, c as baseIteratee, d as castPath, e as toKey, h as hasIn, s as stringToPath, g as get } from './_baseIteratee-CEZRuq23.js';
4
+ import { b as basePickBy, a as baseSet, h as has, p as pickBy, n as negate } from './pickBy-C4C3CM4m.js';
5
+ import { S as Stack, k as keys$1, a as SetCache, c as cacheHas, b as baseTimes, s as setToArray } from './_baseIsEqual-B6bIeexY.js';
6
6
  import { i as identity$1 } from './identity-CK4jS9_E.js';
7
- import { t as toFinite, i as isIterateeCall } from './_isIterateeCall-CTcCv8Mb.js';
8
- import { c as copyObject, a as copyArray, b as cloneBuffer, d as cloneTypedArray, i as initCloneObject, e as arrayEach, f as baseClone, g as baseCreate, h as cloneDeep } from './cloneDeep-V4fB8wfG.js';
9
- import { b as baseFor, a as baseEach, c as baseForOwn } from './_baseEach-C4UJIc96.js';
10
- import { g as getPrototype, k as keysIn, a as getAllKeysIn } from './_getAllKeysIn-v-KlW5r_.js';
7
+ import { t as toFinite, i as isIterateeCall } from './_isIterateeCall-Bb4gUZLK.js';
8
+ import { c as copyObject, a as copyArray, b as cloneBuffer, d as cloneTypedArray, i as initCloneObject, e as arrayEach, f as baseClone, g as baseCreate, h as cloneDeep } from './cloneDeep-CL7UD3mR.js';
9
+ import { b as baseFor, a as baseEach, c as baseForOwn } from './_baseEach-lvj-g1Zj.js';
10
+ import { g as getPrototype, k as keysIn, a as getAllKeysIn } from './_getAllKeysIn-kT3KizYN.js';
11
11
  import { i as isArray } from './isArray-B8VKuhvH.js';
12
- import { e as eq, i as isFunction } from './eq-D7VMHFyO.js';
12
+ import { i as isBuffer, a as isTypedArray, b as isArguments, S as Set$1 } from './_getTag-CMJL-6hk.js';
13
+ import { i as isFunction } from './isFunction-9zQTeQI8.js';
13
14
  import { b as baseGetTag, i as isObject$1 } from './isObject-BJQylLSL.js';
14
- import { b as baseAssignValue } from './_assignValue-DOEO9byf.js';
15
- import { b as baseRest, a as baseFlatten, s as setToString, o as overRest, i as isArrayLikeObject, c as baseIndexOf, d as arrayIncludes, e as difference } from './difference-CWrdq-hd.js';
15
+ import { b as baseAssignValue } from './_assignValue-CEFvyZxO.js';
16
+ import { e as eq } from './eq-CZ30nDJE.js';
17
+ import { b as baseRest, a as baseFlatten, s as setToString, o as overRest, i as isArrayLikeObject, c as baseIndexOf, d as arrayIncludes, e as difference } from './difference-DND5tWiA.js';
16
18
  import { i as isObjectLike } from './isObjectLike-oiMYqRQ0.js';
17
- import { i as isEmpty } from './isEmpty-BFxMjh_H.js';
19
+ import { i as isEmpty } from './isEmpty-DHgukT5k.js';
18
20
  import { i as isSymbol } from './isSymbol-ClAke5ga.js';
19
- import { i as isArrayLike } from './isArrayLike-D1QkaJU2.js';
20
- import { i as isEqual } from './isEqual-CsrptmTU.js';
21
+ import { i as isArrayLike } from './isArrayLike-CyVGB489.js';
22
+ import { i as isEqual } from './isEqual-4tbMaaf_.js';
21
23
  import { m as moment } from './moment-DQRNe8qq.js';
22
24
  import { i as isMultiple } from './multiple-BylwpiM6.js';
23
- import './_getNative-aN4R8EiP.js';
25
+ import './_isIndex-B--C3qwe.js';
26
+ import './_getNative-COawFdVX.js';
24
27
  import './toNumber-D6JYpQI9.js';
25
- import './_defineProperty-yVdnnt__.js';
28
+ import './_defineProperty-C69Btzid.js';
26
29
 
27
30
  /**
28
31
  * Converts `value` to an integer.
@@ -20253,6 +20256,15 @@ function requireUtils () {
20253
20256
  /** @type {(value: string) => boolean} */
20254
20257
  const isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);
20255
20258
 
20259
+ /** @type {(value: string) => boolean} */
20260
+ const isHexPair = RegExp.prototype.test.bind(/^[\da-f]{2}$/iu);
20261
+
20262
+ /** @type {(value: string) => boolean} */
20263
+ const isUnreserved = RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu);
20264
+
20265
+ /** @type {(value: string) => boolean} */
20266
+ const isPathCharacter = RegExp.prototype.test.bind(/^[\da-z\-._~!$&'()*+,;=:@/]$/iu);
20267
+
20256
20268
  /**
20257
20269
  * @param {Array<string>} input
20258
20270
  * @returns {string}
@@ -20511,31 +20523,126 @@ function requireUtils () {
20511
20523
  }
20512
20524
 
20513
20525
  /**
20514
- * @param {import('../types/index').URIComponent} component
20515
- * @param {boolean} esc
20516
- * @returns {import('../types/index').URIComponent}
20526
+ * Re-escape RFC 3986 gen-delims that must not appear literally in the host.
20527
+ * After the URI regex parses, these characters cannot be literal in the host
20528
+ * field, so any that appear after decoding came from percent-encoding and
20529
+ * must be restored to prevent authority structure changes.
20530
+ *
20531
+ * @param {string} host
20532
+ * @param {boolean} isIP - true for IPv4/IPv6 hosts (skip colon re-escaping)
20533
+ * @returns {string}
20517
20534
  */
20518
- function normalizeComponentEncoding (component, esc) {
20519
- const func = esc !== true ? escape : unescape;
20520
- if (component.scheme !== undefined) {
20521
- component.scheme = func(component.scheme);
20522
- }
20523
- if (component.userinfo !== undefined) {
20524
- component.userinfo = func(component.userinfo);
20525
- }
20526
- if (component.host !== undefined) {
20527
- component.host = func(component.host);
20535
+ const HOST_DELIMS = { '@': '%40', '/': '%2F', '?': '%3F', '#': '%23', ':': '%3A' };
20536
+ const HOST_DELIM_RE = /[@/?#:]/g;
20537
+ const HOST_DELIM_NO_COLON_RE = /[@/?#]/g;
20538
+
20539
+ function reescapeHostDelimiters (host, isIP) {
20540
+ const re = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE;
20541
+ re.lastIndex = 0;
20542
+ return host.replace(re, (ch) => HOST_DELIMS[ch])
20543
+ }
20544
+
20545
+ /**
20546
+ * Normalizes percent escapes and optionally decodes only unreserved ASCII bytes.
20547
+ * Reserved delimiters such as `%2F` and `%2E` stay escaped.
20548
+ *
20549
+ * @param {string} input
20550
+ * @param {boolean} [decodeUnreserved=false]
20551
+ * @returns {string}
20552
+ */
20553
+ function normalizePercentEncoding (input, decodeUnreserved = false) {
20554
+ if (input.indexOf('%') === -1) {
20555
+ return input
20528
20556
  }
20529
- if (component.path !== undefined) {
20530
- component.path = func(component.path);
20557
+
20558
+ let output = '';
20559
+
20560
+ for (let i = 0; i < input.length; i++) {
20561
+ if (input[i] === '%' && i + 2 < input.length) {
20562
+ const hex = input.slice(i + 1, i + 3);
20563
+ if (isHexPair(hex)) {
20564
+ const normalizedHex = hex.toUpperCase();
20565
+ const decoded = String.fromCharCode(parseInt(normalizedHex, 16));
20566
+
20567
+ if (decodeUnreserved && isUnreserved(decoded)) {
20568
+ output += decoded;
20569
+ } else {
20570
+ output += '%' + normalizedHex;
20571
+ }
20572
+
20573
+ i += 2;
20574
+ continue
20575
+ }
20576
+ }
20577
+
20578
+ output += input[i];
20531
20579
  }
20532
- if (component.query !== undefined) {
20533
- component.query = func(component.query);
20580
+
20581
+ return output
20582
+ }
20583
+
20584
+ /**
20585
+ * Normalizes path data without turning reserved escapes into live path syntax.
20586
+ * Valid escapes are uppercased, raw unsafe characters are escaped, and only
20587
+ * unreserved bytes that are not `.` are decoded.
20588
+ *
20589
+ * @param {string} input
20590
+ * @returns {string}
20591
+ */
20592
+ function normalizePathEncoding (input) {
20593
+ let output = '';
20594
+
20595
+ for (let i = 0; i < input.length; i++) {
20596
+ if (input[i] === '%' && i + 2 < input.length) {
20597
+ const hex = input.slice(i + 1, i + 3);
20598
+ if (isHexPair(hex)) {
20599
+ const normalizedHex = hex.toUpperCase();
20600
+ const decoded = String.fromCharCode(parseInt(normalizedHex, 16));
20601
+
20602
+ if (decoded !== '.' && isUnreserved(decoded)) {
20603
+ output += decoded;
20604
+ } else {
20605
+ output += '%' + normalizedHex;
20606
+ }
20607
+
20608
+ i += 2;
20609
+ continue
20610
+ }
20611
+ }
20612
+
20613
+ if (isPathCharacter(input[i])) {
20614
+ output += input[i];
20615
+ } else {
20616
+ output += escape(input[i]);
20617
+ }
20534
20618
  }
20535
- if (component.fragment !== undefined) {
20536
- component.fragment = func(component.fragment);
20619
+
20620
+ return output
20621
+ }
20622
+
20623
+ /**
20624
+ * Escapes a component while preserving existing valid percent escapes.
20625
+ *
20626
+ * @param {string} input
20627
+ * @returns {string}
20628
+ */
20629
+ function escapePreservingEscapes (input) {
20630
+ let output = '';
20631
+
20632
+ for (let i = 0; i < input.length; i++) {
20633
+ if (input[i] === '%' && i + 2 < input.length) {
20634
+ const hex = input.slice(i + 1, i + 3);
20635
+ if (isHexPair(hex)) {
20636
+ output += '%' + hex.toUpperCase();
20637
+ i += 2;
20638
+ continue
20639
+ }
20640
+ }
20641
+
20642
+ output += escape(input[i]);
20537
20643
  }
20538
- return component
20644
+
20645
+ return output
20539
20646
  }
20540
20647
 
20541
20648
  /**
@@ -20557,7 +20664,7 @@ function requireUtils () {
20557
20664
  if (ipV6res.isIPV6 === true) {
20558
20665
  host = `[${ipV6res.escapedHost}]`;
20559
20666
  } else {
20560
- host = component.host;
20667
+ host = reescapeHostDelimiters(host, false);
20561
20668
  }
20562
20669
  }
20563
20670
  uriTokens.push(host);
@@ -20573,7 +20680,10 @@ function requireUtils () {
20573
20680
  utils = {
20574
20681
  nonSimpleDomain,
20575
20682
  recomposeAuthority,
20576
- normalizeComponentEncoding,
20683
+ reescapeHostDelimiters,
20684
+ normalizePercentEncoding,
20685
+ normalizePathEncoding,
20686
+ escapePreservingEscapes,
20577
20687
  removeDotSegments,
20578
20688
  isIPv4,
20579
20689
  isUUID,
@@ -20864,7 +20974,7 @@ function requireFastUri () {
20864
20974
  if (hasRequiredFastUri) return fastUri.exports;
20865
20975
  hasRequiredFastUri = 1;
20866
20976
 
20867
- const { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = requireUtils();
20977
+ const { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, escapePreservingEscapes, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = requireUtils();
20868
20978
  const { SCHEMES, getSchemeHandler } = requireSchemes();
20869
20979
 
20870
20980
  /**
@@ -20875,7 +20985,7 @@ function requireFastUri () {
20875
20985
  */
20876
20986
  function normalize (uri, options) {
20877
20987
  if (typeof uri === 'string') {
20878
- uri = /** @type {T} */ (serialize(parse(uri, options), options));
20988
+ uri = /** @type {T} */ (normalizeString(uri, options));
20879
20989
  } else if (typeof uri === 'object') {
20880
20990
  uri = /** @type {T} */ (parse(serialize(uri, options), options));
20881
20991
  }
@@ -20970,21 +21080,10 @@ function requireFastUri () {
20970
21080
  * @returns {boolean}
20971
21081
  */
20972
21082
  function equal (uriA, uriB, options) {
20973
- if (typeof uriA === 'string') {
20974
- uriA = unescape(uriA);
20975
- uriA = serialize(normalizeComponentEncoding(parse(uriA, options), true), { ...options, skipEscape: true });
20976
- } else if (typeof uriA === 'object') {
20977
- uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true });
20978
- }
20979
-
20980
- if (typeof uriB === 'string') {
20981
- uriB = unescape(uriB);
20982
- uriB = serialize(normalizeComponentEncoding(parse(uriB, options), true), { ...options, skipEscape: true });
20983
- } else if (typeof uriB === 'object') {
20984
- uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true });
20985
- }
21083
+ const normalizedA = normalizeComparableURI(uriA, options);
21084
+ const normalizedB = normalizeComparableURI(uriB, options);
20986
21085
 
20987
- return uriA.toLowerCase() === uriB.toLowerCase()
21086
+ return normalizedA !== undefined && normalizedB !== undefined && normalizedA.toLowerCase() === normalizedB.toLowerCase()
20988
21087
  }
20989
21088
 
20990
21089
  /**
@@ -21020,13 +21119,13 @@ function requireFastUri () {
21020
21119
 
21021
21120
  if (component.path !== undefined) {
21022
21121
  if (!options.skipEscape) {
21023
- component.path = escape(component.path);
21122
+ component.path = escapePreservingEscapes(component.path);
21024
21123
 
21025
21124
  if (component.scheme !== undefined) {
21026
21125
  component.path = component.path.split('%3A').join(':');
21027
21126
  }
21028
21127
  } else {
21029
- component.path = unescape(component.path);
21128
+ component.path = normalizePercentEncoding(component.path);
21030
21129
  }
21031
21130
  }
21032
21131
 
@@ -21077,12 +21176,29 @@ function requireFastUri () {
21077
21176
 
21078
21177
  const URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;
21079
21178
 
21179
+ /**
21180
+ * @param {import('./types/index').URIComponent} parsed
21181
+ * @param {RegExpMatchArray} matches
21182
+ * @returns {string|undefined}
21183
+ */
21184
+ function getParseError (parsed, matches) {
21185
+ if (matches[2] !== undefined && parsed.path && parsed.path[0] !== '/') {
21186
+ return 'URI path must start with "/" when authority is present.'
21187
+ }
21188
+
21189
+ if (typeof parsed.port === 'number' && (parsed.port < 0 || parsed.port > 65535)) {
21190
+ return 'URI port is malformed.'
21191
+ }
21192
+
21193
+ return undefined
21194
+ }
21195
+
21080
21196
  /**
21081
21197
  * @param {string} uri
21082
21198
  * @param {import('./types/index').Options} [opts]
21083
- * @returns
21199
+ * @returns {{ parsed: import('./types/index').URIComponent, malformedAuthorityOrPort: boolean }}
21084
21200
  */
21085
- function parse (uri, opts) {
21201
+ function parseWithStatus (uri, opts) {
21086
21202
  const options = Object.assign({}, opts);
21087
21203
  /** @type {import('./types/index').URIComponent} */
21088
21204
  const parsed = {
@@ -21095,6 +21211,8 @@ function requireFastUri () {
21095
21211
  fragment: undefined
21096
21212
  };
21097
21213
 
21214
+ let malformedAuthorityOrPort = false;
21215
+
21098
21216
  let isIP = false;
21099
21217
  if (options.reference === 'suffix') {
21100
21218
  if (options.scheme) {
@@ -21120,6 +21238,13 @@ function requireFastUri () {
21120
21238
  if (isNaN(parsed.port)) {
21121
21239
  parsed.port = matches[5];
21122
21240
  }
21241
+
21242
+ const parseError = getParseError(parsed, matches);
21243
+ if (parseError !== undefined) {
21244
+ parsed.error = parsed.error || parseError;
21245
+ malformedAuthorityOrPort = true;
21246
+ }
21247
+
21123
21248
  if (parsed.host) {
21124
21249
  const ipv4result = isIPv4(parsed.host);
21125
21250
  if (ipv4result === false) {
@@ -21168,14 +21293,18 @@ function requireFastUri () {
21168
21293
  parsed.scheme = unescape(parsed.scheme);
21169
21294
  }
21170
21295
  if (parsed.host !== undefined) {
21171
- parsed.host = unescape(parsed.host);
21296
+ parsed.host = reescapeHostDelimiters(unescape(parsed.host), isIP);
21172
21297
  }
21173
21298
  }
21174
21299
  if (parsed.path) {
21175
- parsed.path = escape(unescape(parsed.path));
21300
+ parsed.path = normalizePathEncoding(parsed.path);
21176
21301
  }
21177
21302
  if (parsed.fragment) {
21178
- parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment));
21303
+ try {
21304
+ parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment));
21305
+ } catch {
21306
+ parsed.error = parsed.error || 'URI malformed';
21307
+ }
21179
21308
  }
21180
21309
  }
21181
21310
 
@@ -21186,7 +21315,54 @@ function requireFastUri () {
21186
21315
  } else {
21187
21316
  parsed.error = parsed.error || 'URI can not be parsed.';
21188
21317
  }
21189
- return parsed
21318
+ return { parsed, malformedAuthorityOrPort }
21319
+ }
21320
+
21321
+ /**
21322
+ * @param {string} uri
21323
+ * @param {import('./types/index').Options} [opts]
21324
+ * @returns
21325
+ */
21326
+ function parse (uri, opts) {
21327
+ return parseWithStatus(uri, opts).parsed
21328
+ }
21329
+
21330
+ /**
21331
+ * @param {string} uri
21332
+ * @param {import('./types/index').Options} [opts]
21333
+ * @returns {string}
21334
+ */
21335
+ function normalizeString (uri, opts) {
21336
+ return normalizeStringWithStatus(uri, opts).normalized
21337
+ }
21338
+
21339
+ /**
21340
+ * @param {string} uri
21341
+ * @param {import('./types/index').Options} [opts]
21342
+ * @returns {{ normalized: string, malformedAuthorityOrPort: boolean }}
21343
+ */
21344
+ function normalizeStringWithStatus (uri, opts) {
21345
+ const { parsed, malformedAuthorityOrPort } = parseWithStatus(uri, opts);
21346
+ return {
21347
+ normalized: malformedAuthorityOrPort ? uri : serialize(parsed, opts),
21348
+ malformedAuthorityOrPort
21349
+ }
21350
+ }
21351
+
21352
+ /**
21353
+ * @param {import ('./types/index').URIComponent|string} uri
21354
+ * @param {import('./types/index').Options} [opts]
21355
+ * @returns {string|undefined}
21356
+ */
21357
+ function normalizeComparableURI (uri, opts) {
21358
+ if (typeof uri === 'string') {
21359
+ const { normalized, malformedAuthorityOrPort } = normalizeStringWithStatus(uri, opts);
21360
+ return malformedAuthorityOrPort ? undefined : normalized
21361
+ }
21362
+
21363
+ if (typeof uri === 'object') {
21364
+ return serialize(uri, opts)
21365
+ }
21190
21366
  }
21191
21367
 
21192
21368
  const fastUri$1 = {
@@ -0,0 +1,40 @@
1
+ import { r as registerInstance, h, H as Host } from './index-DBTJNfo7.js';
2
+
3
+ const helperLineCss = () => `:host(limel-helper-line){transition:opacity 0.2s ease;box-sizing:border-box;display:grid;min-width:0;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:0.6875rem;line-height:normal;color:rgb(var(--contrast-1200))}div{display:flex;justify-content:space-between;gap:0.75rem;overflow:hidden;padding:0 1rem}:host(limel-helper-line.invalid){--limel-h-l-grid-template-rows-transition-speed:0.46s;--limel-h-l-grid-template-rows:1fr}:host(limel-helper-line.invalid) .helper-text{color:var(--limel-theme-error-color)}.counter{flex-shrink:0;margin-left:auto}.helper-text,.counter{padding-top:0.125rem}:host(limel-helper-line){transition:grid-template-rows var(--limel-h-l-grid-template-rows-transition-speed, 0.46s) cubic-bezier(1, 0.09, 0, 0.89);grid-template-rows:var(--limel-h-l-grid-template-rows, 1fr)}:host(limel-helper-line.hide){--limel-h-l-grid-template-rows-transition-speed:0.3s;--limel-h-l-grid-template-rows:0fr}`;
4
+
5
+ const HelperLine = class {
6
+ constructor(hostRef) {
7
+ registerInstance(this, hostRef);
8
+ /**
9
+ * Turns `true`, when the parent component is invalid.
10
+ * For example, when the parent component is `required` but is left empty.
11
+ * Or when the input format is invalid.
12
+ */
13
+ this.invalid = false;
14
+ this.hasContent = () => {
15
+ return !!(this.maxLength > 0 ||
16
+ (this.helperText && this.helperText.length > 0));
17
+ };
18
+ this.renderHelperText = () => {
19
+ if (!this.helperText) {
20
+ return;
21
+ }
22
+ return (h("span", { class: "helper-text", id: this.helperTextId }, this.helperText));
23
+ };
24
+ this.renderCharacterCounter = () => {
25
+ const counter = `${this.length} / ${this.maxLength}`;
26
+ if (!this.maxLength) {
27
+ return;
28
+ }
29
+ return h("span", { class: "counter" }, counter);
30
+ };
31
+ }
32
+ render() {
33
+ return (h(Host, { key: '8ef6eb3b3e372e5dc61af1424a88c1c342023d13', tabIndex: -1, class: {
34
+ invalid: this.invalid,
35
+ }, style: this.hasContent() ? {} : { display: 'none' }, "aria-hidden": !this.hasContent() }, h("div", { key: '3b4e31c23f5964aabb67556e68bd1785c871d934' }, this.renderHelperText(), this.renderCharacterCounter())));
36
+ }
37
+ };
38
+ HelperLine.style = helperLineCss();
39
+
40
+ export { HelperLine as limel_helper_line };
@@ -1,12 +1,13 @@
1
1
  import { r as registerInstance, c as createEvent, h, a as getElement } from './index-DBTJNfo7.js';
2
2
  import { c as createRandomString } from './random-string-JbKhhoXs.js';
3
3
  import { E as ESCAPE } from './keycodes-rI0IeKpx.js';
4
- import { f as focusTriggerElement, z as zipObject } from './focus-trigger-element-DubROLkE.js';
5
- import './_assignValue-DOEO9byf.js';
6
- import './_defineProperty-yVdnnt__.js';
7
- import './_getNative-aN4R8EiP.js';
8
- import './eq-D7VMHFyO.js';
4
+ import { f as focusTriggerElement, z as zipObject } from './focus-trigger-element-BOFcjLq3.js';
5
+ import './_assignValue-CEFvyZxO.js';
6
+ import './_defineProperty-C69Btzid.js';
7
+ import './_getNative-COawFdVX.js';
8
+ import './isFunction-9zQTeQI8.js';
9
9
  import './isObject-BJQylLSL.js';
10
+ import './eq-CZ30nDJE.js';
10
11
 
11
12
  /**
12
13
  * Check if an element is a descendant of another