@expressivecss/expressive 0.13.1 → 0.15.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 (257) hide show
  1. package/CHANGELOG.md +196 -1
  2. package/README.md +2 -1
  3. package/dist/css/expressive.css +432 -311
  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/js/chunks/{chunk-DTKR54I6.mjs → chunk-33QVDDGR.mjs} +3 -3
  8. package/dist/js/chunks/{chunk-SPETGK25.mjs → chunk-45FER6RI.mjs} +5 -5
  9. package/dist/js/chunks/chunk-45FER6RI.mjs.map +7 -0
  10. package/dist/js/chunks/{chunk-WJXDBPXQ.mjs → chunk-5CEAOLUA.mjs} +17 -20
  11. package/dist/js/chunks/chunk-5CEAOLUA.mjs.map +7 -0
  12. package/dist/js/chunks/{chunk-CKQP6P76.mjs → chunk-6VATUZC6.mjs} +12 -7
  13. package/dist/js/chunks/chunk-6VATUZC6.mjs.map +7 -0
  14. package/dist/js/chunks/{chunk-QDAL4IYN.mjs → chunk-74MXKKLN.mjs} +2 -2
  15. package/dist/js/chunks/{chunk-QDAL4IYN.mjs.map → chunk-74MXKKLN.mjs.map} +2 -2
  16. package/dist/js/chunks/{chunk-DLWYKFEI.mjs → chunk-AIURVCG6.mjs} +3 -3
  17. package/dist/js/chunks/{chunk-NNYP33NB.mjs → chunk-BGZLF6JZ.mjs} +19 -18
  18. package/dist/js/chunks/chunk-BGZLF6JZ.mjs.map +7 -0
  19. package/dist/js/chunks/chunk-C6CHEWYP.mjs +154 -0
  20. package/dist/js/chunks/chunk-C6CHEWYP.mjs.map +7 -0
  21. package/dist/js/chunks/{chunk-GVGT6MIU.mjs → chunk-CK2XCICY.mjs} +2 -2
  22. package/dist/js/chunks/{chunk-XGHORT7J.mjs → chunk-CXXM2L4F.mjs} +8 -9
  23. package/dist/js/chunks/chunk-CXXM2L4F.mjs.map +7 -0
  24. package/dist/js/chunks/{chunk-QVVEWBOF.mjs → chunk-DXGRXYYL.mjs} +25 -37
  25. package/dist/js/chunks/chunk-DXGRXYYL.mjs.map +7 -0
  26. package/dist/js/chunks/{chunk-QV2JAWIZ.mjs → chunk-FM5CZOUB.mjs} +5 -8
  27. package/dist/js/chunks/{chunk-QV2JAWIZ.mjs.map → chunk-FM5CZOUB.mjs.map} +2 -2
  28. package/dist/js/chunks/{chunk-PLYXLSH3.mjs → chunk-GJL6GCIU.mjs} +46 -58
  29. package/dist/js/chunks/chunk-GJL6GCIU.mjs.map +7 -0
  30. package/dist/js/chunks/chunk-K3HZMFMD.mjs +135 -0
  31. package/dist/js/chunks/chunk-K3HZMFMD.mjs.map +7 -0
  32. package/dist/js/chunks/chunk-KHXZ2A4K.mjs +395 -0
  33. package/dist/js/chunks/chunk-KHXZ2A4K.mjs.map +7 -0
  34. package/dist/js/chunks/chunk-KQACNQ22.mjs +7 -0
  35. package/dist/js/chunks/{chunk-4PWAPV6F.mjs.map → chunk-KQACNQ22.mjs.map} +1 -1
  36. package/dist/js/chunks/chunk-KUFHW3DS.mjs +214 -0
  37. package/dist/js/chunks/chunk-KUFHW3DS.mjs.map +7 -0
  38. package/dist/js/chunks/{chunk-LWBQIX5J.mjs → chunk-KVJAVDBC.mjs} +46 -57
  39. package/dist/js/chunks/chunk-KVJAVDBC.mjs.map +7 -0
  40. package/dist/js/chunks/{chunk-YDCS5S3J.mjs → chunk-L27Q6ZMI.mjs} +2 -2
  41. package/dist/js/chunks/{chunk-CCWDV5CR.mjs → chunk-LQWUDNHZ.mjs} +3 -3
  42. package/dist/js/chunks/{chunk-6OMRGML6.mjs → chunk-M372EDXD.mjs} +7 -13
  43. package/dist/js/chunks/{chunk-6OMRGML6.mjs.map → chunk-M372EDXD.mjs.map} +2 -2
  44. package/dist/js/chunks/{chunk-EC63CHXU.mjs → chunk-M3MURWMB.mjs} +20 -16
  45. package/dist/js/chunks/chunk-M3MURWMB.mjs.map +7 -0
  46. package/dist/js/chunks/{chunk-U2OTHOTI.mjs → chunk-NUHMOAOY.mjs} +19 -33
  47. package/dist/js/chunks/chunk-NUHMOAOY.mjs.map +7 -0
  48. package/dist/js/chunks/{chunk-P3G3QHII.mjs → chunk-OWG3LMUL.mjs} +17 -14
  49. package/dist/js/chunks/chunk-OWG3LMUL.mjs.map +7 -0
  50. package/dist/js/chunks/{chunk-LTWPGFBR.mjs → chunk-PD6HYHAE.mjs} +4 -15
  51. package/dist/js/chunks/chunk-PD6HYHAE.mjs.map +7 -0
  52. package/dist/js/chunks/{chunk-PIJ2TAR3.mjs → chunk-PDG64UHF.mjs} +3 -3
  53. package/dist/js/chunks/{chunk-IFXVDDDH.mjs → chunk-PO3AXVR3.mjs} +38 -64
  54. package/dist/js/chunks/chunk-PO3AXVR3.mjs.map +7 -0
  55. package/dist/js/chunks/{chunk-QKWPQK5N.mjs → chunk-QYGK36OG.mjs} +16 -14
  56. package/dist/js/chunks/chunk-QYGK36OG.mjs.map +7 -0
  57. package/dist/js/chunks/{chunk-UNEMYWEW.mjs → chunk-SFI2U4YW.mjs} +28 -44
  58. package/dist/js/chunks/chunk-SFI2U4YW.mjs.map +7 -0
  59. package/dist/js/chunks/{chunk-VTLBW7QS.mjs → chunk-SMY7GJSS.mjs} +3 -3
  60. package/dist/js/chunks/{chunk-O5XPWXIQ.mjs → chunk-TCCA2HDG.mjs} +39 -31
  61. package/dist/js/chunks/chunk-TCCA2HDG.mjs.map +7 -0
  62. package/dist/js/chunks/{chunk-UBLRRJ7N.mjs → chunk-TSZYSW7F.mjs} +4 -4
  63. package/dist/js/chunks/{chunk-UBLRRJ7N.mjs.map → chunk-TSZYSW7F.mjs.map} +2 -2
  64. package/dist/js/chunks/{chunk-UEZUJQ66.mjs → chunk-UAZSDUVP.mjs} +3 -4
  65. package/dist/js/chunks/{chunk-UEZUJQ66.mjs.map → chunk-UAZSDUVP.mjs.map} +2 -2
  66. package/dist/js/chunks/{chunk-6N2XAEFK.mjs → chunk-UBRZZWRA.mjs} +10 -8
  67. package/dist/js/chunks/chunk-UBRZZWRA.mjs.map +7 -0
  68. package/dist/js/chunks/{chunk-3VOK6J7U.mjs → chunk-UCOE7ZDL.mjs} +47 -45
  69. package/dist/js/chunks/chunk-UCOE7ZDL.mjs.map +7 -0
  70. package/dist/js/chunks/{chunk-K4CJCRGE.mjs → chunk-UETTGDLI.mjs} +3 -3
  71. package/dist/js/chunks/{chunk-RHRQKTTX.mjs → chunk-UNCRDLP6.mjs} +6 -9
  72. package/dist/js/chunks/chunk-UNCRDLP6.mjs.map +7 -0
  73. package/dist/js/chunks/{chunk-LNCCYGPC.mjs → chunk-VGNYF6FB.mjs} +8 -10
  74. package/dist/js/chunks/chunk-VGNYF6FB.mjs.map +7 -0
  75. package/dist/js/chunks/{chunk-UAEAQBRC.mjs → chunk-VGPGBNGL.mjs} +4 -12
  76. package/dist/js/chunks/chunk-VGPGBNGL.mjs.map +7 -0
  77. package/dist/js/chunks/chunk-VKAUVTQY.mjs +1 -0
  78. package/dist/js/chunks/{chunk-HKT2S7VM.mjs → chunk-VM4FTS7L.mjs} +3 -3
  79. package/dist/js/chunks/{chunk-55IA2XUC.mjs → chunk-WDK4T63U.mjs} +8 -11
  80. package/dist/js/chunks/chunk-WDK4T63U.mjs.map +7 -0
  81. package/dist/js/chunks/{chunk-XH6BEEMY.mjs → chunk-WOCCTVUF.mjs} +51 -39
  82. package/dist/js/chunks/chunk-WOCCTVUF.mjs.map +7 -0
  83. package/dist/js/chunks/{chunk-GZWPXXY6.mjs → chunk-WQYN5L4E.mjs} +14 -16
  84. package/dist/js/chunks/chunk-WQYN5L4E.mjs.map +7 -0
  85. package/dist/js/chunks/{chunk-6WLSDZ4O.mjs → chunk-X4ISMKE2.mjs} +2 -2
  86. package/dist/js/chunks/{chunk-3DHK5CZU.mjs → chunk-XAEAEHIX.mjs} +6 -8
  87. package/dist/js/chunks/chunk-XAEAEHIX.mjs.map +7 -0
  88. package/dist/js/chunks/{chunk-3CLXLPYS.mjs → chunk-ZX6M7SWO.mjs} +43 -29
  89. package/dist/js/chunks/chunk-ZX6M7SWO.mjs.map +7 -0
  90. package/dist/js/expressive.cjs +1337 -572
  91. package/dist/js/expressive.cjs.map +4 -4
  92. package/dist/js/expressive.js +1337 -572
  93. package/dist/js/expressive.js.map +4 -4
  94. package/dist/js/expressive.min.js +10 -13
  95. package/dist/js/expressive.min.js.map +4 -4
  96. package/dist/js/expressive.mjs +71 -55
  97. package/dist/js/expressive.mjs.map +1 -1
  98. package/dist/js/internal/behaviors/bottomSheets.mjs +3 -3
  99. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  100. package/dist/js/internal/behaviors/forms.mjs +2 -2
  101. package/dist/js/internal/behaviors/sheetDrag.mjs +2 -2
  102. package/dist/js/internal/behaviors/sideSheets.mjs +3 -3
  103. package/dist/js/internal/components/appBar.mjs +2 -2
  104. package/dist/js/internal/components/autocomplete.mjs +4 -4
  105. package/dist/js/internal/components/barChart.mjs +4 -4
  106. package/dist/js/internal/components/buttonGroup.mjs +2 -2
  107. package/dist/js/internal/components/buttons.mjs +3 -3
  108. package/dist/js/internal/components/cards.mjs +3 -3
  109. package/dist/js/internal/components/carousel.mjs +3 -3
  110. package/dist/js/internal/components/characterCounter.mjs +2 -2
  111. package/dist/js/internal/components/chips.mjs +5 -5
  112. package/dist/js/internal/components/columnChart.mjs +3 -3
  113. package/dist/js/internal/components/commandPalette.mjs +3 -3
  114. package/dist/js/internal/components/confetti.mjs +8 -0
  115. package/dist/js/internal/components/confetti.mjs.map +7 -0
  116. package/dist/js/internal/components/datepicker.mjs +6 -6
  117. package/dist/js/internal/components/expandingCard.mjs +3 -3
  118. package/dist/js/internal/components/heatmapChart.mjs +3 -3
  119. package/dist/js/internal/components/index.mjs +64 -48
  120. package/dist/js/internal/components/keypad.mjs +9 -0
  121. package/dist/js/internal/components/keypad.mjs.map +7 -0
  122. package/dist/js/internal/components/lightbox.mjs +3 -3
  123. package/dist/js/internal/components/lineChart.mjs +6 -2
  124. package/dist/js/internal/components/mapView.mjs +9 -0
  125. package/dist/js/internal/components/mapView.mjs.map +7 -0
  126. package/dist/js/internal/components/menu.mjs +3 -3
  127. package/dist/js/internal/components/messageScroller.mjs +3 -3
  128. package/dist/js/internal/components/mixedChart.mjs +4 -4
  129. package/dist/js/internal/components/navigationRail.mjs +2 -2
  130. package/dist/js/internal/components/particles.mjs +8 -0
  131. package/dist/js/internal/components/particles.mjs.map +7 -0
  132. package/dist/js/internal/components/pieChart.mjs +3 -3
  133. package/dist/js/internal/components/questionnaire.mjs +3 -3
  134. package/dist/js/internal/components/radarChart.mjs +3 -3
  135. package/dist/js/internal/components/radialChart.mjs +3 -3
  136. package/dist/js/internal/components/registry.mjs +41 -37
  137. package/dist/js/internal/components/richTextEditor.mjs +3 -3
  138. package/dist/js/internal/components/scrollspy.mjs +2 -2
  139. package/dist/js/internal/components/select.mjs +4 -4
  140. package/dist/js/internal/components/slider.mjs +3 -3
  141. package/dist/js/internal/components/snackbar.mjs +2 -2
  142. package/dist/js/internal/components/tabs.mjs +4 -4
  143. package/dist/js/internal/components/timepicker.mjs +4 -4
  144. package/dist/js/internal/components/tooltip.mjs +3 -3
  145. package/dist/js/internal/core/component.mjs +1 -1
  146. package/dist/js/internal/core/utils.mjs +1 -1
  147. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  148. package/dist/js/modular.mjs +71 -55
  149. package/dist/types/behaviors/forms.d.ts +5 -0
  150. package/dist/types/components/autocomplete.d.ts +1 -0
  151. package/dist/types/components/carousel.d.ts +2 -0
  152. package/dist/types/components/confetti.d.ts +103 -0
  153. package/dist/types/components/datepicker.d.ts +5 -4
  154. package/dist/types/components/expandingCard.d.ts +2 -0
  155. package/dist/types/components/index.d.ts +4 -0
  156. package/dist/types/components/keypad.d.ts +34 -0
  157. package/dist/types/components/lightbox.d.ts +3 -5
  158. package/dist/types/components/lineChart.d.ts +4 -0
  159. package/dist/types/components/mapView.d.ts +151 -0
  160. package/dist/types/components/menu.d.ts +1 -0
  161. package/dist/types/components/particles.d.ts +72 -0
  162. package/dist/types/components/pieChart.d.ts +3 -0
  163. package/dist/types/components/radialChart.d.ts +0 -1
  164. package/dist/types/components/registry.d.ts +12 -0
  165. package/dist/types/components/slider.d.ts +3 -1
  166. package/dist/types/components/snackbar.d.ts +3 -0
  167. package/dist/types/components/tabs.d.ts +5 -1
  168. package/dist/types/components/timepicker.d.ts +2 -0
  169. package/dist/types/modular.d.ts +1 -1
  170. package/dist/types/plugins/dockedDisplayPlugin.d.ts +4 -3
  171. package/package.json +2 -1
  172. package/src/sass/abstracts/_breakpoints.scss +0 -1
  173. package/src/sass/abstracts/_elevation.scss +1 -1
  174. package/src/sass/abstracts/_mixins.scss +20 -60
  175. package/src/sass/abstracts/_variables.scss +10 -0
  176. package/src/sass/base/_global.scss +3 -12
  177. package/src/sass/base/_index.scss +1 -1
  178. package/src/sass/components/_badges.scss +1 -8
  179. package/src/sass/components/_bar-chart.scss +1 -1
  180. package/src/sass/components/_button-groups.scss +31 -66
  181. package/src/sass/components/_buttons.scss +1 -1
  182. package/src/sass/components/_cards.scss +6 -25
  183. package/src/sass/components/_carousel.scss +16 -55
  184. package/src/sass/components/_chips.scss +0 -6
  185. package/src/sass/components/_column-chart.scss +1 -1
  186. package/src/sass/components/_confetti.scss +14 -0
  187. package/src/sass/components/_data-table.scss +1 -3
  188. package/src/sass/components/_datepicker.scss +3 -22
  189. package/src/sass/components/_dialog.scss +1 -4
  190. package/src/sass/components/_heatmap-chart.scss +2 -2
  191. package/src/sass/components/_icon-buttons.scss +0 -1
  192. package/src/sass/components/_index.scss +4 -0
  193. package/src/sass/components/_keypad.scss +162 -0
  194. package/src/sass/components/_lightbox.scss +3 -8
  195. package/src/sass/components/_map.scss +188 -0
  196. package/src/sass/components/_menu.scss +31 -74
  197. package/src/sass/components/_mixed-chart.scss +1 -1
  198. package/src/sass/components/_navbar.scss +9 -45
  199. package/src/sass/components/_navigation-rail.scss +23 -32
  200. package/src/sass/components/_page-footer.scss +15 -12
  201. package/src/sass/components/_panes.scss +2 -6
  202. package/src/sass/components/_particles.scss +14 -0
  203. package/src/sass/components/_progress.scss +6 -4
  204. package/src/sass/components/_side-sheet.scss +1 -4
  205. package/src/sass/components/_stepper.scss +0 -4
  206. package/src/sass/components/_table_of_contents.scss +3 -1
  207. package/src/sass/components/_timepicker.scss +4 -36
  208. package/src/sass/components/_toolbar.scss +0 -4
  209. package/src/sass/components/forms/_checkboxes.scss +44 -67
  210. package/src/sass/components/forms/_fieldset.scss +3 -3
  211. package/src/sass/components/forms/_file-input.scss +0 -1
  212. package/src/sass/components/forms/_radio-buttons.scss +10 -36
  213. package/src/sass/components/forms/_select.scss +0 -3
  214. package/src/sass/components/forms/_slider.scss +72 -259
  215. package/src/sass/tokens/_state.scss +2 -2
  216. package/src/sass/tokens/_theme.scss +1 -1
  217. package/src/sass/utilities/_colors.scss +6 -1
  218. package/src/sass/utilities/_index.scss +1 -1
  219. package/dist/js/chunks/chunk-3CLXLPYS.mjs.map +0 -7
  220. package/dist/js/chunks/chunk-3DHK5CZU.mjs.map +0 -7
  221. package/dist/js/chunks/chunk-3VOK6J7U.mjs.map +0 -7
  222. package/dist/js/chunks/chunk-4PWAPV6F.mjs +0 -7
  223. package/dist/js/chunks/chunk-55IA2XUC.mjs.map +0 -7
  224. package/dist/js/chunks/chunk-6N2XAEFK.mjs.map +0 -7
  225. package/dist/js/chunks/chunk-CKQP6P76.mjs.map +0 -7
  226. package/dist/js/chunks/chunk-EC63CHXU.mjs.map +0 -7
  227. package/dist/js/chunks/chunk-GZWPXXY6.mjs.map +0 -7
  228. package/dist/js/chunks/chunk-IFXVDDDH.mjs.map +0 -7
  229. package/dist/js/chunks/chunk-LNCCYGPC.mjs.map +0 -7
  230. package/dist/js/chunks/chunk-LTWPGFBR.mjs.map +0 -7
  231. package/dist/js/chunks/chunk-LWBQIX5J.mjs.map +0 -7
  232. package/dist/js/chunks/chunk-NNYP33NB.mjs.map +0 -7
  233. package/dist/js/chunks/chunk-NQLC3YMW.mjs +0 -1
  234. package/dist/js/chunks/chunk-O5XPWXIQ.mjs.map +0 -7
  235. package/dist/js/chunks/chunk-P3G3QHII.mjs.map +0 -7
  236. package/dist/js/chunks/chunk-PLYXLSH3.mjs.map +0 -7
  237. package/dist/js/chunks/chunk-QKWPQK5N.mjs.map +0 -7
  238. package/dist/js/chunks/chunk-QVVEWBOF.mjs.map +0 -7
  239. package/dist/js/chunks/chunk-RHRQKTTX.mjs.map +0 -7
  240. package/dist/js/chunks/chunk-SPETGK25.mjs.map +0 -7
  241. package/dist/js/chunks/chunk-U2OTHOTI.mjs.map +0 -7
  242. package/dist/js/chunks/chunk-UAEAQBRC.mjs.map +0 -7
  243. package/dist/js/chunks/chunk-UNEMYWEW.mjs.map +0 -7
  244. package/dist/js/chunks/chunk-WJXDBPXQ.mjs.map +0 -7
  245. package/dist/js/chunks/chunk-XGHORT7J.mjs.map +0 -7
  246. package/dist/js/chunks/chunk-XH6BEEMY.mjs.map +0 -7
  247. /package/dist/js/chunks/{chunk-DTKR54I6.mjs.map → chunk-33QVDDGR.mjs.map} +0 -0
  248. /package/dist/js/chunks/{chunk-DLWYKFEI.mjs.map → chunk-AIURVCG6.mjs.map} +0 -0
  249. /package/dist/js/chunks/{chunk-GVGT6MIU.mjs.map → chunk-CK2XCICY.mjs.map} +0 -0
  250. /package/dist/js/chunks/{chunk-YDCS5S3J.mjs.map → chunk-L27Q6ZMI.mjs.map} +0 -0
  251. /package/dist/js/chunks/{chunk-CCWDV5CR.mjs.map → chunk-LQWUDNHZ.mjs.map} +0 -0
  252. /package/dist/js/chunks/{chunk-PIJ2TAR3.mjs.map → chunk-PDG64UHF.mjs.map} +0 -0
  253. /package/dist/js/chunks/{chunk-VTLBW7QS.mjs.map → chunk-SMY7GJSS.mjs.map} +0 -0
  254. /package/dist/js/chunks/{chunk-K4CJCRGE.mjs.map → chunk-UETTGDLI.mjs.map} +0 -0
  255. /package/dist/js/chunks/{chunk-NQLC3YMW.mjs.map → chunk-VKAUVTQY.mjs.map} +0 -0
  256. /package/dist/js/chunks/{chunk-HKT2S7VM.mjs.map → chunk-VM4FTS7L.mjs.map} +0 -0
  257. /package/dist/js/chunks/{chunk-6WLSDZ4O.mjs.map → chunk-X4ISMKE2.mjs.map} +0 -0
@@ -0,0 +1,214 @@
1
+ import {
2
+ Component
3
+ } from "./chunk-PD6HYHAE.mjs";
4
+
5
+ // src/ts/components/confetti.ts
6
+ var _defaults = {
7
+ particleCount: 50,
8
+ angle: 90,
9
+ spread: 45,
10
+ startVelocity: 45,
11
+ decay: 0.9,
12
+ gravity: 1,
13
+ drift: 0,
14
+ ticks: 200,
15
+ origin: { x: 0.5, y: 0.5 },
16
+ colors: [],
17
+ shapes: ["square", "circle"],
18
+ scalar: 1,
19
+ manualStart: false
20
+ };
21
+ var THEME_COLORS = ["primary", "secondary", "tertiary", "primary-container", "secondary-container", "tertiary-container"];
22
+ var FALLBACK_COLORS = ["#26ccff", "#a25afd", "#ff5e7e", "#88ff5a", "#fcff42", "#ffa62d", "#ff36ff"];
23
+ var RAD = Math.PI / 180;
24
+ var scenes = /* @__PURE__ */ new Map();
25
+ var overlay = null;
26
+ var Confetti = class _Confetti extends Component {
27
+ constructor(el, options) {
28
+ super(el, options, _Confetti);
29
+ this._onClick = () => {
30
+ this.fire();
31
+ };
32
+ this.el["Expressive_Confetti"] = this;
33
+ this.options = { ..._Confetti.defaults, ...options };
34
+ if (!(el instanceof HTMLCanvasElement)) el.addEventListener("click", this._onClick);
35
+ else if (!this.options.manualStart) this.fire();
36
+ }
37
+ static get defaults() {
38
+ return _defaults;
39
+ }
40
+ static init(els, options = {}) {
41
+ return super.init(els, options, _Confetti);
42
+ }
43
+ static getInstance(el) {
44
+ return el["Expressive_Confetti"];
45
+ }
46
+ /**
47
+ * Bursts over the whole viewport. Resolves when the last piece is gone.
48
+ */
49
+ static fire(options = {}) {
50
+ return burst(viewportCanvas, document.body, { ..._Confetti.defaults, ...options });
51
+ }
52
+ /**
53
+ * Bursts on this canvas, or from this element's center over the viewport.
54
+ * Resolves when the last piece is gone.
55
+ */
56
+ fire(options = {}) {
57
+ const merged = { ...this.options, ...options };
58
+ if (this.el instanceof HTMLCanvasElement) {
59
+ const canvas = this.el;
60
+ return burst(() => canvas, canvas.parentElement ?? document.body, merged);
61
+ }
62
+ const r = this.el.getBoundingClientRect();
63
+ merged.origin = { x: (r.left + r.width / 2) / innerWidth, y: (r.top + r.height / 2) / innerHeight };
64
+ return burst(viewportCanvas, this.el.parentElement ?? document.body, merged);
65
+ }
66
+ destroy() {
67
+ this.el.removeEventListener("click", this._onClick);
68
+ if (this.el instanceof HTMLCanvasElement) stop(this.el);
69
+ this.el["Expressive_Confetti"] = void 0;
70
+ }
71
+ };
72
+ function burst(getCanvas, themed, o) {
73
+ if (typeof matchMedia === "function" && matchMedia("(prefers-reduced-motion: reduce)").matches) return Promise.resolve();
74
+ const canvas = getCanvas();
75
+ let scene = scenes.get(canvas);
76
+ if (!scene) {
77
+ const ctx = canvas.getContext("2d");
78
+ if (!ctx) return Promise.resolve();
79
+ scene = { ctx, pieces: [], frame: 0, last: 0, done: [], overlay: canvas === overlay };
80
+ scenes.set(canvas, scene);
81
+ }
82
+ const { width, height } = fit(canvas);
83
+ const colors = o.colors.length ? o.colors : themeColors(themed);
84
+ const x = (o.origin.x ?? 0.5) * width;
85
+ const y = (o.origin.y ?? 0.5) * height;
86
+ for (let i = 0; i < o.particleCount; i++) {
87
+ scene.pieces.push({
88
+ x,
89
+ y,
90
+ velocity: o.startVelocity * (0.5 + Math.random()),
91
+ angle: -o.angle * RAD + (0.5 - Math.random()) * o.spread * RAD,
92
+ wobble: Math.random() * 10,
93
+ wobbleSpeed: 0.05 + Math.random() * 0.05,
94
+ tilt: (0.25 + Math.random() / 2) * Math.PI,
95
+ tick: 0,
96
+ color: colors[i % colors.length],
97
+ shape: o.shapes[Math.floor(Math.random() * o.shapes.length)] ?? "square",
98
+ options: o
99
+ });
100
+ }
101
+ const s = scene;
102
+ if (!s.frame) s.frame = requestAnimationFrame((now) => {
103
+ s.last = now;
104
+ draw(canvas, s, now);
105
+ });
106
+ return new Promise((resolve) => s.done.push(resolve));
107
+ }
108
+ function draw(canvas, scene, now) {
109
+ const step = Math.min((now - scene.last) / (1e3 / 60), 4);
110
+ scene.last = now;
111
+ const { width, height } = fit(canvas);
112
+ const { ctx } = scene;
113
+ const dpr = canvas.width / (width || 1);
114
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
115
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
116
+ scene.pieces = scene.pieces.filter((p) => {
117
+ const o = p.options;
118
+ p.x += (Math.cos(p.angle) * p.velocity + o.drift) * step;
119
+ p.y += (Math.sin(p.angle) * p.velocity + o.gravity * 3) * step;
120
+ p.velocity *= o.decay ** step;
121
+ p.wobble += p.wobbleSpeed * step;
122
+ p.tilt += 0.1 * step;
123
+ p.tick += step;
124
+ if (p.tick >= o.ticks) return false;
125
+ const size = 8 * o.scalar;
126
+ ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
127
+ ctx.translate(p.x + 10 * o.scalar * Math.cos(p.wobble), p.y + 10 * o.scalar * Math.sin(p.wobble));
128
+ ctx.rotate(p.tilt);
129
+ ctx.scale(1, Math.cos(p.wobble));
130
+ ctx.globalAlpha = 1 - p.tick / o.ticks;
131
+ ctx.fillStyle = p.color;
132
+ ctx.beginPath();
133
+ if (p.shape === "circle") ctx.arc(0, 0, size / 2, 0, 2 * Math.PI);
134
+ else if (p.shape === "star") star(ctx, size * 0.75);
135
+ else ctx.rect(-size / 2, -size / 2, size, size);
136
+ ctx.fill();
137
+ return true;
138
+ });
139
+ if (scene.pieces.length) scene.frame = requestAnimationFrame((t) => draw(canvas, scene, t));
140
+ else stop(canvas);
141
+ }
142
+ function stop(canvas) {
143
+ const scene = scenes.get(canvas);
144
+ if (!scene) return;
145
+ cancelAnimationFrame(scene.frame);
146
+ scenes.delete(canvas);
147
+ scene.ctx.setTransform(1, 0, 0, 1, 0, 0);
148
+ scene.ctx.clearRect(0, 0, canvas.width, canvas.height);
149
+ if (scene.overlay) {
150
+ canvas.remove();
151
+ overlay = null;
152
+ }
153
+ for (const resolve of scene.done) resolve();
154
+ }
155
+ function star(ctx, r) {
156
+ for (let i = 0; i < 10; i++) {
157
+ const a = i * Math.PI / 5 - Math.PI / 2;
158
+ const d = i % 2 ? r / 2 : r;
159
+ ctx.lineTo(Math.cos(a) * d, Math.sin(a) * d);
160
+ }
161
+ ctx.closePath();
162
+ }
163
+ function fit(canvas) {
164
+ const width = canvas.clientWidth;
165
+ const height = canvas.clientHeight;
166
+ const w = Math.round(width * devicePixelRatio);
167
+ const h = Math.round(height * devicePixelRatio);
168
+ if (canvas.width !== w || canvas.height !== h) {
169
+ canvas.width = w;
170
+ canvas.height = h;
171
+ }
172
+ return { width, height };
173
+ }
174
+ function viewportCanvas() {
175
+ if (overlay?.isConnected) return overlay;
176
+ overlay = document.createElement("canvas");
177
+ overlay.className = "confetti-overlay";
178
+ overlay.setAttribute("aria-hidden", "true");
179
+ Object.assign(overlay.style, {
180
+ position: "fixed",
181
+ inset: "0",
182
+ width: "100%",
183
+ height: "100%",
184
+ margin: "0",
185
+ padding: "0",
186
+ border: "0",
187
+ background: "transparent",
188
+ pointerEvents: "none",
189
+ zIndex: "10001"
190
+ });
191
+ document.body.append(overlay);
192
+ if (typeof overlay.showPopover === "function") {
193
+ overlay.popover = "manual";
194
+ overlay.showPopover();
195
+ }
196
+ return overlay;
197
+ }
198
+ function themeColors(themed) {
199
+ const probe = document.createElement("span");
200
+ probe.hidden = true;
201
+ themed.append(probe);
202
+ const style = getComputedStyle(probe);
203
+ const colors = THEME_COLORS.filter((role) => style.getPropertyValue(`--md-sys-color-${role}`).trim()).map((role) => {
204
+ probe.style.color = `var(--md-sys-color-${role})`;
205
+ return getComputedStyle(probe).color;
206
+ });
207
+ probe.remove();
208
+ return colors.length ? colors : FALLBACK_COLORS;
209
+ }
210
+
211
+ export {
212
+ Confetti
213
+ };
214
+ //# sourceMappingURL=chunk-KUFHW3DS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ts/components/confetti.ts"],
4
+ "sourcesContent": ["import { Component, BaseOptions, InitElements, InitElement } from '../core/component';\n\nexport type ConfettiShape = 'square' | 'circle' | 'star';\n\nexport interface ConfettiOptions extends BaseOptions {\n /**\n * Pieces per burst.\n * @default 50\n */\n particleCount: number;\n /**\n * Launch direction in degrees. 90 is straight up, 0 is right.\n * @default 90\n */\n angle: number;\n /**\n * How far the pieces fan out from the angle, in degrees.\n * @default 45\n */\n spread: number;\n /**\n * Launch speed in pixels per frame.\n * @default 45\n */\n startVelocity: number;\n /**\n * Share of its speed a piece keeps each frame.\n * @default 0.9\n */\n decay: number;\n /**\n * Pull toward the bottom. 0 floats, 1 is normal.\n * @default 1\n */\n gravity: number;\n /**\n * Sideways push per frame. Negative drifts left.\n * @default 0\n */\n drift: number;\n /**\n * Frames a piece lives while it fades out.\n * @default 200\n */\n ticks: number;\n /**\n * Launch point as fractions of the canvas, 0 to 1. A missing side is\n * 0.5. A trigger element ignores it and launches from its own center.\n * @default { x: 0.5, y: 0.5 }\n */\n origin: { x?: number; y?: number };\n /**\n * CSS colors. Empty uses the theme's primary, secondary and tertiary\n * colors and their containers.\n * @default []\n */\n colors: string[];\n /**\n * @default ['square', 'circle']\n */\n shapes: ConfettiShape[];\n /**\n * Piece size multiplier.\n * @default 1\n */\n scalar: number;\n /**\n * On a canvas, wait for `fire()` instead of bursting once at init.\n * @default false\n */\n manualStart: boolean;\n}\n\nconst _defaults: ConfettiOptions = {\n particleCount: 50,\n angle: 90,\n spread: 45,\n startVelocity: 45,\n decay: 0.9,\n gravity: 1,\n drift: 0,\n ticks: 200,\n origin: { x: 0.5, y: 0.5 },\n colors: [],\n shapes: ['square', 'circle'],\n scalar: 1,\n manualStart: false\n};\n\nconst THEME_COLORS = ['primary', 'secondary', 'tertiary', 'primary-container', 'secondary-container', 'tertiary-container'];\n// Used when the page has no theme tokens.\nconst FALLBACK_COLORS = ['#26ccff', '#a25afd', '#ff5e7e', '#88ff5a', '#fcff42', '#ffa62d', '#ff36ff'];\nconst RAD = Math.PI / 180;\n\ninterface Piece {\n x: number;\n y: number;\n velocity: number;\n angle: number;\n wobble: number;\n wobbleSpeed: number;\n tilt: number;\n tick: number;\n color: string;\n shape: ConfettiShape;\n options: ConfettiOptions;\n}\n\ninterface Scene {\n ctx: CanvasRenderingContext2D;\n pieces: Piece[];\n frame: number;\n last: number;\n done: (() => void)[];\n overlay: boolean;\n}\n\nconst scenes = new Map<HTMLCanvasElement, Scene>();\nlet overlay: HTMLCanvasElement | null = null;\n\n/**\n * Confetti. Bursts of theme-colored pieces drawn on a canvas.\n *\n * - `Confetti.fire(options)` bursts over the whole viewport.\n * - Any other `.confetti` element bursts from its center when clicked.\n * - A `<canvas class=\"confetti\">` bursts inside its own box, once at init\n * unless `manualStart`, and again on each `fire()`.\n *\n * The viewport canvas is a manual popover, so it draws above an open modal\n * dialog, and it ignores the pointer. Nothing is drawn when the reader\n * prefers reduced motion.\n */\nexport class Confetti extends Component<ConfettiOptions> {\n private _onClick = () => { this.fire(); };\n\n constructor(el: HTMLElement, options: Partial<ConfettiOptions>) {\n super(el, options, Confetti);\n this.el['Expressive_Confetti'] = this;\n this.options = { ...Confetti.defaults, ...options };\n if (!(el instanceof HTMLCanvasElement)) el.addEventListener('click', this._onClick);\n else if (!this.options.manualStart) this.fire();\n }\n\n static get defaults(): ConfettiOptions {\n return _defaults;\n }\n\n static init(el: HTMLElement, options?: Partial<ConfettiOptions>): Confetti;\n static init(els: InitElements<InitElement>, options?: Partial<ConfettiOptions>): Confetti[];\n static init(\n els: HTMLElement | InitElements<InitElement>,\n options: Partial<ConfettiOptions> = {}\n ): Confetti | Confetti[] {\n return super.init(els, options, Confetti);\n }\n\n static getInstance(el: HTMLElement): Confetti {\n return el['Expressive_Confetti'];\n }\n\n /**\n * Bursts over the whole viewport. Resolves when the last piece is gone.\n */\n static fire(options: Partial<ConfettiOptions> = {}): Promise<void> {\n return burst(viewportCanvas, document.body, { ...Confetti.defaults, ...options });\n }\n\n /**\n * Bursts on this canvas, or from this element's center over the viewport.\n * Resolves when the last piece is gone.\n */\n fire(options: Partial<ConfettiOptions> = {}): Promise<void> {\n const merged = { ...this.options, ...options };\n if (this.el instanceof HTMLCanvasElement) {\n const canvas = this.el;\n return burst(() => canvas, canvas.parentElement ?? document.body, merged);\n }\n const r = this.el.getBoundingClientRect();\n merged.origin = { x: (r.left + r.width / 2) / innerWidth, y: (r.top + r.height / 2) / innerHeight };\n return burst(viewportCanvas, this.el.parentElement ?? document.body, merged);\n }\n\n destroy() {\n this.el.removeEventListener('click', this._onClick);\n if (this.el instanceof HTMLCanvasElement) stop(this.el);\n this.el['Expressive_Confetti'] = undefined;\n }\n}\n\n// `themed` is where the theme colors are read, so a scoped theme applies.\nfunction burst(getCanvas: () => HTMLCanvasElement, themed: Element, o: ConfettiOptions): Promise<void> {\n if (typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches) return Promise.resolve();\n const canvas = getCanvas();\n let scene = scenes.get(canvas);\n if (!scene) {\n const ctx = canvas.getContext('2d');\n if (!ctx) return Promise.resolve();\n scene = { ctx, pieces: [], frame: 0, last: 0, done: [], overlay: canvas === overlay };\n scenes.set(canvas, scene);\n }\n const { width, height } = fit(canvas);\n const colors = o.colors.length ? o.colors : themeColors(themed);\n const x = (o.origin.x ?? 0.5) * width;\n const y = (o.origin.y ?? 0.5) * height;\n for (let i = 0; i < o.particleCount; i++) {\n scene.pieces.push({\n x, y,\n velocity: o.startVelocity * (0.5 + Math.random()),\n angle: -o.angle * RAD + (0.5 - Math.random()) * o.spread * RAD,\n wobble: Math.random() * 10,\n wobbleSpeed: 0.05 + Math.random() * 0.05,\n tilt: (0.25 + Math.random() / 2) * Math.PI,\n tick: 0,\n color: colors[i % colors.length],\n shape: o.shapes[Math.floor(Math.random() * o.shapes.length)] ?? 'square',\n options: o\n });\n }\n const s = scene;\n if (!s.frame) s.frame = requestAnimationFrame((now) => { s.last = now; draw(canvas, s, now); });\n return new Promise((resolve) => s.done.push(resolve));\n}\n\nfunction draw(canvas: HTMLCanvasElement, scene: Scene, now: number) {\n // Frames are counted at 60 per second whatever the display rate.\n const step = Math.min((now - scene.last) / (1000 / 60), 4);\n scene.last = now;\n const { width, height } = fit(canvas);\n const { ctx } = scene;\n const dpr = canvas.width / (width || 1);\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n scene.pieces = scene.pieces.filter((p) => {\n const o = p.options;\n p.x += (Math.cos(p.angle) * p.velocity + o.drift) * step;\n p.y += (Math.sin(p.angle) * p.velocity + o.gravity * 3) * step;\n p.velocity *= o.decay ** step;\n p.wobble += p.wobbleSpeed * step;\n p.tilt += 0.1 * step;\n p.tick += step;\n if (p.tick >= o.ticks) return false;\n const size = 8 * o.scalar;\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.translate(p.x + 10 * o.scalar * Math.cos(p.wobble), p.y + 10 * o.scalar * Math.sin(p.wobble));\n ctx.rotate(p.tilt);\n ctx.scale(1, Math.cos(p.wobble));\n ctx.globalAlpha = 1 - p.tick / o.ticks;\n ctx.fillStyle = p.color;\n ctx.beginPath();\n if (p.shape === 'circle') ctx.arc(0, 0, size / 2, 0, 2 * Math.PI);\n else if (p.shape === 'star') star(ctx, size * 0.75);\n else ctx.rect(-size / 2, -size / 2, size, size);\n ctx.fill();\n return true;\n });\n if (scene.pieces.length) scene.frame = requestAnimationFrame((t) => draw(canvas, scene, t));\n else stop(canvas);\n}\n\nfunction stop(canvas: HTMLCanvasElement) {\n const scene = scenes.get(canvas);\n if (!scene) return;\n cancelAnimationFrame(scene.frame);\n scenes.delete(canvas);\n scene.ctx.setTransform(1, 0, 0, 1, 0, 0);\n scene.ctx.clearRect(0, 0, canvas.width, canvas.height);\n if (scene.overlay) {\n canvas.remove();\n overlay = null;\n }\n for (const resolve of scene.done) resolve();\n}\n\nfunction star(ctx: CanvasRenderingContext2D, r: number) {\n for (let i = 0; i < 10; i++) {\n const a = (i * Math.PI) / 5 - Math.PI / 2;\n const d = i % 2 ? r / 2 : r;\n ctx.lineTo(Math.cos(a) * d, Math.sin(a) * d);\n }\n ctx.closePath();\n}\n\n// Matches the canvas's pixel buffer to its box and the screen's pixel ratio.\nfunction fit(canvas: HTMLCanvasElement) {\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n const w = Math.round(width * devicePixelRatio);\n const h = Math.round(height * devicePixelRatio);\n if (canvas.width !== w || canvas.height !== h) {\n canvas.width = w;\n canvas.height = h;\n }\n return { width, height };\n}\n\nfunction viewportCanvas(): HTMLCanvasElement {\n if (overlay?.isConnected) return overlay;\n overlay = document.createElement('canvas');\n overlay.className = 'confetti-overlay';\n overlay.setAttribute('aria-hidden', 'true');\n // Inline, so the overlay works even where the stylesheet does not reach.\n Object.assign(overlay.style, {\n position: 'fixed', inset: '0', width: '100%', height: '100%', margin: '0', padding: '0',\n border: '0', background: 'transparent', pointerEvents: 'none', zIndex: '10001'\n });\n document.body.append(overlay);\n if (typeof overlay.showPopover === 'function') {\n overlay.popover = 'manual';\n overlay.showPopover();\n }\n return overlay;\n}\n\n// Resolves each theme color token through `color`, so light-dark() and\n// relative colors reach the canvas as plain colors.\nfunction themeColors(themed: Element): string[] {\n const probe = document.createElement('span');\n probe.hidden = true;\n themed.append(probe);\n const style = getComputedStyle(probe);\n const colors = THEME_COLORS.filter((role) => style.getPropertyValue(`--md-sys-color-${role}`).trim()).map((role) => {\n probe.style.color = `var(--md-sys-color-${role})`;\n return getComputedStyle(probe).color;\n });\n probe.remove();\n return colors.length ? colors : FALLBACK_COLORS;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Utils
3
- } from "./chunk-6OMRGML6.mjs";
3
+ } from "./chunk-M372EDXD.mjs";
4
4
  import {
5
5
  Component
6
- } from "./chunk-LTWPGFBR.mjs";
6
+ } from "./chunk-PD6HYHAE.mjs";
7
7
 
8
8
  // src/ts/components/carousel.ts
9
9
  var _defaults = {
@@ -22,6 +22,7 @@ var _defaults = {
22
22
  slide: "Slide"
23
23
  }
24
24
  };
25
+ var naturallyFocusable = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
25
26
  var _Carousel = class _Carousel extends Component {
26
27
  constructor(el, options) {
27
28
  super(el, options, _Carousel);
@@ -112,6 +113,7 @@ var _Carousel = class _Carousel extends Component {
112
113
  this._dragStartX = e.clientX;
113
114
  this._dragStartY = e.clientY;
114
115
  this._dragStartScroll = this._vertical ? this._scroller.scrollTop : this._scroller.scrollLeft;
116
+ this._setDragListeners(true);
115
117
  };
116
118
  this._handleTrackPointerMove = (e) => {
117
119
  if (!this.pressed || e.pointerId !== this._dragPointerId) return;
@@ -136,6 +138,7 @@ var _Carousel = class _Carousel extends Component {
136
138
  if (!this.pressed || e.pointerId !== this._dragPointerId) return;
137
139
  this.pressed = false;
138
140
  this._dragPointerId = null;
141
+ this._setDragListeners(false);
139
142
  this.el.classList.remove("dragging");
140
143
  try {
141
144
  this._scroller.releasePointerCapture(e.pointerId);
@@ -202,9 +205,8 @@ var _Carousel = class _Carousel extends Component {
202
205
  if (this._trackRaf !== null) return;
203
206
  this._trackRaf = requestAnimationFrame(() => {
204
207
  this._trackRaf = null;
208
+ const index = this._ignoreScroll ? this.center : this._nearestIndex();
205
209
  this._updateParallax();
206
- if (this._ignoreScroll) return;
207
- const index = this._nearestIndex();
208
210
  if (index !== this.center) this._syncActive(index, this.dragged);
209
211
  });
210
212
  };
@@ -217,6 +219,7 @@ var _Carousel = class _Carousel extends Component {
217
219
  };
218
220
  this._finishScroll = () => {
219
221
  this._ignoreScroll = false;
222
+ this._scroller.style.scrollSnapType = "";
220
223
  clearTimeout(this._scrollEndTimeout);
221
224
  this._scroller.removeEventListener("scrollend", this._handleScrollEnd);
222
225
  };
@@ -321,7 +324,6 @@ var _Carousel = class _Carousel extends Component {
321
324
  this.el.setAttribute("aria-roledescription", "carousel");
322
325
  this._generatedContainerDescription = true;
323
326
  }
324
- const naturallyFocusable = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
325
327
  this.images.forEach((item, index) => {
326
328
  if (!item.hasAttribute("aria-roledescription")) {
327
329
  item.setAttribute("aria-roledescription", "slide");
@@ -354,10 +356,6 @@ var _Carousel = class _Carousel extends Component {
354
356
  const button = document.createElement("button");
355
357
  button.type = "button";
356
358
  button.classList.add("indicator-item");
357
- if (i === 0) {
358
- button.classList.add("active");
359
- button.setAttribute("aria-current", "true");
360
- }
361
359
  button.setAttribute("aria-label", `${this.options.i18n.slide} ${i + 1}`);
362
360
  this._indicators.appendChild(button);
363
361
  });
@@ -396,9 +394,6 @@ var _Carousel = class _Carousel extends Component {
396
394
  });
397
395
  this._scroller.addEventListener("pointerdown", this._handleTrackPointerDown);
398
396
  this._scroller.addEventListener("wheel", this._handleNativeScroll, { passive: true });
399
- document.addEventListener("pointermove", this._handleTrackPointerMove);
400
- document.addEventListener("pointerup", this._handleTrackPointerUp);
401
- document.addEventListener("pointercancel", this._handleTrackPointerUp);
402
397
  this._scroller.addEventListener("click", this._handleTrackClick, true);
403
398
  this._scroller.addEventListener("dragstart", this._handleTrackDragStart);
404
399
  this._scroller.addEventListener("transitionend", this._handleItemResize);
@@ -417,9 +412,7 @@ var _Carousel = class _Carousel extends Component {
417
412
  this._scroller.removeEventListener("scroll", this._handleTrackScroll);
418
413
  this._scroller.removeEventListener("pointerdown", this._handleTrackPointerDown);
419
414
  this._scroller.removeEventListener("wheel", this._handleNativeScroll);
420
- document.removeEventListener("pointermove", this._handleTrackPointerMove);
421
- document.removeEventListener("pointerup", this._handleTrackPointerUp);
422
- document.removeEventListener("pointercancel", this._handleTrackPointerUp);
415
+ this._setDragListeners(false);
423
416
  this._scroller.removeEventListener("click", this._handleTrackClick, true);
424
417
  this._scroller.removeEventListener("dragstart", this._handleTrackDragStart);
425
418
  this._scroller.removeEventListener("transitionend", this._handleItemResize);
@@ -486,6 +479,13 @@ var _Carousel = class _Carousel extends Component {
486
479
  this._autoAdvanceTimer = null;
487
480
  }
488
481
  }
482
+ /** The document only hears from a carousel while a mouse press is down on its track. */
483
+ _setDragListeners(on) {
484
+ const method = on ? "addEventListener" : "removeEventListener";
485
+ document[method]("pointermove", this._handleTrackPointerMove);
486
+ document[method]("pointerup", this._handleTrackPointerUp);
487
+ document[method]("pointercancel", this._handleTrackPointerUp);
488
+ }
489
489
  _paintIndicators(center) {
490
490
  if (!this.showIndicators || !this._indicators) return;
491
491
  const pos = (center % this.count + this.count) % this.count;
@@ -512,40 +512,31 @@ var _Carousel = class _Carousel extends Component {
512
512
  }
513
513
  }
514
514
  _syncLayoutRoles(index) {
515
- const setSize = (item, size) => {
516
- if (this._authoredItemSizes.has(item)) return;
517
- item.setAttribute("data-carousel-size", size);
518
- this._generatedItemSizes.add(item);
515
+ const sizes = this.images.map(() => "large");
516
+ const setSize = (i, size) => {
517
+ if (this.images[i]) sizes[i] = size;
519
518
  };
520
- this.images.forEach((item) => setSize(item, "large"));
521
519
  if (this.el.classList.contains("flat") || this.el.classList.contains("uncontained") || this.el.classList.contains("full-screen") && this._vertical) {
522
- return;
523
- }
524
- if (this.el.classList.contains("hero") || this.el.classList.contains("full-screen-horizontal")) {
525
- const next = this.images[index + 1];
526
- if (next) setSize(next, "small");
527
- if (this.el.classList.contains("center-aligned")) {
528
- const previous = this.images[index - 1];
529
- if (previous) setSize(previous, "small");
530
- }
531
- return;
532
- }
533
- const width = this.el.clientWidth;
534
- const desiredLargeCount = width >= 1600 ? 4 : width >= 1200 ? 3 : width >= 600 ? 2 : 1;
535
- const largeCount = Math.min(desiredLargeCount, Math.max(1, this.count - 2));
536
- this.el.classList.remove("multi-wide", "multi-large", "multi-extra-large");
537
- if (largeCount === 2) this.el.classList.add("multi-wide");
538
- else if (largeCount === 3) this.el.classList.add("multi-large");
539
- else if (largeCount >= 4) this.el.classList.add("multi-extra-large");
540
- this._generatedWideLayout = this._generatedWideLayout || largeCount > 1;
541
- for (let offset = 1; offset < largeCount; offset += 1) {
542
- const item = this.images[index + offset];
543
- if (item) setSize(item, "large");
520
+ } else if (this.el.classList.contains("hero") || this.el.classList.contains("full-screen-horizontal")) {
521
+ setSize(index + 1, "small");
522
+ if (this.el.classList.contains("center-aligned")) setSize(index - 1, "small");
523
+ } else {
524
+ const width = this.el.clientWidth;
525
+ const desiredLargeCount = width >= 1600 ? 4 : width >= 1200 ? 3 : width >= 600 ? 2 : 1;
526
+ const largeCount = Math.min(desiredLargeCount, Math.max(1, this.count - 2));
527
+ this.el.classList.remove("multi-wide", "multi-large", "multi-extra-large");
528
+ if (largeCount === 2) this.el.classList.add("multi-wide");
529
+ else if (largeCount === 3) this.el.classList.add("multi-large");
530
+ else if (largeCount >= 4) this.el.classList.add("multi-extra-large");
531
+ this._generatedWideLayout = this._generatedWideLayout || largeCount > 1;
532
+ setSize(index + largeCount, "medium");
533
+ setSize(index + largeCount + 1, "small");
544
534
  }
545
- const medium = this.images[index + largeCount];
546
- const small = this.images[index + largeCount + 1];
547
- if (medium) setSize(medium, "medium");
548
- if (small) setSize(small, "small");
535
+ this.images.forEach((item, i) => {
536
+ if (this._authoredItemSizes.has(item)) return;
537
+ item.setAttribute("data-carousel-size", sizes[i]);
538
+ this._generatedItemSizes.add(item);
539
+ });
549
540
  }
550
541
  _syncAdaptiveMode() {
551
542
  if (!this.el.classList.contains("full-screen")) return;
@@ -562,15 +553,11 @@ var _Carousel = class _Carousel extends Component {
562
553
  _focusItem(index) {
563
554
  const item = this.images[index];
564
555
  if (!item) return;
565
- const focusable = item.matches(
566
- 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'
567
- ) ? item : item.querySelector(
568
- 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'
569
- );
556
+ const focusable = item.matches(naturallyFocusable) ? item : item.querySelector(naturallyFocusable);
570
557
  (focusable ?? item).focus({ preventScroll: true });
571
558
  }
572
559
  _updateParallax() {
573
- if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
560
+ if (this._motion.matches) {
574
561
  this.images.forEach(
575
562
  (item) => item.style.setProperty("--md-comp-carousel-item-parallax", "0px")
576
563
  );
@@ -579,8 +566,9 @@ var _Carousel = class _Carousel extends Component {
579
566
  const scrollerRect = this._scroller.getBoundingClientRect();
580
567
  const viewportCenter = this._vertical ? scrollerRect.top + scrollerRect.height / 2 : scrollerRect.left + scrollerRect.width / 2;
581
568
  const viewportSize = Math.max(1, this._vertical ? scrollerRect.height : scrollerRect.width);
582
- this.images.forEach((item) => {
583
- const rect = item.getBoundingClientRect();
569
+ const rects = this.images.map((item) => item.getBoundingClientRect());
570
+ this.images.forEach((item, i) => {
571
+ const rect = rects[i];
584
572
  const itemCenter = this._vertical ? rect.top + rect.height / 2 : rect.left + rect.width / 2;
585
573
  const progress = Math.max(-1, Math.min(1, (itemCenter - viewportCenter) / viewportSize));
586
574
  item.style.setProperty("--md-comp-carousel-item-parallax", `${progress * -24}px`);
@@ -633,6 +621,7 @@ var _Carousel = class _Carousel extends Component {
633
621
  const left = centered ? el.offsetLeft - (this._scroller.clientWidth - el.offsetWidth) / 2 : style.direction === "rtl" ? el.offsetLeft + el.offsetWidth - this._scroller.clientWidth + inlinePadding : el.offsetLeft - inlinePadding;
634
622
  const top = el.offsetTop - blockPadding;
635
623
  this._ignoreScroll = true;
624
+ this._scroller.style.scrollSnapType = "none";
636
625
  this._scroller.scrollTo({
637
626
  left: this._vertical ? 0 : left,
638
627
  top: this._vertical ? top : 0,
@@ -661,13 +650,13 @@ var _Carousel = class _Carousel extends Component {
661
650
  this._syncAutoAdvance();
662
651
  }
663
652
  next(n = 1) {
664
- if (n === void 0 || isNaN(n)) n = 1;
653
+ if (isNaN(n)) n = 1;
665
654
  const index = this.center + n;
666
655
  if (index >= this.count || index < 0) return;
667
656
  this._cycleTo(index);
668
657
  }
669
658
  prev(n = 1) {
670
- if (n === void 0 || isNaN(n)) n = 1;
659
+ if (isNaN(n)) n = 1;
671
660
  const index = this.center - n;
672
661
  if (index >= this.count || index < 0) return;
673
662
  this._cycleTo(index);
@@ -688,4 +677,4 @@ var Carousel = _Carousel;
688
677
  export {
689
678
  Carousel
690
679
  };
691
- //# sourceMappingURL=chunk-LWBQIX5J.mjs.map
680
+ //# sourceMappingURL=chunk-KVJAVDBC.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ts/components/carousel.ts"],
4
+ "sourcesContent": ["import { Utils } from '../core/utils';\nimport { Component, BaseOptions, InitElements, InitElement } from '../core/component';\n\nexport interface CarouselI18nOptions {\n carousel: string;\n item: string;\n of: string;\n indicators: string;\n slide: string;\n}\n\nexport interface CarouselOptions extends BaseOptions {\n /**\n * Milliseconds allowed for a programmatic scroll to land. The track itself\n * scrolls at the browser's own smooth-scroll speed; this only bounds how\n * long the component waits for `scrollend` before assuming it arrived, and\n * is added to `interval` to time each auto-advance rest.\n * @default 200\n */\n duration: number;\n /**\n * Full-width compatibility track. Material 3 layouts are already linear.\n * Also implied by `.flat`.\n * @default false\n */\n fullWidth: boolean;\n /**\n * Show paging dots. Only drawn when there is more than one item.\n * @default false\n */\n indicators: boolean;\n /**\n * Stop auto-advance at the last item instead of looping back to the first.\n * A scroll track never wraps under arrow keys or `set()` either way.\n * @default false\n */\n noWrap: boolean;\n /**\n * Milliseconds to rest between automatic advances, on top of `duration` -\n * the gap follows each transition rather than containing it, so a full cycle\n * takes `duration + interval`. 0 leaves auto-advance off.\n * Whenever it is set the track pauses on hover and on keyboard focus, and\n * `prefers-reduced-motion: reduce` suppresses it entirely - auto-advancing\n * content is WCAG 2.2.2 territory, so neither is an option an author can\n * turn off. `noWrap` stops it after one pass instead of looping.\n * @default 0\n */\n interval: number;\n /**\n * Fixed track height in pixels. `null` sizes the carousel from its content.\n * A fixed height gives the indicators their own row below the track instead\n * of laying them over the media.\n * @default null\n */\n height: number | null;\n /**\n * Called when a new item becomes the center.\n * @default null\n */\n onCycleTo: (current: Element, dragged: boolean) => void;\n /**\n * Accessible names generated for an unlabeled carousel, its items and its\n * indicators.\n */\n i18n: Partial<CarouselI18nOptions>;\n}\n\nconst _defaults: CarouselOptions = {\n duration: 200,\n fullWidth: false,\n indicators: false,\n noWrap: false,\n interval: 0,\n height: null,\n onCycleTo: null,\n i18n: {\n carousel: 'Carousel',\n item: 'Item',\n of: 'of',\n indicators: 'Slides',\n slide: 'Slide'\n }\n};\n\nconst naturallyFocusable =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), ' +\n 'textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport class Carousel extends Component<CarouselOptions> {\n hasMultipleSlides: boolean;\n showIndicators: boolean;\n pressed: boolean;\n dragged: boolean;\n images: HTMLElement[];\n _indicators: HTMLUListElement | HTMLElement;\n count: number;\n center: number = 0;\n scrollingTimeout: ReturnType<typeof setTimeout>;\n oneTimeCallback: (current: Element, dragged: boolean) => void | null;\n\n private _ownIndicators: boolean = false;\n private _trackEl: HTMLElement | null = null;\n private _ignoreScroll: boolean = false;\n private _alignAfterResize = false;\n private _scrollEndTimeout: ReturnType<typeof setTimeout>;\n private _trackRaf: number = null;\n private _started: boolean = false;\n private _vertical: boolean = false;\n private _resizeObserver: ResizeObserver | null = null;\n private _resizeTimeout: ReturnType<typeof setTimeout> = null;\n private _usesWindowResize: boolean = false;\n private _dragPointerId: number | null = null;\n private _dragStartX: number = 0;\n private _dragStartY: number = 0;\n private _dragStartScroll: number = 0;\n private _suppressClick: boolean = false;\n private _suppressClickTimeout: ReturnType<typeof setTimeout> = null;\n private _generatedContainerRole: boolean = false;\n private _generatedContainerLabel: boolean = false;\n private _generatedContainerDescription: boolean = false;\n private _generatedWideLayout: boolean = false;\n private _generatedFixedHeight: boolean = false;\n private _authoredInlineHeight: string | null = null;\n private _autoAdvanceTimer: ReturnType<typeof setTimeout> = null;\n private _autoAdvances: boolean = false;\n private _autoPaused: boolean = false;\n private _hovered: boolean = false;\n private _focused: boolean = false;\n private _motion = window.matchMedia('(prefers-reduced-motion: reduce)');\n private _generatedItemTabIndexes = new Set<HTMLElement>();\n private _generatedItemLabels = new Set<HTMLElement>();\n private _generatedItemDescriptions = new Set<HTMLElement>();\n private _generatedItemSizes = new Set<HTMLElement>();\n private _authoredItemSizes = new Set<HTMLElement>();\n private _itemA11yOriginal = new Map<\n HTMLElement,\n { ariaHidden: string | null; tabIndex: string | null }\n >();\n\n private get _scroller(): HTMLElement {\n return this._trackEl ?? this.el;\n }\n\n private static _live = new Set<Carousel>();\n private static _resizeListening = false;\n private static _onResize = Utils.throttle(() => {\n Carousel._live.forEach((c) => c._handleResize());\n }, 200);\n\n constructor(el: HTMLElement, options: Partial<CarouselOptions>) {\n super(el, options, Carousel);\n this.el['Expressive_Carousel'] = this;\n\n this.options = {\n ...Carousel.defaults,\n ...options\n };\n if (options?.i18n) {\n this.options.i18n = { ...Carousel.defaults.i18n, ...options.i18n };\n }\n\n if (this.options.fullWidth || this.el.classList.contains('flat')) {\n this.el.classList.add('flat');\n this.options.fullWidth = true;\n }\n this._vertical = this.el.classList.contains('full-screen');\n\n this.pressed = false;\n this.dragged = false;\n this.images = this._collectItems();\n if (!this.images.length) {\n console.error('Carousel: no .carousel-item elements to show');\n return;\n }\n this.images.forEach((item) => {\n this._itemA11yOriginal.set(item, {\n ariaHidden: item.getAttribute('aria-hidden'),\n tabIndex: item.getAttribute('tabindex')\n });\n if (item.hasAttribute('data-carousel-size')) this._authoredItemSizes.add(item);\n });\n\n this.hasMultipleSlides = this.images.length > 1;\n this.showIndicators = this.options.indicators && this.hasMultipleSlides;\n this.count = this.images.length;\n\n this._autoAdvances = this.options.interval > 0 && this.hasMultipleSlides;\n\n this.images.forEach((item) => item.classList.add('carousel-item'));\n if (this.options.height !== null) {\n this._generatedFixedHeight = !this.el.classList.contains('fixed-height');\n this._authoredInlineHeight = this.el.style.getPropertyValue('--carousel-height') || null;\n this.el.classList.add('fixed-height');\n this.el.style.setProperty('--carousel-height', `${this.options.height}px`);\n }\n this._wrapTrack();\n this._syncAdaptiveMode();\n\n if (this.showIndicators) this._setupIndicators();\n\n this._setupAccessibility();\n\n this._setupEventHandlers();\n this._started = true;\n\n const start = Math.max(\n 0,\n this.images.findIndex((el) => el.classList.contains('active'))\n );\n this.center = start;\n this._syncActive(start, false);\n this._updateParallax();\n this._scrollToIndex(start, false);\n\n this._syncAutoAdvance();\n }\n\n static get defaults(): CarouselOptions {\n return _defaults;\n }\n\n static init(el: HTMLElement, options?: Partial<CarouselOptions>): Carousel;\n static init(els: InitElements<InitElement>, options?: Partial<CarouselOptions>): Carousel[];\n static init(\n els: HTMLElement | InitElements<InitElement>,\n options: Partial<CarouselOptions> = {}\n ): Carousel | Carousel[] {\n return super.init(els, options, Carousel);\n }\n\n static getInstance(el: HTMLElement): Carousel {\n return el['Expressive_Carousel'];\n }\n\n destroy() {\n if (this._started) this._teardown();\n this.el['Expressive_Carousel'] = undefined;\n }\n\n private _collectItems(): HTMLElement[] {\n const explicit = Array.from(this.el.children).filter(\n (el): el is HTMLElement => el instanceof HTMLElement && el.classList.contains('carousel-item')\n );\n if (explicit.length) return explicit;\n return Array.from(this.el.children).filter((el): el is HTMLElement => {\n if (!(el instanceof HTMLElement)) return false;\n if (el.classList.contains('indicators') || el.classList.contains('carousel-fixed-item')) {\n return false;\n }\n return el.tagName !== 'NAV';\n });\n }\n\n private _setupAccessibility() {\n if (!this.el.hasAttribute('role')) {\n this.el.setAttribute('role', 'region');\n this._generatedContainerRole = true;\n }\n if (!this.el.hasAttribute('aria-label') && !this.el.hasAttribute('aria-labelledby')) {\n this.el.setAttribute('aria-label', this.options.i18n.carousel);\n this._generatedContainerLabel = true;\n }\n if (!this.el.hasAttribute('aria-roledescription')) {\n this.el.setAttribute('aria-roledescription', 'carousel');\n this._generatedContainerDescription = true;\n }\n\n this.images.forEach((item, index) => {\n if (!item.hasAttribute('aria-roledescription')) {\n item.setAttribute('aria-roledescription', 'slide');\n this._generatedItemDescriptions.add(item);\n }\n\n if (!item.hasAttribute('aria-label') && !item.hasAttribute('aria-labelledby')) {\n const mediaName = item.querySelector('img[alt]')?.getAttribute('alt')?.trim();\n const textName = item.textContent?.replace(/\\s+/g, ' ').trim();\n const name = mediaName || textName;\n const position = `${this.options.i18n.item} ${index + 1} ${this.options.i18n.of} ${this.count}`;\n item.setAttribute('aria-label', name ? `${name}, ${position}` : position);\n this._generatedItemLabels.add(item);\n }\n\n if (!item.matches(naturallyFocusable) && !item.querySelector(naturallyFocusable)) {\n item.tabIndex = 0;\n this._generatedItemTabIndexes.add(item);\n }\n });\n }\n\n private _setupIndicators() {\n const existing = Array.from(this.el.children).find(\n (el): el is HTMLElement => el instanceof HTMLElement && el.classList.contains('indicators')\n );\n this._indicators = existing ?? document.createElement('nav');\n this._ownIndicators = !existing;\n this._indicators.classList.add('indicators');\n this._indicators.setAttribute('aria-label', this.options.i18n.indicators);\n this._indicators.replaceChildren();\n\n this.images.forEach((_, i) => {\n const button = document.createElement('button');\n button.type = 'button';\n button.classList.add('indicator-item');\n button.setAttribute('aria-label', `${this.options.i18n.slide} ${i + 1}`);\n this._indicators.appendChild(button);\n });\n\n if (this._ownIndicators) this.el.appendChild(this._indicators);\n this.el.querySelector('.carousel-fixed-item')?.classList.add('with-indicators');\n }\n\n _setupEventHandlers() {\n this.el.addEventListener('keydown', this._handleKeydown);\n this._motion.addEventListener('change', this._handleMotionChange);\n if (this._autoAdvances) {\n this.el.addEventListener('mouseenter', this._handleAutoAdvanceState);\n this.el.addEventListener('mouseleave', this._handleAutoAdvanceState);\n this.el.addEventListener('focusin', this._handleAutoAdvanceState);\n this.el.addEventListener('focusout', this._handleAutoAdvanceState);\n // Browsers clamp a background tab's timers rather than stopping them, so\n // without this the track keeps cycling out of sight.\n document.addEventListener('visibilitychange', this._handleAutoAdvanceState);\n }\n if (this.showIndicators && this._indicators) {\n this._indicators.addEventListener('click', this._handleIndicatorClick);\n }\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => this._handleThrottledResize());\n this._resizeObserver.observe(this.el);\n }\n\n // Full-screen needs a window signal when orientation changes without\n // changing the container width. ResizeObserver handles every other track,\n // including pane resizes.\n this._usesWindowResize =\n !this._resizeObserver || this.el.classList.contains('full-screen');\n if (this._usesWindowResize) {\n Carousel._live.add(this);\n if (!Carousel._resizeListening) {\n window.addEventListener('resize', Carousel._onResize, {\n passive: true\n });\n Carousel._resizeListening = true;\n }\n }\n\n this._scroller.addEventListener('scroll', this._handleTrackScroll, {\n passive: true\n });\n this._scroller.addEventListener('pointerdown', this._handleTrackPointerDown);\n this._scroller.addEventListener('wheel', this._handleNativeScroll, { passive: true });\n this._scroller.addEventListener('click', this._handleTrackClick, true);\n this._scroller.addEventListener('dragstart', this._handleTrackDragStart);\n this._scroller.addEventListener('transitionend', this._handleItemResize);\n }\n\n _removeEventHandlers() {\n this.el.removeEventListener('keydown', this._handleKeydown);\n this._motion.removeEventListener('change', this._handleMotionChange);\n this.el.removeEventListener('mouseenter', this._handleAutoAdvanceState);\n this.el.removeEventListener('mouseleave', this._handleAutoAdvanceState);\n this.el.removeEventListener('focusin', this._handleAutoAdvanceState);\n this.el.removeEventListener('focusout', this._handleAutoAdvanceState);\n document.removeEventListener('visibilitychange', this._handleAutoAdvanceState);\n if (this._indicators) {\n this._indicators.removeEventListener('click', this._handleIndicatorClick);\n }\n this._scroller.removeEventListener('scroll', this._handleTrackScroll);\n this._scroller.removeEventListener('pointerdown', this._handleTrackPointerDown);\n this._scroller.removeEventListener('wheel', this._handleNativeScroll);\n this._setDragListeners(false);\n this._scroller.removeEventListener('click', this._handleTrackClick, true);\n this._scroller.removeEventListener('dragstart', this._handleTrackDragStart);\n this._scroller.removeEventListener('transitionend', this._handleItemResize);\n\n this._resizeObserver?.disconnect();\n this._resizeObserver = null;\n if (this._usesWindowResize) {\n Carousel._live.delete(this);\n if (Carousel._live.size === 0 && Carousel._resizeListening) {\n window.removeEventListener('resize', Carousel._onResize);\n Carousel._resizeListening = false;\n }\n }\n }\n\n private _teardown() {\n this._started = false;\n this._removeEventHandlers();\n this._finishScroll();\n this._autoAdvances = false;\n this._syncAutoAdvance();\n if (this._trackRaf !== null) cancelAnimationFrame(this._trackRaf);\n window.clearTimeout(this.scrollingTimeout);\n window.clearTimeout(this._suppressClickTimeout);\n clearTimeout(this._resizeTimeout);\n if (this._ownIndicators) this._indicators?.remove();\n this._unwrapTrack();\n this.images.forEach((el) => {\n el.style.removeProperty('--md-comp-carousel-item-parallax');\n if (this._generatedItemLabels.has(el)) el.removeAttribute('aria-label');\n if (this._generatedItemDescriptions.has(el)) el.removeAttribute('aria-roledescription');\n if (this._generatedItemSizes.has(el)) el.removeAttribute('data-carousel-size');\n const original = this._itemA11yOriginal.get(el);\n if (original?.ariaHidden === null) el.removeAttribute('aria-hidden');\n else if (original) el.setAttribute('aria-hidden', original.ariaHidden);\n if (original?.tabIndex === null) el.removeAttribute('tabindex');\n else if (original) el.setAttribute('tabindex', original.tabIndex);\n });\n if (this._generatedContainerRole) this.el.removeAttribute('role');\n if (this._generatedContainerLabel) this.el.removeAttribute('aria-label');\n if (this._generatedContainerDescription) this.el.removeAttribute('aria-roledescription');\n if (this._generatedFixedHeight) this.el.classList.remove('fixed-height');\n if (this.options.height !== null) {\n if (this._authoredInlineHeight === null) this.el.style.removeProperty('--carousel-height');\n else this.el.style.setProperty('--carousel-height', this._authoredInlineHeight);\n }\n if (this._generatedWideLayout) {\n this.el.classList.remove(\n 'multi-wide',\n 'multi-large',\n 'multi-extra-large',\n 'full-screen-horizontal'\n );\n }\n }\n\n _handleThrottledResize = () => {\n if (!this._started || this._resizeTimeout !== null) return;\n this._handleResize();\n this._resizeTimeout = setTimeout(() => {\n this._resizeTimeout = null;\n this._handleResize();\n }, 200);\n };\n\n _handleAutoAdvanceState = (e: Event) => {\n if (e.type === 'mouseenter') this._hovered = true;\n else if (e.type === 'mouseleave') this._hovered = false;\n else if (e.type === 'focusin') this._focused = true;\n else if (e.type === 'focusout') this._focused = this.el.contains((e as FocusEvent).relatedTarget as Node);\n this._syncAutoAdvance();\n };\n\n private _handleMotionChange = () => {\n this._syncAutoAdvance();\n if (this._motion.matches) this._scrollToIndex(this.center, false);\n this._updateParallax();\n };\n\n /** Start or stop the timer to match the current pause state. */\n private _syncAutoAdvance() {\n const run =\n this._autoAdvances &&\n !this._autoPaused &&\n !this._hovered &&\n !this._focused &&\n !this._motion.matches &&\n !document.hidden;\n if (run && this._autoAdvanceTimer === null) {\n // Each rest is armed after the move before it, never on a fixed phase.\n // A repeating timer assumes the work it triggers is instant; a smooth\n // scroll is not, so a fixed period either lands mid-scroll or, once a\n // tick is dropped, leaves whatever is left of the period as the next\n // rest.\n this._autoAdvanceTimer = setTimeout(\n this._tick,\n this.options.duration + this.options.interval\n );\n } else if (!run && this._autoAdvanceTimer !== null) {\n clearTimeout(this._autoAdvanceTimer);\n this._autoAdvanceTimer = null;\n }\n }\n\n private _tick = () => {\n this._autoAdvanceTimer = null;\n this._advance();\n this._syncAutoAdvance();\n };\n\n private _advance = () => {\n const next = this.center + 1;\n if (next < this.count) {\n this.set(next);\n return;\n }\n // Arrow keys and `set()` never wrap, because a scroll container has ends.\n // Auto-advance is the one caller that can: looping back to the first item\n // is just a scroll. An author who asked for no wrapping gets one pass and\n // then silence.\n if (this.options.noWrap) {\n this._autoAdvances = false;\n this._syncAutoAdvance();\n return;\n }\n this.set(0);\n };\n\n private _handleNativeScroll = () => {\n this._alignAfterResize = false;\n this._finishScroll();\n };\n\n /** The document only hears from a carousel while a mouse press is down on its track. */\n private _setDragListeners(on: boolean) {\n const method = on ? 'addEventListener' : 'removeEventListener';\n document[method]('pointermove', this._handleTrackPointerMove);\n document[method]('pointerup', this._handleTrackPointerUp);\n document[method]('pointercancel', this._handleTrackPointerUp);\n }\n\n _handleTrackPointerDown = (e: PointerEvent) => {\n this._handleNativeScroll();\n if (e.pointerType !== 'mouse' || e.button !== 0) return;\n this.pressed = true;\n this.dragged = false;\n this._suppressClick = false;\n this._dragPointerId = e.pointerId;\n this._dragStartX = e.clientX;\n this._dragStartY = e.clientY;\n this._dragStartScroll = this._vertical ? this._scroller.scrollTop : this._scroller.scrollLeft;\n this._setDragListeners(true);\n };\n\n _handleTrackPointerMove = (e: PointerEvent) => {\n if (!this.pressed || e.pointerId !== this._dragPointerId) return;\n const deltaX = e.clientX - this._dragStartX;\n const deltaY = e.clientY - this._dragStartY;\n const primaryDelta = this._vertical ? deltaY : deltaX;\n const crossDelta = this._vertical ? deltaX : deltaY;\n\n if (!this.dragged) {\n if (Math.abs(primaryDelta) < 6 || Math.abs(primaryDelta) <= Math.abs(crossDelta)) return;\n this.dragged = true;\n this.el.classList.add('dragging');\n try {\n this._scroller.setPointerCapture(e.pointerId);\n } catch {\n // Pointer capture is optional in older browsers and test DOMs.\n }\n }\n\n if (this._vertical) this._scroller.scrollTop = this._dragStartScroll - deltaY;\n else this._scroller.scrollLeft = this._dragStartScroll - deltaX;\n e.preventDefault();\n };\n\n _handleTrackPointerUp = (e: PointerEvent) => {\n if (!this.pressed || e.pointerId !== this._dragPointerId) return;\n this.pressed = false;\n this._dragPointerId = null;\n this._setDragListeners(false);\n this.el.classList.remove('dragging');\n try {\n this._scroller.releasePointerCapture(e.pointerId);\n } catch {\n // Pointer capture may already have been released.\n }\n\n if (!this.dragged) return;\n this._suppressClick = true;\n window.clearTimeout(this._suppressClickTimeout);\n this._suppressClickTimeout = setTimeout(() => {\n this._suppressClick = false;\n }, 0);\n this._syncActive(this._nearestIndex(), true);\n };\n\n _handleTrackClick = (e: MouseEvent) => {\n if (!this._suppressClick) return;\n this._suppressClick = false;\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n\n _handleTrackDragStart = (e: DragEvent) => {\n if ((e.target as HTMLElement).closest('a, img, picture, video')) e.preventDefault();\n };\n\n private _handleItemResize = (e: TransitionEvent) => {\n if (this._alignAfterResize && !this.pressed && e.propertyName === 'flex-basis' && this.images.includes(e.target as HTMLElement)) {\n this._scrollToIndex(this.center, false);\n }\n };\n\n _handleIndicatorClick = (e: Event) => {\n e.stopPropagation();\n const indicator = (e.target as HTMLElement).closest('.indicator-item');\n if (!indicator || !this._indicators.contains(indicator)) return;\n const index = [...this._indicators.children].indexOf(indicator);\n if (index < 0) return;\n this._cycleTo(index);\n };\n\n _handleKeydown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement;\n if (target.isContentEditable || target.closest('input, textarea, select')) return;\n const rtl = getComputedStyle(this._scroller).direction === 'rtl';\n const forward = this._vertical ? e.key === 'ArrowDown' : e.key === (rtl ? Utils.keys.ARROW_LEFT : Utils.keys.ARROW_RIGHT);\n const backward = this._vertical ? e.key === 'ArrowUp' : e.key === (rtl ? Utils.keys.ARROW_RIGHT : Utils.keys.ARROW_LEFT);\n if (e.key === 'Home') {\n e.preventDefault();\n this.set(0);\n this._focusItem(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n this.set(this.count - 1);\n this._focusItem(this.count - 1);\n } else if (forward) {\n e.preventDefault();\n this.next();\n this._focusItem(this.center);\n } else if (backward) {\n e.preventDefault();\n this.prev();\n this._focusItem(this.center);\n }\n };\n\n _handleTrackScroll = () => {\n if (!this.el.classList.contains('scrolling')) this.el.classList.add('scrolling');\n window.clearTimeout(this.scrollingTimeout);\n this.scrollingTimeout = setTimeout(() => this.el.classList.remove('scrolling'), 120);\n if (this._trackRaf !== null) return;\n this._trackRaf = requestAnimationFrame(() => {\n this._trackRaf = null;\n // Read the nearest index before the parallax writes invalidate style.\n const index = this._ignoreScroll ? this.center : this._nearestIndex();\n this._updateParallax();\n if (index !== this.center) this._syncActive(index, this.dragged);\n });\n };\n\n _handleResize = () => {\n if (!this._started || !this.images.length) return;\n this._syncAdaptiveMode();\n this._syncLayoutRoles(this.center);\n if (!this.pressed) this._scrollToIndex(this.center, false);\n this._updateParallax();\n };\n\n private _paintIndicators(center: number) {\n if (!this.showIndicators || !this._indicators) return;\n const pos = ((center % this.count) + this.count) % this.count;\n this._indicators.querySelectorAll('.indicator-item').forEach((el, i) => {\n const on = i === pos;\n el.classList.toggle('active', on);\n if (on) el.setAttribute('aria-current', 'true');\n else el.removeAttribute('aria-current');\n });\n }\n\n private _syncActive(index: number, dragged: boolean) {\n const prev = this.center;\n this.center = index;\n this.images.forEach((el, i) => el.classList.toggle('active', i === index));\n this._paintIndicators(index);\n this._syncLayoutRoles(index);\n const curr = this.images[index];\n if (prev !== index && typeof this.options.onCycleTo === 'function') {\n this.options.onCycleTo.call(this, curr, dragged);\n }\n if (typeof this.oneTimeCallback === 'function') {\n this.oneTimeCallback.call(this, curr, dragged);\n this.oneTimeCallback = null;\n }\n }\n\n private _syncLayoutRoles(index: number) {\n // Every size is worked out before any is written. Writing `large` to all\n // items and then reading clientWidth forced a layout in that interim\n // state on every center change.\n type Size = 'large' | 'medium' | 'small';\n const sizes: Size[] = this.images.map(() => 'large');\n const setSize = (i: number, size: Size) => {\n if (this.images[i]) sizes[i] = size;\n };\n\n if (\n this.el.classList.contains('flat') ||\n this.el.classList.contains('uncontained') ||\n (this.el.classList.contains('full-screen') && this._vertical)\n ) {\n // Every item stays large.\n } else if (\n this.el.classList.contains('hero') ||\n this.el.classList.contains('full-screen-horizontal')\n ) {\n setSize(index + 1, 'small');\n if (this.el.classList.contains('center-aligned')) setSize(index - 1, 'small');\n } else {\n const width = this.el.clientWidth;\n const desiredLargeCount = width >= 1600 ? 4 : width >= 1200 ? 3 : width >= 600 ? 2 : 1;\n const largeCount = Math.min(desiredLargeCount, Math.max(1, this.count - 2));\n this.el.classList.remove('multi-wide', 'multi-large', 'multi-extra-large');\n if (largeCount === 2) this.el.classList.add('multi-wide');\n else if (largeCount === 3) this.el.classList.add('multi-large');\n else if (largeCount >= 4) this.el.classList.add('multi-extra-large');\n this._generatedWideLayout = this._generatedWideLayout || largeCount > 1;\n setSize(index + largeCount, 'medium');\n setSize(index + largeCount + 1, 'small');\n }\n\n this.images.forEach((item, i) => {\n if (this._authoredItemSizes.has(item)) return;\n item.setAttribute('data-carousel-size', sizes[i]);\n this._generatedItemSizes.add(item);\n });\n }\n\n private _syncAdaptiveMode() {\n if (!this.el.classList.contains('full-screen')) return;\n const landscape = window.matchMedia('(orientation: landscape)').matches;\n const horizontal = this.el.clientWidth >= 840 || landscape;\n const wasVertical = this._vertical;\n this._vertical = !horizontal;\n this.el.classList.toggle('full-screen-horizontal', horizontal);\n this._generatedWideLayout = this._generatedWideLayout || horizontal;\n\n if (this._started && wasVertical !== this._vertical) {\n this._scroller.scrollTo({ left: 0, top: 0, behavior: 'auto' });\n }\n }\n\n private _focusItem(index: number) {\n const item = this.images[index];\n if (!item) return;\n const focusable = item.matches(naturallyFocusable)\n ? item\n : item.querySelector<HTMLElement>(naturallyFocusable);\n (focusable ?? item).focus({ preventScroll: true });\n }\n\n private _updateParallax() {\n if (this._motion.matches) {\n this.images.forEach((item) =>\n item.style.setProperty('--md-comp-carousel-item-parallax', '0px')\n );\n return;\n }\n\n const scrollerRect = this._scroller.getBoundingClientRect();\n const viewportCenter = this._vertical\n ? scrollerRect.top + scrollerRect.height / 2\n : scrollerRect.left + scrollerRect.width / 2;\n const viewportSize = Math.max(1, this._vertical ? scrollerRect.height : scrollerRect.width);\n\n // All reads, then all writes: a write between two reads forces a style\n // recalculation per item on every scroll frame.\n const rects = this.images.map((item) => item.getBoundingClientRect());\n this.images.forEach((item, i) => {\n const rect = rects[i];\n const itemCenter = this._vertical ? rect.top + rect.height / 2 : rect.left + rect.width / 2;\n const progress = Math.max(-1, Math.min(1, (itemCenter - viewportCenter) / viewportSize));\n item.style.setProperty('--md-comp-carousel-item-parallax', `${progress * -24}px`);\n });\n }\n\n private _wrapTrack() {\n const track = document.createElement('div');\n track.className = 'carousel-track';\n this.images[0].before(track);\n this.images.forEach((el) => track.appendChild(el));\n this._trackEl = track;\n }\n\n private _unwrapTrack() {\n if (!this._trackEl) return;\n this.images.forEach((el) => this.el.insertBefore(el, this._trackEl));\n this._trackEl.remove();\n this._trackEl = null;\n }\n\n private _nearestIndex(): number {\n const centered = this.el.classList.contains('center-aligned');\n const style = getComputedStyle(this._scroller);\n const rtl = !this._vertical && style.direction === 'rtl';\n const position = this._vertical ? this._scroller.scrollTop : this._scroller.scrollLeft;\n const viewport = this._vertical ? this._scroller.clientHeight : this._scroller.clientWidth;\n const extent = (this._vertical ? this._scroller.scrollHeight : this._scroller.scrollWidth) - viewport;\n const padding = parseFloat(this._vertical ? style.paddingBlockStart : style.paddingInlineStart) || 0;\n let best = this.center;\n let bestDist = Infinity;\n this.images.forEach((el, i) => {\n const start = this._vertical ? el.offsetTop : el.offsetLeft;\n const size = this._vertical ? el.offsetHeight : el.offsetWidth;\n const target = centered ? start - (viewport - size) / 2 : start + (rtl ? size - viewport + padding : -padding);\n const bounded = Math.max(rtl ? -extent : 0, Math.min(rtl ? 0 : extent, target));\n const dist = Math.abs(bounded - position);\n if (dist < bestDist || (dist === bestDist && i === this.center)) {\n bestDist = dist;\n best = i;\n }\n });\n return best;\n }\n\n private _scrollToIndex(n: number, smooth = true) {\n const el = this.images[n];\n if (!el) return;\n this._finishScroll();\n const centered = this.el.classList.contains('center-aligned');\n const style = getComputedStyle(this._scroller);\n const inlinePadding = Number.parseFloat(style.paddingInlineStart) || 0;\n const blockPadding = Number.parseFloat(style.paddingBlockStart) || 0;\n const left = centered\n ? el.offsetLeft - (this._scroller.clientWidth - el.offsetWidth) / 2\n : style.direction === 'rtl'\n ? el.offsetLeft + el.offsetWidth - this._scroller.clientWidth + inlinePadding\n : el.offsetLeft - inlinePadding;\n const top = el.offsetTop - blockPadding;\n this._ignoreScroll = true;\n // Item sizes are still transitioning, so the track can be too narrow to\n // reach the target and clamps short of it. Firefox takes whatever item\n // sits at that clamped position as the snap target and re-snaps to it\n // after each later layout change, undoing the alignment below. Snapping\n // returns in _finishScroll, once the track has settled on the item.\n this._scroller.style.scrollSnapType = 'none';\n this._scroller.scrollTo({\n left: this._vertical ? 0 : left,\n top: this._vertical ? top : 0,\n behavior: smooth && !this._motion.matches ? 'smooth' : 'instant'\n });\n this._scroller.addEventListener('scrollend', this._handleScrollEnd);\n this._scrollEndTimeout = setTimeout(this._finishScroll, this.options.duration + 350);\n }\n\n private _finishScroll = () => {\n this._ignoreScroll = false;\n this._scroller.style.scrollSnapType = '';\n clearTimeout(this._scrollEndTimeout);\n this._scroller.removeEventListener('scrollend', this._handleScrollEnd);\n };\n\n private _handleScrollEnd = () => {\n // An earlier scroll can finish after a new navigation has started.\n if (this._nearestIndex() === this.center && !this.images.some(item => item.getAnimations().some(animation => animation.playState === 'running'))) {\n this._finishScroll();\n }\n };\n\n _cycleTo(n: number, callback: CarouselOptions['onCycleTo'] = null) {\n this._alignAfterResize = true;\n if (typeof callback === 'function') this.oneTimeCallback = callback;\n this._syncActive(n, false);\n this._scrollToIndex(n);\n }\n\n /**\n * Stop auto-advance until start() is called. Without an `interval` there is\n * nothing to stop and this does nothing.\n */\n pause() {\n this._autoPaused = true;\n this._syncAutoAdvance();\n }\n\n /** Resume auto-advance after pause(). */\n start() {\n this._autoPaused = false;\n this._syncAutoAdvance();\n }\n\n next(n: number = 1) {\n if (isNaN(n)) n = 1;\n const index = this.center + n;\n if (index >= this.count || index < 0) return;\n this._cycleTo(index);\n }\n\n prev(n: number = 1) {\n if (isNaN(n)) n = 1;\n const index = this.center - n;\n if (index >= this.count || index < 0) return;\n this._cycleTo(index);\n }\n\n set(n: number, callback?: CarouselOptions['onCycleTo']) {\n if (n === undefined || isNaN(n)) n = 0;\n if (n >= this.count || n < 0) return;\n this._cycleTo(n, callback);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["el"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Component
3
- } from "./chunk-LTWPGFBR.mjs";
3
+ } from "./chunk-PD6HYHAE.mjs";
4
4
 
5
5
  // src/ts/components/buttonGroup.ts
6
6
  var _defaults = {};
@@ -223,4 +223,4 @@ var ButtonGroup = class _ButtonGroup extends Component {
223
223
  export {
224
224
  ButtonGroup
225
225
  };
226
- //# sourceMappingURL=chunk-YDCS5S3J.mjs.map
226
+ //# sourceMappingURL=chunk-L27Q6ZMI.mjs.map