@watermarkinsights/ripple 5.19.0-alpha.9 → 5.19.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/dist/cjs/{app-globals-105475f9.js → app-globals-9dcc4582.js} +1 -1
  2. package/dist/cjs/loader.cjs.js +2 -2
  3. package/dist/cjs/priv-option-list.cjs.entry.js +2 -4
  4. package/dist/cjs/ripple.cjs.js +2 -2
  5. package/dist/cjs/wm-file.cjs.entry.js +1 -1
  6. package/dist/cjs/wm-option_2.cjs.entry.js +186 -95
  7. package/dist/cjs/wm-snackbar.cjs.entry.js +12 -16
  8. package/dist/cjs/wm-tag-input.cjs.entry.js +20 -11
  9. package/dist/cjs/wm-textarea.cjs.entry.js +1 -1
  10. package/dist/cjs/wm-timepicker.cjs.entry.js +2 -2
  11. package/dist/cjs/wm-toggletip.cjs.entry.js +3 -3
  12. package/dist/cjs/wm-uploader.cjs.entry.js +16 -12
  13. package/dist/collection/components/datepickers/datepicker.css +0 -31
  14. package/dist/collection/components/selects/priv-option-list/priv-option-list.js +2 -4
  15. package/dist/collection/components/selects/wm-select/wm-select.css +75 -51
  16. package/dist/collection/components/selects/wm-select/wm-select.js +197 -110
  17. package/dist/collection/components/wm-file/wm-file.css +3 -2
  18. package/dist/collection/components/wm-menuitem/wm-menuitem.css +0 -31
  19. package/dist/collection/components/wm-navigator/priv-navigator-button/priv-navigator-button.css +0 -31
  20. package/dist/collection/components/wm-pagination/wm-pagination.css +0 -31
  21. package/dist/collection/components/wm-search/wm-search.css +0 -31
  22. package/dist/collection/components/wm-snackbar/wm-snackbar.css +0 -31
  23. package/dist/collection/components/wm-snackbar/wm-snackbar.js +12 -16
  24. package/dist/collection/components/wm-tag-input/wm-tag-input.css +9 -8
  25. package/dist/collection/components/wm-tag-input/wm-tag-input.js +19 -10
  26. package/dist/collection/components/wm-textarea/wm-textarea.js +1 -1
  27. package/dist/collection/components/wm-timepicker/wm-timepicker.css +0 -31
  28. package/dist/collection/components/wm-timepicker/wm-timepicker.js +2 -2
  29. package/dist/collection/components/wm-toggletip/wm-toggletip.js +3 -3
  30. package/dist/collection/components/wm-uploader/wm-uploader.css +2 -33
  31. package/dist/collection/components/wm-uploader/wm-uploader.js +15 -11
  32. package/dist/collection/dev/uploader.js +4 -4
  33. package/dist/esm/{app-globals-d5f43c8e.js → app-globals-ef63936e.js} +1 -1
  34. package/dist/esm/{chartFunctions-3a54f8ac.js → chartFunctions-613e9c87.js} +1 -1
  35. package/dist/esm/{functions-669184a6.js → functions-38e392cb.js} +1 -1
  36. package/dist/esm/{intl-7906e2d7.js → intl-0b8f342e.js} +1 -1
  37. package/dist/esm/loader.js +2 -2
  38. package/dist/esm/polyfills/core-js.js +0 -0
  39. package/dist/esm/polyfills/dom.js +0 -0
  40. package/dist/esm/polyfills/es5-html-element.js +0 -0
  41. package/dist/esm/polyfills/index.js +0 -0
  42. package/dist/esm/polyfills/system.js +0 -0
  43. package/dist/esm/priv-calendar.entry.js +1 -1
  44. package/dist/esm/priv-chart-popover.entry.js +1 -1
  45. package/dist/esm/priv-option-list.entry.js +4 -6
  46. package/dist/esm/ripple.js +2 -2
  47. package/dist/esm/wm-action-menu_2.entry.js +1 -1
  48. package/dist/esm/wm-button.entry.js +1 -1
  49. package/dist/esm/wm-chart.entry.js +3 -3
  50. package/dist/esm/wm-date-range.entry.js +1 -1
  51. package/dist/esm/wm-datepicker.entry.js +1 -1
  52. package/dist/esm/wm-file.entry.js +2 -2
  53. package/dist/esm/wm-flyout.entry.js +2 -2
  54. package/dist/esm/wm-input.entry.js +2 -2
  55. package/dist/esm/wm-line-chart.entry.js +3 -3
  56. package/dist/esm/wm-modal-pss_3.entry.js +2 -2
  57. package/dist/esm/wm-modal_3.entry.js +2 -2
  58. package/dist/esm/wm-navigation_3.entry.js +2 -2
  59. package/dist/esm/wm-navigator.entry.js +1 -1
  60. package/dist/esm/wm-nested-select.entry.js +2 -2
  61. package/dist/esm/wm-optgroup.entry.js +1 -1
  62. package/dist/esm/wm-option_2.entry.js +188 -97
  63. package/dist/esm/wm-pagination.entry.js +2 -2
  64. package/dist/esm/wm-progress-indicator_3.entry.js +2 -2
  65. package/dist/esm/wm-search.entry.js +2 -2
  66. package/dist/esm/wm-snackbar.entry.js +14 -18
  67. package/dist/esm/wm-tab-item_3.entry.js +1 -1
  68. package/dist/esm/wm-tag-input.entry.js +22 -13
  69. package/dist/esm/wm-tag-option.entry.js +1 -1
  70. package/dist/esm/wm-textarea.entry.js +3 -3
  71. package/dist/esm/wm-timepicker.entry.js +3 -3
  72. package/dist/esm/wm-toggletip.entry.js +4 -4
  73. package/dist/esm/wm-uploader.entry.js +18 -14
  74. package/dist/esm-es5/{app-globals-d5f43c8e.js → app-globals-ef63936e.js} +1 -1
  75. package/dist/esm-es5/{chartFunctions-3a54f8ac.js → chartFunctions-613e9c87.js} +1 -1
  76. package/dist/esm-es5/{functions-669184a6.js → functions-38e392cb.js} +1 -1
  77. package/dist/esm-es5/{intl-7906e2d7.js → intl-0b8f342e.js} +1 -1
  78. package/dist/esm-es5/loader.js +1 -1
  79. package/dist/esm-es5/priv-calendar.entry.js +1 -1
  80. package/dist/esm-es5/priv-chart-popover.entry.js +1 -1
  81. package/dist/esm-es5/priv-option-list.entry.js +1 -1
  82. package/dist/esm-es5/ripple.js +1 -1
  83. package/dist/esm-es5/wm-action-menu_2.entry.js +1 -1
  84. package/dist/esm-es5/wm-button.entry.js +1 -1
  85. package/dist/esm-es5/wm-chart.entry.js +1 -1
  86. package/dist/esm-es5/wm-date-range.entry.js +1 -1
  87. package/dist/esm-es5/wm-datepicker.entry.js +1 -1
  88. package/dist/esm-es5/wm-file.entry.js +1 -1
  89. package/dist/esm-es5/wm-flyout.entry.js +1 -1
  90. package/dist/esm-es5/wm-input.entry.js +1 -1
  91. package/dist/esm-es5/wm-line-chart.entry.js +1 -1
  92. package/dist/esm-es5/wm-modal-pss_3.entry.js +1 -1
  93. package/dist/esm-es5/wm-modal_3.entry.js +1 -1
  94. package/dist/esm-es5/wm-navigation_3.entry.js +1 -1
  95. package/dist/esm-es5/wm-navigator.entry.js +1 -1
  96. package/dist/esm-es5/wm-nested-select.entry.js +1 -1
  97. package/dist/esm-es5/wm-optgroup.entry.js +1 -1
  98. package/dist/esm-es5/wm-option_2.entry.js +1 -1
  99. package/dist/esm-es5/wm-pagination.entry.js +1 -1
  100. package/dist/esm-es5/wm-progress-indicator_3.entry.js +1 -1
  101. package/dist/esm-es5/wm-search.entry.js +1 -1
  102. package/dist/esm-es5/wm-snackbar.entry.js +1 -1
  103. package/dist/esm-es5/wm-tab-item_3.entry.js +1 -1
  104. package/dist/esm-es5/wm-tag-input.entry.js +1 -1
  105. package/dist/esm-es5/wm-tag-option.entry.js +1 -1
  106. package/dist/esm-es5/wm-textarea.entry.js +1 -1
  107. package/dist/esm-es5/wm-timepicker.entry.js +1 -1
  108. package/dist/esm-es5/wm-toggletip.entry.js +1 -1
  109. package/dist/esm-es5/wm-uploader.entry.js +1 -1
  110. package/dist/ripple/{p-6d32911c.system.entry.js → p-00eaa361.system.entry.js} +1 -1
  111. package/dist/ripple/{p-c85dae6b.entry.js → p-0825151e.entry.js} +1 -1
  112. package/dist/ripple/{p-7a21aa55.entry.js → p-0a46b050.entry.js} +1 -1
  113. package/dist/ripple/{p-c70fa14f.entry.js → p-0bce3f83.entry.js} +1 -1
  114. package/dist/ripple/{p-69b38da5.entry.js → p-118093e1.entry.js} +1 -1
  115. package/dist/ripple/p-12b27fa7.entry.js +1 -0
  116. package/dist/ripple/{p-1eb2ec31.system.entry.js → p-1de87de8.system.entry.js} +1 -1
  117. package/dist/ripple/{p-ec9f782e.entry.js → p-26667070.entry.js} +1 -1
  118. package/dist/ripple/{p-55cdfcb4.system.entry.js → p-2b7259cb.system.entry.js} +1 -1
  119. package/dist/ripple/{p-ff6b7376.system.entry.js → p-2db6573e.system.entry.js} +1 -1
  120. package/dist/ripple/{p-4175c4b0.system.entry.js → p-2f82bfb9.system.entry.js} +1 -1
  121. package/dist/ripple/{p-6bf103b8.system.entry.js → p-303bf140.system.entry.js} +1 -1
  122. package/dist/ripple/{p-1efa25b5.system.entry.js → p-3133ce3c.system.entry.js} +1 -1
  123. package/dist/ripple/{p-9ac6957b.entry.js → p-31bac55d.entry.js} +1 -1
  124. package/dist/ripple/{p-57f9c7c3.entry.js → p-35d93c19.entry.js} +1 -1
  125. package/dist/ripple/p-374f46f4.entry.js +1 -0
  126. package/dist/ripple/{p-21c100d8.entry.js → p-39a4934f.entry.js} +1 -1
  127. package/dist/ripple/{p-2f10c1fa.system.entry.js → p-3d8754ba.system.entry.js} +1 -1
  128. package/dist/ripple/{p-92fe0ea4.entry.js → p-41664372.entry.js} +1 -1
  129. package/dist/ripple/{p-c8dfc321.system.entry.js → p-44cc05f6.system.entry.js} +1 -1
  130. package/dist/ripple/{p-c73882de.system.entry.js → p-4602304a.system.entry.js} +1 -1
  131. package/dist/ripple/{p-bb364d6b.entry.js → p-4b8f7d1e.entry.js} +1 -1
  132. package/dist/ripple/{p-b55883ee.entry.js → p-4d0abf7a.entry.js} +1 -1
  133. package/dist/ripple/{p-26ab5004.system.entry.js → p-5405df80.system.entry.js} +1 -1
  134. package/dist/ripple/{p-88a7ccee.system.js → p-608971f2.system.js} +1 -1
  135. package/dist/ripple/{p-6ec4129b.entry.js → p-60e16c79.entry.js} +1 -1
  136. package/dist/ripple/{p-561d1898.system.entry.js → p-63233a4b.system.entry.js} +1 -1
  137. package/dist/ripple/{p-95f19440.system.js → p-65abcbb4.system.js} +1 -1
  138. package/dist/ripple/{p-65d3f9c4.system.entry.js → p-667fdcbb.system.entry.js} +1 -1
  139. package/dist/ripple/{p-68e90b50.system.entry.js → p-6a70dc0b.system.entry.js} +1 -1
  140. package/dist/ripple/p-6f1a160e.system.entry.js +1 -0
  141. package/dist/ripple/p-6f38976c.entry.js +1 -0
  142. package/dist/ripple/p-700ca4a0.entry.js +1 -0
  143. package/dist/ripple/{p-7394f4e9.system.entry.js → p-7134a305.system.entry.js} +1 -1
  144. package/dist/ripple/{p-047e510d.entry.js → p-7c3bf608.entry.js} +1 -1
  145. package/dist/ripple/{p-176dcfc0.system.js → p-7edd25f7.system.js} +1 -1
  146. package/dist/ripple/{p-350f9314.system.entry.js → p-85830dbc.system.entry.js} +1 -1
  147. package/dist/ripple/{p-ebfa5876.entry.js → p-86a61a2a.entry.js} +1 -1
  148. package/dist/ripple/{p-009a6e5a.entry.js → p-8e2f3a45.entry.js} +1 -1
  149. package/dist/ripple/{p-a0ef456d.entry.js → p-8ec6ec53.entry.js} +1 -1
  150. package/dist/ripple/{p-71cc21a4.entry.js → p-908057b2.entry.js} +1 -1
  151. package/dist/ripple/{p-dbc3a44d.entry.js → p-9202d9e9.entry.js} +1 -1
  152. package/dist/ripple/{p-0ae9b6d3.js → p-92c8361f.js} +1 -1
  153. package/dist/ripple/p-957f13fb.entry.js +1 -0
  154. package/dist/ripple/{p-1ad6c15b.entry.js → p-9609d8e7.entry.js} +1 -1
  155. package/dist/ripple/{p-3c9972a6.system.entry.js → p-960d2cf0.system.entry.js} +1 -1
  156. package/dist/ripple/{p-22d4c7e0.system.entry.js → p-96f86eb4.system.entry.js} +1 -1
  157. package/dist/ripple/{p-ea10c498.entry.js → p-9e89655f.entry.js} +1 -1
  158. package/dist/ripple/{p-3fa83eda.js → p-a112a9da.js} +1 -1
  159. package/dist/ripple/{p-daac445c.system.entry.js → p-a14dee02.system.entry.js} +1 -1
  160. package/dist/ripple/{p-222624ae.entry.js → p-a5c5c64c.entry.js} +1 -1
  161. package/dist/ripple/{p-dfa30c3d.entry.js → p-a7cde3fc.entry.js} +1 -1
  162. package/dist/ripple/{p-acb4d87c.system.entry.js → p-abcdd7be.system.entry.js} +1 -1
  163. package/dist/ripple/p-aebbb74c.system.js +1 -0
  164. package/dist/ripple/{p-6a40014e.system.entry.js → p-b1fb99e4.system.entry.js} +1 -1
  165. package/dist/ripple/{p-91669f66.js → p-b511ebfd.js} +1 -1
  166. package/dist/ripple/{p-93b6ba69.system.entry.js → p-bde7e77b.system.entry.js} +1 -1
  167. package/dist/ripple/{p-95ce8c39.entry.js → p-be87d02c.entry.js} +1 -1
  168. package/dist/ripple/{p-3c958668.system.js → p-bebc63bb.system.js} +1 -1
  169. package/dist/ripple/{p-c0f4f1ea.system.entry.js → p-c7f3ef7f.system.entry.js} +1 -1
  170. package/dist/ripple/{p-a6f4dd01.system.entry.js → p-ce9bb8ac.system.entry.js} +1 -1
  171. package/dist/ripple/{p-1806e50b.js → p-d815809f.js} +1 -1
  172. package/dist/ripple/{p-fb61a10e.system.entry.js → p-e5c34af5.system.entry.js} +1 -1
  173. package/dist/ripple/{p-e1a15515.system.entry.js → p-e660d0b8.system.entry.js} +1 -1
  174. package/dist/ripple/{p-66489ded.entry.js → p-ecd1c2ba.entry.js} +1 -1
  175. package/dist/ripple/{p-5bf2eb50.system.entry.js → p-f4390a0a.system.entry.js} +1 -1
  176. package/dist/ripple/{p-ae2520e4.entry.js → p-f91fc18d.entry.js} +1 -1
  177. package/dist/ripple/{p-1841c319.system.entry.js → p-f9bbb123.system.entry.js} +1 -1
  178. package/dist/ripple/{p-25c17efe.system.entry.js → p-fbad04d7.system.entry.js} +1 -1
  179. package/dist/ripple/ripple.esm.js +1 -1
  180. package/dist/ripple/ripple.js +1 -1
  181. package/dist/types/components/selects/wm-select/wm-select.d.ts +17 -9
  182. package/dist/types/components/wm-tag-input/wm-tag-input.d.ts +3 -1
  183. package/package.json +2 -2
  184. package/dist/ripple/p-03759d86.system.entry.js +0 -1
  185. package/dist/ripple/p-368f2fe0.system.js +0 -1
  186. package/dist/ripple/p-8e694216.entry.js +0 -1
  187. package/dist/ripple/p-9e1ea6e2.entry.js +0 -1
  188. package/dist/ripple/p-a578f968.entry.js +0 -1
  189. package/dist/ripple/p-b40454d2.entry.js +0 -1
  190. package/dist/ripple/p-bb745e54.entry.js +0 -1
@@ -1,14 +1,34 @@
1
1
  import { h, Host } from "@stencil/core";
2
2
  import { forceUpdate } from "@stencil/core";
3
- import { getTextDir, shouldOpenUp, isElOrChild, toBool, handleDisabledAttribute, showTooltip, hideTooltip } from "../../../global/functions";
3
+ import { getTextDir, toBool, handleDisabledAttribute, showTooltip, hideTooltip, debounce, findAllScrollableParents, } from "../../../global/functions";
4
4
  import { globalMessages, selectMessages } from "../../../global/intl";
5
5
  export class Select {
6
6
  constructor() {
7
- this.openUp = false;
7
+ this.scrollableParents = [];
8
+ this.returnFocus = false;
9
+ this.hasAnchor = CSS.supports("top", "anchor(bottom)"); // for FF polyfill
8
10
  //////////////////////////////////////
9
11
  // for multiselect button text
10
12
  this.overflowCount = 0;
11
13
  this.displayedOptions = [];
14
+ this.previousDisplayedOptions = [];
15
+ this.debouncedScroll = debounce(() => {
16
+ if (this.hasAnchor) {
17
+ const popoverRect = this.dropdownEl.getBoundingClientRect();
18
+ const anchorRect = this.buttonEl.getBoundingClientRect();
19
+ // Heuristic: Popover is ABOVE the anchor (it opened upwards)
20
+ this.isUp = popoverRect.bottom < anchorRect.top;
21
+ this.isExpanded = true;
22
+ this.optionListEl.handleInitialFocus(this.elToFocus);
23
+ this.elToFocus = undefined;
24
+ }
25
+ else {
26
+ this.dropdownPosition();
27
+ }
28
+ }, 100);
29
+ this.debouncedResize = debounce(() => {
30
+ this.dropdownPosition();
31
+ }, 100);
12
32
  this.disabled = false;
13
33
  this.maxHeight = "200px";
14
34
  this.label = undefined;
@@ -22,6 +42,8 @@ export class Select {
22
42
  this.searchPlaceholder = selectMessages.searchPlaceholder;
23
43
  this.allSelectedMessage = selectMessages.allSelected;
24
44
  this.isExpanded = false;
45
+ this.isUp = false;
46
+ this.isHidden = false;
25
47
  this.announcement = "";
26
48
  }
27
49
  get childOptions() {
@@ -40,58 +62,149 @@ export class Select {
40
62
  //////////////////////////////////////
41
63
  handleOptionSelection() {
42
64
  if (!this.multiple) {
43
- this.close();
65
+ this.returnFocus = true;
66
+ this.dropdownEl.hidePopover();
44
67
  }
45
68
  }
46
69
  handleChildEnter() {
47
70
  // only occurs for multiselects. handle the click, then close
48
- this.close();
49
- }
50
- closePopupOnEscape() {
51
- this.close();
52
- }
53
- handleOptionBlur(ev) {
54
- // if the Option is blurred to something other than the component emit a blur event with the appropriate relatedTarget
55
- // keeps our component's blur events accurate, and closes when focusing browser address bar
56
- if (!isElOrChild(this.el, ev.detail.relatedTarget)) {
57
- const event = new CustomEvent("blur");
58
- // @ts-ignore
59
- event.relatedTarget = ev.detail.relatedTarget;
60
- this.el.dispatchEvent(event);
71
+ this.returnFocus = true;
72
+ this.dropdownEl.hidePopover();
73
+ }
74
+ closeDropdownOnEscape() {
75
+ this.returnFocus = true;
76
+ this.dropdownEl.hidePopover();
77
+ }
78
+ handleBeforeToggle() {
79
+ if (!this.hasAnchor) {
80
+ // Start hidden to prevent flash during positioning calculation
81
+ this.isHidden = true;
82
+ }
83
+ }
84
+ handleToggle(ev) {
85
+ ev.newState === "open" ? this.open() : this.close();
86
+ }
87
+ dropdownPosition() {
88
+ // polyfill for opening up or down + positioning according to screen
89
+ // (must recalculate on scroll, resize)
90
+ // Using transform for better performance - only affects composite layer, no layout recalculation
91
+ const buttonElRect = this.buttonEl.getBoundingClientRect();
92
+ const spaceAbove = buttonElRect.top;
93
+ const spaceBelow = document.documentElement.clientHeight - buttonElRect.bottom;
94
+ const dropdownHeight = this.dropdownEl.clientHeight;
95
+ // Clear any previously set positioning properties
96
+ this.el.style.removeProperty("--dropdown-translate-y");
97
+ this.el.style.removeProperty("--dropdown-max-height");
98
+ this.el.style.removeProperty("--dropdown-left");
99
+ // Set horizontal position and width to match button
100
+ this.el.style.setProperty("--dropdown-left", buttonElRect.left + "px");
101
+ this.el.style.setProperty("--button-width", buttonElRect.width + "px");
102
+ if (dropdownHeight <= spaceBelow) {
103
+ // Case 1: Enough space below - position dropdown below the button
104
+ this.el.style.setProperty("--dropdown-translate-y", buttonElRect.bottom + "px");
105
+ }
106
+ else if (dropdownHeight <= spaceAbove) {
107
+ // Case 2: Not enough space below, but enough above - position dropdown above the button
108
+ this.el.style.setProperty("--dropdown-translate-y", buttonElRect.top - dropdownHeight + "px");
109
+ }
110
+ else {
111
+ // Case 3: Not enough space in either direction - use the larger available space and constrain height
112
+ if (spaceBelow >= spaceAbove) {
113
+ // Use space below and constrain dropdown height
114
+ this.el.style.setProperty("--dropdown-translate-y", buttonElRect.bottom + "px");
115
+ this.el.style.setProperty("--dropdown-max-height", spaceBelow + "px");
116
+ }
117
+ else {
118
+ // Use space above and constrain dropdown height
119
+ this.el.style.setProperty("--dropdown-translate-y", "0px");
120
+ this.el.style.setProperty("--dropdown-max-height", spaceAbove + "px");
121
+ }
61
122
  }
123
+ this.isHidden = false;
62
124
  }
63
- handleClick(ev) {
64
- if (!isElOrChild(this.el, ev.target)) {
65
- this.close();
125
+ open() {
126
+ if (!this.isExpanded && !this.isDisabled) {
127
+ // polyfill for browsers without anchor() support (FF)
128
+ if (!this.hasAnchor) {
129
+ this.dropdownPosition();
130
+ }
131
+ requestAnimationFrame(() => {
132
+ const popoverRect = this.dropdownEl.getBoundingClientRect();
133
+ const anchorRect = this.buttonEl.getBoundingClientRect();
134
+ // Heuristic: Popover is ABOVE the anchor (it opened upwards)
135
+ this.isUp = popoverRect.top < anchorRect.top;
136
+ this.isExpanded = true;
137
+ this.optionListEl.handleInitialFocus(this.elToFocus);
138
+ this.elToFocus = undefined;
139
+ });
66
140
  }
67
141
  }
68
- handleButtonBlur(ev) {
69
- if (isElOrChild(this.el, ev.relatedTarget)) {
70
- // do not emit a blur event when opening the dropdown and focusing the Options
71
- ev.stopPropagation();
142
+ close() {
143
+ if (this.isExpanded) {
144
+ this.isExpanded = false;
145
+ this.optionListEl.unfocusAll();
146
+ window.setTimeout(() => {
147
+ if (!this.hasAnchor) {
148
+ this.isHidden = true;
149
+ }
150
+ if (this.optionListEl.multiple) {
151
+ this.optionListEl.updateOptionVisibility();
152
+ }
153
+ // clear search field, reset filtered / bolded state of wm-options
154
+ if (this.search) {
155
+ this.optionListEl.clearSearch();
156
+ }
157
+ }, 150);
158
+ if (this.returnFocus) {
159
+ requestAnimationFrame(() => {
160
+ this.buttonEl.focus();
161
+ this.returnFocus = false;
162
+ });
163
+ }
72
164
  }
73
165
  }
74
166
  handleKey(ev) {
75
167
  switch (ev.key) {
76
168
  case "Tab":
77
169
  // if tabbing backwards, close and return focus to button. Otherwise, close but do not redirect focus.
78
- this.close(ev.shiftKey ? true : false);
170
+ if (this.isExpanded && ev.shiftKey) {
171
+ this.returnFocus = true;
172
+ }
173
+ this.dropdownEl.hidePopover();
79
174
  break;
80
175
  case "ArrowDown":
81
176
  if (this.isExpanded === false) {
82
177
  ev.preventDefault();
83
- this.open("next");
178
+ this.elToFocus = "next";
179
+ this.dropdownEl.showPopover();
84
180
  }
85
181
  break;
86
182
  case "ArrowUp":
87
183
  if (this.isExpanded === false) {
88
184
  ev.preventDefault();
89
- this.open("previous");
185
+ this.elToFocus = "previous";
186
+ this.dropdownEl.showPopover();
90
187
  }
91
188
  break;
92
189
  }
93
190
  }
191
+ handleResize() {
192
+ if (!this.hasAnchor && this.isExpanded) {
193
+ this.isHidden = true;
194
+ this.debouncedResize();
195
+ }
196
+ }
197
+ handleScroll() {
198
+ if (this.isExpanded) {
199
+ this.isHidden = true;
200
+ this.debouncedScroll();
201
+ }
202
+ }
94
203
  componentWillLoad() {
204
+ if (!this.hasAnchor) {
205
+ // Start hidden to prevent flash on first load
206
+ this.isHidden = true;
207
+ }
95
208
  if (!this.label) {
96
209
  console.error("For accessibility purposes, this component requires a label (even if `label-position` is set to `none`).");
97
210
  }
@@ -108,8 +221,6 @@ export class Select {
108
221
  });
109
222
  }
110
223
  handleChildChange() {
111
- // on update of children or children selected state, reset button text and rerender
112
- this.setButtonText();
113
224
  forceUpdate(this.el);
114
225
  if (this.multiple) {
115
226
  // update state of clone options
@@ -118,43 +229,19 @@ export class Select {
118
229
  }
119
230
  componentDidLoad() {
120
231
  this.wmSelectDidLoad.emit();
121
- this.dropdownEl.classList.add("hidden");
122
- forceUpdate(this.el);
123
- this.setButtonText();
124
- }
125
- open(optionToSelect) {
126
- if (!this.isDisabled) {
127
- this.openUp = shouldOpenUp(this.el, this.dropdownEl.clientHeight, this.labelEl.clientHeight);
128
- this.isExpanded = true;
129
- this.dropdownEl.classList.add("open");
130
- this.dropdownEl.classList.remove("hidden");
131
- window.requestAnimationFrame(() => {
132
- this.optionListEl.handleInitialFocus(optionToSelect);
133
- });
134
- }
135
- }
136
- close(returnFocus = true) {
137
- if (this.isExpanded) {
138
- this.isExpanded = false;
139
- this.optionListEl.unfocusAll();
140
- this.dropdownEl.classList.remove("open");
141
- window.setTimeout(() => {
142
- this.dropdownEl.classList.add("hidden");
143
- if (this.optionListEl.multiple) {
144
- this.optionListEl.updateOptionVisibility();
232
+ if (!this.hasAnchor) {
233
+ this.scrollableParents = findAllScrollableParents(this.el);
234
+ // Add scroll listeners to all scrollable parents
235
+ this.scrollableParents.forEach((parent) => {
236
+ if (parent === document.documentElement) {
237
+ // For document element, listen to window scroll event
238
+ window.addEventListener("scroll", () => this.handleScroll());
145
239
  }
146
- // clear search field, reset filtered / bolded state of wm-options
147
- if (this.search) {
148
- this.optionListEl.clearSearch();
149
- }
150
- // Returns focus to button after popup closes (no need if user is tabbing)
151
- // Delay is necessary for screenreader to get new expanded state before focus
152
- // window.requestAnimationFrame is probably enough, but since we are already using setTimeout it may as well be here
153
- // also UX wise, it makes sense for the button to only be focused after the animation is complete
154
- if (returnFocus) {
155
- this.buttonEl.focus();
240
+ else {
241
+ // For regular elements, listen to their scroll event
242
+ parent.addEventListener("scroll", () => this.handleScroll());
156
243
  }
157
- }, 150);
244
+ });
158
245
  }
159
246
  }
160
247
  announceError() {
@@ -168,7 +255,6 @@ export class Select {
168
255
  handleComponentBlur(ev) {
169
256
  // Do not close or emit custom blur event when blurring to an element inside (wm-option)
170
257
  if (!this.el.contains(ev.relatedTarget)) {
171
- this.close(false);
172
258
  this.wmSelectBlurred.emit();
173
259
  }
174
260
  }
@@ -178,28 +264,6 @@ export class Select {
178
264
  showTooltip("right", ev.target, this.label);
179
265
  }
180
266
  }
181
- setButtonText() {
182
- this.displayedOptions = this.childOptions.filter((x) => x.selected);
183
- // handle overflow + counter for multiselect
184
- if (this.multiple) {
185
- // this is a fixed measurement accounting for the max width of a 3 character overflow counter
186
- const overflowCounterWidth = 38;
187
- const computedStyle = window.getComputedStyle(this.buttonEl);
188
- // there seems to be no quick way to get an elements width without padding, except for subtracting padding manually
189
- const paddingLeft = parseInt(computedStyle.getPropertyValue("padding-left").slice(0, -2));
190
- const paddingRight = parseInt(computedStyle.getPropertyValue("padding-right").slice(0, -2));
191
- const availableSpace = this.buttonEl.clientWidth - paddingLeft - paddingRight - overflowCounterWidth;
192
- this.overflowCount = 0;
193
- this.measurementAreaEl.textContent = this.displayedOptions.map((x) => x.textContent).join(", ");
194
- let optionsTotalWidth = this.measurementAreaEl.clientWidth;
195
- while (optionsTotalWidth > availableSpace && this.displayedOptions.length > 1) {
196
- this.overflowCount++;
197
- this.displayedOptions.pop();
198
- this.measurementAreaEl.textContent = this.displayedOptions.map((x) => x.textContent).join(", ");
199
- optionsTotalWidth = this.measurementAreaEl.clientWidth;
200
- }
201
- }
202
- }
203
267
  announce(message) {
204
268
  // \u00A0 is a non-breaking space character, which causes the message to be read as a new one
205
269
  if (this.liveRegionEl.textContent === message) {
@@ -208,6 +272,7 @@ export class Select {
208
272
  this.announcement = message;
209
273
  }
210
274
  renderButtonText() {
275
+ this.displayedOptions = this.childOptions.filter((x) => x.selected);
211
276
  if (this.multiple && this.displayedOptions.length < 1) {
212
277
  return h("span", null, this.placeholder);
213
278
  }
@@ -215,6 +280,28 @@ export class Select {
215
280
  return this.allSelectedMessage;
216
281
  }
217
282
  else {
283
+ // handle overflow + counter for multiselect
284
+ // only bother if things have changed
285
+ const hasChanged = this.displayedOptions !== this.previousDisplayedOptions;
286
+ if (this.multiple && hasChanged) {
287
+ // this is a fixed measurement accounting for the max width of a 3 character overflow counter
288
+ const overflowCounterWidth = 38;
289
+ const computedStyle = window.getComputedStyle(this.buttonEl);
290
+ // there seems to be no quick way to get an elements width without padding, except for subtracting padding manually
291
+ const paddingLeft = parseInt(computedStyle.getPropertyValue("padding-left").slice(0, -2));
292
+ const paddingRight = parseInt(computedStyle.getPropertyValue("padding-right").slice(0, -2));
293
+ const availableSpace = this.buttonEl.clientWidth - paddingLeft - paddingRight - overflowCounterWidth;
294
+ this.overflowCount = 0;
295
+ this.measurementAreaEl.textContent = this.displayedOptions.map((x) => x.textContent).join(", ");
296
+ let optionsTotalWidth = this.measurementAreaEl.clientWidth;
297
+ while (optionsTotalWidth > availableSpace && this.displayedOptions.length > 1) {
298
+ this.overflowCount++;
299
+ this.displayedOptions.pop();
300
+ this.measurementAreaEl.textContent = this.displayedOptions.map((x) => x.textContent).join(", ");
301
+ optionsTotalWidth = this.measurementAreaEl.clientWidth;
302
+ }
303
+ this.previousDisplayedOptions = this.displayedOptions;
304
+ }
218
305
  return this.displayedOptions.map((x, idx) => (h("span", null, idx > 0 ? ", " : "", x.textContent)));
219
306
  }
220
307
  }
@@ -225,18 +312,22 @@ export class Select {
225
312
  }
226
313
  render() {
227
314
  const showSubinfo = !this.multiple && this.selectedOptions.length > 0 && this.selectedOptions[0].subinfo;
228
- const buttonProps = {
229
- id: "selectbtn",
230
- ["disabled"]: this.isDisabled,
231
- ["aria-controls"]: "list",
232
- ["aria-labelledby"]: "label selectbtn",
233
- ["aria-describedby"]: "error",
234
- ["aria-expanded"]: this.isExpanded ? "true" : "false",
235
- onClick: () => (this.isExpanded ? this.close() : this.open()),
236
- };
237
- return (h(Host, { key: '27f57d30b836eac8dc27ae98a425015d86a0948b', onBlur: (ev) => this.handleComponentBlur(ev) }, h("div", { key: '8f48d8e8d616244350e61d6e81f350640131bbf0', class: `wrapper ${getTextDir()} label-${this.labelPosition} ${this.errorMessage ? "invalid" : ""}` }, h("div", { key: '39d3bcec9b67d671a6bdbb6a3ee738832189ea51', ref: (el) => (this.labelEl = el), class: "label-wrapper" }, h("label", { key: 'b0bb90a215ac20de94afa8dba56e839bdc590dc1', class: "label", id: "label", htmlFor: "selectbtn", onMouseEnter: (ev) => this.handleLabelMouseEnter(ev), onMouseLeave: () => hideTooltip() }, this.label),
315
+ return (h(Host, { key: 'f73046e3e0d19f90e1de9f6c104b186159e08551', onBlur: (ev) => this.handleComponentBlur(ev) }, h("div", { key: '78f69feb04ef0436bb3b7f0bdeb08c67c69aa025', class: `wrapper ${getTextDir()} label-${this.labelPosition} ${this.errorMessage ? "invalid" : ""}` }, h("div", { key: 'a3a54f3c4b01271bb472a2dcaeff653ae37191b8', class: "label-wrapper" }, h("label", { key: 'fac48d7e7a6ee92a6c28bcc6d76aa9b0358cb2fa', class: "label", id: "label", htmlFor: "selectbtn", onMouseEnter: (ev) => this.handleLabelMouseEnter(ev), onMouseLeave: () => hideTooltip() }, this.label),
238
316
  // we can't use aria-required because the listbox is in a sub-component and it is not announced
239
- this.requiredField && (h("span", { key: '4a5648503a023ff1eba34db936d49709e14da9f1', class: "required" }, h("span", { key: '3fe783c7174d3d827b20589cad412d32fa4cd978', class: "sr-only" }, globalMessages.requiredField), h("span", { key: '85ac4ca35f1077ade1bdda403b8888cc206ff28e', "aria-hidden": "true" }, "*")))), h("div", { key: 'c2e70d87db2d533713ac9c5a877ddba98a9a9a2f', class: "button-wrapper" }, h("button", Object.assign({ key: '460c6ac5cde8637b0098201966ca4268301ac2b7' }, buttonProps, { class: "displayedoption", ref: (el) => (this.buttonEl = el), onBlur: (ev) => this.handleButtonBlur(ev) }), h("span", { key: '3af3357f45ceacc5689e90e2bdc6459cab591c2f', class: `overflowcontrol ${showSubinfo ? "hassubinfo" : ""}` }, h("span", { key: 'bd9869db1146e54cc47c2965ebe2776873e2a18e', class: "button-text" }, this.renderButtonText()), showSubinfo && h("span", { key: 'b22d952625e93fab98ebb1b688101fd8891a4af7', class: "subinfo" }, this.selectedOptions[0].subinfo)), h("div", { key: '1f6448ee167d1847eff8fb5bc7a30e0a964e6efe', class: `expand-icon svg-icon ${this.isExpanded ? "svg-expand-less" : "svg-expand-more"}` }), this.renderOverflowCount(), h("div", { key: '0d550b97a3e08e9b708f2f4c3d91f9cac76ba5d8', ref: (el) => (this.measurementAreaEl = el), class: "measurement-area", "aria-hidden": "true" })), h("div", { key: '59cc7fcfa25d9d3eab8e4d70cdcd365e36e160ad', class: `dropdown ${this.isExpanded ? "open" : ""} ${this.openUp ? "upwards" : ""}`, ref: (el) => (this.dropdownEl = el) }, h("priv-option-list", { key: '9fb7d0396527bc18bb8f5d00d64c858470d0698d', ref: (el) => (this.optionListEl = el), multiple: this.multiple, search: this.search, selectAll: this.selectAll, maxHeight: this.maxHeight, searchPlaceholder: this.searchPlaceholder, onOptionListCloseRequested: () => this.close(), onOptionListAllSelected: () => this.wmSelectAllSelected.emit(), onOptionListAllDeselected: () => this.wmSelectAllDeselected.emit() }, h("slot", { key: '4c307bca5104ec962ca050b46adf882fb78bb74a' }))), h("div", { key: '06f11b61b475cc6cd78c2a8278b8455a79405e17', id: "error", class: this.errorMessage ? "error-message" : "" }, this.errorMessage), h("div", { key: '86cf865fbb7fd0e2c88290fe92e6062ada7d9ab6', id: "announcement", "aria-live": "polite", "aria-atomic": "true", class: "sr-only", ref: (el) => (this.liveRegionEl = el) }, this.announcement)))));
317
+ this.requiredField && (h("span", { key: 'a78da94fc8742122542de24709dae541058aeab1', class: "required" }, h("span", { key: '055fb76d88b0680ede31d3c700a640b5c1cb498f', class: "sr-only" }, globalMessages.requiredField), h("span", { key: 'e1db2d800c6b5789d8a50ce73b02899b4c8cf105', "aria-hidden": "true" }, "*")))), h("div", { key: '9a1b34ee65e711a6bfd55149af12ed03899294cc', class: "button-wrapper" }, h("button", { key: 'b7c86d83006cb532787d3f1df0c9c9f3b54470e7', id: "selectbtn", disabled: this.isDisabled, "aria-labelledby": "label selectbtn", "aria-describedby": "error", popoverTarget: "dropdown", popoverTargetAction: "toggle", class: "displayedoption", ref: (el) => (this.buttonEl = el) }, h("span", { key: 'ed2cc72a353f2bae29fdd5d8ea3f5b5dedc85c6b', class: `overflowcontrol ${showSubinfo ? "hassubinfo" : ""}` }, h("span", { key: 'cd68f6e2d0200649a57bb8f8c9c7ad423c551848', class: "button-text" }, this.renderButtonText()), showSubinfo && h("span", { key: '2501335ceaa6612cd720c71b0ea3c6efb68fa698', class: "subinfo" }, this.selectedOptions[0].subinfo)), h("div", { key: 'dacf8d5e2223a9700854ef4fac3ecabf1c8702a2', class: `expand-icon svg-icon ${this.isExpanded ? "svg-expand-less" : "svg-expand-more"}` }), this.renderOverflowCount(), h("div", { key: '161a40394450b4bac8ac91435a2b03ef9a0f8277', ref: (el) => (this.measurementAreaEl = el), class: "measurement-area", "aria-hidden": "true" })), h("div", { key: 'ed6cdbdfe2d290440b1bd33938b4cee31a70047e',
318
+ // is-open is for the CSS transition in modern browsers
319
+ // hidden is to wait for position calculations in Firefox
320
+ class: `dropdown ${this.isExpanded ? "is-open" : ""} ${this.isHidden ? "hidden" : ""} ${this.isUp ? "upward" : ""}`, id: "dropdown", popover: "auto", ref: (el) => (this.dropdownEl = el),
321
+ // @ts-ignore -- don't tell typescript but we're in the future
322
+ onToggle: (ev) => this.handleToggle(ev) }, h("priv-option-list", { key: '14ab958ca5cb5a3ac3fa970ed138ec5b47089779', ref: (el) => (this.optionListEl = el), multiple: this.multiple, search: this.search, selectAll: this.selectAll, maxHeight: this.maxHeight, searchPlaceholder: this.searchPlaceholder, onOptionListCloseRequested: () => {
323
+ this.dropdownEl.hidePopover();
324
+ }, onOptionListAllSelected: () => {
325
+ this.returnFocus = true;
326
+ this.wmSelectAllSelected.emit();
327
+ }, onOptionListAllDeselected: () => {
328
+ this.returnFocus = true;
329
+ this.wmSelectAllDeselected.emit();
330
+ } }, h("slot", { key: '98699fb0f36674cbae13f226fa923d6228fdad97' }))), h("div", { key: '69a49e6a2fe618bf9ce1a7e08527630a2d48cb8b', id: "error", class: this.errorMessage ? "error-message" : "" }, this.errorMessage), h("div", { key: '374538b9eb797924abfe74049fec191a41ae7501', id: "announcement", "aria-live": "polite", "aria-atomic": "true", class: "sr-only", ref: (el) => (this.liveRegionEl = el) }, this.announcement)))));
240
331
  }
241
332
  static get is() { return "wm-select"; }
242
333
  static get encapsulation() { return "shadow"; }
@@ -472,6 +563,8 @@ export class Select {
472
563
  static get states() {
473
564
  return {
474
565
  "isExpanded": {},
566
+ "isUp": {},
567
+ "isHidden": {},
475
568
  "announcement": {}
476
569
  };
477
570
  }
@@ -563,28 +656,22 @@ export class Select {
563
656
  "passive": false
564
657
  }, {
565
658
  "name": "wmEscKeyPressed",
566
- "method": "closePopupOnEscape",
659
+ "method": "closeDropdownOnEscape",
567
660
  "target": undefined,
568
661
  "capture": false,
569
662
  "passive": false
570
- }, {
571
- "name": "wmOptionBlurred",
572
- "method": "handleOptionBlur",
573
- "target": undefined,
574
- "capture": false,
575
- "passive": false
576
- }, {
577
- "name": "click",
578
- "method": "handleClick",
579
- "target": "document",
580
- "capture": true,
581
- "passive": false
582
663
  }, {
583
664
  "name": "keydown",
584
665
  "method": "handleKey",
585
666
  "target": undefined,
586
667
  "capture": false,
587
668
  "passive": false
669
+ }, {
670
+ "name": "resize",
671
+ "method": "handleResize",
672
+ "target": "window",
673
+ "capture": false,
674
+ "passive": true
588
675
  }];
589
676
  }
590
677
  }
@@ -915,7 +915,7 @@
915
915
  min-inline-size: 0;
916
916
  flex-grow: 1;
917
917
  }
918
- .file-wrapper .file .left-group:has(.-truncated) {
918
+ .file-wrapper .file .left-group:has(#file-details:not([open]) .-truncated) {
919
919
  min-inline-size: fit-content;
920
920
  }
921
921
  .file-wrapper .file .right-group {
@@ -957,6 +957,7 @@
957
957
  display: block;
958
958
  font-weight: 600;
959
959
  color: var(--wmcolor-interactive);
960
+ list-style-type: none;
960
961
  }
961
962
  .file-wrapper .file #file-details summary::before {
962
963
  position: absolute;
@@ -969,7 +970,7 @@
969
970
  .file-wrapper .file #file-details #summary-filename-trunc,
970
971
  .file-wrapper .file #file-details #summary-filename-wrap,
971
972
  .file-wrapper .file #file-details .file-info {
972
- margin-inline-start: 2rem;
973
+ margin-inline-start: 1.5rem;
973
974
  }
974
975
  .file-wrapper .file #file-details[open] #summary-filename-trunc {
975
976
  display: none;
@@ -860,37 +860,6 @@
860
860
  mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z'/%3E%3C/svg%3E%0A");
861
861
  }
862
862
 
863
- /* --------------------------------------
864
- 1. Box-shadow
865
- -------------------------------------- */
866
- /* --------------------------------------
867
- 2. Border-radius
868
- -------------------------------------- */
869
- /* --------------------------------------
870
- 3. Transforms
871
- -------------------------------------- */
872
- /* --------------------------------------
873
- 4. Button Focus
874
- -------------------------------------- */
875
- /* --------------------------------------
876
- 5. Flex
877
- -------------------------------------- */
878
- /* --------------------------------------
879
- 7. Screen Reader Only
880
- -------------------------------------- */
881
- /* --------------------------------------
882
- 8. Label styles
883
- this mixin includes all the styles for the label
884
- + flex rules on the parent container to switch between top and left position
885
- + srOnly when label is hidden
886
- Assumes the following markup:
887
- div.wrapper[.label-left.invalid] > div.label-wrapper > label.label > span.required
888
- .wrapper is for the flex rules
889
- .label-wrapper is to set the height of the label when positioned left so it's the same height as
890
- the input. It can't be done directly on .label because of possible line wrapping.
891
- When the label is on top there's no line wrapping at all to ensure proper alignment of inlined elements
892
- (they can't be aligned on the baseline because of possible description text and error message)
893
- -------------------------------------- */
894
863
  :host(:focus-visible) {
895
864
  outline: none;
896
865
  }
@@ -860,37 +860,6 @@
860
860
  mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z'/%3E%3C/svg%3E%0A");
861
861
  }
862
862
 
863
- /* --------------------------------------
864
- 1. Box-shadow
865
- -------------------------------------- */
866
- /* --------------------------------------
867
- 2. Border-radius
868
- -------------------------------------- */
869
- /* --------------------------------------
870
- 3. Transforms
871
- -------------------------------------- */
872
- /* --------------------------------------
873
- 4. Button Focus
874
- -------------------------------------- */
875
- /* --------------------------------------
876
- 5. Flex
877
- -------------------------------------- */
878
- /* --------------------------------------
879
- 7. Screen Reader Only
880
- -------------------------------------- */
881
- /* --------------------------------------
882
- 8. Label styles
883
- this mixin includes all the styles for the label
884
- + flex rules on the parent container to switch between top and left position
885
- + srOnly when label is hidden
886
- Assumes the following markup:
887
- div.wrapper[.label-left.invalid] > div.label-wrapper > label.label > span.required
888
- .wrapper is for the flex rules
889
- .label-wrapper is to set the height of the label when positioned left so it's the same height as
890
- the input. It can't be done directly on .label because of possible line wrapping.
891
- When the label is on top there's no line wrapping at all to ensure proper alignment of inlined elements
892
- (they can't be aligned on the baseline because of possible description text and error message)
893
- -------------------------------------- */
894
863
  :host * {
895
864
  box-sizing: border-box;
896
865
  }
@@ -860,37 +860,6 @@
860
860
  mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z'/%3E%3C/svg%3E%0A");
861
861
  }
862
862
 
863
- /* --------------------------------------
864
- 1. Box-shadow
865
- -------------------------------------- */
866
- /* --------------------------------------
867
- 2. Border-radius
868
- -------------------------------------- */
869
- /* --------------------------------------
870
- 3. Transforms
871
- -------------------------------------- */
872
- /* --------------------------------------
873
- 4. Button Focus
874
- -------------------------------------- */
875
- /* --------------------------------------
876
- 5. Flex
877
- -------------------------------------- */
878
- /* --------------------------------------
879
- 7. Screen Reader Only
880
- -------------------------------------- */
881
- /* --------------------------------------
882
- 8. Label styles
883
- this mixin includes all the styles for the label
884
- + flex rules on the parent container to switch between top and left position
885
- + srOnly when label is hidden
886
- Assumes the following markup:
887
- div.wrapper[.label-left.invalid] > div.label-wrapper > label.label > span.required
888
- .wrapper is for the flex rules
889
- .label-wrapper is to set the height of the label when positioned left so it's the same height as
890
- the input. It can't be done directly on .label because of possible line wrapping.
891
- When the label is on top there's no line wrapping at all to ensure proper alignment of inlined elements
892
- (they can't be aligned on the baseline because of possible description text and error message)
893
- -------------------------------------- */
894
863
  :host,
895
864
  wm-pagination {
896
865
  --wmcolor-pagination-arrow-disabled: var(--wmcolor-interactive-disabled);
@@ -860,37 +860,6 @@
860
860
  mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath style='fill: var(--icon-fill, currentColor)' d='M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z'/%3E%3C/svg%3E%0A");
861
861
  }
862
862
 
863
- /* --------------------------------------
864
- 1. Box-shadow
865
- -------------------------------------- */
866
- /* --------------------------------------
867
- 2. Border-radius
868
- -------------------------------------- */
869
- /* --------------------------------------
870
- 3. Transforms
871
- -------------------------------------- */
872
- /* --------------------------------------
873
- 4. Button Focus
874
- -------------------------------------- */
875
- /* --------------------------------------
876
- 5. Flex
877
- -------------------------------------- */
878
- /* --------------------------------------
879
- 7. Screen Reader Only
880
- -------------------------------------- */
881
- /* --------------------------------------
882
- 8. Label styles
883
- this mixin includes all the styles for the label
884
- + flex rules on the parent container to switch between top and left position
885
- + srOnly when label is hidden
886
- Assumes the following markup:
887
- div.wrapper[.label-left.invalid] > div.label-wrapper > label.label > span.required
888
- .wrapper is for the flex rules
889
- .label-wrapper is to set the height of the label when positioned left so it's the same height as
890
- the input. It can't be done directly on .label because of possible line wrapping.
891
- When the label is on top there's no line wrapping at all to ensure proper alignment of inlined elements
892
- (they can't be aligned on the baseline because of possible description text and error message)
893
- -------------------------------------- */
894
863
  :host * {
895
864
  box-sizing: border-box;
896
865
  }