@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
@@ -5,14 +5,17 @@ var dispatchResizeEvent = require('./dispatch-resize-event-DH5CaB3p.js');
5
5
  var randomString = require('./random-string-BTzDB2ee.js');
6
6
  var ponyfill = require('./ponyfill-BgIFyUG5.js');
7
7
  var component = require('./component-y8swlNNR.js');
8
- var isEqual = require('./isEqual-bXyw7kXo.js');
9
- require('./_baseIsEqual-aOPReRWl.js');
10
- require('./eq-B1KBAwmK.js');
8
+ var isEqual = require('./isEqual-Cd9J8a5-.js');
9
+ require('./_baseIsEqual-CQZKiKbe.js');
10
+ require('./eq-DFcUoVzv.js');
11
+ require('./_getTag-BC28Za7d.js');
11
12
  require('./isObject-B6Osvvqp.js');
12
- require('./_getNative-B4n5HX2B.js');
13
- require('./isArray-BuFVIU_i.js');
14
13
  require('./isObjectLike-Dlpn-j-1.js');
15
- require('./isArrayLike-_dR1U5-Y.js');
14
+ require('./isArrayLike-C2RwZMG4.js');
15
+ require('./isFunction-RSHwsz1x.js');
16
+ require('./_getNative-Cf52giNE.js');
17
+ require('./isArray-BuFVIU_i.js');
18
+ require('./_isIndex-Bu45fvR7.js');
16
19
 
17
20
  /**
18
21
  * @license
@@ -3,6 +3,7 @@
3
3
  var index = require('./index-BjHIBY-I.js');
4
4
  var translations = require('./translations-D4j_eojG.js');
5
5
  var adaptColorContrast = require('./adapt-color-contrast-Beo1IEl_.js');
6
+ var icons = require('./icons-isR5V1X0.js');
6
7
 
7
8
  /**
8
9
  * Checks whether the given HTML contains any images with a `data-remote-src`
@@ -201,7 +202,7 @@ function formatBytes(bytes, decimals = 1) {
201
202
  return `${rounded} ${sizes[i]}`;
202
203
  }
203
204
 
204
- 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}`;
205
+ 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}`;
205
206
 
206
207
  const EmailViewer = class {
207
208
  constructor(hostRef) {
@@ -217,13 +218,17 @@ const EmailViewer = class {
217
218
  const filename = ((_a = attachment.filename) === null || _a === void 0 ? void 0 : _a.trim()) ||
218
219
  this.getTranslation('file-viewer.email.attachment.unnamed');
219
220
  const mimeType = ((_b = attachment.mimeType) === null || _b === void 0 ? void 0 : _b.trim()) || '';
220
- return (index.h("li", { key: `attachment-${index$1}` }, index.h("span", { class: "attachment-filename" }, filename), index.h("span", { class: "attachment-mime-type" }, " ", mimeType), this.renderSizeBadge(attachment.size)));
221
- };
222
- this.renderSizeBadge = (size) => {
223
- if (typeof size !== 'number') {
224
- return;
225
- }
226
- return (index.h("limel-badge", { class: "attachment-size", label: formatBytes(size) }));
221
+ const dotIndex = filename.lastIndexOf('.');
222
+ const extension = dotIndex > 0 ? filename.slice(dotIndex + 1) : '';
223
+ const tooltip = mimeType ? `${filename}\n${mimeType}` : filename;
224
+ const fileSize = typeof attachment.size === 'number'
225
+ ? formatBytes(attachment.size)
226
+ : undefined;
227
+ return (index.h("li", { key: `attachment-${index$1}` }, index.h("limel-chip", { title: tooltip, text: filename, icon: {
228
+ name: icons.getIconForFile(extension),
229
+ color: icons.getIconFillColorForFile(extension),
230
+ backgroundColor: icons.getIconBackgroundColorForFile(extension),
231
+ }, badge: fileSize, readonly: true, language: this.language })));
227
232
  };
228
233
  this.onEnableRemoteImagesClick = (event) => {
229
234
  var _a;
@@ -254,7 +259,7 @@ const EmailViewer = class {
254
259
  }
255
260
  }
256
261
  render() {
257
- return (index.h(index.Host, { key: '25592be91649a98427363488998f461470346f06' }, index.h("div", { key: 'e07d2c18bc5ebd7ff922afa4c8becb1f987bb0da', class: "email", part: "email" }, this.renderHeaders(), this.renderRemoteImageBanner(), index.h("section", { key: 'aa174224531cbcc77f1b29b0c828d7dc8fab5d7c' }, this.renderAttachments(), this.renderBody()))));
262
+ return (index.h(index.Host, { key: '675006a3bc305063d7205aef84da1652f0c082f4' }, index.h("div", { key: '10661de173c5fbac42362c903f1a1a5658e6c9e3', class: "email", part: "email" }, this.renderHeaders(), this.renderRemoteImageBanner(), index.h("section", { key: 'c8102541316aaf4749cbf298adb5c3c41d9dda47' }, this.renderAttachments(), this.renderBody()))));
258
263
  }
259
264
  renderHeaders() {
260
265
  const headerFields = [
@@ -317,7 +322,7 @@ const EmailViewer = class {
317
322
  return;
318
323
  }
319
324
  const label = this.getTranslation('file-viewer.email.attachments');
320
- return (index.h("div", { class: "attachments" }, index.h("span", null, label), index.h("ul", null, attachments.map((attachment, index) => this.renderAttachment(attachment, index)))));
325
+ return (index.h("div", { class: "attachments" }, index.h("span", { id: "attachments-label" }, label), index.h("ul", { class: "attachment-list", "aria-labelledby": "attachments-label" }, attachments.map((attachment, index) => this.renderAttachment(attachment, index)))));
321
326
  }
322
327
  getTranslation(key) {
323
328
  return translations.translate.get(key, this.language);
@@ -1,19 +1,23 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-BjHIBY-I.js');
4
- var files = require('./files-Cf615Ytp.js');
5
- var _baseEach = require('./_baseEach-C570gT5Y.js');
6
- var _baseIteratee = require('./_baseIteratee-DggA4e7a.js');
4
+ var files = require('./files-Bt11HLi4.js');
5
+ var _baseEach = require('./_baseEach-Bygi-un6.js');
6
+ var _baseIteratee = require('./_baseIteratee-DDklwtn9.js');
7
7
  var isArray = require('./isArray-BuFVIU_i.js');
8
8
  var randomString = require('./random-string-BTzDB2ee.js');
9
- require('./file-metadata-rQ0WzFlZ.js');
9
+ require('./file-metadata-BrhOssGG.js');
10
+ require('./icons-isR5V1X0.js');
10
11
  require('./get-icon-props-CwpDdQDI.js');
11
- require('./_baseIsEqual-aOPReRWl.js');
12
- require('./eq-B1KBAwmK.js');
12
+ require('./_baseIsEqual-CQZKiKbe.js');
13
+ require('./eq-DFcUoVzv.js');
14
+ require('./_getTag-BC28Za7d.js');
13
15
  require('./isObject-B6Osvvqp.js');
14
- require('./_getNative-B4n5HX2B.js');
15
16
  require('./isObjectLike-Dlpn-j-1.js');
16
- require('./isArrayLike-_dR1U5-Y.js');
17
+ require('./isArrayLike-C2RwZMG4.js');
18
+ require('./isFunction-RSHwsz1x.js');
19
+ require('./_getNative-Cf52giNE.js');
20
+ require('./_isIndex-Bu45fvR7.js');
17
21
  require('./isSymbol-DxAVNJfH.js');
18
22
  require('./identity-Dz5mxHaJ.js');
19
23
 
@@ -2,7 +2,8 @@
2
2
 
3
3
  var index = require('./index-BjHIBY-I.js');
4
4
  var translations = require('./translations-D4j_eojG.js');
5
- var fileMetadata = require('./file-metadata-rQ0WzFlZ.js');
5
+ var fileMetadata = require('./file-metadata-BrhOssGG.js');
6
+ require('./icons-isR5V1X0.js');
6
7
  require('./get-icon-props-CwpDdQDI.js');
7
8
 
8
9
  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}`;
@@ -6,13 +6,15 @@ var _commonjsHelpers = require('./_commonjsHelpers-CFO10eej.js');
6
6
  require('./sv-BSR4W58y.js');
7
7
  var moment = require('./moment-CqRdiK10.js');
8
8
  var device = require('./device-C9O7lYI9.js');
9
- var _isIterateeCall = require('./_isIterateeCall-CPWXFS_s.js');
9
+ var _isIterateeCall = require('./_isIterateeCall-BUGt9SrH.js');
10
10
  require('./toNumber-v-1DEwWD.js');
11
11
  require('./isObject-B6Osvvqp.js');
12
12
  require('./isSymbol-DxAVNJfH.js');
13
13
  require('./isObjectLike-Dlpn-j-1.js');
14
- require('./eq-B1KBAwmK.js');
15
- require('./isArrayLike-_dR1U5-Y.js');
14
+ require('./eq-DFcUoVzv.js');
15
+ require('./isArrayLike-C2RwZMG4.js');
16
+ require('./isFunction-RSHwsz1x.js');
17
+ require('./_isIndex-Bu45fvR7.js');
16
18
 
17
19
  /* Built-in method references for those with the same name as other `lodash` methods. */
18
20
  var nativeCeil = Math.ceil,
@@ -2,29 +2,32 @@
2
2
 
3
3
  var index$1 = require('./index-BjHIBY-I.js');
4
4
  var _commonjsHelpers = require('./_commonjsHelpers-CFO10eej.js');
5
- var _baseIteratee = require('./_baseIteratee-DggA4e7a.js');
6
- var pickBy = require('./pickBy-kLjYLoam.js');
7
- var _baseIsEqual = require('./_baseIsEqual-aOPReRWl.js');
5
+ var _baseIteratee = require('./_baseIteratee-DDklwtn9.js');
6
+ var pickBy = require('./pickBy-D-X6S5kg.js');
7
+ var _baseIsEqual = require('./_baseIsEqual-CQZKiKbe.js');
8
8
  var identity$1 = require('./identity-Dz5mxHaJ.js');
9
- var _isIterateeCall = require('./_isIterateeCall-CPWXFS_s.js');
10
- var cloneDeep = require('./cloneDeep-CxFNKF1Y.js');
11
- var _baseEach = require('./_baseEach-C570gT5Y.js');
12
- var _getAllKeysIn = require('./_getAllKeysIn-BQIV8aw7.js');
9
+ var _isIterateeCall = require('./_isIterateeCall-BUGt9SrH.js');
10
+ var cloneDeep = require('./cloneDeep-hE40Q8aw.js');
11
+ var _baseEach = require('./_baseEach-Bygi-un6.js');
12
+ var _getAllKeysIn = require('./_getAllKeysIn-BJsgUTAt.js');
13
13
  var isArray = require('./isArray-BuFVIU_i.js');
14
- var eq = require('./eq-B1KBAwmK.js');
14
+ var _getTag = require('./_getTag-BC28Za7d.js');
15
+ var isFunction = require('./isFunction-RSHwsz1x.js');
15
16
  var isObject$1 = require('./isObject-B6Osvvqp.js');
16
- var _assignValue = require('./_assignValue-DpsLUlF4.js');
17
- var difference = require('./difference-Bfsq4sXB.js');
17
+ var _assignValue = require('./_assignValue-DQh76m39.js');
18
+ var eq = require('./eq-DFcUoVzv.js');
19
+ var difference = require('./difference-B543MGsY.js');
18
20
  var isObjectLike = require('./isObjectLike-Dlpn-j-1.js');
19
- var isEmpty = require('./isEmpty-EBCFxX1S.js');
21
+ var isEmpty = require('./isEmpty-CCxl3bYc.js');
20
22
  var isSymbol = require('./isSymbol-DxAVNJfH.js');
21
- var isArrayLike = require('./isArrayLike-_dR1U5-Y.js');
22
- var isEqual = require('./isEqual-bXyw7kXo.js');
23
+ var isArrayLike = require('./isArrayLike-C2RwZMG4.js');
24
+ var isEqual = require('./isEqual-Cd9J8a5-.js');
23
25
  var moment = require('./moment-CqRdiK10.js');
24
26
  var multiple = require('./multiple-DYfiga7l.js');
25
- require('./_getNative-B4n5HX2B.js');
27
+ require('./_isIndex-Bu45fvR7.js');
28
+ require('./_getNative-Cf52giNE.js');
26
29
  require('./toNumber-v-1DEwWD.js');
27
- require('./_defineProperty-BDFOiqJL.js');
30
+ require('./_defineProperty-Csu6P9HT.js');
28
31
 
29
32
  /**
30
33
  * Converts `value` to an integer.
@@ -514,8 +517,8 @@ function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, sta
514
517
 
515
518
  if (isCommon) {
516
519
  var isArr = isArray.isArray(srcValue),
517
- isBuff = !isArr && _baseIsEqual.isBuffer(srcValue),
518
- isTyped = !isArr && !isBuff && _baseIsEqual.isTypedArray(srcValue);
520
+ isBuff = !isArr && _getTag.isBuffer(srcValue),
521
+ isTyped = !isArr && !isBuff && _getTag.isTypedArray(srcValue);
519
522
 
520
523
  newValue = srcValue;
521
524
  if (isArr || isBuff || isTyped) {
@@ -537,12 +540,12 @@ function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, sta
537
540
  newValue = [];
538
541
  }
539
542
  }
540
- else if (isPlainObject(srcValue) || _baseIsEqual.isArguments(srcValue)) {
543
+ else if (isPlainObject(srcValue) || _getTag.isArguments(srcValue)) {
541
544
  newValue = objValue;
542
- if (_baseIsEqual.isArguments(objValue)) {
545
+ if (_getTag.isArguments(objValue)) {
543
546
  newValue = toPlainObject(objValue);
544
547
  }
545
- else if (!isObject$1.isObject(objValue) || eq.isFunction(objValue)) {
548
+ else if (!isObject$1.isObject(objValue) || isFunction.isFunction(objValue)) {
546
549
  newValue = cloneDeep.initCloneObject(srcValue);
547
550
  }
548
551
  }
@@ -1429,7 +1432,7 @@ function toPath(value) {
1429
1432
  */
1430
1433
  function transform(object, iteratee, accumulator) {
1431
1434
  var isArr = isArray.isArray(object),
1432
- isArrLike = isArr || _baseIsEqual.isBuffer(object) || _baseIsEqual.isTypedArray(object);
1435
+ isArrLike = isArr || _getTag.isBuffer(object) || _getTag.isTypedArray(object);
1433
1436
 
1434
1437
  iteratee = _baseIteratee.baseIteratee(iteratee);
1435
1438
  if (accumulator == null) {
@@ -1438,7 +1441,7 @@ function transform(object, iteratee, accumulator) {
1438
1441
  accumulator = isArr ? new Ctor : [];
1439
1442
  }
1440
1443
  else if (isObject$1.isObject(object)) {
1441
- accumulator = eq.isFunction(Ctor) ? cloneDeep.baseCreate(_getAllKeysIn.getPrototype(object)) : {};
1444
+ accumulator = isFunction.isFunction(Ctor) ? cloneDeep.baseCreate(_getAllKeysIn.getPrototype(object)) : {};
1442
1445
  }
1443
1446
  else {
1444
1447
  accumulator = {};
@@ -1460,8 +1463,8 @@ var INFINITY = 1 / 0;
1460
1463
  * @param {Array} values The values to add to the set.
1461
1464
  * @returns {Object} Returns the new set.
1462
1465
  */
1463
- var createSet = !(_baseIsEqual.Set && (1 / _baseIsEqual.setToArray(new _baseIsEqual.Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
1464
- return new _baseIsEqual.Set(values);
1466
+ var createSet = !(_getTag.Set && (1 / _baseIsEqual.setToArray(new _getTag.Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
1467
+ return new _getTag.Set(values);
1465
1468
  };
1466
1469
 
1467
1470
  /** Used as the size to enable large array optimizations. */
@@ -20255,6 +20258,15 @@ function requireUtils () {
20255
20258
  /** @type {(value: string) => boolean} */
20256
20259
  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);
20257
20260
 
20261
+ /** @type {(value: string) => boolean} */
20262
+ const isHexPair = RegExp.prototype.test.bind(/^[\da-f]{2}$/iu);
20263
+
20264
+ /** @type {(value: string) => boolean} */
20265
+ const isUnreserved = RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu);
20266
+
20267
+ /** @type {(value: string) => boolean} */
20268
+ const isPathCharacter = RegExp.prototype.test.bind(/^[\da-z\-._~!$&'()*+,;=:@/]$/iu);
20269
+
20258
20270
  /**
20259
20271
  * @param {Array<string>} input
20260
20272
  * @returns {string}
@@ -20513,31 +20525,126 @@ function requireUtils () {
20513
20525
  }
20514
20526
 
20515
20527
  /**
20516
- * @param {import('../types/index').URIComponent} component
20517
- * @param {boolean} esc
20518
- * @returns {import('../types/index').URIComponent}
20528
+ * Re-escape RFC 3986 gen-delims that must not appear literally in the host.
20529
+ * After the URI regex parses, these characters cannot be literal in the host
20530
+ * field, so any that appear after decoding came from percent-encoding and
20531
+ * must be restored to prevent authority structure changes.
20532
+ *
20533
+ * @param {string} host
20534
+ * @param {boolean} isIP - true for IPv4/IPv6 hosts (skip colon re-escaping)
20535
+ * @returns {string}
20519
20536
  */
20520
- function normalizeComponentEncoding (component, esc) {
20521
- const func = esc !== true ? escape : unescape;
20522
- if (component.scheme !== undefined) {
20523
- component.scheme = func(component.scheme);
20524
- }
20525
- if (component.userinfo !== undefined) {
20526
- component.userinfo = func(component.userinfo);
20527
- }
20528
- if (component.host !== undefined) {
20529
- component.host = func(component.host);
20537
+ const HOST_DELIMS = { '@': '%40', '/': '%2F', '?': '%3F', '#': '%23', ':': '%3A' };
20538
+ const HOST_DELIM_RE = /[@/?#:]/g;
20539
+ const HOST_DELIM_NO_COLON_RE = /[@/?#]/g;
20540
+
20541
+ function reescapeHostDelimiters (host, isIP) {
20542
+ const re = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE;
20543
+ re.lastIndex = 0;
20544
+ return host.replace(re, (ch) => HOST_DELIMS[ch])
20545
+ }
20546
+
20547
+ /**
20548
+ * Normalizes percent escapes and optionally decodes only unreserved ASCII bytes.
20549
+ * Reserved delimiters such as `%2F` and `%2E` stay escaped.
20550
+ *
20551
+ * @param {string} input
20552
+ * @param {boolean} [decodeUnreserved=false]
20553
+ * @returns {string}
20554
+ */
20555
+ function normalizePercentEncoding (input, decodeUnreserved = false) {
20556
+ if (input.indexOf('%') === -1) {
20557
+ return input
20530
20558
  }
20531
- if (component.path !== undefined) {
20532
- component.path = func(component.path);
20559
+
20560
+ let output = '';
20561
+
20562
+ for (let i = 0; i < input.length; i++) {
20563
+ if (input[i] === '%' && i + 2 < input.length) {
20564
+ const hex = input.slice(i + 1, i + 3);
20565
+ if (isHexPair(hex)) {
20566
+ const normalizedHex = hex.toUpperCase();
20567
+ const decoded = String.fromCharCode(parseInt(normalizedHex, 16));
20568
+
20569
+ if (decodeUnreserved && isUnreserved(decoded)) {
20570
+ output += decoded;
20571
+ } else {
20572
+ output += '%' + normalizedHex;
20573
+ }
20574
+
20575
+ i += 2;
20576
+ continue
20577
+ }
20578
+ }
20579
+
20580
+ output += input[i];
20533
20581
  }
20534
- if (component.query !== undefined) {
20535
- component.query = func(component.query);
20582
+
20583
+ return output
20584
+ }
20585
+
20586
+ /**
20587
+ * Normalizes path data without turning reserved escapes into live path syntax.
20588
+ * Valid escapes are uppercased, raw unsafe characters are escaped, and only
20589
+ * unreserved bytes that are not `.` are decoded.
20590
+ *
20591
+ * @param {string} input
20592
+ * @returns {string}
20593
+ */
20594
+ function normalizePathEncoding (input) {
20595
+ let output = '';
20596
+
20597
+ for (let i = 0; i < input.length; i++) {
20598
+ if (input[i] === '%' && i + 2 < input.length) {
20599
+ const hex = input.slice(i + 1, i + 3);
20600
+ if (isHexPair(hex)) {
20601
+ const normalizedHex = hex.toUpperCase();
20602
+ const decoded = String.fromCharCode(parseInt(normalizedHex, 16));
20603
+
20604
+ if (decoded !== '.' && isUnreserved(decoded)) {
20605
+ output += decoded;
20606
+ } else {
20607
+ output += '%' + normalizedHex;
20608
+ }
20609
+
20610
+ i += 2;
20611
+ continue
20612
+ }
20613
+ }
20614
+
20615
+ if (isPathCharacter(input[i])) {
20616
+ output += input[i];
20617
+ } else {
20618
+ output += escape(input[i]);
20619
+ }
20536
20620
  }
20537
- if (component.fragment !== undefined) {
20538
- component.fragment = func(component.fragment);
20621
+
20622
+ return output
20623
+ }
20624
+
20625
+ /**
20626
+ * Escapes a component while preserving existing valid percent escapes.
20627
+ *
20628
+ * @param {string} input
20629
+ * @returns {string}
20630
+ */
20631
+ function escapePreservingEscapes (input) {
20632
+ let output = '';
20633
+
20634
+ for (let i = 0; i < input.length; i++) {
20635
+ if (input[i] === '%' && i + 2 < input.length) {
20636
+ const hex = input.slice(i + 1, i + 3);
20637
+ if (isHexPair(hex)) {
20638
+ output += '%' + hex.toUpperCase();
20639
+ i += 2;
20640
+ continue
20641
+ }
20642
+ }
20643
+
20644
+ output += escape(input[i]);
20539
20645
  }
20540
- return component
20646
+
20647
+ return output
20541
20648
  }
20542
20649
 
20543
20650
  /**
@@ -20559,7 +20666,7 @@ function requireUtils () {
20559
20666
  if (ipV6res.isIPV6 === true) {
20560
20667
  host = `[${ipV6res.escapedHost}]`;
20561
20668
  } else {
20562
- host = component.host;
20669
+ host = reescapeHostDelimiters(host, false);
20563
20670
  }
20564
20671
  }
20565
20672
  uriTokens.push(host);
@@ -20575,7 +20682,10 @@ function requireUtils () {
20575
20682
  utils = {
20576
20683
  nonSimpleDomain,
20577
20684
  recomposeAuthority,
20578
- normalizeComponentEncoding,
20685
+ reescapeHostDelimiters,
20686
+ normalizePercentEncoding,
20687
+ normalizePathEncoding,
20688
+ escapePreservingEscapes,
20579
20689
  removeDotSegments,
20580
20690
  isIPv4,
20581
20691
  isUUID,
@@ -20866,7 +20976,7 @@ function requireFastUri () {
20866
20976
  if (hasRequiredFastUri) return fastUri.exports;
20867
20977
  hasRequiredFastUri = 1;
20868
20978
 
20869
- const { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = requireUtils();
20979
+ const { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, escapePreservingEscapes, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = requireUtils();
20870
20980
  const { SCHEMES, getSchemeHandler } = requireSchemes();
20871
20981
 
20872
20982
  /**
@@ -20877,7 +20987,7 @@ function requireFastUri () {
20877
20987
  */
20878
20988
  function normalize (uri, options) {
20879
20989
  if (typeof uri === 'string') {
20880
- uri = /** @type {T} */ (serialize(parse(uri, options), options));
20990
+ uri = /** @type {T} */ (normalizeString(uri, options));
20881
20991
  } else if (typeof uri === 'object') {
20882
20992
  uri = /** @type {T} */ (parse(serialize(uri, options), options));
20883
20993
  }
@@ -20972,21 +21082,10 @@ function requireFastUri () {
20972
21082
  * @returns {boolean}
20973
21083
  */
20974
21084
  function equal (uriA, uriB, options) {
20975
- if (typeof uriA === 'string') {
20976
- uriA = unescape(uriA);
20977
- uriA = serialize(normalizeComponentEncoding(parse(uriA, options), true), { ...options, skipEscape: true });
20978
- } else if (typeof uriA === 'object') {
20979
- uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true });
20980
- }
20981
-
20982
- if (typeof uriB === 'string') {
20983
- uriB = unescape(uriB);
20984
- uriB = serialize(normalizeComponentEncoding(parse(uriB, options), true), { ...options, skipEscape: true });
20985
- } else if (typeof uriB === 'object') {
20986
- uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true });
20987
- }
21085
+ const normalizedA = normalizeComparableURI(uriA, options);
21086
+ const normalizedB = normalizeComparableURI(uriB, options);
20988
21087
 
20989
- return uriA.toLowerCase() === uriB.toLowerCase()
21088
+ return normalizedA !== undefined && normalizedB !== undefined && normalizedA.toLowerCase() === normalizedB.toLowerCase()
20990
21089
  }
20991
21090
 
20992
21091
  /**
@@ -21022,13 +21121,13 @@ function requireFastUri () {
21022
21121
 
21023
21122
  if (component.path !== undefined) {
21024
21123
  if (!options.skipEscape) {
21025
- component.path = escape(component.path);
21124
+ component.path = escapePreservingEscapes(component.path);
21026
21125
 
21027
21126
  if (component.scheme !== undefined) {
21028
21127
  component.path = component.path.split('%3A').join(':');
21029
21128
  }
21030
21129
  } else {
21031
- component.path = unescape(component.path);
21130
+ component.path = normalizePercentEncoding(component.path);
21032
21131
  }
21033
21132
  }
21034
21133
 
@@ -21079,12 +21178,29 @@ function requireFastUri () {
21079
21178
 
21080
21179
  const URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;
21081
21180
 
21181
+ /**
21182
+ * @param {import('./types/index').URIComponent} parsed
21183
+ * @param {RegExpMatchArray} matches
21184
+ * @returns {string|undefined}
21185
+ */
21186
+ function getParseError (parsed, matches) {
21187
+ if (matches[2] !== undefined && parsed.path && parsed.path[0] !== '/') {
21188
+ return 'URI path must start with "/" when authority is present.'
21189
+ }
21190
+
21191
+ if (typeof parsed.port === 'number' && (parsed.port < 0 || parsed.port > 65535)) {
21192
+ return 'URI port is malformed.'
21193
+ }
21194
+
21195
+ return undefined
21196
+ }
21197
+
21082
21198
  /**
21083
21199
  * @param {string} uri
21084
21200
  * @param {import('./types/index').Options} [opts]
21085
- * @returns
21201
+ * @returns {{ parsed: import('./types/index').URIComponent, malformedAuthorityOrPort: boolean }}
21086
21202
  */
21087
- function parse (uri, opts) {
21203
+ function parseWithStatus (uri, opts) {
21088
21204
  const options = Object.assign({}, opts);
21089
21205
  /** @type {import('./types/index').URIComponent} */
21090
21206
  const parsed = {
@@ -21097,6 +21213,8 @@ function requireFastUri () {
21097
21213
  fragment: undefined
21098
21214
  };
21099
21215
 
21216
+ let malformedAuthorityOrPort = false;
21217
+
21100
21218
  let isIP = false;
21101
21219
  if (options.reference === 'suffix') {
21102
21220
  if (options.scheme) {
@@ -21122,6 +21240,13 @@ function requireFastUri () {
21122
21240
  if (isNaN(parsed.port)) {
21123
21241
  parsed.port = matches[5];
21124
21242
  }
21243
+
21244
+ const parseError = getParseError(parsed, matches);
21245
+ if (parseError !== undefined) {
21246
+ parsed.error = parsed.error || parseError;
21247
+ malformedAuthorityOrPort = true;
21248
+ }
21249
+
21125
21250
  if (parsed.host) {
21126
21251
  const ipv4result = isIPv4(parsed.host);
21127
21252
  if (ipv4result === false) {
@@ -21170,14 +21295,18 @@ function requireFastUri () {
21170
21295
  parsed.scheme = unescape(parsed.scheme);
21171
21296
  }
21172
21297
  if (parsed.host !== undefined) {
21173
- parsed.host = unescape(parsed.host);
21298
+ parsed.host = reescapeHostDelimiters(unescape(parsed.host), isIP);
21174
21299
  }
21175
21300
  }
21176
21301
  if (parsed.path) {
21177
- parsed.path = escape(unescape(parsed.path));
21302
+ parsed.path = normalizePathEncoding(parsed.path);
21178
21303
  }
21179
21304
  if (parsed.fragment) {
21180
- parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment));
21305
+ try {
21306
+ parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment));
21307
+ } catch {
21308
+ parsed.error = parsed.error || 'URI malformed';
21309
+ }
21181
21310
  }
21182
21311
  }
21183
21312
 
@@ -21188,7 +21317,54 @@ function requireFastUri () {
21188
21317
  } else {
21189
21318
  parsed.error = parsed.error || 'URI can not be parsed.';
21190
21319
  }
21191
- return parsed
21320
+ return { parsed, malformedAuthorityOrPort }
21321
+ }
21322
+
21323
+ /**
21324
+ * @param {string} uri
21325
+ * @param {import('./types/index').Options} [opts]
21326
+ * @returns
21327
+ */
21328
+ function parse (uri, opts) {
21329
+ return parseWithStatus(uri, opts).parsed
21330
+ }
21331
+
21332
+ /**
21333
+ * @param {string} uri
21334
+ * @param {import('./types/index').Options} [opts]
21335
+ * @returns {string}
21336
+ */
21337
+ function normalizeString (uri, opts) {
21338
+ return normalizeStringWithStatus(uri, opts).normalized
21339
+ }
21340
+
21341
+ /**
21342
+ * @param {string} uri
21343
+ * @param {import('./types/index').Options} [opts]
21344
+ * @returns {{ normalized: string, malformedAuthorityOrPort: boolean }}
21345
+ */
21346
+ function normalizeStringWithStatus (uri, opts) {
21347
+ const { parsed, malformedAuthorityOrPort } = parseWithStatus(uri, opts);
21348
+ return {
21349
+ normalized: malformedAuthorityOrPort ? uri : serialize(parsed, opts),
21350
+ malformedAuthorityOrPort
21351
+ }
21352
+ }
21353
+
21354
+ /**
21355
+ * @param {import ('./types/index').URIComponent|string} uri
21356
+ * @param {import('./types/index').Options} [opts]
21357
+ * @returns {string|undefined}
21358
+ */
21359
+ function normalizeComparableURI (uri, opts) {
21360
+ if (typeof uri === 'string') {
21361
+ const { normalized, malformedAuthorityOrPort } = normalizeStringWithStatus(uri, opts);
21362
+ return malformedAuthorityOrPort ? undefined : normalized
21363
+ }
21364
+
21365
+ if (typeof uri === 'object') {
21366
+ return serialize(uri, opts)
21367
+ }
21192
21368
  }
21193
21369
 
21194
21370
  const fastUri$1 = {
@@ -26930,7 +27106,7 @@ function getCustomRenderComponent(render, registry) {
26930
27106
  if (isString(customRenderer)) {
26931
27107
  customRenderer = lookupFromFormContext(registry, customRenderer);
26932
27108
  }
26933
- if (eq.isFunction(customRenderer)) {
27109
+ if (isFunction.isFunction(customRenderer)) {
26934
27110
  return customRenderer;
26935
27111
  }
26936
27112
  return null;