@expressivecss/expressive 0.9.0 → 0.10.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 (188) hide show
  1. package/CHANGELOG.md +174 -1
  2. package/README.md +178 -25
  3. package/dist/css/expressive.css +365 -1222
  4. package/dist/css/expressive.css.map +1 -1
  5. package/dist/css/expressive.min.css +1 -1
  6. package/dist/css/expressive.min.css.map +1 -1
  7. package/dist/fonts/material-symbols-outlined.woff2 +0 -0
  8. package/dist/fonts/material-symbols-rounded.woff2 +0 -0
  9. package/dist/fonts/material-symbols-sharp.woff2 +0 -0
  10. package/dist/js/chunks/chunk-7MM4VJJO.mjs +509 -0
  11. package/dist/js/chunks/chunk-7MM4VJJO.mjs.map +7 -0
  12. package/dist/js/chunks/chunk-7UXHSYIA.mjs +183 -0
  13. package/dist/js/chunks/chunk-7UXHSYIA.mjs.map +7 -0
  14. package/dist/js/chunks/chunk-A3BJA7V4.mjs +28 -0
  15. package/dist/js/chunks/chunk-A3BJA7V4.mjs.map +7 -0
  16. package/dist/js/chunks/chunk-AOGFNMXS.mjs +691 -0
  17. package/dist/js/chunks/chunk-AOGFNMXS.mjs.map +7 -0
  18. package/dist/js/chunks/chunk-D4UZ4HFN.mjs +560 -0
  19. package/dist/js/chunks/chunk-D4UZ4HFN.mjs.map +7 -0
  20. package/dist/js/chunks/chunk-EP3CVKB5.mjs +88 -0
  21. package/dist/js/chunks/chunk-EP3CVKB5.mjs.map +7 -0
  22. package/dist/js/chunks/chunk-G576EP5O.mjs +459 -0
  23. package/dist/js/chunks/chunk-G576EP5O.mjs.map +7 -0
  24. package/dist/js/chunks/chunk-GY2Z5CJ2.mjs +320 -0
  25. package/dist/js/chunks/chunk-GY2Z5CJ2.mjs.map +7 -0
  26. package/dist/js/chunks/chunk-JKNPQQWY.mjs +191 -0
  27. package/dist/js/chunks/chunk-JKNPQQWY.mjs.map +7 -0
  28. package/dist/js/chunks/chunk-JNPIWFJT.mjs +365 -0
  29. package/dist/js/chunks/chunk-JNPIWFJT.mjs.map +7 -0
  30. package/dist/js/chunks/chunk-JODJAGFS.mjs +267 -0
  31. package/dist/js/chunks/chunk-JODJAGFS.mjs.map +7 -0
  32. package/dist/js/chunks/chunk-JR24UB4X.mjs +100 -0
  33. package/dist/js/chunks/chunk-JR24UB4X.mjs.map +7 -0
  34. package/dist/js/chunks/chunk-KR44BSYQ.mjs +55 -0
  35. package/dist/js/chunks/chunk-KR44BSYQ.mjs.map +7 -0
  36. package/dist/js/chunks/chunk-LZVBJ33S.mjs +102 -0
  37. package/dist/js/chunks/chunk-LZVBJ33S.mjs.map +7 -0
  38. package/dist/js/chunks/chunk-MISGHDUU.mjs +326 -0
  39. package/dist/js/chunks/chunk-MISGHDUU.mjs.map +7 -0
  40. package/dist/js/chunks/chunk-N3UHGN3N.mjs +175 -0
  41. package/dist/js/chunks/chunk-N3UHGN3N.mjs.map +7 -0
  42. package/dist/js/chunks/chunk-PB5L3EXF.mjs +7 -0
  43. package/dist/js/chunks/chunk-PB5L3EXF.mjs.map +7 -0
  44. package/dist/js/chunks/chunk-PIIAEYAJ.mjs +85 -0
  45. package/dist/js/chunks/chunk-PIIAEYAJ.mjs.map +7 -0
  46. package/dist/js/chunks/chunk-QSQ24FYT.mjs +59 -0
  47. package/dist/js/chunks/chunk-QSQ24FYT.mjs.map +7 -0
  48. package/dist/js/chunks/chunk-QYCYP443.mjs +1111 -0
  49. package/dist/js/chunks/chunk-QYCYP443.mjs.map +7 -0
  50. package/dist/js/chunks/chunk-SLFNPY5M.mjs +78 -0
  51. package/dist/js/chunks/chunk-SLFNPY5M.mjs.map +7 -0
  52. package/dist/js/chunks/chunk-TK6PX2GC.mjs +663 -0
  53. package/dist/js/chunks/chunk-TK6PX2GC.mjs.map +7 -0
  54. package/dist/js/chunks/chunk-TYM6U5DY.mjs +76 -0
  55. package/dist/js/chunks/chunk-TYM6U5DY.mjs.map +7 -0
  56. package/dist/js/chunks/chunk-TZZ24ZQS.mjs +154 -0
  57. package/dist/js/chunks/chunk-TZZ24ZQS.mjs.map +7 -0
  58. package/dist/js/chunks/chunk-VAS6JQ6P.mjs +94 -0
  59. package/dist/js/chunks/chunk-VAS6JQ6P.mjs.map +7 -0
  60. package/dist/js/chunks/chunk-WWPAPHMA.mjs +1 -0
  61. package/dist/js/chunks/chunk-WWPAPHMA.mjs.map +7 -0
  62. package/dist/js/chunks/chunk-XDB3G6RL.mjs +114 -0
  63. package/dist/js/chunks/chunk-XDB3G6RL.mjs.map +7 -0
  64. package/dist/js/chunks/chunk-XO5WX3TK.mjs +226 -0
  65. package/dist/js/chunks/chunk-XO5WX3TK.mjs.map +7 -0
  66. package/dist/js/chunks/chunk-YFXEJ7GR.mjs +286 -0
  67. package/dist/js/chunks/chunk-YFXEJ7GR.mjs.map +7 -0
  68. package/dist/js/chunks/chunk-ZIZVUWRL.mjs +120 -0
  69. package/dist/js/chunks/chunk-ZIZVUWRL.mjs.map +7 -0
  70. package/dist/js/chunks/chunk-ZZBZI2XN.mjs +338 -0
  71. package/dist/js/chunks/chunk-ZZBZI2XN.mjs.map +7 -0
  72. package/dist/js/expressive.cjs +801 -761
  73. package/dist/js/expressive.cjs.map +4 -4
  74. package/dist/js/expressive.js +801 -761
  75. package/dist/js/expressive.js.map +4 -4
  76. package/dist/js/expressive.min.js +11 -15
  77. package/dist/js/expressive.min.js.map +4 -4
  78. package/dist/js/expressive.mjs +83 -7443
  79. package/dist/js/expressive.mjs.map +4 -4
  80. package/dist/js/internal/behaviors/bottomSheets.mjs +9 -0
  81. package/dist/js/internal/behaviors/bottomSheets.mjs.map +7 -0
  82. package/dist/js/internal/behaviors/dialogs.mjs +8 -0
  83. package/dist/js/internal/behaviors/dialogs.mjs.map +7 -0
  84. package/dist/js/internal/behaviors/forms.mjs +8 -0
  85. package/dist/js/internal/behaviors/forms.mjs.map +7 -0
  86. package/dist/js/internal/behaviors/sheetDrag.mjs +8 -0
  87. package/dist/js/internal/behaviors/sheetDrag.mjs.map +7 -0
  88. package/dist/js/internal/behaviors/sideSheets.mjs +9 -0
  89. package/dist/js/internal/behaviors/sideSheets.mjs.map +7 -0
  90. package/dist/js/internal/components/appBar.mjs +8 -0
  91. package/dist/js/internal/components/appBar.mjs.map +7 -0
  92. package/dist/js/internal/components/autocomplete.mjs +10 -0
  93. package/dist/js/internal/components/autocomplete.mjs.map +7 -0
  94. package/dist/js/internal/components/buttonGroup.mjs +8 -0
  95. package/dist/js/internal/components/buttonGroup.mjs.map +7 -0
  96. package/dist/js/internal/components/buttons.mjs +9 -0
  97. package/dist/js/internal/components/buttons.mjs.map +7 -0
  98. package/dist/js/internal/components/cards.mjs +13 -0
  99. package/dist/js/internal/components/cards.mjs.map +7 -0
  100. package/dist/js/internal/components/carousel.mjs +9 -0
  101. package/dist/js/internal/components/carousel.mjs.map +7 -0
  102. package/dist/js/internal/components/characterCounter.mjs +8 -0
  103. package/dist/js/internal/components/characterCounter.mjs.map +7 -0
  104. package/dist/js/internal/components/chips.mjs +11 -0
  105. package/dist/js/internal/components/chips.mjs.map +7 -0
  106. package/dist/js/internal/components/datepicker.mjs +12 -0
  107. package/dist/js/internal/components/datepicker.mjs.map +7 -0
  108. package/dist/js/internal/components/expandingCard.mjs +11 -0
  109. package/dist/js/internal/components/expandingCard.mjs.map +7 -0
  110. package/dist/js/internal/components/index.mjs +88 -0
  111. package/dist/js/internal/components/index.mjs.map +7 -0
  112. package/dist/js/internal/components/lightbox.mjs +9 -0
  113. package/dist/js/internal/components/lightbox.mjs.map +7 -0
  114. package/dist/js/internal/components/menu.mjs +9 -0
  115. package/dist/js/internal/components/menu.mjs.map +7 -0
  116. package/dist/js/internal/components/navigationRail.mjs +8 -0
  117. package/dist/js/internal/components/navigationRail.mjs.map +7 -0
  118. package/dist/js/internal/components/registry.mjs +33 -0
  119. package/dist/js/internal/components/registry.mjs.map +7 -0
  120. package/dist/js/internal/components/scrollspy.mjs +8 -0
  121. package/dist/js/internal/components/scrollspy.mjs.map +7 -0
  122. package/dist/js/internal/components/select.mjs +10 -0
  123. package/dist/js/internal/components/select.mjs.map +7 -0
  124. package/dist/js/internal/components/slider.mjs +9 -0
  125. package/dist/js/internal/components/slider.mjs.map +7 -0
  126. package/dist/js/internal/components/snackbar.mjs +8 -0
  127. package/dist/js/internal/components/snackbar.mjs.map +7 -0
  128. package/dist/js/internal/components/tabs.mjs +10 -0
  129. package/dist/js/internal/components/tabs.mjs.map +7 -0
  130. package/dist/js/internal/components/timepicker.mjs +10 -0
  131. package/dist/js/internal/components/timepicker.mjs.map +7 -0
  132. package/dist/js/internal/components/tooltip.mjs +9 -0
  133. package/dist/js/internal/components/tooltip.mjs.map +7 -0
  134. package/dist/js/internal/core/component.mjs +7 -0
  135. package/dist/js/internal/core/component.mjs.map +7 -0
  136. package/dist/js/internal/core/utils.mjs +7 -0
  137. package/dist/js/internal/core/utils.mjs.map +7 -0
  138. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +8 -0
  139. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs.map +7 -0
  140. package/dist/js/modular.mjs +113 -0
  141. package/dist/js/modular.mjs.map +7 -0
  142. package/dist/types/behaviors/sheetDrag.d.ts +1 -1
  143. package/dist/types/components/appBar.d.ts +1 -1
  144. package/dist/types/components/autocomplete.d.ts +9 -0
  145. package/dist/types/components/buttons.d.ts +4 -39
  146. package/dist/types/components/carousel.d.ts +10 -1
  147. package/dist/types/components/chips.d.ts +1 -0
  148. package/dist/types/components/datepicker.d.ts +11 -0
  149. package/dist/types/components/index.d.ts +0 -2
  150. package/dist/types/components/lightbox.d.ts +12 -0
  151. package/dist/types/components/menu.d.ts +3 -0
  152. package/dist/types/components/registry.d.ts +0 -4
  153. package/dist/types/components/select.d.ts +4 -0
  154. package/dist/types/components/slider.d.ts +2 -1
  155. package/dist/types/components/snackbar.d.ts +4 -2
  156. package/dist/types/components/tabs.d.ts +2 -1
  157. package/dist/types/components/timepicker.d.ts +5 -3
  158. package/dist/types/components/tooltip.d.ts +5 -3
  159. package/dist/types/index.d.ts +1 -8
  160. package/dist/types/modular.d.ts +28 -0
  161. package/package.json +16 -4
  162. package/src/sass/README.md +8 -0
  163. package/src/sass/components/_badges.scss +1 -6
  164. package/src/sass/components/_button-groups.scss +5 -1
  165. package/src/sass/components/_buttons.scss +8 -287
  166. package/src/sass/components/_chips.scss +17 -2
  167. package/src/sass/components/_dialog.scss +9 -4
  168. package/src/sass/components/_fab-menu.scss +11 -9
  169. package/src/sass/components/_icon-buttons.scss +0 -5
  170. package/src/sass/components/_index.scss +0 -5
  171. package/src/sass/components/_menu.scss +2 -2
  172. package/src/sass/components/_navigation-rail.scss +1 -1
  173. package/src/sass/components/_panes.scss +50 -78
  174. package/src/sass/components/_progress.scss +73 -13
  175. package/src/sass/components/_scrim.scss +4 -4
  176. package/src/sass/components/_side-sheet.scss +22 -12
  177. package/src/sass/components/_toolbar.scss +1 -4
  178. package/src/sass/components/_tooltip.scss +20 -2
  179. package/src/sass/components/forms/_input-fields.scss +5 -1
  180. package/src/sass/components/forms/_select.scss +1 -0
  181. package/src/sass/components/forms/_slider.scss +81 -25
  182. package/src/sass/custom.scss +38 -0
  183. package/dist/types/components/navigationDrawer.d.ts +0 -110
  184. package/src/sass/components/_banners.scss +0 -298
  185. package/src/sass/components/_bottom-app-bar.scss +0 -180
  186. package/src/sass/components/_floating-sheet.scss +0 -86
  187. package/src/sass/components/_navigation-drawer.scss +0 -476
  188. package/src/sass/components/_segmented-buttons.scss +0 -188
@@ -0,0 +1,365 @@
1
+ import {
2
+ Utils
3
+ } from "./chunk-MISGHDUU.mjs";
4
+ import {
5
+ Component
6
+ } from "./chunk-QSQ24FYT.mjs";
7
+
8
+ // src/ts/components/lightbox.ts
9
+ var _defaults = {
10
+ inDuration: 275,
11
+ outDuration: 200,
12
+ onOpenStart: null,
13
+ onOpenEnd: null,
14
+ onCloseStart: null,
15
+ onCloseEnd: null
16
+ };
17
+ var _Lightbox = class _Lightbox extends Component {
18
+ constructor(el, options) {
19
+ super(el, options, _Lightbox);
20
+ /** Ancestors forced to `overflow: visible`, with the inline value to put back. */
21
+ this._changedAncestorList = [];
22
+ this._timers = /* @__PURE__ */ new Map();
23
+ this._motion = window.matchMedia("(prefers-reduced-motion: reduce)");
24
+ this._isOpen = false;
25
+ this._destroyed = false;
26
+ this._revision = 0;
27
+ this._handleMotionChange = () => {
28
+ if (!this._motion.matches) return;
29
+ const callbacks = [...this._timers.values()];
30
+ const revision = this._cancel();
31
+ for (const callback of callbacks) {
32
+ if (revision !== this._revision) break;
33
+ callback();
34
+ }
35
+ if (this.overlayActive) {
36
+ for (const el of [this.el, this._overlay, this._photoCaption]) if (el) el.style.transition = "none";
37
+ }
38
+ };
39
+ this._handleLightboxClick = () => {
40
+ this._handleLightboxToggle();
41
+ };
42
+ this._handleLightboxKeypress = (e) => {
43
+ if (this._trigger === this.el && (e.key === Utils.keys.ENTER || e.key === " ")) {
44
+ e.preventDefault();
45
+ this._handleLightboxToggle();
46
+ }
47
+ };
48
+ this._handleLightboxToggle = () => {
49
+ if (this._isOpen) this.close();
50
+ else this.open();
51
+ };
52
+ this._handleWindowScroll = () => {
53
+ if (this.overlayActive) this.close();
54
+ };
55
+ this._handleWindowResize = () => {
56
+ if (this.overlayActive) this.close();
57
+ };
58
+ this._handleWindowEscape = (e) => {
59
+ if (e.key === Utils.keys.ESC) this.close();
60
+ };
61
+ /**
62
+ * Open lightbox.
63
+ */
64
+ this.open = () => {
65
+ if (this._destroyed || this._isOpen) return;
66
+ const revision = this._cancel();
67
+ if (this.overlayActive) this._reset();
68
+ this._isOpen = true;
69
+ this._updateVars();
70
+ const originRect = this.el.getBoundingClientRect();
71
+ const placeholderRect = this.placeholder.getBoundingClientRect();
72
+ this.originalWidth = originRect.width;
73
+ this.originalHeight = originRect.height;
74
+ this.doneAnimating = false;
75
+ this.el.classList.add("active");
76
+ this.overlayActive = true;
77
+ if (typeof this.options.onOpenStart === "function")
78
+ this.options.onOpenStart.call(this, this.el);
79
+ if (revision !== this._revision) return;
80
+ this.placeholder.style.width = placeholderRect.width + "px";
81
+ this.placeholder.style.height = placeholderRect.height + "px";
82
+ this.placeholder.style.position = "relative";
83
+ this.placeholder.style.top = "0";
84
+ this.placeholder.style.left = "0";
85
+ this._makeAncestorsOverflowVisible();
86
+ this.el.style.position = "absolute";
87
+ this.el.style.zIndex = "1000";
88
+ this.el.style.willChange = "left, top, width, height";
89
+ this.attrWidth = this.el.getAttribute("width");
90
+ this.attrHeight = this.el.getAttribute("height");
91
+ if (this.attrWidth) {
92
+ this.el.style.width = this.attrWidth + "px";
93
+ this.el.removeAttribute("width");
94
+ }
95
+ if (this.attrHeight) {
96
+ this.el.style.height = this.attrHeight + "px";
97
+ this.el.removeAttribute("height");
98
+ }
99
+ this._addOverlay();
100
+ if (this.caption !== "") this._addCaption();
101
+ const widthPercent = this.originalWidth / this.windowWidth;
102
+ const heightPercent = this.originalHeight / this.windowHeight;
103
+ this.newWidth = 0;
104
+ this.newHeight = 0;
105
+ if (widthPercent > heightPercent) {
106
+ const ratio = this.originalHeight / this.originalWidth;
107
+ this.newWidth = this.windowWidth * 0.9;
108
+ this.newHeight = this.windowWidth * 0.9 * ratio;
109
+ } else {
110
+ const ratio = this.originalWidth / this.originalHeight;
111
+ this.newWidth = this.windowHeight * 0.9 * ratio;
112
+ this.newHeight = this.windowHeight * 0.9;
113
+ }
114
+ window.addEventListener("scroll", this._handleWindowScroll, { passive: true });
115
+ window.addEventListener("resize", this._handleWindowResize, { passive: true });
116
+ window.addEventListener("keyup", this._handleWindowEscape);
117
+ this._animateImageIn();
118
+ };
119
+ /**
120
+ * Close lightbox.
121
+ */
122
+ this.close = () => {
123
+ if (this._destroyed || !this._isOpen) return;
124
+ const revision = this._cancel();
125
+ this._isOpen = false;
126
+ this.doneAnimating = false;
127
+ if (typeof this.options.onCloseStart === "function")
128
+ this.options.onCloseStart.call(this, this.el);
129
+ if (revision !== this._revision) return;
130
+ window.removeEventListener("scroll", this._handleWindowScroll);
131
+ window.removeEventListener("resize", this._handleWindowResize);
132
+ window.removeEventListener("keyup", this._handleWindowEscape);
133
+ if (this._overlay) this._removeOverlay();
134
+ if (this._photoCaption) this._removeCaption();
135
+ this._animateImageOut();
136
+ };
137
+ this.el["Expressive_Lightbox"] = this;
138
+ this.options = {
139
+ ..._Lightbox.defaults,
140
+ ...options
141
+ };
142
+ this.overlayActive = false;
143
+ this.doneAnimating = true;
144
+ this.placeholder = document.createElement("div");
145
+ this.placeholder.classList.add("material-placeholder");
146
+ this.originalWidth = 0;
147
+ this.originalHeight = 0;
148
+ this.originInlineStyles = this.el.getAttribute("style");
149
+ this.caption = this.el.getAttribute("data-caption") || "";
150
+ this._tabindex = this.el.getAttribute("tabindex");
151
+ this._trigger = this.el.closest("button") ?? this.el;
152
+ this.el.tabIndex = this._trigger === this.el ? 0 : -1;
153
+ this.el.before(this.placeholder);
154
+ this.placeholder.append(this.el);
155
+ this._setupEventHandlers();
156
+ }
157
+ static get defaults() {
158
+ return _defaults;
159
+ }
160
+ /**
161
+ * Initializes instances of Lightbox.
162
+ * @param els HTML elements.
163
+ * @param options Component options.
164
+ */
165
+ static init(els, options = {}) {
166
+ return super.init(els, options, _Lightbox);
167
+ }
168
+ static getInstance(el) {
169
+ return el["Expressive_Lightbox"];
170
+ }
171
+ destroy() {
172
+ if (this._destroyed) return;
173
+ this._destroyed = true;
174
+ const root = this.el.getRootNode();
175
+ const focused = root.activeElement === this.el;
176
+ this._removeEventHandlers();
177
+ this._cancel();
178
+ this._reset();
179
+ this.placeholder.replaceWith(this.el);
180
+ let active = document.activeElement;
181
+ while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
182
+ if (focused && (active === document.body || active === root.host)) this._trigger.focus();
183
+ if (this._tabindex === null) this.el.removeAttribute("tabindex");
184
+ else this.el.setAttribute("tabindex", this._tabindex);
185
+ this.el["Expressive_Lightbox"] = void 0;
186
+ }
187
+ _reset() {
188
+ window.removeEventListener("scroll", this._handleWindowScroll);
189
+ window.removeEventListener("resize", this._handleWindowResize);
190
+ window.removeEventListener("keyup", this._handleWindowEscape);
191
+ this._overlay?.remove();
192
+ this._photoCaption?.remove();
193
+ for (const ancestor of this._changedAncestorList) {
194
+ const saved = _Lightbox._overflow.get(ancestor);
195
+ if (--saved.count === 0) {
196
+ ancestor.style.setProperty("overflow", saved.value, saved.priority);
197
+ _Lightbox._overflow.delete(ancestor);
198
+ }
199
+ }
200
+ this._changedAncestorList = [];
201
+ if (this.attrWidth !== null && this.attrWidth !== void 0) this.el.setAttribute("width", this.attrWidth);
202
+ if (this.attrHeight !== null && this.attrHeight !== void 0) this.el.setAttribute("height", this.attrHeight);
203
+ this.el.classList.remove("active");
204
+ this.placeholder.removeAttribute("style");
205
+ if (this.originInlineStyles === null) this.el.removeAttribute("style");
206
+ else this.el.setAttribute("style", this.originInlineStyles);
207
+ this.overlayActive = false;
208
+ this._isOpen = false;
209
+ this.doneAnimating = true;
210
+ }
211
+ _cancel() {
212
+ for (const timer of this._timers.keys()) clearTimeout(timer);
213
+ this._timers.clear();
214
+ return ++this._revision;
215
+ }
216
+ _schedule(callback, delay) {
217
+ if (this._motion.matches) {
218
+ callback();
219
+ return;
220
+ }
221
+ const timer = setTimeout(() => {
222
+ this._timers.delete(timer);
223
+ callback();
224
+ }, delay);
225
+ this._timers.set(timer, callback);
226
+ }
227
+ _setupEventHandlers() {
228
+ this._motion.addEventListener("change", this._handleMotionChange);
229
+ this._trigger.addEventListener("click", this._handleLightboxClick);
230
+ this.el.addEventListener("keydown", this._handleLightboxKeypress);
231
+ }
232
+ _removeEventHandlers() {
233
+ this._motion.removeEventListener("change", this._handleMotionChange);
234
+ this._trigger.removeEventListener("click", this._handleLightboxClick);
235
+ this.el.removeEventListener("keydown", this._handleLightboxKeypress);
236
+ }
237
+ _makeAncestorsOverflowVisible() {
238
+ this._changedAncestorList = [];
239
+ let ancestor = this.placeholder.parentNode;
240
+ while (ancestor !== null && ancestor !== void 0 && ancestor !== document) {
241
+ const curr = ancestor;
242
+ if (curr.style && (curr.style.overflow !== "visible" || _Lightbox._overflow.has(curr))) {
243
+ const saved = _Lightbox._overflow.get(curr) ?? { count: 0, value: curr.style.overflow, priority: curr.style.getPropertyPriority("overflow") };
244
+ saved.count++;
245
+ _Lightbox._overflow.set(curr, saved);
246
+ this._changedAncestorList.push(curr);
247
+ curr.style.overflow = "visible";
248
+ }
249
+ ancestor = ancestor.parentNode ?? ancestor.host;
250
+ }
251
+ }
252
+ _offset(el) {
253
+ const box = el.getBoundingClientRect();
254
+ const docElem = document.documentElement;
255
+ return {
256
+ top: box.top + window.scrollY - docElem.clientTop,
257
+ left: box.left + window.scrollX - docElem.clientLeft
258
+ };
259
+ }
260
+ _updateVars() {
261
+ this.windowWidth = window.innerWidth;
262
+ this.windowHeight = window.innerHeight;
263
+ this.caption = this.el.getAttribute("data-caption") || "";
264
+ }
265
+ // Image
266
+ _animateImageIn() {
267
+ this.el.style.maxHeight = this.newHeight.toString() + "px";
268
+ this.el.style.maxWidth = this.newWidth.toString() + "px";
269
+ const duration = this._motion.matches ? 0 : this.options.inDuration;
270
+ this.el.style.transition = "none";
271
+ this.el.style.height = this.originalHeight + "px";
272
+ this.el.style.width = this.originalWidth + "px";
273
+ this._schedule(() => {
274
+ const placeholderOffset = this._offset(this.placeholder);
275
+ this.el.style.transition = `height ${duration}ms ease,
276
+ width ${duration}ms ease,
277
+ left ${duration}ms ease,
278
+ top ${duration}ms ease
279
+ `;
280
+ this.el.style.height = this.newHeight + "px";
281
+ this.el.style.width = this.newWidth + "px";
282
+ this.el.style.left = Utils.getDocumentScrollLeft() + this.windowWidth / 2 - placeholderOffset.left - this.newWidth / 2 + "px";
283
+ this.el.style.top = Utils.getDocumentScrollTop() + this.windowHeight / 2 - placeholderOffset.top - this.newHeight / 2 + "px";
284
+ }, 1);
285
+ this._schedule(() => {
286
+ this.doneAnimating = true;
287
+ if (typeof this.options.onOpenEnd === "function") this.options.onOpenEnd.call(this, this.el);
288
+ }, duration);
289
+ }
290
+ _animateImageOut() {
291
+ const duration = this._motion.matches ? 0 : this.options.outDuration;
292
+ this.el.style.transition = `height ${duration}ms ease,
293
+ width ${duration}ms ease,
294
+ left ${duration}ms ease,
295
+ top ${duration}ms ease
296
+ `;
297
+ this.el.style.height = this.originalHeight + "px";
298
+ this.el.style.width = this.originalWidth + "px";
299
+ this.el.style.left = "0";
300
+ this.el.style.top = "0";
301
+ this._schedule(() => {
302
+ this._reset();
303
+ if (typeof this.options.onCloseEnd === "function")
304
+ this.options.onCloseEnd.call(this, this.el);
305
+ }, duration);
306
+ }
307
+ // Caption
308
+ _addCaption() {
309
+ this._photoCaption = document.createElement("div");
310
+ this._photoCaption.classList.add("lightbox-caption");
311
+ this._photoCaption.innerText = this.caption;
312
+ Utils.portalRoot(this.el).append(this._photoCaption);
313
+ this._photoCaption.style.display = "inline";
314
+ this._photoCaption.style.transition = "none";
315
+ this._photoCaption.style.opacity = "0";
316
+ const duration = this._motion.matches ? 0 : this.options.inDuration;
317
+ this._schedule(() => {
318
+ this._photoCaption.style.transition = `opacity ${duration}ms ease`;
319
+ this._photoCaption.style.opacity = "1";
320
+ }, 1);
321
+ }
322
+ _removeCaption() {
323
+ const duration = this._motion.matches ? 0 : this.options.outDuration;
324
+ this._photoCaption.style.transition = `opacity ${duration}ms ease`;
325
+ this._photoCaption.style.opacity = "0";
326
+ }
327
+ // Overlay
328
+ _addOverlay() {
329
+ this._overlay = document.createElement("div");
330
+ this._overlay.id = "lightbox-overlay";
331
+ this._overlay.addEventListener(
332
+ "click",
333
+ (event) => {
334
+ event.stopPropagation();
335
+ this.close();
336
+ },
337
+ { once: true }
338
+ );
339
+ this.el.before(this._overlay);
340
+ const overlayOffset = this._overlay.getBoundingClientRect();
341
+ this._overlay.style.width = this.windowWidth + "px";
342
+ this._overlay.style.height = this.windowHeight + "px";
343
+ this._overlay.style.left = -1 * overlayOffset.left + "px";
344
+ this._overlay.style.top = -1 * overlayOffset.top + "px";
345
+ this._overlay.style.transition = "none";
346
+ this._overlay.style.opacity = "0";
347
+ const duration = this._motion.matches ? 0 : this.options.inDuration;
348
+ this._schedule(() => {
349
+ this._overlay.style.transition = `opacity ${duration}ms ease`;
350
+ this._overlay.style.opacity = "1";
351
+ }, 1);
352
+ }
353
+ _removeOverlay() {
354
+ const duration = this._motion.matches ? 0 : this.options.outDuration;
355
+ this._overlay.style.transition = `opacity ${duration}ms ease`;
356
+ this._overlay.style.opacity = "0";
357
+ }
358
+ };
359
+ _Lightbox._overflow = /* @__PURE__ */ new WeakMap();
360
+ var Lightbox = _Lightbox;
361
+
362
+ export {
363
+ Lightbox
364
+ };
365
+ //# sourceMappingURL=chunk-JNPIWFJT.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ts/components/lightbox.ts"],
4
+ "sourcesContent": ["import { Utils } from '../core/utils';\nimport { BaseOptions, Component, InitElements, InitElement } from '../core/component';\n\nexport interface LightboxOptions extends BaseOptions {\n /**\n * Transition in duration in milliseconds.\n * @default 275\n */\n inDuration: number;\n /**\n * Transition out duration in milliseconds.\n * @default 200\n */\n outDuration: number;\n /**\n * Callback function called before lightbox is opened.\n * @default null\n */\n onOpenStart: (el: Element) => void;\n /**\n * Callback function called after lightbox is opened.\n * @default null\n */\n onOpenEnd: (el: Element) => void;\n /**\n * Callback function called before lightbox is closed.\n * @default null\n */\n onCloseStart: (el: Element) => void;\n /**\n * Callback function called after lightbox is closed.\n * @default null\n */\n onCloseEnd: (el: Element) => void;\n}\n\nconst _defaults: LightboxOptions = {\n inDuration: 275,\n outDuration: 200,\n onOpenStart: null,\n onOpenEnd: null,\n onCloseStart: null,\n onCloseEnd: null\n};\n\nexport class Lightbox extends Component<LightboxOptions> {\n /** If the lightbox overlay is showing. */\n overlayActive: boolean;\n /** If the lightbox is no longer being animated. */\n doneAnimating: boolean;\n /** Caption, if specified. */\n caption: string;\n /** Original width of image. */\n originalWidth: number;\n /** Original height of image. */\n originalHeight: number;\n private originInlineStyles: string;\n private placeholder: HTMLElement;\n /** Ancestors forced to `overflow: visible`, with the inline value to put back. */\n private _changedAncestorList: HTMLElement[] = [];\n private static _overflow = new WeakMap<HTMLElement, { count: number; value: string; priority: string }>();\n private newHeight: number;\n private newWidth: number;\n private windowWidth: number;\n private windowHeight: number;\n private attrWidth: string;\n private attrHeight: string;\n private _overlay: HTMLElement;\n private _photoCaption: HTMLElement;\n private _trigger: HTMLElement;\n private _tabindex: string | null;\n private _timers = new Map<ReturnType<typeof setTimeout>, () => void>();\n private _motion = window.matchMedia('(prefers-reduced-motion: reduce)');\n private _isOpen = false;\n private _destroyed = false;\n private _revision = 0;\n\n constructor(el: HTMLElement, options: Partial<LightboxOptions>) {\n super(el, options, Lightbox);\n this.el['Expressive_Lightbox'] = this;\n\n this.options = {\n ...Lightbox.defaults,\n ...options\n };\n\n this.overlayActive = false;\n this.doneAnimating = true;\n this.placeholder = document.createElement('div');\n this.placeholder.classList.add('material-placeholder');\n this.originalWidth = 0;\n this.originalHeight = 0;\n this.originInlineStyles = this.el.getAttribute('style');\n this.caption = this.el.getAttribute('data-caption') || '';\n this._tabindex = this.el.getAttribute('tabindex');\n this._trigger = this.el.closest('button') ?? this.el;\n this.el.tabIndex = this._trigger === this.el ? 0 : -1;\n // Wrap\n this.el.before(this.placeholder);\n this.placeholder.append(this.el);\n this._setupEventHandlers();\n }\n\n static get defaults(): LightboxOptions {\n return _defaults;\n }\n\n /**\n * Initializes instance of Lightbox.\n * @param el HTML element.\n * @param options Component options.\n */\n static init(el: HTMLElement, options?: Partial<LightboxOptions>): Lightbox;\n /**\n * Initializes instances of Lightbox.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(els: InitElements<InitElement>, options?: Partial<LightboxOptions>): Lightbox[];\n /**\n * Initializes instances of Lightbox.\n * @param els HTML elements.\n * @param options Component options.\n */\n static init(\n els: HTMLElement | InitElements<InitElement>,\n options: Partial<LightboxOptions> = {}\n ): Lightbox | Lightbox[] {\n return super.init(els, options, Lightbox);\n }\n\n static getInstance(el: HTMLElement): Lightbox {\n return el['Expressive_Lightbox'];\n }\n\n destroy() {\n if (this._destroyed) return;\n this._destroyed = true;\n const root = this.el.getRootNode() as Document | ShadowRoot;\n const focused = root.activeElement === this.el;\n this._removeEventHandlers();\n this._cancel();\n this._reset();\n this.placeholder.replaceWith(this.el);\n let active = document.activeElement;\n while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;\n if (focused && (active === document.body || active === (root as ShadowRoot).host)) this._trigger.focus();\n if (this._tabindex === null) this.el.removeAttribute('tabindex');\n else this.el.setAttribute('tabindex', this._tabindex);\n this.el['Expressive_Lightbox'] = undefined;\n }\n\n private _reset() {\n window.removeEventListener('scroll', this._handleWindowScroll);\n window.removeEventListener('resize', this._handleWindowResize);\n window.removeEventListener('keyup', this._handleWindowEscape);\n this._overlay?.remove();\n this._photoCaption?.remove();\n for (const ancestor of this._changedAncestorList) {\n const saved = Lightbox._overflow.get(ancestor);\n if (--saved.count === 0) {\n ancestor.style.setProperty('overflow', saved.value, saved.priority);\n Lightbox._overflow.delete(ancestor);\n }\n }\n this._changedAncestorList = [];\n if (this.attrWidth !== null && this.attrWidth !== undefined) this.el.setAttribute('width', this.attrWidth);\n if (this.attrHeight !== null && this.attrHeight !== undefined) this.el.setAttribute('height', this.attrHeight);\n this.el.classList.remove('active');\n this.placeholder.removeAttribute('style');\n if (this.originInlineStyles === null) this.el.removeAttribute('style');\n else this.el.setAttribute('style', this.originInlineStyles);\n this.overlayActive = false;\n this._isOpen = false;\n this.doneAnimating = true;\n }\n\n private _cancel() {\n for (const timer of this._timers.keys()) clearTimeout(timer);\n this._timers.clear();\n return ++this._revision;\n }\n\n private _schedule(callback: () => void, delay: number) {\n if (this._motion.matches) { callback(); return; }\n const timer = setTimeout(() => { this._timers.delete(timer); callback(); }, delay);\n this._timers.set(timer, callback);\n }\n\n private _handleMotionChange = () => {\n if (!this._motion.matches) return;\n const callbacks = [...this._timers.values()];\n const revision = this._cancel();\n for (const callback of callbacks) {\n if (revision !== this._revision) break;\n callback();\n }\n if (this.overlayActive) {\n for (const el of [this.el, this._overlay, this._photoCaption]) if (el) el.style.transition = 'none';\n }\n };\n\n private _setupEventHandlers() {\n this._motion.addEventListener('change', this._handleMotionChange);\n this._trigger.addEventListener('click', this._handleLightboxClick);\n this.el.addEventListener('keydown', this._handleLightboxKeypress);\n }\n\n private _removeEventHandlers() {\n this._motion.removeEventListener('change', this._handleMotionChange);\n this._trigger.removeEventListener('click', this._handleLightboxClick);\n this.el.removeEventListener('keydown', this._handleLightboxKeypress);\n }\n\n private _handleLightboxClick = () => {\n this._handleLightboxToggle();\n };\n\n private _handleLightboxKeypress = (e: KeyboardEvent) => {\n if (this._trigger === this.el && (e.key === Utils.keys.ENTER || e.key === ' ')) {\n e.preventDefault();\n this._handleLightboxToggle();\n }\n };\n\n private _handleLightboxToggle = () => {\n // If already modal, return to original\n if (this._isOpen) this.close();\n else this.open();\n };\n\n private _handleWindowScroll = () => {\n if (this.overlayActive) this.close();\n };\n\n private _handleWindowResize = () => {\n if (this.overlayActive) this.close();\n };\n\n private _handleWindowEscape = (e: KeyboardEvent) => {\n if (e.key === Utils.keys.ESC) this.close();\n };\n\n private _makeAncestorsOverflowVisible() {\n this._changedAncestorList = [];\n let ancestor: Node = this.placeholder.parentNode;\n while (ancestor !== null && ancestor !== undefined && ancestor !== document) {\n const curr = <HTMLElement>ancestor;\n // A shadow root has no style; the clipping ancestors are above its host.\n if (curr.style && (curr.style.overflow !== 'visible' || Lightbox._overflow.has(curr))) {\n // Read before the write: an author's inline `overflow` has to come\n // back on close, and restoring '' would silently discard it.\n const saved = Lightbox._overflow.get(curr) ?? { count: 0, value: curr.style.overflow, priority: curr.style.getPropertyPriority('overflow') };\n saved.count++;\n Lightbox._overflow.set(curr, saved);\n this._changedAncestorList.push(curr);\n curr.style.overflow = 'visible';\n }\n ancestor = ancestor.parentNode ?? (<ShadowRoot>ancestor).host;\n }\n }\n\n private _offset(el: HTMLElement) {\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.scrollY - docElem.clientTop,\n left: box.left + window.scrollX - docElem.clientLeft\n };\n }\n private _updateVars(): void {\n this.windowWidth = window.innerWidth;\n this.windowHeight = window.innerHeight;\n this.caption = this.el.getAttribute('data-caption') || '';\n }\n\n // Image\n private _animateImageIn(): void {\n this.el.style.maxHeight = this.newHeight.toString() + 'px';\n this.el.style.maxWidth = this.newWidth.toString() + 'px';\n const duration = this._motion.matches ? 0 : this.options.inDuration;\n // from\n this.el.style.transition = 'none';\n this.el.style.height = this.originalHeight + 'px';\n this.el.style.width = this.originalWidth + 'px';\n this._schedule(() => {\n // One offset for both axes, read before any of the writes below.\n const placeholderOffset = this._offset(this.placeholder);\n // easeOutQuad\n this.el.style.transition = `height ${duration}ms ease,\n width ${duration}ms ease,\n left ${duration}ms ease,\n top ${duration}ms ease\n `;\n // to\n this.el.style.height = this.newHeight + 'px';\n this.el.style.width = this.newWidth + 'px';\n this.el.style.left =\n Utils.getDocumentScrollLeft() +\n this.windowWidth / 2 -\n placeholderOffset.left -\n this.newWidth / 2 +\n 'px';\n\n this.el.style.top =\n Utils.getDocumentScrollTop() +\n this.windowHeight / 2 -\n placeholderOffset.top -\n this.newHeight / 2 +\n 'px';\n }, 1);\n\n this._schedule(() => {\n this.doneAnimating = true;\n if (typeof this.options.onOpenEnd === 'function') this.options.onOpenEnd.call(this, this.el);\n }, duration);\n\n }\n private _animateImageOut(): void {\n const duration = this._motion.matches ? 0 : this.options.outDuration;\n // easeOutQuad\n this.el.style.transition = `height ${duration}ms ease,\n width ${duration}ms ease,\n left ${duration}ms ease,\n top ${duration}ms ease\n `;\n // to\n this.el.style.height = this.originalHeight + 'px'; // was originalWidth\n this.el.style.width = this.originalWidth + 'px';\n this.el.style.left = '0';\n this.el.style.top = '0';\n this._schedule(() => {\n this._reset();\n // onCloseEnd callback\n if (typeof this.options.onCloseEnd === 'function')\n this.options.onCloseEnd.call(this, this.el);\n }, duration);\n }\n\n // Caption\n private _addCaption(): void {\n this._photoCaption = document.createElement('div');\n this._photoCaption.classList.add('lightbox-caption');\n this._photoCaption.innerText = this.caption;\n Utils.portalRoot(this.el).append(this._photoCaption);\n this._photoCaption.style.display = 'inline';\n // Animate\n this._photoCaption.style.transition = 'none';\n this._photoCaption.style.opacity = '0';\n const duration = this._motion.matches ? 0 : this.options.inDuration;\n this._schedule(() => {\n this._photoCaption.style.transition = `opacity ${duration}ms ease`;\n this._photoCaption.style.opacity = '1';\n }, 1);\n }\n private _removeCaption(): void {\n const duration = this._motion.matches ? 0 : this.options.outDuration;\n this._photoCaption.style.transition = `opacity ${duration}ms ease`;\n this._photoCaption.style.opacity = '0';\n }\n\n // Overlay\n private _addOverlay(): void {\n this._overlay = document.createElement('div');\n this._overlay.id = 'lightbox-overlay';\n this._overlay.addEventListener(\n 'click',\n (event) => {\n event.stopPropagation();\n this.close();\n },\n { once: true }\n );\n\n // Put before in origin image to preserve z-index layering.\n this.el.before(this._overlay);\n\n // Set dimensions if needed\n const overlayOffset = this._overlay.getBoundingClientRect();\n this._overlay.style.width = this.windowWidth + 'px';\n this._overlay.style.height = this.windowHeight + 'px';\n this._overlay.style.left = -1 * overlayOffset.left + 'px';\n this._overlay.style.top = -1 * overlayOffset.top + 'px';\n\n // Animate\n this._overlay.style.transition = 'none';\n this._overlay.style.opacity = '0';\n const duration = this._motion.matches ? 0 : this.options.inDuration;\n this._schedule(() => {\n this._overlay.style.transition = `opacity ${duration}ms ease`;\n this._overlay.style.opacity = '1';\n }, 1);\n }\n private _removeOverlay(): void {\n const duration = this._motion.matches ? 0 : this.options.outDuration;\n this._overlay.style.transition = `opacity ${duration}ms ease`;\n this._overlay.style.opacity = '0';\n }\n\n /**\n * Open lightbox.\n */\n open = () => {\n if (this._destroyed || this._isOpen) return;\n const revision = this._cancel();\n if (this.overlayActive) this._reset();\n this._isOpen = true;\n this._updateVars();\n // Both rects are read up front: measuring the placeholder after writing\n // its width forced a second layout for the height.\n const originRect = this.el.getBoundingClientRect();\n const placeholderRect = this.placeholder.getBoundingClientRect();\n this.originalWidth = originRect.width;\n this.originalHeight = originRect.height;\n // Set states\n this.doneAnimating = false;\n this.el.classList.add('active');\n this.overlayActive = true;\n // onOpenStart callback\n if (typeof this.options.onOpenStart === 'function')\n this.options.onOpenStart.call(this, this.el);\n if (revision !== this._revision) return;\n // Set positioning for placeholder\n this.placeholder.style.width = placeholderRect.width + 'px';\n this.placeholder.style.height = placeholderRect.height + 'px';\n this.placeholder.style.position = 'relative';\n this.placeholder.style.top = '0';\n this.placeholder.style.left = '0';\n this._makeAncestorsOverflowVisible();\n // Set css on origin\n this.el.style.position = 'absolute';\n this.el.style.zIndex = '1000';\n this.el.style.willChange = 'left, top, width, height';\n // Change from width or height attribute to css\n this.attrWidth = this.el.getAttribute('width');\n this.attrHeight = this.el.getAttribute('height');\n if (this.attrWidth) {\n this.el.style.width = this.attrWidth + 'px';\n this.el.removeAttribute('width');\n }\n if (this.attrHeight) {\n this.el.style.height = this.attrHeight + 'px'; // was width, from the height attribute\n this.el.removeAttribute('height');\n }\n this._addOverlay();\n // Add and animate caption if it exists\n if (this.caption !== '') this._addCaption();\n // Resize Image\n const widthPercent = this.originalWidth / this.windowWidth;\n const heightPercent = this.originalHeight / this.windowHeight;\n this.newWidth = 0;\n this.newHeight = 0;\n if (widthPercent > heightPercent) {\n // Width first\n const ratio = this.originalHeight / this.originalWidth;\n this.newWidth = this.windowWidth * 0.9;\n this.newHeight = this.windowWidth * 0.9 * ratio;\n } else {\n // Height first\n const ratio = this.originalWidth / this.originalHeight;\n this.newWidth = this.windowHeight * 0.9 * ratio;\n this.newHeight = this.windowHeight * 0.9;\n }\n // Handle Exit triggers\n window.addEventListener('scroll', this._handleWindowScroll, { passive: true });\n window.addEventListener('resize', this._handleWindowResize, { passive: true });\n window.addEventListener('keyup', this._handleWindowEscape);\n this._animateImageIn();\n };\n\n /**\n * Close lightbox.\n */\n close = () => {\n if (this._destroyed || !this._isOpen) return;\n const revision = this._cancel();\n this._isOpen = false;\n this.doneAnimating = false;\n // onCloseStart callback\n if (typeof this.options.onCloseStart === 'function')\n this.options.onCloseStart.call(this, this.el);\n if (revision !== this._revision) return;\n // disable exit handlers\n window.removeEventListener('scroll', this._handleWindowScroll);\n window.removeEventListener('resize', this._handleWindowResize);\n window.removeEventListener('keyup', this._handleWindowEscape);\n if (this._overlay) this._removeOverlay();\n if (this._photoCaption) this._removeCaption();\n this._animateImageOut();\n };\n}\n"],
5
+ "mappings": ";;;;;;;;AAoCA,IAAM,YAA6B;AAAA,EACjC,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,aAAa;AAAA,EACb,WAAW;AAAA,EACX,cAAc;AAAA,EACd,YAAY;AACd;AAEO,IAAM,YAAN,MAAM,kBAAiB,UAA2B;AAAA,EAgCvD,YAAY,IAAiB,SAAmC;AAC9D,UAAM,IAAI,SAAS,SAAQ;AAnB7B;AAAA,SAAQ,uBAAsC,CAAC;AAY/C,SAAQ,UAAU,oBAAI,IAA+C;AACrE,SAAQ,UAAU,OAAO,WAAW,kCAAkC;AACtE,SAAQ,UAAU;AAClB,SAAQ,aAAa;AACrB,SAAQ,YAAY;AAkHpB,SAAQ,sBAAsB,MAAM;AAClC,UAAI,CAAC,KAAK,QAAQ,QAAS;AAC3B,YAAM,YAAY,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC;AAC3C,YAAM,WAAW,KAAK,QAAQ;AAC9B,iBAAW,YAAY,WAAW;AAChC,YAAI,aAAa,KAAK,UAAW;AACjC,iBAAS;AAAA,MACX;AACA,UAAI,KAAK,eAAe;AACtB,mBAAW,MAAM,CAAC,KAAK,IAAI,KAAK,UAAU,KAAK,aAAa,EAAG,KAAI,GAAI,IAAG,MAAM,aAAa;AAAA,MAC/F;AAAA,IACF;AAcA,SAAQ,uBAAuB,MAAM;AACnC,WAAK,sBAAsB;AAAA,IAC7B;AAEA,SAAQ,0BAA0B,CAAC,MAAqB;AACtD,UAAI,KAAK,aAAa,KAAK,OAAO,EAAE,QAAQ,MAAM,KAAK,SAAS,EAAE,QAAQ,MAAM;AAC9E,UAAE,eAAe;AACjB,aAAK,sBAAsB;AAAA,MAC7B;AAAA,IACF;AAEA,SAAQ,wBAAwB,MAAM;AAEpC,UAAI,KAAK,QAAS,MAAK,MAAM;AAAA,UACxB,MAAK,KAAK;AAAA,IACjB;AAEA,SAAQ,sBAAsB,MAAM;AAClC,UAAI,KAAK,cAAe,MAAK,MAAM;AAAA,IACrC;AAEA,SAAQ,sBAAsB,MAAM;AAClC,UAAI,KAAK,cAAe,MAAK,MAAM;AAAA,IACrC;AAEA,SAAQ,sBAAsB,CAAC,MAAqB;AAClD,UAAI,EAAE,QAAQ,MAAM,KAAK,IAAK,MAAK,MAAM;AAAA,IAC3C;AAiKA;AAAA;AAAA;AAAA,gBAAO,MAAM;AACX,UAAI,KAAK,cAAc,KAAK,QAAS;AACrC,YAAM,WAAW,KAAK,QAAQ;AAC9B,UAAI,KAAK,cAAe,MAAK,OAAO;AACpC,WAAK,UAAU;AACf,WAAK,YAAY;AAGjB,YAAM,aAAa,KAAK,GAAG,sBAAsB;AACjD,YAAM,kBAAkB,KAAK,YAAY,sBAAsB;AAC/D,WAAK,gBAAgB,WAAW;AAChC,WAAK,iBAAiB,WAAW;AAEjC,WAAK,gBAAgB;AACrB,WAAK,GAAG,UAAU,IAAI,QAAQ;AAC9B,WAAK,gBAAgB;AAErB,UAAI,OAAO,KAAK,QAAQ,gBAAgB;AACtC,aAAK,QAAQ,YAAY,KAAK,MAAM,KAAK,EAAE;AAC7C,UAAI,aAAa,KAAK,UAAW;AAEjC,WAAK,YAAY,MAAM,QAAQ,gBAAgB,QAAQ;AACvD,WAAK,YAAY,MAAM,SAAS,gBAAgB,SAAS;AACzD,WAAK,YAAY,MAAM,WAAW;AAClC,WAAK,YAAY,MAAM,MAAM;AAC7B,WAAK,YAAY,MAAM,OAAO;AAC9B,WAAK,8BAA8B;AAEnC,WAAK,GAAG,MAAM,WAAW;AACzB,WAAK,GAAG,MAAM,SAAS;AACvB,WAAK,GAAG,MAAM,aAAa;AAE3B,WAAK,YAAY,KAAK,GAAG,aAAa,OAAO;AAC7C,WAAK,aAAa,KAAK,GAAG,aAAa,QAAQ;AAC/C,UAAI,KAAK,WAAW;AAClB,aAAK,GAAG,MAAM,QAAQ,KAAK,YAAY;AACvC,aAAK,GAAG,gBAAgB,OAAO;AAAA,MACjC;AACA,UAAI,KAAK,YAAY;AACnB,aAAK,GAAG,MAAM,SAAS,KAAK,aAAa;AACzC,aAAK,GAAG,gBAAgB,QAAQ;AAAA,MAClC;AACA,WAAK,YAAY;AAEjB,UAAI,KAAK,YAAY,GAAI,MAAK,YAAY;AAE1C,YAAM,eAAe,KAAK,gBAAgB,KAAK;AAC/C,YAAM,gBAAgB,KAAK,iBAAiB,KAAK;AACjD,WAAK,WAAW;AAChB,WAAK,YAAY;AACjB,UAAI,eAAe,eAAe;AAEhC,cAAM,QAAQ,KAAK,iBAAiB,KAAK;AACzC,aAAK,WAAW,KAAK,cAAc;AACnC,aAAK,YAAY,KAAK,cAAc,MAAM;AAAA,MAC5C,OAAO;AAEL,cAAM,QAAQ,KAAK,gBAAgB,KAAK;AACxC,aAAK,WAAW,KAAK,eAAe,MAAM;AAC1C,aAAK,YAAY,KAAK,eAAe;AAAA,MACvC;AAEA,aAAO,iBAAiB,UAAU,KAAK,qBAAqB,EAAE,SAAS,KAAK,CAAC;AAC7E,aAAO,iBAAiB,UAAU,KAAK,qBAAqB,EAAE,SAAS,KAAK,CAAC;AAC7E,aAAO,iBAAiB,SAAS,KAAK,mBAAmB;AACzD,WAAK,gBAAgB;AAAA,IACvB;AAKA;AAAA;AAAA;AAAA,iBAAQ,MAAM;AACZ,UAAI,KAAK,cAAc,CAAC,KAAK,QAAS;AACtC,YAAM,WAAW,KAAK,QAAQ;AAC9B,WAAK,UAAU;AACf,WAAK,gBAAgB;AAErB,UAAI,OAAO,KAAK,QAAQ,iBAAiB;AACvC,aAAK,QAAQ,aAAa,KAAK,MAAM,KAAK,EAAE;AAC9C,UAAI,aAAa,KAAK,UAAW;AAEjC,aAAO,oBAAoB,UAAU,KAAK,mBAAmB;AAC7D,aAAO,oBAAoB,UAAU,KAAK,mBAAmB;AAC7D,aAAO,oBAAoB,SAAS,KAAK,mBAAmB;AAC5D,UAAI,KAAK,SAAU,MAAK,eAAe;AACvC,UAAI,KAAK,cAAe,MAAK,eAAe;AAC5C,WAAK,iBAAiB;AAAA,IACxB;AA1ZE,SAAK,GAAG,qBAAqB,IAAI;AAEjC,SAAK,UAAU;AAAA,MACb,GAAG,UAAS;AAAA,MACZ,GAAG;AAAA,IACL;AAEA,SAAK,gBAAgB;AACrB,SAAK,gBAAgB;AACrB,SAAK,cAAc,SAAS,cAAc,KAAK;AAC/C,SAAK,YAAY,UAAU,IAAI,sBAAsB;AACrD,SAAK,gBAAgB;AACrB,SAAK,iBAAiB;AACtB,SAAK,qBAAqB,KAAK,GAAG,aAAa,OAAO;AACtD,SAAK,UAAU,KAAK,GAAG,aAAa,cAAc,KAAK;AACvD,SAAK,YAAY,KAAK,GAAG,aAAa,UAAU;AAChD,SAAK,WAAW,KAAK,GAAG,QAAQ,QAAQ,KAAK,KAAK;AAClD,SAAK,GAAG,WAAW,KAAK,aAAa,KAAK,KAAK,IAAI;AAEnD,SAAK,GAAG,OAAO,KAAK,WAAW;AAC/B,SAAK,YAAY,OAAO,KAAK,EAAE;AAC/B,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EAEA,WAAW,WAA4B;AACrC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,OAAO,KACL,KACA,UAAoC,CAAC,GACd;AACvB,WAAO,MAAM,KAAK,KAAK,SAAS,SAAQ;AAAA,EAC1C;AAAA,EAEA,OAAO,YAAY,IAA2B;AAC5C,WAAO,GAAG,qBAAqB;AAAA,EACjC;AAAA,EAEA,UAAU;AACR,QAAI,KAAK,WAAY;AACrB,SAAK,aAAa;AAClB,UAAM,OAAO,KAAK,GAAG,YAAY;AACjC,UAAM,UAAU,KAAK,kBAAkB,KAAK;AAC5C,SAAK,qBAAqB;AAC1B,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,YAAY,YAAY,KAAK,EAAE;AACpC,QAAI,SAAS,SAAS;AACtB,WAAO,QAAQ,YAAY,cAAe,UAAS,OAAO,WAAW;AACrE,QAAI,YAAY,WAAW,SAAS,QAAQ,WAAY,KAAoB,MAAO,MAAK,SAAS,MAAM;AACvG,QAAI,KAAK,cAAc,KAAM,MAAK,GAAG,gBAAgB,UAAU;AAAA,QAC1D,MAAK,GAAG,aAAa,YAAY,KAAK,SAAS;AACpD,SAAK,GAAG,qBAAqB,IAAI;AAAA,EACnC;AAAA,EAEQ,SAAS;AACf,WAAO,oBAAoB,UAAU,KAAK,mBAAmB;AAC7D,WAAO,oBAAoB,UAAU,KAAK,mBAAmB;AAC7D,WAAO,oBAAoB,SAAS,KAAK,mBAAmB;AAC5D,SAAK,UAAU,OAAO;AACtB,SAAK,eAAe,OAAO;AAC3B,eAAW,YAAY,KAAK,sBAAsB;AAChD,YAAM,QAAQ,UAAS,UAAU,IAAI,QAAQ;AAC7C,UAAI,EAAE,MAAM,UAAU,GAAG;AACvB,iBAAS,MAAM,YAAY,YAAY,MAAM,OAAO,MAAM,QAAQ;AAClE,kBAAS,UAAU,OAAO,QAAQ;AAAA,MACpC;AAAA,IACF;AACA,SAAK,uBAAuB,CAAC;AAC7B,QAAI,KAAK,cAAc,QAAQ,KAAK,cAAc,OAAW,MAAK,GAAG,aAAa,SAAS,KAAK,SAAS;AACzG,QAAI,KAAK,eAAe,QAAQ,KAAK,eAAe,OAAW,MAAK,GAAG,aAAa,UAAU,KAAK,UAAU;AAC7G,SAAK,GAAG,UAAU,OAAO,QAAQ;AACjC,SAAK,YAAY,gBAAgB,OAAO;AACxC,QAAI,KAAK,uBAAuB,KAAM,MAAK,GAAG,gBAAgB,OAAO;AAAA,QAChE,MAAK,GAAG,aAAa,SAAS,KAAK,kBAAkB;AAC1D,SAAK,gBAAgB;AACrB,SAAK,UAAU;AACf,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEQ,UAAU;AAChB,eAAW,SAAS,KAAK,QAAQ,KAAK,EAAG,cAAa,KAAK;AAC3D,SAAK,QAAQ,MAAM;AACnB,WAAO,EAAE,KAAK;AAAA,EAChB;AAAA,EAEQ,UAAU,UAAsB,OAAe;AACrD,QAAI,KAAK,QAAQ,SAAS;AAAE,eAAS;AAAG;AAAA,IAAQ;AAChD,UAAM,QAAQ,WAAW,MAAM;AAAE,WAAK,QAAQ,OAAO,KAAK;AAAG,eAAS;AAAA,IAAG,GAAG,KAAK;AACjF,SAAK,QAAQ,IAAI,OAAO,QAAQ;AAAA,EAClC;AAAA,EAeQ,sBAAsB;AAC5B,SAAK,QAAQ,iBAAiB,UAAU,KAAK,mBAAmB;AAChE,SAAK,SAAS,iBAAiB,SAAS,KAAK,oBAAoB;AACjE,SAAK,GAAG,iBAAiB,WAAW,KAAK,uBAAuB;AAAA,EAClE;AAAA,EAEQ,uBAAuB;AAC7B,SAAK,QAAQ,oBAAoB,UAAU,KAAK,mBAAmB;AACnE,SAAK,SAAS,oBAAoB,SAAS,KAAK,oBAAoB;AACpE,SAAK,GAAG,oBAAoB,WAAW,KAAK,uBAAuB;AAAA,EACrE;AAAA,EA+BQ,gCAAgC;AACtC,SAAK,uBAAuB,CAAC;AAC7B,QAAI,WAAiB,KAAK,YAAY;AACtC,WAAO,aAAa,QAAQ,aAAa,UAAa,aAAa,UAAU;AAC3E,YAAM,OAAoB;AAE1B,UAAI,KAAK,UAAU,KAAK,MAAM,aAAa,aAAa,UAAS,UAAU,IAAI,IAAI,IAAI;AAGrF,cAAM,QAAQ,UAAS,UAAU,IAAI,IAAI,KAAK,EAAE,OAAO,GAAG,OAAO,KAAK,MAAM,UAAU,UAAU,KAAK,MAAM,oBAAoB,UAAU,EAAE;AAC3I,cAAM;AACN,kBAAS,UAAU,IAAI,MAAM,KAAK;AAClC,aAAK,qBAAqB,KAAK,IAAI;AACnC,aAAK,MAAM,WAAW;AAAA,MACxB;AACA,iBAAW,SAAS,cAA2B,SAAU;AAAA,IAC3D;AAAA,EACF;AAAA,EAEQ,QAAQ,IAAiB;AAC/B,UAAM,MAAM,GAAG,sBAAsB;AACrC,UAAM,UAAU,SAAS;AACzB,WAAO;AAAA,MACL,KAAK,IAAI,MAAM,OAAO,UAAU,QAAQ;AAAA,MACxC,MAAM,IAAI,OAAO,OAAO,UAAU,QAAQ;AAAA,IAC5C;AAAA,EACF;AAAA,EACQ,cAAoB;AAC1B,SAAK,cAAc,OAAO;AAC1B,SAAK,eAAe,OAAO;AAC3B,SAAK,UAAU,KAAK,GAAG,aAAa,cAAc,KAAK;AAAA,EACzD;AAAA;AAAA,EAGQ,kBAAwB;AAC9B,SAAK,GAAG,MAAM,YAAY,KAAK,UAAU,SAAS,IAAI;AACtD,SAAK,GAAG,MAAM,WAAW,KAAK,SAAS,SAAS,IAAI;AACpD,UAAM,WAAW,KAAK,QAAQ,UAAU,IAAI,KAAK,QAAQ;AAEzD,SAAK,GAAG,MAAM,aAAa;AAC3B,SAAK,GAAG,MAAM,SAAS,KAAK,iBAAiB;AAC7C,SAAK,GAAG,MAAM,QAAQ,KAAK,gBAAgB;AAC3C,SAAK,UAAU,MAAM;AAEnB,YAAM,oBAAoB,KAAK,QAAQ,KAAK,WAAW;AAEvD,WAAK,GAAG,MAAM,aAAa,UAAU,QAAQ;AAAA,gBACnC,QAAQ;AAAA,eACT,QAAQ;AAAA,cACT,QAAQ;AAAA;AAGhB,WAAK,GAAG,MAAM,SAAS,KAAK,YAAY;AACxC,WAAK,GAAG,MAAM,QAAQ,KAAK,WAAW;AACtC,WAAK,GAAG,MAAM,OACZ,MAAM,sBAAsB,IAC5B,KAAK,cAAc,IACnB,kBAAkB,OAClB,KAAK,WAAW,IAChB;AAEF,WAAK,GAAG,MAAM,MACZ,MAAM,qBAAqB,IAC3B,KAAK,eAAe,IACpB,kBAAkB,MAClB,KAAK,YAAY,IACjB;AAAA,IACJ,GAAG,CAAC;AAEJ,SAAK,UAAU,MAAM;AACnB,WAAK,gBAAgB;AACrB,UAAI,OAAO,KAAK,QAAQ,cAAc,WAAY,MAAK,QAAQ,UAAU,KAAK,MAAM,KAAK,EAAE;AAAA,IAC7F,GAAG,QAAQ;AAAA,EAEb;AAAA,EACQ,mBAAyB;AAC/B,UAAM,WAAW,KAAK,QAAQ,UAAU,IAAI,KAAK,QAAQ;AAEzD,SAAK,GAAG,MAAM,aAAa,UAAU,QAAQ;AAAA,cACnC,QAAQ;AAAA,aACT,QAAQ;AAAA,YACT,QAAQ;AAAA;AAGhB,SAAK,GAAG,MAAM,SAAS,KAAK,iBAAiB;AAC7C,SAAK,GAAG,MAAM,QAAQ,KAAK,gBAAgB;AAC3C,SAAK,GAAG,MAAM,OAAO;AACrB,SAAK,GAAG,MAAM,MAAM;AACpB,SAAK,UAAU,MAAM;AACnB,WAAK,OAAO;AAEZ,UAAI,OAAO,KAAK,QAAQ,eAAe;AACrC,aAAK,QAAQ,WAAW,KAAK,MAAM,KAAK,EAAE;AAAA,IAC9C,GAAG,QAAQ;AAAA,EACb;AAAA;AAAA,EAGQ,cAAoB;AAC1B,SAAK,gBAAgB,SAAS,cAAc,KAAK;AACjD,SAAK,cAAc,UAAU,IAAI,kBAAkB;AACnD,SAAK,cAAc,YAAY,KAAK;AACpC,UAAM,WAAW,KAAK,EAAE,EAAE,OAAO,KAAK,aAAa;AACnD,SAAK,cAAc,MAAM,UAAU;AAEnC,SAAK,cAAc,MAAM,aAAa;AACtC,SAAK,cAAc,MAAM,UAAU;AACnC,UAAM,WAAW,KAAK,QAAQ,UAAU,IAAI,KAAK,QAAQ;AACzD,SAAK,UAAU,MAAM;AACnB,WAAK,cAAc,MAAM,aAAa,WAAW,QAAQ;AACzD,WAAK,cAAc,MAAM,UAAU;AAAA,IACrC,GAAG,CAAC;AAAA,EACN;AAAA,EACQ,iBAAuB;AAC7B,UAAM,WAAW,KAAK,QAAQ,UAAU,IAAI,KAAK,QAAQ;AACzD,SAAK,cAAc,MAAM,aAAa,WAAW,QAAQ;AACzD,SAAK,cAAc,MAAM,UAAU;AAAA,EACrC;AAAA;AAAA,EAGQ,cAAoB;AAC1B,SAAK,WAAW,SAAS,cAAc,KAAK;AAC5C,SAAK,SAAS,KAAK;AACnB,SAAK,SAAS;AAAA,MACZ;AAAA,MACA,CAAC,UAAU;AACT,cAAM,gBAAgB;AACtB,aAAK,MAAM;AAAA,MACb;AAAA,MACA,EAAE,MAAM,KAAK;AAAA,IACf;AAGA,SAAK,GAAG,OAAO,KAAK,QAAQ;AAG5B,UAAM,gBAAgB,KAAK,SAAS,sBAAsB;AAC1D,SAAK,SAAS,MAAM,QAAQ,KAAK,cAAc;AAC/C,SAAK,SAAS,MAAM,SAAS,KAAK,eAAe;AACjD,SAAK,SAAS,MAAM,OAAO,KAAK,cAAc,OAAO;AACrD,SAAK,SAAS,MAAM,MAAM,KAAK,cAAc,MAAM;AAGnD,SAAK,SAAS,MAAM,aAAa;AACjC,SAAK,SAAS,MAAM,UAAU;AAC9B,UAAM,WAAW,KAAK,QAAQ,UAAU,IAAI,KAAK,QAAQ;AACzD,SAAK,UAAU,MAAM;AACnB,WAAK,SAAS,MAAM,aAAa,WAAW,QAAQ;AACpD,WAAK,SAAS,MAAM,UAAU;AAAA,IAChC,GAAG,CAAC;AAAA,EACN;AAAA,EACQ,iBAAuB;AAC7B,UAAM,WAAW,KAAK,QAAQ,UAAU,IAAI,KAAK,QAAQ;AACzD,SAAK,SAAS,MAAM,aAAa,WAAW,QAAQ;AACpD,SAAK,SAAS,MAAM,UAAU;AAAA,EAChC;AA6FF;AA7ba,UAeI,YAAY,oBAAI,QAAyE;AAfnG,IAAM,WAAN;",
6
+ "names": []
7
+ }