@synergy-design-system/components 1.7.0 → 1.8.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 (196) hide show
  1. package/README.md +8 -0
  2. package/dist/chunks/chunk.2IBWQADW.js +12 -0
  3. package/dist/chunks/chunk.2IBWQADW.js.map +7 -0
  4. package/dist/chunks/chunk.2KKPNUPU.js +110 -0
  5. package/dist/chunks/chunk.2KKPNUPU.js.map +7 -0
  6. package/dist/chunks/{chunk.Q7X5NOPZ.js → chunk.2XCLA4MQ.js} +2 -2
  7. package/dist/chunks/{chunk.AMTCNRDE.js → chunk.2Z2GYRLO.js} +2 -2
  8. package/dist/chunks/{chunk.4MYR27GF.js → chunk.35PHCFSV.js} +7 -7
  9. package/dist/chunks/{chunk.MFFJYORB.js → chunk.4CBN5LPQ.js} +4 -4
  10. package/dist/chunks/{chunk.OJREQD2D.js → chunk.4ZGN7AEC.js} +8 -8
  11. package/dist/chunks/{chunk.6V3HOZNE.js → chunk.5TFG753C.js} +2 -2
  12. package/dist/chunks/{chunk.ULMZHWWW.js → chunk.6PWB7EUW.js} +2 -2
  13. package/dist/chunks/{chunk.SMSP5C6C.js → chunk.A2WGLZOL.js} +2 -2
  14. package/dist/chunks/{chunk.XXF35USM.js → chunk.AJWDVZRI.js} +22 -98
  15. package/dist/chunks/chunk.AJWDVZRI.js.map +7 -0
  16. package/dist/chunks/{chunk.VZ7S7YYN.js → chunk.AVTU2BGE.js} +2 -2
  17. package/dist/chunks/{chunk.Z4NKFCKY.js → chunk.AWZ4FSAL.js} +10 -10
  18. package/dist/chunks/{chunk.7EGCXNF2.js → chunk.B75SET3J.js} +4 -4
  19. package/dist/chunks/{chunk.5THN2K5Q.js → chunk.BGPAHVPK.js} +2 -2
  20. package/dist/chunks/{chunk.PMTVLWNZ.js → chunk.COKV3ZN7.js} +2 -2
  21. package/dist/chunks/{chunk.5OPODPPZ.js → chunk.CUU2VBEZ.js} +2 -2
  22. package/dist/chunks/{chunk.XSXBQCWN.js → chunk.DAROCSFO.js} +4 -4
  23. package/dist/chunks/{chunk.HKCTVD3U.js → chunk.ERNEIORV.js} +4 -4
  24. package/dist/chunks/{chunk.USYR7G7Z.js → chunk.F3YEAZYJ.js} +2 -2
  25. package/dist/chunks/{chunk.IRT2DA6R.js → chunk.G66TSLVT.js} +10 -10
  26. package/dist/chunks/{chunk.NAX6WP3D.js → chunk.GUQN6XL4.js} +4 -4
  27. package/dist/chunks/chunk.GZVDP7WZ.js +541 -0
  28. package/dist/chunks/chunk.GZVDP7WZ.js.map +7 -0
  29. package/dist/chunks/{chunk.SBEIXLRW.js → chunk.HNRD7DBS.js} +2 -2
  30. package/dist/chunks/{chunk.LWXCBEHD.js → chunk.HW5TASOL.js} +5 -5
  31. package/dist/chunks/{chunk.TUYEX4KP.js → chunk.JBHQJWOB.js} +5 -5
  32. package/dist/chunks/{chunk.HG5QC5EW.js → chunk.JSO3PKB4.js} +2 -2
  33. package/dist/chunks/{chunk.RA2WSKQT.js → chunk.K4ELZCXB.js} +2 -2
  34. package/dist/chunks/{chunk.JAKJHV44.js → chunk.KA7L2PMA.js} +8 -8
  35. package/dist/chunks/{chunk.EI34C7LC.js → chunk.MB3YZTYP.js} +5 -5
  36. package/dist/chunks/{chunk.7KSU2SUD.js → chunk.MRAXEK5D.js} +2 -2
  37. package/dist/chunks/{chunk.SXW2KV3B.js → chunk.NAAFLDZ3.js} +2 -2
  38. package/dist/chunks/chunk.NV7W5R6V.js +173 -0
  39. package/dist/chunks/chunk.NV7W5R6V.js.map +7 -0
  40. package/dist/chunks/{chunk.7VOPIPHW.js → chunk.NWWHBSV7.js} +2 -2
  41. package/dist/chunks/{chunk.KP7SYG4K.js → chunk.OJUBVHIK.js} +2 -2
  42. package/dist/chunks/{chunk.BQG5LF7J.js → chunk.QAUTITK3.js} +2 -2
  43. package/dist/chunks/{chunk.DJOAQ4JU.js → chunk.QNDC5KWA.js} +43 -2
  44. package/dist/chunks/{chunk.CYN675Z6.js → chunk.RS4Z4KDT.js} +5 -5
  45. package/dist/chunks/{chunk.VQWUZKDS.js → chunk.RVFNEWM3.js} +2 -2
  46. package/dist/chunks/{chunk.GOVLCQY5.js → chunk.UG5FC6UD.js} +2 -2
  47. package/dist/chunks/{chunk.GMUVD5B2.js → chunk.UVYPEAQZ.js} +5 -5
  48. package/dist/chunks/chunk.UYD2OVFV.js +83 -0
  49. package/dist/chunks/chunk.UYD2OVFV.js.map +7 -0
  50. package/dist/chunks/{chunk.GHMKOVA3.js → chunk.WDX7XUUK.js} +3 -3
  51. package/dist/chunks/{chunk.GHMKOVA3.js.map → chunk.WDX7XUUK.js.map} +1 -1
  52. package/dist/chunks/{chunk.B6AKFQJS.js → chunk.WP6T5CG2.js} +2 -2
  53. package/dist/chunks/{chunk.3ZHSSMBL.js → chunk.XI6MSNHF.js} +3 -3
  54. package/dist/chunks/{chunk.5BOEKFIJ.js → chunk.Y4QKFZLK.js} +7 -7
  55. package/dist/components/button/button.component.js +11 -11
  56. package/dist/components/button/button.custom.styles.js +1 -1
  57. package/dist/components/button/button.js +12 -12
  58. package/dist/components/button/button.styles.js +1 -1
  59. package/dist/components/button-group/button-group.component.js +3 -3
  60. package/dist/components/button-group/button-group.js +4 -4
  61. package/dist/components/button-group/button-group.styles.js +1 -1
  62. package/dist/components/checkbox/checkbox.component.js +10 -10
  63. package/dist/components/checkbox/checkbox.custom.styles.js +1 -1
  64. package/dist/components/checkbox/checkbox.js +11 -11
  65. package/dist/components/checkbox/checkbox.styles.js +3 -3
  66. package/dist/components/divider/divider.component.js +4 -4
  67. package/dist/components/divider/divider.custom.styles.js +1 -1
  68. package/dist/components/divider/divider.js +5 -5
  69. package/dist/components/divider/divider.styles.js +1 -1
  70. package/dist/components/drawer/drawer.component.d.ts +109 -0
  71. package/dist/components/drawer/drawer.component.js +28 -0
  72. package/dist/components/drawer/drawer.component.js.map +7 -0
  73. package/dist/components/drawer/drawer.custom.styles.d.ts +2 -0
  74. package/dist/components/drawer/drawer.custom.styles.js +8 -0
  75. package/dist/components/drawer/drawer.custom.styles.js.map +7 -0
  76. package/dist/components/drawer/drawer.d.ts +8 -0
  77. package/dist/components/drawer/drawer.js +29 -0
  78. package/dist/components/drawer/drawer.js.map +7 -0
  79. package/dist/components/drawer/drawer.styles.d.ts +2 -0
  80. package/dist/components/drawer/drawer.styles.js +10 -0
  81. package/dist/components/drawer/drawer.styles.js.map +7 -0
  82. package/dist/components/icon/icon.component.js +6 -6
  83. package/dist/components/icon/icon.custom.styles.js +1 -1
  84. package/dist/components/icon/icon.js +7 -7
  85. package/dist/components/icon/icon.styles.js +1 -1
  86. package/dist/components/icon/library.default.js +1 -1
  87. package/dist/components/icon/library.js +1 -1
  88. package/dist/components/icon/library.system.js +1 -1
  89. package/dist/components/icon-button/icon-button.component.js +7 -7
  90. package/dist/components/icon-button/icon-button.custom.styles.js +1 -1
  91. package/dist/components/icon-button/icon-button.js +8 -8
  92. package/dist/components/icon-button/icon-button.styles.js +1 -1
  93. package/dist/components/input/input.component.js +10 -10
  94. package/dist/components/input/input.custom.styles.js +1 -1
  95. package/dist/components/input/input.js +11 -11
  96. package/dist/components/input/input.styles.js +1 -1
  97. package/dist/components/optgroup/optgroup.component.js +5 -5
  98. package/dist/components/optgroup/optgroup.js +6 -6
  99. package/dist/components/optgroup/optgroup.styles.js +1 -1
  100. package/dist/components/option/option.component.js +7 -7
  101. package/dist/components/option/option.custom.styles.js +1 -1
  102. package/dist/components/option/option.js +8 -8
  103. package/dist/components/option/option.styles.js +1 -1
  104. package/dist/components/popup/popup.component.js +3 -3
  105. package/dist/components/popup/popup.styles.js +1 -1
  106. package/dist/components/radio/radio.component.js +7 -7
  107. package/dist/components/radio/radio.custom.styles.js +1 -1
  108. package/dist/components/radio/radio.js +8 -8
  109. package/dist/components/radio/radio.styles.js +1 -1
  110. package/dist/components/radio-button/radio-button.component.js +4 -4
  111. package/dist/components/radio-button/radio-button.js +5 -5
  112. package/dist/components/radio-button/radio-button.styles.js +1 -1
  113. package/dist/components/radio-group/radio-group.component.js +7 -7
  114. package/dist/components/radio-group/radio-group.custom.styles.js +1 -1
  115. package/dist/components/radio-group/radio-group.js +8 -8
  116. package/dist/components/radio-group/radio-group.styles.js +1 -1
  117. package/dist/components/select/select.component.js +15 -14
  118. package/dist/components/select/select.custom.styles.js +1 -1
  119. package/dist/components/select/select.js +16 -15
  120. package/dist/components/select/select.styles.js +1 -1
  121. package/dist/components/spinner/spinner.component.js +3 -3
  122. package/dist/components/spinner/spinner.styles.js +1 -1
  123. package/dist/components/switch/switch.component.js +5 -5
  124. package/dist/components/switch/switch.custom.styles.js +1 -1
  125. package/dist/components/switch/switch.js +6 -6
  126. package/dist/components/switch/switch.styles.js +1 -1
  127. package/dist/components/tag/tag.component.js +8 -8
  128. package/dist/components/tag/tag.custom.styles.js +1 -1
  129. package/dist/components/tag/tag.js +9 -9
  130. package/dist/components/tag/tag.styles.js +1 -1
  131. package/dist/components/textarea/textarea.component.js +6 -6
  132. package/dist/components/textarea/textarea.custom.styles.js +1 -1
  133. package/dist/components/textarea/textarea.js +7 -7
  134. package/dist/components/textarea/textarea.styles.js +1 -1
  135. package/dist/custom-elements.json +411 -1
  136. package/dist/events/events.d.ts +2 -0
  137. package/dist/events/syn-initial-focus.d.ts +6 -0
  138. package/dist/events/syn-request-close.d.ts +8 -0
  139. package/dist/internal/active-elements.d.ts +15 -0
  140. package/dist/internal/modal.d.ts +21 -0
  141. package/dist/internal/string.d.ts +2 -0
  142. package/dist/internal/tabbable.d.ts +9 -0
  143. package/dist/synergy-autoloader.js +1 -1
  144. package/dist/synergy.d.ts +1 -0
  145. package/dist/synergy.js +78 -70
  146. package/dist/themes/utility.css +29 -0
  147. package/dist/translations/de.js +1 -1
  148. package/dist/translations/en.js +1 -1
  149. package/dist/utilities/animation-registry.js +2 -2
  150. package/dist/utilities/base-path.js +1 -1
  151. package/dist/utilities/form.js +3 -3
  152. package/dist/utilities/icon-library.js +1 -1
  153. package/dist/utilities/localize.js +1 -1
  154. package/dist/vscode.html-custom-data.json +42 -0
  155. package/dist/web-types.json +132 -1
  156. package/package.json +4 -3
  157. package/dist/chunks/chunk.XXF35USM.js.map +0 -7
  158. /package/dist/chunks/{chunk.Q7X5NOPZ.js.map → chunk.2XCLA4MQ.js.map} +0 -0
  159. /package/dist/chunks/{chunk.AMTCNRDE.js.map → chunk.2Z2GYRLO.js.map} +0 -0
  160. /package/dist/chunks/{chunk.4MYR27GF.js.map → chunk.35PHCFSV.js.map} +0 -0
  161. /package/dist/chunks/{chunk.MFFJYORB.js.map → chunk.4CBN5LPQ.js.map} +0 -0
  162. /package/dist/chunks/{chunk.OJREQD2D.js.map → chunk.4ZGN7AEC.js.map} +0 -0
  163. /package/dist/chunks/{chunk.6V3HOZNE.js.map → chunk.5TFG753C.js.map} +0 -0
  164. /package/dist/chunks/{chunk.ULMZHWWW.js.map → chunk.6PWB7EUW.js.map} +0 -0
  165. /package/dist/chunks/{chunk.SMSP5C6C.js.map → chunk.A2WGLZOL.js.map} +0 -0
  166. /package/dist/chunks/{chunk.VZ7S7YYN.js.map → chunk.AVTU2BGE.js.map} +0 -0
  167. /package/dist/chunks/{chunk.Z4NKFCKY.js.map → chunk.AWZ4FSAL.js.map} +0 -0
  168. /package/dist/chunks/{chunk.7EGCXNF2.js.map → chunk.B75SET3J.js.map} +0 -0
  169. /package/dist/chunks/{chunk.5THN2K5Q.js.map → chunk.BGPAHVPK.js.map} +0 -0
  170. /package/dist/chunks/{chunk.PMTVLWNZ.js.map → chunk.COKV3ZN7.js.map} +0 -0
  171. /package/dist/chunks/{chunk.5OPODPPZ.js.map → chunk.CUU2VBEZ.js.map} +0 -0
  172. /package/dist/chunks/{chunk.XSXBQCWN.js.map → chunk.DAROCSFO.js.map} +0 -0
  173. /package/dist/chunks/{chunk.HKCTVD3U.js.map → chunk.ERNEIORV.js.map} +0 -0
  174. /package/dist/chunks/{chunk.USYR7G7Z.js.map → chunk.F3YEAZYJ.js.map} +0 -0
  175. /package/dist/chunks/{chunk.IRT2DA6R.js.map → chunk.G66TSLVT.js.map} +0 -0
  176. /package/dist/chunks/{chunk.NAX6WP3D.js.map → chunk.GUQN6XL4.js.map} +0 -0
  177. /package/dist/chunks/{chunk.SBEIXLRW.js.map → chunk.HNRD7DBS.js.map} +0 -0
  178. /package/dist/chunks/{chunk.LWXCBEHD.js.map → chunk.HW5TASOL.js.map} +0 -0
  179. /package/dist/chunks/{chunk.TUYEX4KP.js.map → chunk.JBHQJWOB.js.map} +0 -0
  180. /package/dist/chunks/{chunk.HG5QC5EW.js.map → chunk.JSO3PKB4.js.map} +0 -0
  181. /package/dist/chunks/{chunk.RA2WSKQT.js.map → chunk.K4ELZCXB.js.map} +0 -0
  182. /package/dist/chunks/{chunk.JAKJHV44.js.map → chunk.KA7L2PMA.js.map} +0 -0
  183. /package/dist/chunks/{chunk.EI34C7LC.js.map → chunk.MB3YZTYP.js.map} +0 -0
  184. /package/dist/chunks/{chunk.7KSU2SUD.js.map → chunk.MRAXEK5D.js.map} +0 -0
  185. /package/dist/chunks/{chunk.SXW2KV3B.js.map → chunk.NAAFLDZ3.js.map} +0 -0
  186. /package/dist/chunks/{chunk.7VOPIPHW.js.map → chunk.NWWHBSV7.js.map} +0 -0
  187. /package/dist/chunks/{chunk.KP7SYG4K.js.map → chunk.OJUBVHIK.js.map} +0 -0
  188. /package/dist/chunks/{chunk.BQG5LF7J.js.map → chunk.QAUTITK3.js.map} +0 -0
  189. /package/dist/chunks/{chunk.DJOAQ4JU.js.map → chunk.QNDC5KWA.js.map} +0 -0
  190. /package/dist/chunks/{chunk.CYN675Z6.js.map → chunk.RS4Z4KDT.js.map} +0 -0
  191. /package/dist/chunks/{chunk.VQWUZKDS.js.map → chunk.RVFNEWM3.js.map} +0 -0
  192. /package/dist/chunks/{chunk.GOVLCQY5.js.map → chunk.UG5FC6UD.js.map} +0 -0
  193. /package/dist/chunks/{chunk.GMUVD5B2.js.map → chunk.UVYPEAQZ.js.map} +0 -0
  194. /package/dist/chunks/{chunk.B6AKFQJS.js.map → chunk.WP6T5CG2.js.map} +0 -0
  195. /package/dist/chunks/{chunk.3ZHSSMBL.js.map → chunk.XI6MSNHF.js.map} +0 -0
  196. /package/dist/chunks/{chunk.5BOEKFIJ.js.map → chunk.Y4QKFZLK.js.map} +0 -0
@@ -0,0 +1,541 @@
1
+ import {
2
+ animateTo,
3
+ lockBodyScrolling,
4
+ stopAnimations,
5
+ unlockBodyScrolling,
6
+ waitForEvent
7
+ } from "./chunk.2KKPNUPU.js";
8
+ import {
9
+ getAnimation,
10
+ setDefaultAnimation
11
+ } from "./chunk.QAUTITK3.js";
12
+ import {
13
+ SynIconButton
14
+ } from "./chunk.DAROCSFO.js";
15
+ import {
16
+ drawer_styles_default
17
+ } from "./chunk.NV7W5R6V.js";
18
+ import {
19
+ HasSlotController
20
+ } from "./chunk.XGXFE6IF.js";
21
+ import {
22
+ LocalizeController
23
+ } from "./chunk.LAB4YJYE.js";
24
+ import {
25
+ watch
26
+ } from "./chunk.AVTU2BGE.js";
27
+ import {
28
+ SynergyElement
29
+ } from "./chunk.WDX7XUUK.js";
30
+ import {
31
+ __decorateClass,
32
+ __yieldStar
33
+ } from "./chunk.QNDC5KWA.js";
34
+
35
+ // src/components/drawer/drawer.component.ts
36
+ import { classMap } from "lit/directives/class-map.js";
37
+ import { html } from "lit";
38
+ import { ifDefined } from "lit/directives/if-defined.js";
39
+ import { property, query } from "lit/decorators.js";
40
+
41
+ // src/internal/string.ts
42
+ function uppercaseFirstLetter(string) {
43
+ return string.charAt(0).toUpperCase() + string.slice(1);
44
+ }
45
+
46
+ // src/internal/active-elements.ts
47
+ function* activeElements(activeElement = document.activeElement) {
48
+ if (activeElement === null || activeElement === void 0)
49
+ return;
50
+ yield activeElement;
51
+ if ("shadowRoot" in activeElement && activeElement.shadowRoot && activeElement.shadowRoot.mode !== "closed") {
52
+ yield* __yieldStar(activeElements(activeElement.shadowRoot.activeElement));
53
+ }
54
+ }
55
+ function getDeepestActiveElement() {
56
+ return [...activeElements()].pop();
57
+ }
58
+
59
+ // src/internal/tabbable.ts
60
+ function isTakingUpSpace(elem) {
61
+ return Boolean(elem.offsetParent || elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);
62
+ }
63
+ function isTabbable(el) {
64
+ const tag = el.tagName.toLowerCase();
65
+ if (el.getAttribute("tabindex") === "-1") {
66
+ return false;
67
+ }
68
+ if (el.hasAttribute("disabled")) {
69
+ return false;
70
+ }
71
+ if (tag === "input" && el.getAttribute("type") === "radio" && !el.hasAttribute("checked")) {
72
+ return false;
73
+ }
74
+ if (!isTakingUpSpace(el)) {
75
+ return false;
76
+ }
77
+ if (window.getComputedStyle(el).visibility === "hidden") {
78
+ return false;
79
+ }
80
+ if ((tag === "audio" || tag === "video") && el.hasAttribute("controls")) {
81
+ return true;
82
+ }
83
+ if (el.hasAttribute("tabindex")) {
84
+ return true;
85
+ }
86
+ if (el.hasAttribute("contenteditable") && el.getAttribute("contenteditable") !== "false") {
87
+ return true;
88
+ }
89
+ return ["button", "input", "select", "textarea", "a", "audio", "video", "summary"].includes(tag);
90
+ }
91
+ function getTabbableElements(root) {
92
+ const tabbableElements = [];
93
+ function walk(el) {
94
+ if (el instanceof Element) {
95
+ if (el.hasAttribute("inert")) {
96
+ return;
97
+ }
98
+ if (!tabbableElements.includes(el) && isTabbable(el)) {
99
+ tabbableElements.push(el);
100
+ }
101
+ const slotChildrenOutsideRootElement = (slotElement) => {
102
+ var _a;
103
+ return ((_a = slotElement.getRootNode({ composed: true })) == null ? void 0 : _a.host) !== root;
104
+ };
105
+ if (el instanceof HTMLSlotElement && slotChildrenOutsideRootElement(el)) {
106
+ el.assignedElements({ flatten: true }).forEach((assignedEl) => {
107
+ walk(assignedEl);
108
+ });
109
+ }
110
+ if (el.shadowRoot !== null && el.shadowRoot.mode === "open") {
111
+ walk(el.shadowRoot);
112
+ }
113
+ }
114
+ [...el.children].forEach((e) => walk(e));
115
+ }
116
+ walk(root);
117
+ return tabbableElements.sort((a, b) => {
118
+ const aTabindex = Number(a.getAttribute("tabindex")) || 0;
119
+ const bTabindex = Number(b.getAttribute("tabindex")) || 0;
120
+ return bTabindex - aTabindex;
121
+ });
122
+ }
123
+
124
+ // src/internal/modal.ts
125
+ var activeModals = [];
126
+ var Modal = class {
127
+ constructor(element) {
128
+ this.tabDirection = "forward";
129
+ this.handleFocusIn = () => {
130
+ if (!this.isActive())
131
+ return;
132
+ this.checkFocus();
133
+ };
134
+ this.handleKeyDown = (event) => {
135
+ var _a, _b;
136
+ if (event.key !== "Tab" || this.isExternalActivated)
137
+ return;
138
+ if (!this.isActive())
139
+ return;
140
+ if (event.shiftKey) {
141
+ this.tabDirection = "backward";
142
+ } else {
143
+ this.tabDirection = "forward";
144
+ }
145
+ event.preventDefault();
146
+ const tabbableElements = getTabbableElements(this.element);
147
+ const currentActiveElement = getDeepestActiveElement();
148
+ let currentFocusIndex = tabbableElements.findIndex((el) => el === currentActiveElement);
149
+ if (currentFocusIndex === -1) {
150
+ this.currentFocus = tabbableElements[0];
151
+ (_a = this.currentFocus) == null ? void 0 : _a.focus({ preventScroll: true });
152
+ return;
153
+ }
154
+ const addition = this.tabDirection === "forward" ? 1 : -1;
155
+ if (currentFocusIndex + addition >= tabbableElements.length) {
156
+ currentFocusIndex = 0;
157
+ } else if (currentFocusIndex + addition < 0) {
158
+ currentFocusIndex = tabbableElements.length - 1;
159
+ } else {
160
+ currentFocusIndex += addition;
161
+ }
162
+ this.currentFocus = tabbableElements[currentFocusIndex];
163
+ (_b = this.currentFocus) == null ? void 0 : _b.focus({ preventScroll: true });
164
+ setTimeout(() => this.checkFocus());
165
+ };
166
+ this.handleKeyUp = () => {
167
+ this.tabDirection = "forward";
168
+ };
169
+ this.element = element;
170
+ }
171
+ /** Activates focus trapping. */
172
+ activate() {
173
+ activeModals.push(this.element);
174
+ document.addEventListener("focusin", this.handleFocusIn);
175
+ document.addEventListener("keydown", this.handleKeyDown);
176
+ document.addEventListener("keyup", this.handleKeyUp);
177
+ }
178
+ /** Deactivates focus trapping. */
179
+ deactivate() {
180
+ activeModals = activeModals.filter((modal) => modal !== this.element);
181
+ this.currentFocus = null;
182
+ document.removeEventListener("focusin", this.handleFocusIn);
183
+ document.removeEventListener("keydown", this.handleKeyDown);
184
+ document.removeEventListener("keyup", this.handleKeyUp);
185
+ }
186
+ /** Determines if this modal element is currently active or not. */
187
+ isActive() {
188
+ return activeModals[activeModals.length - 1] === this.element;
189
+ }
190
+ /** Activates external modal behavior and temporarily disables focus trapping. */
191
+ activateExternal() {
192
+ this.isExternalActivated = true;
193
+ }
194
+ /** Deactivates external modal behavior and re-enables focus trapping. */
195
+ deactivateExternal() {
196
+ this.isExternalActivated = false;
197
+ }
198
+ checkFocus() {
199
+ if (this.isActive() && !this.isExternalActivated) {
200
+ const tabbableElements = getTabbableElements(this.element);
201
+ if (!this.element.matches(":focus-within")) {
202
+ const start = tabbableElements[0];
203
+ const end = tabbableElements[tabbableElements.length - 1];
204
+ const target = this.tabDirection === "forward" ? start : end;
205
+ if (typeof (target == null ? void 0 : target.focus) === "function") {
206
+ this.currentFocus = target;
207
+ target.focus({ preventScroll: true });
208
+ }
209
+ }
210
+ }
211
+ }
212
+ };
213
+
214
+ // src/components/drawer/drawer.component.ts
215
+ var SynDrawer = class extends SynergyElement {
216
+ constructor() {
217
+ super(...arguments);
218
+ this.hasSlotController = new HasSlotController(this, "footer");
219
+ this.localize = new LocalizeController(this);
220
+ this.modal = new Modal(this);
221
+ this.open = false;
222
+ this.label = "";
223
+ this.placement = "end";
224
+ this.contained = false;
225
+ this.noHeader = false;
226
+ this.handleDocumentKeyDown = (event) => {
227
+ if (this.contained) {
228
+ return;
229
+ }
230
+ if (event.key === "Escape" && this.modal.isActive() && this.open) {
231
+ event.stopImmediatePropagation();
232
+ this.requestClose("keyboard");
233
+ }
234
+ };
235
+ }
236
+ firstUpdated() {
237
+ this.drawer.hidden = !this.open;
238
+ if (this.open) {
239
+ this.addOpenListeners();
240
+ if (!this.contained) {
241
+ this.modal.activate();
242
+ lockBodyScrolling(this);
243
+ }
244
+ }
245
+ }
246
+ disconnectedCallback() {
247
+ super.disconnectedCallback();
248
+ unlockBodyScrolling(this);
249
+ }
250
+ requestClose(source) {
251
+ const slRequestClose = this.emit("syn-request-close", {
252
+ cancelable: true,
253
+ detail: { source }
254
+ });
255
+ if (slRequestClose.defaultPrevented) {
256
+ const animation = getAnimation(this, "drawer.denyClose", { dir: this.localize.dir() });
257
+ animateTo(this.panel, animation.keyframes, animation.options);
258
+ return;
259
+ }
260
+ this.hide();
261
+ }
262
+ addOpenListeners() {
263
+ document.addEventListener("keydown", this.handleDocumentKeyDown);
264
+ }
265
+ removeOpenListeners() {
266
+ document.removeEventListener("keydown", this.handleDocumentKeyDown);
267
+ }
268
+ async handleOpenChange() {
269
+ if (this.open) {
270
+ this.emit("syn-show");
271
+ this.addOpenListeners();
272
+ this.originalTrigger = document.activeElement;
273
+ if (!this.contained) {
274
+ this.modal.activate();
275
+ lockBodyScrolling(this);
276
+ }
277
+ const autoFocusTarget = this.querySelector("[autofocus]");
278
+ if (autoFocusTarget) {
279
+ autoFocusTarget.removeAttribute("autofocus");
280
+ }
281
+ await Promise.all([stopAnimations(this.drawer), stopAnimations(this.overlay)]);
282
+ this.drawer.hidden = false;
283
+ requestAnimationFrame(() => {
284
+ const slInitialFocus = this.emit("syn-initial-focus", { cancelable: true });
285
+ if (!slInitialFocus.defaultPrevented) {
286
+ if (autoFocusTarget) {
287
+ autoFocusTarget.focus({ preventScroll: true });
288
+ } else {
289
+ this.panel.focus({ preventScroll: true });
290
+ }
291
+ }
292
+ if (autoFocusTarget) {
293
+ autoFocusTarget.setAttribute("autofocus", "");
294
+ }
295
+ });
296
+ const panelAnimation = getAnimation(this, `drawer.show${uppercaseFirstLetter(this.placement)}`, {
297
+ dir: this.localize.dir()
298
+ });
299
+ const overlayAnimation = getAnimation(this, "drawer.overlay.show", { dir: this.localize.dir() });
300
+ await Promise.all([
301
+ animateTo(this.panel, panelAnimation.keyframes, panelAnimation.options),
302
+ animateTo(this.overlay, overlayAnimation.keyframes, overlayAnimation.options)
303
+ ]);
304
+ this.emit("syn-after-show");
305
+ } else {
306
+ this.emit("syn-hide");
307
+ this.removeOpenListeners();
308
+ if (!this.contained) {
309
+ this.modal.deactivate();
310
+ unlockBodyScrolling(this);
311
+ }
312
+ await Promise.all([stopAnimations(this.drawer), stopAnimations(this.overlay)]);
313
+ const panelAnimation = getAnimation(this, `drawer.hide${uppercaseFirstLetter(this.placement)}`, {
314
+ dir: this.localize.dir()
315
+ });
316
+ const overlayAnimation = getAnimation(this, "drawer.overlay.hide", { dir: this.localize.dir() });
317
+ await Promise.all([
318
+ animateTo(this.overlay, overlayAnimation.keyframes, overlayAnimation.options).then(() => {
319
+ this.overlay.hidden = true;
320
+ }),
321
+ animateTo(this.panel, panelAnimation.keyframes, panelAnimation.options).then(() => {
322
+ this.panel.hidden = true;
323
+ })
324
+ ]);
325
+ this.drawer.hidden = true;
326
+ this.overlay.hidden = false;
327
+ this.panel.hidden = false;
328
+ const trigger = this.originalTrigger;
329
+ if (typeof (trigger == null ? void 0 : trigger.focus) === "function") {
330
+ setTimeout(() => trigger.focus());
331
+ }
332
+ this.emit("syn-after-hide");
333
+ }
334
+ }
335
+ handleNoModalChange() {
336
+ if (this.open && !this.contained) {
337
+ this.modal.activate();
338
+ lockBodyScrolling(this);
339
+ }
340
+ if (this.open && this.contained) {
341
+ this.modal.deactivate();
342
+ unlockBodyScrolling(this);
343
+ }
344
+ }
345
+ /** Shows the drawer. */
346
+ async show() {
347
+ if (this.open) {
348
+ return void 0;
349
+ }
350
+ this.open = true;
351
+ return waitForEvent(this, "syn-after-show");
352
+ }
353
+ /** Hides the drawer */
354
+ async hide() {
355
+ if (!this.open) {
356
+ return void 0;
357
+ }
358
+ this.open = false;
359
+ return waitForEvent(this, "syn-after-hide");
360
+ }
361
+ render() {
362
+ return html`
363
+ <div
364
+ part="base"
365
+ class=${classMap({
366
+ drawer: true,
367
+ "drawer--open": this.open,
368
+ "drawer--top": this.placement === "top",
369
+ "drawer--end": this.placement === "end",
370
+ "drawer--bottom": this.placement === "bottom",
371
+ "drawer--start": this.placement === "start",
372
+ "drawer--contained": this.contained,
373
+ "drawer--fixed": !this.contained,
374
+ "drawer--rtl": this.localize.dir() === "rtl",
375
+ "drawer--has-footer": this.hasSlotController.test("footer")
376
+ })}
377
+ >
378
+ <div part="overlay" class="drawer__overlay" @click=${() => this.requestClose("overlay")} tabindex="-1"></div>
379
+
380
+ <div
381
+ part="panel"
382
+ class="drawer__panel"
383
+ role="dialog"
384
+ aria-modal="true"
385
+ aria-hidden=${this.open ? "false" : "true"}
386
+ aria-label=${ifDefined(this.noHeader ? this.label : void 0)}
387
+ aria-labelledby=${ifDefined(!this.noHeader ? "title" : void 0)}
388
+ tabindex="0"
389
+ >
390
+ ${!this.noHeader ? html`
391
+ <header part="header" class="drawer__header">
392
+ <h2 part="title" class="drawer__title" id="title">
393
+ <!-- If there's no label, use an invisible character to prevent the header from collapsing -->
394
+ <slot name="label"> ${this.label.length > 0 ? this.label : String.fromCharCode(65279)} </slot>
395
+ </h2>
396
+ <div part="header-actions" class="drawer__header-actions">
397
+ <slot name="header-actions"></slot>
398
+ <syn-icon-button
399
+ part="close-button"
400
+ exportparts="base:close-button__base"
401
+ class="drawer__close"
402
+ name="x-lg"
403
+ label=${this.localize.term("close")}
404
+ library="system"
405
+ @click=${() => this.requestClose("close-button")}
406
+ ></syn-icon-button>
407
+ </div>
408
+ </header>
409
+ ` : ""}
410
+
411
+ <slot part="body" class="drawer__body"></slot>
412
+
413
+ <footer part="footer" class="drawer__footer">
414
+ <slot name="footer"></slot>
415
+ </footer>
416
+ </div>
417
+ </div>
418
+ `;
419
+ }
420
+ };
421
+ SynDrawer.styles = drawer_styles_default;
422
+ SynDrawer.dependencies = { "syn-icon-button": SynIconButton };
423
+ __decorateClass([
424
+ query(".drawer")
425
+ ], SynDrawer.prototype, "drawer", 2);
426
+ __decorateClass([
427
+ query(".drawer__panel")
428
+ ], SynDrawer.prototype, "panel", 2);
429
+ __decorateClass([
430
+ query(".drawer__overlay")
431
+ ], SynDrawer.prototype, "overlay", 2);
432
+ __decorateClass([
433
+ property({ type: Boolean, reflect: true })
434
+ ], SynDrawer.prototype, "open", 2);
435
+ __decorateClass([
436
+ property({ reflect: true })
437
+ ], SynDrawer.prototype, "label", 2);
438
+ __decorateClass([
439
+ property({ reflect: true })
440
+ ], SynDrawer.prototype, "placement", 2);
441
+ __decorateClass([
442
+ property({ type: Boolean, reflect: true })
443
+ ], SynDrawer.prototype, "contained", 2);
444
+ __decorateClass([
445
+ property({ attribute: "no-header", type: Boolean, reflect: true })
446
+ ], SynDrawer.prototype, "noHeader", 2);
447
+ __decorateClass([
448
+ watch("open", { waitUntilFirstUpdate: true })
449
+ ], SynDrawer.prototype, "handleOpenChange", 1);
450
+ __decorateClass([
451
+ watch("contained", { waitUntilFirstUpdate: true })
452
+ ], SynDrawer.prototype, "handleNoModalChange", 1);
453
+ setDefaultAnimation("drawer.showTop", {
454
+ keyframes: [
455
+ { opacity: 0, translate: "0 -100%" },
456
+ { opacity: 1, translate: "0 0" }
457
+ ],
458
+ options: { duration: 250, easing: "ease" }
459
+ });
460
+ setDefaultAnimation("drawer.hideTop", {
461
+ keyframes: [
462
+ { opacity: 1, translate: "0 0" },
463
+ { opacity: 0, translate: "0 -100%" }
464
+ ],
465
+ options: { duration: 250, easing: "ease" }
466
+ });
467
+ setDefaultAnimation("drawer.showEnd", {
468
+ keyframes: [
469
+ { opacity: 0, translate: "100%" },
470
+ { opacity: 1, translate: "0" }
471
+ ],
472
+ rtlKeyframes: [
473
+ { opacity: 0, translate: "-100%" },
474
+ { opacity: 1, translate: "0" }
475
+ ],
476
+ options: { duration: 250, easing: "ease" }
477
+ });
478
+ setDefaultAnimation("drawer.hideEnd", {
479
+ keyframes: [
480
+ { opacity: 1, translate: "0" },
481
+ { opacity: 0, translate: "100%" }
482
+ ],
483
+ rtlKeyframes: [
484
+ { opacity: 1, translate: "0" },
485
+ { opacity: 0, translate: "-100%" }
486
+ ],
487
+ options: { duration: 250, easing: "ease" }
488
+ });
489
+ setDefaultAnimation("drawer.showBottom", {
490
+ keyframes: [
491
+ { opacity: 0, translate: "0 100%" },
492
+ { opacity: 1, translate: "0 0" }
493
+ ],
494
+ options: { duration: 250, easing: "ease" }
495
+ });
496
+ setDefaultAnimation("drawer.hideBottom", {
497
+ keyframes: [
498
+ { opacity: 1, translate: "0 0" },
499
+ { opacity: 0, translate: "0 100%" }
500
+ ],
501
+ options: { duration: 250, easing: "ease" }
502
+ });
503
+ setDefaultAnimation("drawer.showStart", {
504
+ keyframes: [
505
+ { opacity: 0, translate: "-100%" },
506
+ { opacity: 1, translate: "0" }
507
+ ],
508
+ rtlKeyframes: [
509
+ { opacity: 0, translate: "100%" },
510
+ { opacity: 1, translate: "0" }
511
+ ],
512
+ options: { duration: 250, easing: "ease" }
513
+ });
514
+ setDefaultAnimation("drawer.hideStart", {
515
+ keyframes: [
516
+ { opacity: 1, translate: "0" },
517
+ { opacity: 0, translate: "-100%" }
518
+ ],
519
+ rtlKeyframes: [
520
+ { opacity: 1, translate: "0" },
521
+ { opacity: 0, translate: "100%" }
522
+ ],
523
+ options: { duration: 250, easing: "ease" }
524
+ });
525
+ setDefaultAnimation("drawer.denyClose", {
526
+ keyframes: [{ scale: 1 }, { scale: 1.01 }, { scale: 1 }],
527
+ options: { duration: 250 }
528
+ });
529
+ setDefaultAnimation("drawer.overlay.show", {
530
+ keyframes: [{ opacity: 0 }, { opacity: 1 }],
531
+ options: { duration: 250 }
532
+ });
533
+ setDefaultAnimation("drawer.overlay.hide", {
534
+ keyframes: [{ opacity: 1 }, { opacity: 0 }],
535
+ options: { duration: 250 }
536
+ });
537
+
538
+ export {
539
+ SynDrawer
540
+ };
541
+ //# sourceMappingURL=chunk.GZVDP7WZ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/drawer/drawer.component.ts", "../../src/internal/string.ts", "../../src/internal/active-elements.ts", "../../src/internal/tabbable.ts", "../../src/internal/modal.ts"],
4
+ "sourcesContent": ["// ---------------------------------------------------------------------\n// \uD83D\uDD12 AUTOGENERATED BY VENDORISM\n// Removing this comment will prevent it from being managed by it.\n// ---------------------------------------------------------------------\n\n/* eslint-disable */\nimport { animateTo, stopAnimations } from '../../internal/animate.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { getAnimation, setDefaultAnimation } from '../../utilities/animation-registry.js';\nimport { HasSlotController } from '../../internal/slot.js';\nimport { html } from 'lit';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { LocalizeController } from '../../utilities/localize.js';\nimport { lockBodyScrolling, unlockBodyScrolling } from '../../internal/scroll.js';\nimport { property, query } from 'lit/decorators.js';\nimport { uppercaseFirstLetter } from '../../internal/string.js';\nimport { waitForEvent } from '../../internal/event.js';\nimport { watch } from '../../internal/watch.js';\nimport Modal from '../../internal/modal.js';\nimport SynergyElement from '../../internal/synergy-element.js';\nimport SynIconButton from '../icon-button/icon-button.component.js';\nimport styles from './drawer.styles.js';\nimport type { CSSResultGroup } from 'lit';\n\n/**\n * @summary Drawers slide in from a container to expose additional options and information.\n * @documentation https://synergy.style/components/drawer\n * @status stable\n * @since 2.0\n *\n * @dependency syn-icon-button\n *\n * @slot - The drawer's main content.\n * @slot label - The drawer's label. Alternatively, you can use the `label` attribute.\n * @slot header-actions - Optional actions to add to the header. Works best with `<syn-icon-button>`.\n * @slot footer - The drawer's footer, usually one or more buttons representing various options.\n *\n * @event syn-show - Emitted when the drawer opens.\n * @event syn-after-show - Emitted after the drawer opens and all animations are complete.\n * @event syn-hide - Emitted when the drawer closes.\n * @event syn-after-hide - Emitted after the drawer closes and all animations are complete.\n * @event syn-initial-focus - Emitted when the drawer opens and is ready to receive focus. Calling\n * `event.preventDefault()` will prevent focusing and allow you to set it on a different element, such as an input.\n * @event {{ source: 'close-button' | 'keyboard' | 'overlay' }} syn-request-close - Emitted when the user attempts to\n * close the drawer by clicking the close button, clicking the overlay, or pressing escape. Calling\n * `event.preventDefault()` will keep the drawer open. Avoid using this unless closing the drawer will result in\n * destructive behavior such as data loss.\n *\n * @csspart base - The component's base wrapper.\n * @csspart overlay - The overlay that covers the screen behind the drawer.\n * @csspart panel - The drawer's panel (where the drawer and its content are rendered).\n * @csspart header - The drawer's header. This element wraps the title and header actions.\n * @csspart header-actions - Optional actions to add to the header. Works best with `<syn-icon-button>`.\n * @csspart title - The drawer's title.\n * @csspart close-button - The close button, an `<syn-icon-button>`.\n * @csspart close-button__base - The close button's exported `base` part.\n * @csspart body - The drawer's body.\n * @csspart footer - The drawer's footer.\n *\n * @cssproperty --size - The preferred size of the drawer. This will be applied to the drawer's width or height\n * depending on its `placement`. Note that the drawer will shrink to accommodate smaller screens.\n * @cssproperty --header-spacing - The amount of padding to use for the header.\n * @cssproperty --body-spacing - The amount of padding to use for the body.\n * @cssproperty --footer-spacing - The amount of padding to use for the footer.\n *\n * @animation drawer.showTop - The animation to use when showing a drawer with `top` placement.\n * @animation drawer.showEnd - The animation to use when showing a drawer with `end` placement.\n * @animation drawer.showBottom - The animation to use when showing a drawer with `bottom` placement.\n * @animation drawer.showStart - The animation to use when showing a drawer with `start` placement.\n * @animation drawer.hideTop - The animation to use when hiding a drawer with `top` placement.\n * @animation drawer.hideEnd - The animation to use when hiding a drawer with `end` placement.\n * @animation drawer.hideBottom - The animation to use when hiding a drawer with `bottom` placement.\n * @animation drawer.hideStart - The animation to use when hiding a drawer with `start` placement.\n * @animation drawer.denyClose - The animation to use when a request to close the drawer is denied.\n * @animation drawer.overlay.show - The animation to use when showing the drawer's overlay.\n * @animation drawer.overlay.hide - The animation to use when hiding the drawer's overlay.\n *\n * @property modal - Exposes the internal modal utility that controls focus trapping. To temporarily disable focus\n * trapping and allow third-party modals spawned from an active Synergy modal, call `modal.activateExternal()` when\n * the third-party modal opens. Upon closing, call `modal.deactivateExternal()` to restore Synergy's focus trapping.\n */\nexport default class SynDrawer extends SynergyElement {\n static styles: CSSResultGroup = styles;\n static dependencies = { 'syn-icon-button': SynIconButton };\n\n private readonly hasSlotController = new HasSlotController(this, 'footer');\n private readonly localize = new LocalizeController(this);\n private originalTrigger: HTMLElement | null;\n public modal = new Modal(this);\n\n @query('.drawer') drawer: HTMLElement;\n @query('.drawer__panel') panel: HTMLElement;\n @query('.drawer__overlay') overlay: HTMLElement;\n\n /**\n * Indicates whether or not the drawer is open. You can toggle this attribute to show and hide the drawer, or you can\n * use the `show()` and `hide()` methods and this attribute will reflect the drawer's open state.\n */\n @property({ type: Boolean, reflect: true }) open = false;\n\n /**\n * The drawer's label as displayed in the header. You should always include a relevant label even when using\n * `no-header`, as it is required for proper accessibility. If you need to display HTML, use the `label` slot instead.\n */\n @property({ reflect: true }) label = '';\n\n /** The direction from which the drawer will open. */\n @property({ reflect: true }) placement: 'top' | 'end' | 'bottom' | 'start' = 'end';\n\n /**\n * By default, the drawer slides out of its containing block (usually the viewport). To make the drawer slide out of\n * its parent element, set this attribute and add `position: relative` to the parent.\n */\n @property({ type: Boolean, reflect: true }) contained = false;\n\n /**\n * Removes the header. This will also remove the default close button, so please ensure you provide an easy,\n * accessible way for users to dismiss the drawer.\n */\n @property({ attribute: 'no-header', type: Boolean, reflect: true }) noHeader = false;\n\n firstUpdated() {\n this.drawer.hidden = !this.open;\n\n if (this.open) {\n this.addOpenListeners();\n\n if (!this.contained) {\n this.modal.activate();\n lockBodyScrolling(this);\n }\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n unlockBodyScrolling(this);\n }\n\n private requestClose(source: 'close-button' | 'keyboard' | 'overlay') {\n const slRequestClose = this.emit('syn-request-close', {\n cancelable: true,\n detail: { source }\n });\n\n if (slRequestClose.defaultPrevented) {\n const animation = getAnimation(this, 'drawer.denyClose', { dir: this.localize.dir() });\n animateTo(this.panel, animation.keyframes, animation.options);\n return;\n }\n\n this.hide();\n }\n\n private addOpenListeners() {\n document.addEventListener('keydown', this.handleDocumentKeyDown);\n }\n\n private removeOpenListeners() {\n document.removeEventListener('keydown', this.handleDocumentKeyDown);\n }\n\n private handleDocumentKeyDown = (event: KeyboardEvent) => {\n // Contained drawers aren't modal and don't response to the escape key\n if (this.contained) {\n return;\n }\n\n if (event.key === 'Escape' && this.modal.isActive() && this.open) {\n event.stopImmediatePropagation();\n this.requestClose('keyboard');\n }\n };\n\n @watch('open', { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.open) {\n // Show\n this.emit('syn-show');\n this.addOpenListeners();\n this.originalTrigger = document.activeElement as HTMLElement;\n\n // Lock body scrolling only if the drawer isn't contained\n if (!this.contained) {\n this.modal.activate();\n lockBodyScrolling(this);\n }\n\n // When the drawer is shown, Safari will attempt to set focus on whatever element has autofocus. This causes the\n // drawer's animation to jitter, so we'll temporarily remove the attribute, call `focus({ preventScroll: true })`\n // ourselves, and add the attribute back afterwards.\n //\n // Related: https://github.com/synergy-design-system/synergy/issues/693\n //\n const autoFocusTarget = this.querySelector('[autofocus]');\n if (autoFocusTarget) {\n autoFocusTarget.removeAttribute('autofocus');\n }\n\n await Promise.all([stopAnimations(this.drawer), stopAnimations(this.overlay)]);\n this.drawer.hidden = false;\n\n // Set initial focus\n requestAnimationFrame(() => {\n const slInitialFocus = this.emit('syn-initial-focus', { cancelable: true });\n\n if (!slInitialFocus.defaultPrevented) {\n // Set focus to the autofocus target and restore the attribute\n if (autoFocusTarget) {\n (autoFocusTarget as HTMLInputElement).focus({ preventScroll: true });\n } else {\n this.panel.focus({ preventScroll: true });\n }\n }\n\n // Restore the autofocus attribute\n if (autoFocusTarget) {\n autoFocusTarget.setAttribute('autofocus', '');\n }\n });\n\n const panelAnimation = getAnimation(this, `drawer.show${uppercaseFirstLetter(this.placement)}`, {\n dir: this.localize.dir()\n });\n const overlayAnimation = getAnimation(this, 'drawer.overlay.show', { dir: this.localize.dir() });\n await Promise.all([\n animateTo(this.panel, panelAnimation.keyframes, panelAnimation.options),\n animateTo(this.overlay, overlayAnimation.keyframes, overlayAnimation.options)\n ]);\n\n this.emit('syn-after-show');\n } else {\n // Hide\n this.emit('syn-hide');\n this.removeOpenListeners();\n\n if (!this.contained) {\n this.modal.deactivate();\n unlockBodyScrolling(this);\n }\n\n await Promise.all([stopAnimations(this.drawer), stopAnimations(this.overlay)]);\n const panelAnimation = getAnimation(this, `drawer.hide${uppercaseFirstLetter(this.placement)}`, {\n dir: this.localize.dir()\n });\n const overlayAnimation = getAnimation(this, 'drawer.overlay.hide', { dir: this.localize.dir() });\n\n // Animate the overlay and the panel at the same time. Because animation durations might be different, we need to\n // hide each one individually when the animation finishes, otherwise the first one that finishes will reappear\n // unexpectedly. We'll unhide them after all animations have completed.\n await Promise.all([\n animateTo(this.overlay, overlayAnimation.keyframes, overlayAnimation.options).then(() => {\n this.overlay.hidden = true;\n }),\n animateTo(this.panel, panelAnimation.keyframes, panelAnimation.options).then(() => {\n this.panel.hidden = true;\n })\n ]);\n\n this.drawer.hidden = true;\n\n // Now that the dialog is hidden, restore the overlay and panel for next time\n this.overlay.hidden = false;\n this.panel.hidden = false;\n\n // Restore focus to the original trigger\n const trigger = this.originalTrigger;\n if (typeof trigger?.focus === 'function') {\n setTimeout(() => trigger.focus());\n }\n\n this.emit('syn-after-hide');\n }\n }\n\n @watch('contained', { waitUntilFirstUpdate: true })\n handleNoModalChange() {\n if (this.open && !this.contained) {\n this.modal.activate();\n lockBodyScrolling(this);\n }\n\n if (this.open && this.contained) {\n this.modal.deactivate();\n unlockBodyScrolling(this);\n }\n }\n\n /** Shows the drawer. */\n async show() {\n if (this.open) {\n return undefined;\n }\n\n this.open = true;\n return waitForEvent(this, 'syn-after-show');\n }\n\n /** Hides the drawer */\n async hide() {\n if (!this.open) {\n return undefined;\n }\n\n this.open = false;\n return waitForEvent(this, 'syn-after-hide');\n }\n\n render() {\n return html`\n <div\n part=\"base\"\n class=${classMap({\n drawer: true,\n 'drawer--open': this.open,\n 'drawer--top': this.placement === 'top',\n 'drawer--end': this.placement === 'end',\n 'drawer--bottom': this.placement === 'bottom',\n 'drawer--start': this.placement === 'start',\n 'drawer--contained': this.contained,\n 'drawer--fixed': !this.contained,\n 'drawer--rtl': this.localize.dir() === 'rtl',\n 'drawer--has-footer': this.hasSlotController.test('footer')\n })}\n >\n <div part=\"overlay\" class=\"drawer__overlay\" @click=${() => this.requestClose('overlay')} tabindex=\"-1\"></div>\n\n <div\n part=\"panel\"\n class=\"drawer__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-hidden=${this.open ? 'false' : 'true'}\n aria-label=${ifDefined(this.noHeader ? this.label : undefined)}\n aria-labelledby=${ifDefined(!this.noHeader ? 'title' : undefined)}\n tabindex=\"0\"\n >\n ${!this.noHeader\n ? html`\n <header part=\"header\" class=\"drawer__header\">\n <h2 part=\"title\" class=\"drawer__title\" id=\"title\">\n <!-- If there's no label, use an invisible character to prevent the header from collapsing -->\n <slot name=\"label\"> ${this.label.length > 0 ? this.label : String.fromCharCode(65279)} </slot>\n </h2>\n <div part=\"header-actions\" class=\"drawer__header-actions\">\n <slot name=\"header-actions\"></slot>\n <syn-icon-button\n part=\"close-button\"\n exportparts=\"base:close-button__base\"\n class=\"drawer__close\"\n name=\"x-lg\"\n label=${this.localize.term('close')}\n library=\"system\"\n @click=${() => this.requestClose('close-button')}\n ></syn-icon-button>\n </div>\n </header>\n `\n : ''}\n\n <slot part=\"body\" class=\"drawer__body\"></slot>\n\n <footer part=\"footer\" class=\"drawer__footer\">\n <slot name=\"footer\"></slot>\n </footer>\n </div>\n </div>\n `;\n }\n}\n\n// Top\nsetDefaultAnimation('drawer.showTop', {\n keyframes: [\n { opacity: 0, translate: '0 -100%' },\n { opacity: 1, translate: '0 0' }\n ],\n options: { duration: 250, easing: 'ease' }\n});\n\nsetDefaultAnimation('drawer.hideTop', {\n keyframes: [\n { opacity: 1, translate: '0 0' },\n { opacity: 0, translate: '0 -100%' }\n ],\n options: { duration: 250, easing: 'ease' }\n});\n\n// End\nsetDefaultAnimation('drawer.showEnd', {\n keyframes: [\n { opacity: 0, translate: '100%' },\n { opacity: 1, translate: '0' }\n ],\n rtlKeyframes: [\n { opacity: 0, translate: '-100%' },\n { opacity: 1, translate: '0' }\n ],\n options: { duration: 250, easing: 'ease' }\n});\n\nsetDefaultAnimation('drawer.hideEnd', {\n keyframes: [\n { opacity: 1, translate: '0' },\n { opacity: 0, translate: '100%' }\n ],\n rtlKeyframes: [\n { opacity: 1, translate: '0' },\n { opacity: 0, translate: '-100%' }\n ],\n options: { duration: 250, easing: 'ease' }\n});\n\n// Bottom\nsetDefaultAnimation('drawer.showBottom', {\n keyframes: [\n { opacity: 0, translate: '0 100%' },\n { opacity: 1, translate: '0 0' }\n ],\n options: { duration: 250, easing: 'ease' }\n});\n\nsetDefaultAnimation('drawer.hideBottom', {\n keyframes: [\n { opacity: 1, translate: '0 0' },\n { opacity: 0, translate: '0 100%' }\n ],\n options: { duration: 250, easing: 'ease' }\n});\n\n// Start\nsetDefaultAnimation('drawer.showStart', {\n keyframes: [\n { opacity: 0, translate: '-100%' },\n { opacity: 1, translate: '0' }\n ],\n rtlKeyframes: [\n { opacity: 0, translate: '100%' },\n { opacity: 1, translate: '0' }\n ],\n options: { duration: 250, easing: 'ease' }\n});\n\nsetDefaultAnimation('drawer.hideStart', {\n keyframes: [\n { opacity: 1, translate: '0' },\n { opacity: 0, translate: '-100%' }\n ],\n rtlKeyframes: [\n { opacity: 1, translate: '0' },\n { opacity: 0, translate: '100%' }\n ],\n options: { duration: 250, easing: 'ease' }\n});\n\n// Deny close\nsetDefaultAnimation('drawer.denyClose', {\n keyframes: [{ scale: 1 }, { scale: 1.01 }, { scale: 1 }],\n options: { duration: 250 }\n});\n\n// Overlay\nsetDefaultAnimation('drawer.overlay.show', {\n keyframes: [{ opacity: 0 }, { opacity: 1 }],\n options: { duration: 250 }\n});\n\nsetDefaultAnimation('drawer.overlay.hide', {\n keyframes: [{ opacity: 1 }, { opacity: 0 }],\n options: { duration: 250 }\n});\n", "// ---------------------------------------------------------------------\n// \uD83D\uDD12 AUTOGENERATED BY VENDORISM\n// Removing this comment will prevent it from being managed by it.\n// ---------------------------------------------------------------------\n\n/* eslint-disable */\n/** Converts the first letter of a string to uppercase */\nexport function uppercaseFirstLetter(string: string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n", "// ---------------------------------------------------------------------\n// \uD83D\uDD12 AUTOGENERATED BY VENDORISM\n// Removing this comment will prevent it from being managed by it.\n// ---------------------------------------------------------------------\n\n/* eslint-disable */\n/**\n * Use a generator so we can iterate and possibly break early.\n * @example\n * // to operate like a regular array. This kinda nullifies generator benefits, but worth knowing if you need the whole array.\n * const allActiveElements = [...activeElements()]\n *\n * // Early return\n * for (const activeElement of activeElements()) {\n * if (<cond>) {\n * break; // Break the loop, dont need to iterate over the whole array or store an array in memory!\n * }\n * }\n */\nexport function* activeElements(activeElement: Element | null = document.activeElement): Generator<Element> {\n if (activeElement === null || activeElement === undefined) return;\n\n yield activeElement;\n\n if ('shadowRoot' in activeElement && activeElement.shadowRoot && activeElement.shadowRoot.mode !== 'closed') {\n yield* activeElements(activeElement.shadowRoot.activeElement);\n }\n}\n\nexport function getDeepestActiveElement() {\n return [...activeElements()].pop();\n}\n", "// ---------------------------------------------------------------------\n// \uD83D\uDD12 AUTOGENERATED BY VENDORISM\n// Removing this comment will prevent it from being managed by it.\n// ---------------------------------------------------------------------\n\n/* eslint-disable */\n//\n// This doesn't technically check visibility, it checks if the element has been rendered and can maybe possibly be tabbed\n// to. This is a workaround for shadow roots not having an `offsetParent`.\n//\n// See https://stackoverflow.com/questions/19669786/check-if-element-is-visible-in-dom\n//\n// Previously, we used https://www.npmjs.com/package/composed-offset-position, but recursing up an entire node tree took\n// up a lot of CPU cycles and made focus traps unusable in Chrome / Edge.\n//\nfunction isTakingUpSpace(elem: HTMLElement): boolean {\n return Boolean(elem.offsetParent || elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n}\n\n/** Determines if the specified element is tabbable using heuristics inspired by https://github.com/focus-trap/tabbable */\nfunction isTabbable(el: HTMLElement) {\n const tag = el.tagName.toLowerCase();\n\n // Elements with a -1 tab index are not tabbable\n if (el.getAttribute('tabindex') === '-1') {\n return false;\n }\n\n // Elements with a disabled attribute are not tabbable\n if (el.hasAttribute('disabled')) {\n return false;\n }\n\n // Radios without a checked attribute are not tabbable\n if (tag === 'input' && el.getAttribute('type') === 'radio' && !el.hasAttribute('checked')) {\n return false;\n }\n\n // Elements that are hidden have no offsetParent and are not tabbable\n if (!isTakingUpSpace(el)) {\n return false;\n }\n\n // Elements without visibility are not tabbable\n if (window.getComputedStyle(el).visibility === 'hidden') {\n return false;\n }\n\n // Audio and video elements with the controls attribute are tabbable\n if ((tag === 'audio' || tag === 'video') && el.hasAttribute('controls')) {\n return true;\n }\n\n // Elements with a tabindex other than -1 are tabbable\n if (el.hasAttribute('tabindex')) {\n return true;\n }\n\n // Elements with a contenteditable attribute are tabbable\n if (el.hasAttribute('contenteditable') && el.getAttribute('contenteditable') !== 'false') {\n return true;\n }\n\n // At this point, the following elements are considered tabbable\n return ['button', 'input', 'select', 'textarea', 'a', 'audio', 'video', 'summary'].includes(tag);\n}\n\n/**\n * Returns the first and last bounding elements that are tabbable. This is more performant than checking every single\n * element because it short-circuits after finding the first and last ones.\n */\nexport function getTabbableBoundary(root: HTMLElement | ShadowRoot) {\n const tabbableElements = getTabbableElements(root);\n\n // Find the first and last tabbable elements\n const start = tabbableElements[0] ?? null;\n const end = tabbableElements[tabbableElements.length - 1] ?? null;\n\n return { start, end };\n}\n\nexport function getTabbableElements(root: HTMLElement | ShadowRoot) {\n const tabbableElements: HTMLElement[] = [];\n\n function walk(el: HTMLElement | ShadowRoot) {\n if (el instanceof Element) {\n // if the element has \"inert\" we can just no-op it.\n if (el.hasAttribute('inert')) {\n return;\n }\n\n if (!tabbableElements.includes(el) && isTabbable(el)) {\n tabbableElements.push(el);\n }\n\n /**\n * This looks funky. Basically a slot's children will always be picked up *if* they're within the `root` element.\n * However, there is an edge case when, if the `root` is wrapped by another shadow DOM, it won't grab the children.\n * This fixes that fun edge case.\n */\n const slotChildrenOutsideRootElement = (slotElement: HTMLSlotElement) =>\n (slotElement.getRootNode({ composed: true }) as ShadowRoot | null)?.host !== root;\n\n if (el instanceof HTMLSlotElement && slotChildrenOutsideRootElement(el)) {\n el.assignedElements({ flatten: true }).forEach((assignedEl: HTMLElement) => {\n walk(assignedEl);\n });\n }\n\n if (el.shadowRoot !== null && el.shadowRoot.mode === 'open') {\n walk(el.shadowRoot);\n }\n }\n\n [...el.children].forEach((e: HTMLElement) => walk(e));\n }\n\n // Collect all elements including the root\n walk(root);\n\n // Is this worth having? Most sorts will always add increased overhead. And positive tabindexes shouldn't really be used.\n // So is it worth being right? Or fast?\n return tabbableElements.sort((a, b) => {\n // Make sure we sort by tabindex.\n const aTabindex = Number(a.getAttribute('tabindex')) || 0;\n const bTabindex = Number(b.getAttribute('tabindex')) || 0;\n return bTabindex - aTabindex;\n });\n}\n", "// ---------------------------------------------------------------------\n// \uD83D\uDD12 AUTOGENERATED BY VENDORISM\n// Removing this comment will prevent it from being managed by it.\n// ---------------------------------------------------------------------\n\n/* eslint-disable */\nimport { getDeepestActiveElement } from './active-elements.js';\nimport { getTabbableElements } from './tabbable.js';\n\nlet activeModals: HTMLElement[] = [];\n\nexport default class Modal {\n element: HTMLElement;\n isExternalActivated: boolean;\n tabDirection: 'forward' | 'backward' = 'forward';\n currentFocus: HTMLElement | null;\n\n constructor(element: HTMLElement) {\n this.element = element;\n }\n\n /** Activates focus trapping. */\n activate() {\n activeModals.push(this.element);\n document.addEventListener('focusin', this.handleFocusIn);\n document.addEventListener('keydown', this.handleKeyDown);\n document.addEventListener('keyup', this.handleKeyUp);\n }\n\n /** Deactivates focus trapping. */\n deactivate() {\n activeModals = activeModals.filter(modal => modal !== this.element);\n this.currentFocus = null;\n document.removeEventListener('focusin', this.handleFocusIn);\n document.removeEventListener('keydown', this.handleKeyDown);\n document.removeEventListener('keyup', this.handleKeyUp);\n }\n\n /** Determines if this modal element is currently active or not. */\n isActive() {\n // The \"active\" modal is always the most recent one shown\n return activeModals[activeModals.length - 1] === this.element;\n }\n\n /** Activates external modal behavior and temporarily disables focus trapping. */\n activateExternal() {\n this.isExternalActivated = true;\n }\n\n /** Deactivates external modal behavior and re-enables focus trapping. */\n deactivateExternal() {\n this.isExternalActivated = false;\n }\n\n private checkFocus() {\n if (this.isActive() && !this.isExternalActivated) {\n const tabbableElements = getTabbableElements(this.element);\n if (!this.element.matches(':focus-within')) {\n const start = tabbableElements[0];\n const end = tabbableElements[tabbableElements.length - 1];\n const target = this.tabDirection === 'forward' ? start : end;\n\n if (typeof target?.focus === 'function') {\n this.currentFocus = target;\n target.focus({ preventScroll: true });\n }\n }\n }\n }\n\n private handleFocusIn = () => {\n if (!this.isActive()) return;\n this.checkFocus();\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab' || this.isExternalActivated) return;\n if (!this.isActive()) return;\n\n if (event.shiftKey) {\n this.tabDirection = 'backward';\n } else {\n this.tabDirection = 'forward';\n }\n\n event.preventDefault();\n\n const tabbableElements = getTabbableElements(this.element);\n\n // Because sometimes focus can actually be taken over from outside sources,\n // we don't want to rely on `this.currentFocus`. Instead we check the actual `activeElement` and\n // recurse through shadowRoots.\n const currentActiveElement = getDeepestActiveElement();\n let currentFocusIndex = tabbableElements.findIndex(el => el === currentActiveElement);\n\n if (currentFocusIndex === -1) {\n this.currentFocus = tabbableElements[0];\n this.currentFocus?.focus({ preventScroll: true });\n return;\n }\n\n const addition = this.tabDirection === 'forward' ? 1 : -1;\n\n if (currentFocusIndex + addition >= tabbableElements.length) {\n currentFocusIndex = 0;\n } else if (currentFocusIndex + addition < 0) {\n currentFocusIndex = tabbableElements.length - 1;\n } else {\n currentFocusIndex += addition;\n }\n\n this.currentFocus = tabbableElements[currentFocusIndex];\n this.currentFocus?.focus({ preventScroll: true });\n\n setTimeout(() => this.checkFocus());\n };\n\n private handleKeyUp = () => {\n this.tabDirection = 'forward';\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk.LAB4YJYE.js";
7
7
  import {
8
8
  SynergyElement
9
- } from "./chunk.GHMKOVA3.js";
9
+ } from "./chunk.WDX7XUUK.js";
10
10
 
11
11
  // src/components/spinner/spinner.component.ts
12
12
  import { html } from "lit";
@@ -29,4 +29,4 @@ SynSpinner.styles = spinner_styles_default;
29
29
  export {
30
30
  SynSpinner
31
31
  };
32
- //# sourceMappingURL=chunk.SBEIXLRW.js.map
32
+ //# sourceMappingURL=chunk.HNRD7DBS.js.map