@universityofmaryland/web-elements-library 1.5.2 → 1.5.5

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 (710) hide show
  1. package/README.md +1 -1
  2. package/dist/_types.d.ts +2 -9
  3. package/dist/_types.d.ts.map +1 -1
  4. package/dist/atomic/_types.d.ts +2 -2
  5. package/dist/atomic/_types.d.ts.map +1 -1
  6. package/dist/atomic/actions/icon.d.ts +1 -5
  7. package/dist/atomic/actions/icon.d.ts.map +1 -1
  8. package/dist/atomic/actions/icon.js +43 -48
  9. package/dist/atomic/actions/icon.js.map +1 -1
  10. package/dist/atomic/actions/icon.mjs +43 -48
  11. package/dist/atomic/actions/icon.mjs.map +1 -1
  12. package/dist/atomic/actions/text.d.ts +4 -16
  13. package/dist/atomic/actions/text.d.ts.map +1 -1
  14. package/dist/atomic/actions/text.js +82 -104
  15. package/dist/atomic/actions/text.js.map +1 -1
  16. package/dist/atomic/actions/text.mjs +81 -106
  17. package/dist/atomic/actions/text.mjs.map +1 -1
  18. package/dist/atomic/animations/actions/indicator.js +1 -1
  19. package/dist/atomic/animations/actions/indicator.js.map +1 -1
  20. package/dist/atomic/animations/actions/indicator.mjs +1 -1
  21. package/dist/atomic/animations/actions/indicator.mjs.map +1 -1
  22. package/dist/atomic/animations/brand/card-stack.d.ts +2 -1
  23. package/dist/atomic/animations/brand/card-stack.d.ts.map +1 -1
  24. package/dist/atomic/animations/brand/card-stack.js +148 -172
  25. package/dist/atomic/animations/brand/card-stack.js.map +1 -1
  26. package/dist/atomic/animations/brand/card-stack.mjs +140 -164
  27. package/dist/atomic/animations/brand/card-stack.mjs.map +1 -1
  28. package/dist/atomic/animations/brand/chevron-scroll.js +1 -1
  29. package/dist/atomic/animations/brand/chevron-scroll.js.map +1 -1
  30. package/dist/atomic/animations/brand/chevron-scroll.mjs +1 -1
  31. package/dist/atomic/animations/brand/chevron-scroll.mjs.map +1 -1
  32. package/dist/atomic/assets/image/background.d.ts +1 -5
  33. package/dist/atomic/assets/image/background.d.ts.map +1 -1
  34. package/dist/atomic/assets/image/background.js +40 -40
  35. package/dist/atomic/assets/image/background.js.map +1 -1
  36. package/dist/atomic/assets/image/background.mjs +23 -40
  37. package/dist/atomic/assets/image/background.mjs.map +1 -1
  38. package/dist/atomic/assets/image/gif.d.ts +1 -5
  39. package/dist/atomic/assets/image/gif.d.ts.map +1 -1
  40. package/dist/atomic/assets/image/gif.js +28 -12
  41. package/dist/atomic/assets/image/gif.js.map +1 -1
  42. package/dist/atomic/assets/image/gif.mjs +11 -12
  43. package/dist/atomic/assets/image/gif.mjs.map +1 -1
  44. package/dist/atomic/assets/image/placeholder.d.ts +1 -5
  45. package/dist/atomic/assets/image/placeholder.d.ts.map +1 -1
  46. package/dist/atomic/assets/video/observed-auto-play.d.ts +1 -9
  47. package/dist/atomic/assets/video/observed-auto-play.d.ts.map +1 -1
  48. package/dist/atomic/assets/video/observed-auto-play.js +9 -5
  49. package/dist/atomic/assets/video/observed-auto-play.js.map +1 -1
  50. package/dist/atomic/assets/video/observed-auto-play.mjs +9 -5
  51. package/dist/atomic/assets/video/observed-auto-play.mjs.map +1 -1
  52. package/dist/atomic/assets/video/toggle.d.ts +1 -9
  53. package/dist/atomic/assets/video/toggle.d.ts.map +1 -1
  54. package/dist/atomic/assets/video/toggle.js +38 -40
  55. package/dist/atomic/assets/video/toggle.js.map +1 -1
  56. package/dist/atomic/assets/video/toggle.mjs +21 -40
  57. package/dist/atomic/assets/video/toggle.mjs.map +1 -1
  58. package/dist/atomic/buttons/fullscreen.d.ts +1 -5
  59. package/dist/atomic/buttons/fullscreen.d.ts.map +1 -1
  60. package/dist/atomic/buttons/fullscreen.js +21 -15
  61. package/dist/atomic/buttons/fullscreen.js.map +1 -1
  62. package/dist/atomic/buttons/fullscreen.mjs +4 -15
  63. package/dist/atomic/buttons/fullscreen.mjs.map +1 -1
  64. package/dist/atomic/events/meta.d.ts +1 -5
  65. package/dist/atomic/events/meta.d.ts.map +1 -1
  66. package/dist/atomic/events/meta.js +48 -48
  67. package/dist/atomic/events/meta.js.map +1 -1
  68. package/dist/atomic/events/meta.mjs +31 -48
  69. package/dist/atomic/events/meta.mjs.map +1 -1
  70. package/dist/atomic/events/sign.d.ts +1 -5
  71. package/dist/atomic/events/sign.d.ts.map +1 -1
  72. package/dist/atomic/events/sign.js +84 -93
  73. package/dist/atomic/events/sign.js.map +1 -1
  74. package/dist/atomic/events/sign.mjs +82 -93
  75. package/dist/atomic/events/sign.mjs.map +1 -1
  76. package/dist/atomic/layout/block/stacked.d.ts +7 -19
  77. package/dist/atomic/layout/block/stacked.d.ts.map +1 -1
  78. package/dist/atomic/layout/block/stacked.js +14 -20
  79. package/dist/atomic/layout/block/stacked.js.map +1 -1
  80. package/dist/atomic/layout/block/stacked.mjs +14 -20
  81. package/dist/atomic/layout/block/stacked.mjs.map +1 -1
  82. package/dist/atomic/layout/overlay/modal.js +1 -1
  83. package/dist/atomic/layout/overlay/modal.js.map +1 -1
  84. package/dist/atomic/layout/overlay/modal.mjs +1 -1
  85. package/dist/atomic/layout/overlay/modal.mjs.map +1 -1
  86. package/dist/atomic/layout/person/columns.d.ts +4 -20
  87. package/dist/atomic/layout/person/columns.d.ts.map +1 -1
  88. package/dist/atomic/layout/person/columns.js +56 -66
  89. package/dist/atomic/layout/person/columns.js.map +1 -1
  90. package/dist/atomic/layout/person/columns.mjs +56 -66
  91. package/dist/atomic/layout/person/columns.mjs.map +1 -1
  92. package/dist/atomic/text/stat.d.ts +2 -3
  93. package/dist/atomic/text/stat.d.ts.map +1 -1
  94. package/dist/atomic/text/stat.js +101 -119
  95. package/dist/atomic/text/stat.js.map +1 -1
  96. package/dist/atomic/text/stat.mjs +100 -119
  97. package/dist/atomic/text/stat.mjs.map +1 -1
  98. package/dist/atomic/text-lockup/contact.d.ts +1 -5
  99. package/dist/atomic/text-lockup/contact.d.ts.map +1 -1
  100. package/dist/atomic/text-lockup/contact.js +65 -105
  101. package/dist/atomic/text-lockup/contact.js.map +1 -1
  102. package/dist/atomic/text-lockup/contact.mjs +60 -103
  103. package/dist/atomic/text-lockup/contact.mjs.map +1 -1
  104. package/dist/atomic/text-lockup/date.d.ts.map +1 -1
  105. package/dist/atomic/text-lockup/date.js +6 -1
  106. package/dist/atomic/text-lockup/date.js.map +1 -1
  107. package/dist/atomic/text-lockup/date.mjs +6 -1
  108. package/dist/atomic/text-lockup/date.mjs.map +1 -1
  109. package/dist/atomic/text-lockup/large.d.ts +3 -7
  110. package/dist/atomic/text-lockup/large.d.ts.map +1 -1
  111. package/dist/atomic/text-lockup/large.js +62 -71
  112. package/dist/atomic/text-lockup/large.js.map +1 -1
  113. package/dist/atomic/text-lockup/large.mjs +59 -71
  114. package/dist/atomic/text-lockup/large.mjs.map +1 -1
  115. package/dist/atomic/text-lockup/medium.d.ts +5 -9
  116. package/dist/atomic/text-lockup/medium.d.ts.map +1 -1
  117. package/dist/atomic/text-lockup/medium.js +76 -84
  118. package/dist/atomic/text-lockup/medium.js.map +1 -1
  119. package/dist/atomic/text-lockup/medium.mjs +70 -82
  120. package/dist/atomic/text-lockup/medium.mjs.map +1 -1
  121. package/dist/atomic/text-lockup/person.d.ts +1 -5
  122. package/dist/atomic/text-lockup/person.d.ts.map +1 -1
  123. package/dist/atomic/text-lockup/person.js +102 -101
  124. package/dist/atomic/text-lockup/person.js.map +1 -1
  125. package/dist/atomic/text-lockup/person.mjs +99 -101
  126. package/dist/atomic/text-lockup/person.mjs.map +1 -1
  127. package/dist/atomic/text-lockup/small-scaling.d.ts +1 -5
  128. package/dist/atomic/text-lockup/small-scaling.d.ts.map +1 -1
  129. package/dist/atomic/text-lockup/small-scaling.js +64 -39
  130. package/dist/atomic/text-lockup/small-scaling.js.map +1 -1
  131. package/dist/atomic/text-lockup/small-scaling.mjs +44 -38
  132. package/dist/atomic/text-lockup/small-scaling.mjs.map +1 -1
  133. package/dist/atomic/text-lockup/small.d.ts +11 -25
  134. package/dist/atomic/text-lockup/small.d.ts.map +1 -1
  135. package/dist/atomic/text-lockup/small.js +70 -69
  136. package/dist/atomic/text-lockup/small.js.map +1 -1
  137. package/dist/atomic/text-lockup/small.mjs +64 -66
  138. package/dist/atomic/text-lockup/small.mjs.map +1 -1
  139. package/dist/composite/alert/elements/closeButton.d.ts +7 -0
  140. package/dist/composite/alert/elements/closeButton.d.ts.map +1 -0
  141. package/dist/composite/alert/elements/closeButton.js +51 -0
  142. package/dist/composite/alert/elements/closeButton.js.map +1 -0
  143. package/dist/composite/alert/elements/closeButton.mjs +34 -0
  144. package/dist/composite/alert/elements/closeButton.mjs.map +1 -0
  145. package/dist/composite/alert/elements/text.d.ts +3 -13
  146. package/dist/composite/alert/elements/text.d.ts.map +1 -1
  147. package/dist/composite/alert/elements/text.js +60 -81
  148. package/dist/composite/alert/elements/text.js.map +1 -1
  149. package/dist/composite/alert/elements/text.mjs +56 -80
  150. package/dist/composite/alert/elements/text.mjs.map +1 -1
  151. package/dist/composite/alert/globals.d.ts +4 -0
  152. package/dist/composite/alert/globals.d.ts.map +1 -0
  153. package/dist/composite/alert/globals.js +7 -0
  154. package/dist/composite/alert/globals.js.map +1 -0
  155. package/dist/composite/alert/globals.mjs +7 -0
  156. package/dist/composite/alert/globals.mjs.map +1 -0
  157. package/dist/composite/alert/index.d.ts +2 -2
  158. package/dist/composite/alert/index.d.ts.map +1 -1
  159. package/dist/composite/alert/index.js +2 -2
  160. package/dist/composite/alert/index.mjs +4 -4
  161. package/dist/composite/alert/page.d.ts +5 -12
  162. package/dist/composite/alert/page.d.ts.map +1 -1
  163. package/dist/composite/alert/page.js +44 -113
  164. package/dist/composite/alert/page.js.map +1 -1
  165. package/dist/composite/alert/page.mjs +44 -112
  166. package/dist/composite/alert/page.mjs.map +1 -1
  167. package/dist/composite/alert/site.d.ts +5 -11
  168. package/dist/composite/alert/site.d.ts.map +1 -1
  169. package/dist/composite/alert/site.js +60 -109
  170. package/dist/composite/alert/site.js.map +1 -1
  171. package/dist/composite/alert/site.mjs +61 -109
  172. package/dist/composite/alert/site.mjs.map +1 -1
  173. package/dist/composite/banner/promo.js +1 -1
  174. package/dist/composite/banner/promo.js.map +1 -1
  175. package/dist/composite/banner/promo.mjs +1 -1
  176. package/dist/composite/banner/promo.mjs.map +1 -1
  177. package/dist/composite/card/block.d.ts +1 -5
  178. package/dist/composite/card/block.d.ts.map +1 -1
  179. package/dist/composite/card/block.js +7 -5
  180. package/dist/composite/card/block.js.map +1 -1
  181. package/dist/composite/card/block.mjs +7 -5
  182. package/dist/composite/card/block.mjs.map +1 -1
  183. package/dist/composite/card/list.d.ts +1 -5
  184. package/dist/composite/card/list.d.ts.map +1 -1
  185. package/dist/composite/card/list.js +52 -64
  186. package/dist/composite/card/list.js.map +1 -1
  187. package/dist/composite/card/list.mjs +52 -64
  188. package/dist/composite/card/list.mjs.map +1 -1
  189. package/dist/composite/card/overlay/color.d.ts +1 -5
  190. package/dist/composite/card/overlay/color.d.ts.map +1 -1
  191. package/dist/composite/card/overlay/color.js +36 -41
  192. package/dist/composite/card/overlay/color.js.map +1 -1
  193. package/dist/composite/card/overlay/color.mjs +36 -41
  194. package/dist/composite/card/overlay/color.mjs.map +1 -1
  195. package/dist/composite/card/overlay/icon.d.ts +1 -5
  196. package/dist/composite/card/overlay/icon.d.ts.map +1 -1
  197. package/dist/composite/card/overlay/icon.js +27 -31
  198. package/dist/composite/card/overlay/icon.js.map +1 -1
  199. package/dist/composite/card/overlay/icon.mjs +27 -31
  200. package/dist/composite/card/overlay/icon.mjs.map +1 -1
  201. package/dist/composite/card/overlay/image.d.ts +2 -1
  202. package/dist/composite/card/overlay/image.d.ts.map +1 -1
  203. package/dist/composite/card/overlay/image.js +74 -93
  204. package/dist/composite/card/overlay/image.js.map +1 -1
  205. package/dist/composite/card/overlay/image.mjs +73 -93
  206. package/dist/composite/card/overlay/image.mjs.map +1 -1
  207. package/dist/composite/card/video/block.d.ts +1 -9
  208. package/dist/composite/card/video/block.d.ts.map +1 -1
  209. package/dist/composite/card/video/block.js +7 -5
  210. package/dist/composite/card/video/block.js.map +1 -1
  211. package/dist/composite/card/video/block.mjs +7 -5
  212. package/dist/composite/card/video/block.mjs.map +1 -1
  213. package/dist/composite/card/video/short.d.ts +1 -5
  214. package/dist/composite/card/video/short.d.ts.map +1 -1
  215. package/dist/composite/card/video/short.js +16 -21
  216. package/dist/composite/card/video/short.js.map +1 -1
  217. package/dist/composite/card/video/short.mjs +16 -21
  218. package/dist/composite/card/video/short.mjs.map +1 -1
  219. package/dist/composite/carousel/_types.d.ts.map +1 -1
  220. package/dist/composite/carousel/default/index.js +1 -1
  221. package/dist/composite/carousel/default/index.js.map +1 -1
  222. package/dist/composite/carousel/default/index.mjs +1 -1
  223. package/dist/composite/carousel/default/index.mjs.map +1 -1
  224. package/dist/composite/carousel/elements/blocks.js +2 -2
  225. package/dist/composite/carousel/elements/blocks.js.map +1 -1
  226. package/dist/composite/carousel/elements/blocks.mjs +2 -2
  227. package/dist/composite/carousel/elements/blocks.mjs.map +1 -1
  228. package/dist/composite/carousel/elements/full-screen.js +7 -5
  229. package/dist/composite/carousel/elements/full-screen.js.map +1 -1
  230. package/dist/composite/carousel/elements/full-screen.mjs +7 -5
  231. package/dist/composite/carousel/elements/full-screen.mjs.map +1 -1
  232. package/dist/composite/carousel/elements/image.js +2 -2
  233. package/dist/composite/carousel/elements/image.js.map +1 -1
  234. package/dist/composite/carousel/elements/image.mjs +2 -2
  235. package/dist/composite/carousel/elements/image.mjs.map +1 -1
  236. package/dist/composite/carousel/elements/overlay.js +2 -2
  237. package/dist/composite/carousel/elements/overlay.js.map +1 -1
  238. package/dist/composite/carousel/elements/overlay.mjs +2 -2
  239. package/dist/composite/carousel/elements/overlay.mjs.map +1 -1
  240. package/dist/composite/carousel/image/multiple.js +11 -9
  241. package/dist/composite/carousel/image/multiple.js.map +1 -1
  242. package/dist/composite/carousel/image/multiple.mjs +11 -9
  243. package/dist/composite/carousel/image/multiple.mjs.map +1 -1
  244. package/dist/composite/carousel/image/standard.js +10 -8
  245. package/dist/composite/carousel/image/standard.js.map +1 -1
  246. package/dist/composite/carousel/image/standard.mjs +10 -8
  247. package/dist/composite/carousel/image/standard.mjs.map +1 -1
  248. package/dist/composite/carousel/thumbnail/index.js +1 -1
  249. package/dist/composite/carousel/thumbnail/index.js.map +1 -1
  250. package/dist/composite/carousel/thumbnail/index.mjs +1 -1
  251. package/dist/composite/carousel/thumbnail/index.mjs.map +1 -1
  252. package/dist/composite/carousel/wide/_elementModel.d.ts +2 -2
  253. package/dist/composite/carousel/wide/_elementModel.d.ts.map +1 -1
  254. package/dist/composite/carousel/wide/_elementModel.js +20 -7
  255. package/dist/composite/carousel/wide/_elementModel.js.map +1 -1
  256. package/dist/composite/carousel/wide/_elementModel.mjs +20 -7
  257. package/dist/composite/carousel/wide/_elementModel.mjs.map +1 -1
  258. package/dist/composite/carousel/wide/container.d.ts.map +1 -1
  259. package/dist/composite/carousel/wide/container.js +9 -15
  260. package/dist/composite/carousel/wide/container.js.map +1 -1
  261. package/dist/composite/carousel/wide/container.mjs +9 -15
  262. package/dist/composite/carousel/wide/container.mjs.map +1 -1
  263. package/dist/composite/carousel/wide/controls.d.ts +1 -5
  264. package/dist/composite/carousel/wide/controls.d.ts.map +1 -1
  265. package/dist/composite/carousel/wide/controls.js +55 -56
  266. package/dist/composite/carousel/wide/controls.js.map +1 -1
  267. package/dist/composite/carousel/wide/controls.mjs +55 -56
  268. package/dist/composite/carousel/wide/controls.mjs.map +1 -1
  269. package/dist/composite/carousel/wide/frames.d.ts.map +1 -1
  270. package/dist/composite/carousel/wide/frames.js +156 -171
  271. package/dist/composite/carousel/wide/frames.js.map +1 -1
  272. package/dist/composite/carousel/wide/frames.mjs +153 -169
  273. package/dist/composite/carousel/wide/frames.mjs.map +1 -1
  274. package/dist/composite/carousel/wide/index.d.ts +1 -5
  275. package/dist/composite/carousel/wide/index.d.ts.map +1 -1
  276. package/dist/composite/carousel/wide/index.js +23 -17
  277. package/dist/composite/carousel/wide/index.js.map +1 -1
  278. package/dist/composite/carousel/wide/index.mjs +23 -17
  279. package/dist/composite/carousel/wide/index.mjs.map +1 -1
  280. package/dist/composite/footer/_types.d.ts +1 -0
  281. package/dist/composite/footer/_types.d.ts.map +1 -1
  282. package/dist/composite/footer/elements/main-section/call-to-action.d.ts +2 -2
  283. package/dist/composite/footer/elements/main-section/call-to-action.d.ts.map +1 -1
  284. package/dist/composite/footer/elements/main-section/call-to-action.js +19 -28
  285. package/dist/composite/footer/elements/main-section/call-to-action.js.map +1 -1
  286. package/dist/composite/footer/elements/main-section/call-to-action.mjs +18 -28
  287. package/dist/composite/footer/elements/main-section/call-to-action.mjs.map +1 -1
  288. package/dist/composite/footer/elements/main-section/campaign.d.ts +3 -3
  289. package/dist/composite/footer/elements/main-section/campaign.d.ts.map +1 -1
  290. package/dist/composite/footer/elements/main-section/campaign.js +51 -32
  291. package/dist/composite/footer/elements/main-section/campaign.js.map +1 -1
  292. package/dist/composite/footer/elements/main-section/campaign.mjs +51 -32
  293. package/dist/composite/footer/elements/main-section/campaign.mjs.map +1 -1
  294. package/dist/composite/footer/elements/main-section/index.d.ts +2 -2
  295. package/dist/composite/footer/elements/main-section/index.d.ts.map +1 -1
  296. package/dist/composite/footer/elements/main-section/index.js +38 -50
  297. package/dist/composite/footer/elements/main-section/index.js.map +1 -1
  298. package/dist/composite/footer/elements/main-section/index.mjs +38 -50
  299. package/dist/composite/footer/elements/main-section/index.mjs.map +1 -1
  300. package/dist/composite/footer/elements/main-section/row-links/index.d.ts +2 -2
  301. package/dist/composite/footer/elements/main-section/row-links/index.d.ts.map +1 -1
  302. package/dist/composite/footer/elements/main-section/row-links/index.js +24 -36
  303. package/dist/composite/footer/elements/main-section/row-links/index.js.map +1 -1
  304. package/dist/composite/footer/elements/main-section/row-links/index.mjs +24 -36
  305. package/dist/composite/footer/elements/main-section/row-links/index.mjs.map +1 -1
  306. package/dist/composite/footer/elements/main-section/row-links/link-columns.d.ts +2 -2
  307. package/dist/composite/footer/elements/main-section/row-links/link-columns.d.ts.map +1 -1
  308. package/dist/composite/footer/elements/main-section/row-links/link-columns.js +75 -95
  309. package/dist/composite/footer/elements/main-section/row-links/link-columns.js.map +1 -1
  310. package/dist/composite/footer/elements/main-section/row-links/link-columns.mjs +73 -93
  311. package/dist/composite/footer/elements/main-section/row-links/link-columns.mjs.map +1 -1
  312. package/dist/composite/footer/elements/main-section/row-logo/contact.d.ts +2 -2
  313. package/dist/composite/footer/elements/main-section/row-logo/contact.d.ts.map +1 -1
  314. package/dist/composite/footer/elements/main-section/row-logo/contact.js +88 -98
  315. package/dist/composite/footer/elements/main-section/row-logo/contact.js.map +1 -1
  316. package/dist/composite/footer/elements/main-section/row-logo/contact.mjs +88 -98
  317. package/dist/composite/footer/elements/main-section/row-logo/contact.mjs.map +1 -1
  318. package/dist/composite/footer/elements/main-section/row-logo/index.d.ts +2 -2
  319. package/dist/composite/footer/elements/main-section/row-logo/index.d.ts.map +1 -1
  320. package/dist/composite/footer/elements/main-section/row-logo/index.js +30 -43
  321. package/dist/composite/footer/elements/main-section/row-logo/index.js.map +1 -1
  322. package/dist/composite/footer/elements/main-section/row-logo/index.mjs +30 -43
  323. package/dist/composite/footer/elements/main-section/row-logo/index.mjs.map +1 -1
  324. package/dist/composite/footer/elements/main-section/row-logo/logo.d.ts +2 -2
  325. package/dist/composite/footer/elements/main-section/row-logo/logo.d.ts.map +1 -1
  326. package/dist/composite/footer/elements/main-section/row-logo/logo.js +24 -32
  327. package/dist/composite/footer/elements/main-section/row-logo/logo.js.map +1 -1
  328. package/dist/composite/footer/elements/main-section/row-logo/logo.mjs +24 -32
  329. package/dist/composite/footer/elements/main-section/row-logo/logo.mjs.map +1 -1
  330. package/dist/composite/footer/elements/main-section/social.d.ts +2 -2
  331. package/dist/composite/footer/elements/main-section/social.d.ts.map +1 -1
  332. package/dist/composite/footer/elements/main-section/social.js +74 -97
  333. package/dist/composite/footer/elements/main-section/social.js.map +1 -1
  334. package/dist/composite/footer/elements/main-section/social.mjs +74 -97
  335. package/dist/composite/footer/elements/main-section/social.mjs.map +1 -1
  336. package/dist/composite/footer/elements/utility-section/index.d.ts +3 -4
  337. package/dist/composite/footer/elements/utility-section/index.d.ts.map +1 -1
  338. package/dist/composite/footer/elements/utility-section/index.js +56 -84
  339. package/dist/composite/footer/elements/utility-section/index.js.map +1 -1
  340. package/dist/composite/footer/elements/utility-section/index.mjs +56 -84
  341. package/dist/composite/footer/elements/utility-section/index.mjs.map +1 -1
  342. package/dist/composite/footer/options.d.ts +1 -4
  343. package/dist/composite/footer/options.d.ts.map +1 -1
  344. package/dist/composite/footer/options.js +19 -27
  345. package/dist/composite/footer/options.js.map +1 -1
  346. package/dist/composite/footer/options.mjs +19 -27
  347. package/dist/composite/footer/options.mjs.map +1 -1
  348. package/dist/composite/hero/_types.d.ts.map +1 -1
  349. package/dist/composite/hero/custom/expand.d.ts +3 -2
  350. package/dist/composite/hero/custom/expand.d.ts.map +1 -1
  351. package/dist/composite/hero/custom/expand.js +151 -192
  352. package/dist/composite/hero/custom/expand.js.map +1 -1
  353. package/dist/composite/hero/custom/expand.mjs +145 -187
  354. package/dist/composite/hero/custom/expand.mjs.map +1 -1
  355. package/dist/composite/hero/custom/grid.d.ts +1 -5
  356. package/dist/composite/hero/custom/grid.d.ts.map +1 -1
  357. package/dist/composite/hero/custom/grid.js +122 -171
  358. package/dist/composite/hero/custom/grid.js.map +1 -1
  359. package/dist/composite/hero/custom/grid.mjs +116 -166
  360. package/dist/composite/hero/custom/grid.mjs.map +1 -1
  361. package/dist/composite/hero/custom/video-arrow.d.ts +2 -1
  362. package/dist/composite/hero/custom/video-arrow.d.ts.map +1 -1
  363. package/dist/composite/hero/custom/video-arrow.js +83 -105
  364. package/dist/composite/hero/custom/video-arrow.js.map +1 -1
  365. package/dist/composite/hero/custom/video-arrow.mjs +77 -99
  366. package/dist/composite/hero/custom/video-arrow.mjs.map +1 -1
  367. package/dist/composite/hero/logo.d.ts +1 -5
  368. package/dist/composite/hero/logo.d.ts.map +1 -1
  369. package/dist/composite/hero/logo.js +71 -89
  370. package/dist/composite/hero/logo.js.map +1 -1
  371. package/dist/composite/hero/logo.mjs +68 -87
  372. package/dist/composite/hero/logo.mjs.map +1 -1
  373. package/dist/composite/hero/minimal.d.ts +1 -5
  374. package/dist/composite/hero/minimal.d.ts.map +1 -1
  375. package/dist/composite/hero/minimal.js +67 -86
  376. package/dist/composite/hero/minimal.js.map +1 -1
  377. package/dist/composite/hero/minimal.mjs +63 -83
  378. package/dist/composite/hero/minimal.mjs.map +1 -1
  379. package/dist/composite/hero/overlay.d.ts +1 -5
  380. package/dist/composite/hero/overlay.d.ts.map +1 -1
  381. package/dist/composite/hero/overlay.js +107 -135
  382. package/dist/composite/hero/overlay.js.map +1 -1
  383. package/dist/composite/hero/overlay.mjs +103 -132
  384. package/dist/composite/hero/overlay.mjs.map +1 -1
  385. package/dist/composite/hero/stacked.d.ts +1 -5
  386. package/dist/composite/hero/stacked.d.ts.map +1 -1
  387. package/dist/composite/hero/stacked.js +114 -137
  388. package/dist/composite/hero/stacked.js.map +1 -1
  389. package/dist/composite/hero/stacked.mjs +110 -134
  390. package/dist/composite/hero/stacked.mjs.map +1 -1
  391. package/dist/composite/hero/standard.d.ts +1 -5
  392. package/dist/composite/hero/standard.d.ts.map +1 -1
  393. package/dist/composite/hero/standard.js +103 -116
  394. package/dist/composite/hero/standard.js.map +1 -1
  395. package/dist/composite/hero/standard.mjs +100 -114
  396. package/dist/composite/hero/standard.mjs.map +1 -1
  397. package/dist/composite/layout/box/logo.js +1 -1
  398. package/dist/composite/layout/box/logo.js.map +1 -1
  399. package/dist/composite/layout/box/logo.mjs +1 -1
  400. package/dist/composite/layout/box/logo.mjs.map +1 -1
  401. package/dist/composite/layout/image/expand.js +1 -1
  402. package/dist/composite/layout/image/expand.js.map +1 -1
  403. package/dist/composite/layout/image/expand.mjs +1 -1
  404. package/dist/composite/layout/image/expand.mjs.map +1 -1
  405. package/dist/composite/layout/scroll-top/index.js +1 -1
  406. package/dist/composite/layout/scroll-top/index.js.map +1 -1
  407. package/dist/composite/layout/scroll-top/index.mjs +1 -1
  408. package/dist/composite/layout/scroll-top/index.mjs.map +1 -1
  409. package/dist/composite/layout/section-intro/small.d.ts +2 -1
  410. package/dist/composite/layout/section-intro/small.d.ts.map +1 -1
  411. package/dist/composite/layout/section-intro/small.js +97 -107
  412. package/dist/composite/layout/section-intro/small.js.map +1 -1
  413. package/dist/composite/layout/section-intro/small.mjs +95 -106
  414. package/dist/composite/layout/section-intro/small.mjs.map +1 -1
  415. package/dist/composite/layout/section-intro/wide.d.ts +2 -2
  416. package/dist/composite/layout/section-intro/wide.d.ts.map +1 -1
  417. package/dist/composite/layout/section-intro/wide.js +40 -53
  418. package/dist/composite/layout/section-intro/wide.js.map +1 -1
  419. package/dist/composite/layout/section-intro/wide.mjs +39 -53
  420. package/dist/composite/layout/section-intro/wide.mjs.map +1 -1
  421. package/dist/composite/layout/sticky-columns/index.js +1 -1
  422. package/dist/composite/layout/sticky-columns/index.js.map +1 -1
  423. package/dist/composite/layout/sticky-columns/index.mjs +1 -1
  424. package/dist/composite/layout/sticky-columns/index.mjs.map +1 -1
  425. package/dist/composite/media/elements/caption.js +1 -1
  426. package/dist/composite/media/elements/caption.js.map +1 -1
  427. package/dist/composite/media/elements/caption.mjs +1 -1
  428. package/dist/composite/media/elements/caption.mjs.map +1 -1
  429. package/dist/composite/media/elements/gif.d.ts +3 -2
  430. package/dist/composite/media/elements/gif.d.ts.map +1 -1
  431. package/dist/composite/media/elements/gif.js +25 -27
  432. package/dist/composite/media/elements/gif.js.map +1 -1
  433. package/dist/composite/media/elements/gif.mjs +25 -27
  434. package/dist/composite/media/elements/gif.mjs.map +1 -1
  435. package/dist/composite/media/inline/caption.js +2 -2
  436. package/dist/composite/media/inline/caption.js.map +1 -1
  437. package/dist/composite/media/inline/caption.mjs +2 -2
  438. package/dist/composite/media/inline/caption.mjs.map +1 -1
  439. package/dist/composite/media/inline/wrapped.js +2 -2
  440. package/dist/composite/media/inline/wrapped.js.map +1 -1
  441. package/dist/composite/media/inline/wrapped.mjs +2 -2
  442. package/dist/composite/media/inline/wrapped.mjs.map +1 -1
  443. package/dist/composite/navigation/elements/breadcrumb/index.js +1 -1
  444. package/dist/composite/navigation/elements/breadcrumb/index.js.map +1 -1
  445. package/dist/composite/navigation/elements/breadcrumb/index.mjs +1 -1
  446. package/dist/composite/navigation/elements/breadcrumb/index.mjs.map +1 -1
  447. package/dist/composite/navigation/elements/drawer/index.js +1 -1
  448. package/dist/composite/navigation/elements/drawer/index.js.map +1 -1
  449. package/dist/composite/navigation/elements/drawer/index.mjs +1 -1
  450. package/dist/composite/navigation/elements/drawer/index.mjs.map +1 -1
  451. package/dist/composite/navigation/elements/item/index.js +1 -1
  452. package/dist/composite/navigation/elements/item/index.js.map +1 -1
  453. package/dist/composite/navigation/elements/item/index.mjs +1 -1
  454. package/dist/composite/navigation/elements/item/index.mjs.map +1 -1
  455. package/dist/composite/navigation/elements/menu-button/index.js +1 -1
  456. package/dist/composite/navigation/elements/menu-button/index.js.map +1 -1
  457. package/dist/composite/navigation/elements/menu-button/index.mjs +1 -1
  458. package/dist/composite/navigation/elements/menu-button/index.mjs.map +1 -1
  459. package/dist/composite/navigation/elements/slider/action.js +1 -1
  460. package/dist/composite/navigation/elements/slider/action.js.map +1 -1
  461. package/dist/composite/navigation/elements/slider/action.mjs +1 -1
  462. package/dist/composite/navigation/elements/slider/action.mjs.map +1 -1
  463. package/dist/composite/navigation/elements/slider/index.js +1 -1
  464. package/dist/composite/navigation/elements/slider/index.js.map +1 -1
  465. package/dist/composite/navigation/elements/slider/index.mjs +1 -1
  466. package/dist/composite/navigation/elements/slider/index.mjs.map +1 -1
  467. package/dist/composite/navigation/elements/slider/slide-first.js +1 -1
  468. package/dist/composite/navigation/elements/slider/slide-first.js.map +1 -1
  469. package/dist/composite/navigation/elements/slider/slide-first.mjs +1 -1
  470. package/dist/composite/navigation/elements/slider/slide-first.mjs.map +1 -1
  471. package/dist/composite/navigation/elements/slider/slides.js +1 -1
  472. package/dist/composite/navigation/elements/slider/slides.js.map +1 -1
  473. package/dist/composite/navigation/elements/slider/slides.mjs +1 -1
  474. package/dist/composite/navigation/elements/slider/slides.mjs.map +1 -1
  475. package/dist/composite/navigation/header.js +1 -1
  476. package/dist/composite/navigation/header.js.map +1 -1
  477. package/dist/composite/navigation/header.mjs +1 -1
  478. package/dist/composite/navigation/header.mjs.map +1 -1
  479. package/dist/composite/navigation/utility/alert.js +8 -4
  480. package/dist/composite/navigation/utility/alert.js.map +1 -1
  481. package/dist/composite/navigation/utility/alert.mjs +8 -4
  482. package/dist/composite/navigation/utility/alert.mjs.map +1 -1
  483. package/dist/composite/navigation/utility/index.d.ts.map +1 -1
  484. package/dist/composite/navigation/utility/index.js +90 -13
  485. package/dist/composite/navigation/utility/index.js.map +1 -1
  486. package/dist/composite/navigation/utility/index.mjs +90 -13
  487. package/dist/composite/navigation/utility/index.mjs.map +1 -1
  488. package/dist/composite/navigation/utility/search.js +1 -1
  489. package/dist/composite/navigation/utility/search.js.map +1 -1
  490. package/dist/composite/navigation/utility/search.mjs +1 -1
  491. package/dist/composite/navigation/utility/search.mjs.map +1 -1
  492. package/dist/composite/pathway/_common.d.ts +4 -20
  493. package/dist/composite/pathway/_common.d.ts.map +1 -1
  494. package/dist/composite/pathway/_common.js +62 -64
  495. package/dist/composite/pathway/_common.js.map +1 -1
  496. package/dist/composite/pathway/_common.mjs +56 -60
  497. package/dist/composite/pathway/_common.mjs.map +1 -1
  498. package/dist/composite/pathway/hero.d.ts +1 -5
  499. package/dist/composite/pathway/hero.d.ts.map +1 -1
  500. package/dist/composite/pathway/hero.js +119 -140
  501. package/dist/composite/pathway/hero.js.map +1 -1
  502. package/dist/composite/pathway/hero.mjs +113 -135
  503. package/dist/composite/pathway/hero.mjs.map +1 -1
  504. package/dist/composite/pathway/highlight.d.ts +1 -5
  505. package/dist/composite/pathway/highlight.d.ts.map +1 -1
  506. package/dist/composite/pathway/highlight.js +99 -129
  507. package/dist/composite/pathway/highlight.js.map +1 -1
  508. package/dist/composite/pathway/highlight.mjs +98 -129
  509. package/dist/composite/pathway/highlight.mjs.map +1 -1
  510. package/dist/composite/pathway/overlay.d.ts +2 -1
  511. package/dist/composite/pathway/overlay.d.ts.map +1 -1
  512. package/dist/composite/pathway/overlay.js +125 -153
  513. package/dist/composite/pathway/overlay.js.map +1 -1
  514. package/dist/composite/pathway/overlay.mjs +122 -151
  515. package/dist/composite/pathway/overlay.mjs.map +1 -1
  516. package/dist/composite/pathway/standard.d.ts +2 -1
  517. package/dist/composite/pathway/standard.d.ts.map +1 -1
  518. package/dist/composite/pathway/standard.js +96 -123
  519. package/dist/composite/pathway/standard.js.map +1 -1
  520. package/dist/composite/pathway/standard.mjs +95 -123
  521. package/dist/composite/pathway/standard.mjs.map +1 -1
  522. package/dist/composite/pathway/sticky.d.ts +1 -5
  523. package/dist/composite/pathway/sticky.d.ts.map +1 -1
  524. package/dist/composite/pathway/sticky.js +91 -116
  525. package/dist/composite/pathway/sticky.js.map +1 -1
  526. package/dist/composite/pathway/sticky.mjs +88 -114
  527. package/dist/composite/pathway/sticky.mjs.map +1 -1
  528. package/dist/composite/person/bio/full.d.ts +2 -5
  529. package/dist/composite/person/bio/full.d.ts.map +1 -1
  530. package/dist/composite/person/bio/full.js +53 -57
  531. package/dist/composite/person/bio/full.js.map +1 -1
  532. package/dist/composite/person/bio/full.mjs +52 -57
  533. package/dist/composite/person/bio/full.mjs.map +1 -1
  534. package/dist/composite/person/bio/small.d.ts +2 -5
  535. package/dist/composite/person/bio/small.d.ts.map +1 -1
  536. package/dist/composite/person/bio/small.js +85 -98
  537. package/dist/composite/person/bio/small.js.map +1 -1
  538. package/dist/composite/person/bio/small.mjs +84 -98
  539. package/dist/composite/person/bio/small.mjs.map +1 -1
  540. package/dist/composite/person/block.d.ts +2 -5
  541. package/dist/composite/person/block.d.ts.map +1 -1
  542. package/dist/composite/person/block.js +34 -42
  543. package/dist/composite/person/block.js.map +1 -1
  544. package/dist/composite/person/block.mjs +34 -42
  545. package/dist/composite/person/block.mjs.map +1 -1
  546. package/dist/composite/person/hero.d.ts +2 -5
  547. package/dist/composite/person/hero.d.ts.map +1 -1
  548. package/dist/composite/person/hero.js +160 -220
  549. package/dist/composite/person/hero.js.map +1 -1
  550. package/dist/composite/person/hero.mjs +159 -220
  551. package/dist/composite/person/hero.mjs.map +1 -1
  552. package/dist/composite/person/list.d.ts +2 -5
  553. package/dist/composite/person/list.d.ts.map +1 -1
  554. package/dist/composite/person/list.js +19 -19
  555. package/dist/composite/person/list.js.map +1 -1
  556. package/dist/composite/person/list.mjs +19 -19
  557. package/dist/composite/person/list.mjs.map +1 -1
  558. package/dist/composite/person/tabular.d.ts +2 -5
  559. package/dist/composite/person/tabular.d.ts.map +1 -1
  560. package/dist/composite/person/tabular.js +40 -36
  561. package/dist/composite/person/tabular.js.map +1 -1
  562. package/dist/composite/person/tabular.mjs +38 -36
  563. package/dist/composite/person/tabular.mjs.map +1 -1
  564. package/dist/composite/quote/elements/action.d.ts +1 -5
  565. package/dist/composite/quote/elements/action.d.ts.map +1 -1
  566. package/dist/composite/quote/elements/action.js +13 -17
  567. package/dist/composite/quote/elements/action.js.map +1 -1
  568. package/dist/composite/quote/elements/action.mjs +13 -17
  569. package/dist/composite/quote/elements/action.mjs.map +1 -1
  570. package/dist/composite/quote/elements/icon.d.ts +1 -5
  571. package/dist/composite/quote/elements/icon.d.ts.map +1 -1
  572. package/dist/composite/quote/elements/icon.js +37 -40
  573. package/dist/composite/quote/elements/icon.js.map +1 -1
  574. package/dist/composite/quote/elements/icon.mjs +37 -40
  575. package/dist/composite/quote/elements/icon.mjs.map +1 -1
  576. package/dist/composite/quote/elements/image.d.ts +1 -5
  577. package/dist/composite/quote/elements/image.d.ts.map +1 -1
  578. package/dist/composite/quote/elements/image.js +27 -35
  579. package/dist/composite/quote/elements/image.js.map +1 -1
  580. package/dist/composite/quote/elements/image.mjs +27 -35
  581. package/dist/composite/quote/elements/image.mjs.map +1 -1
  582. package/dist/composite/quote/elements/quote.d.ts +1 -5
  583. package/dist/composite/quote/elements/quote.d.ts.map +1 -1
  584. package/dist/composite/quote/elements/quote.js +37 -48
  585. package/dist/composite/quote/elements/quote.js.map +1 -1
  586. package/dist/composite/quote/elements/quote.mjs +35 -46
  587. package/dist/composite/quote/elements/quote.mjs.map +1 -1
  588. package/dist/composite/quote/elements/text.d.ts +1 -5
  589. package/dist/composite/quote/elements/text.d.ts.map +1 -1
  590. package/dist/composite/quote/elements/text.js +60 -73
  591. package/dist/composite/quote/elements/text.js.map +1 -1
  592. package/dist/composite/quote/elements/text.mjs +60 -73
  593. package/dist/composite/quote/elements/text.mjs.map +1 -1
  594. package/dist/composite/quote/featured.d.ts +2 -1
  595. package/dist/composite/quote/featured.d.ts.map +1 -1
  596. package/dist/composite/quote/featured.js +102 -135
  597. package/dist/composite/quote/featured.js.map +1 -1
  598. package/dist/composite/quote/featured.mjs +102 -135
  599. package/dist/composite/quote/featured.mjs.map +1 -1
  600. package/dist/composite/quote/helper/animation.d.ts +2 -2
  601. package/dist/composite/quote/helper/animation.d.ts.map +1 -1
  602. package/dist/composite/quote/helper/animation.js.map +1 -1
  603. package/dist/composite/quote/helper/animation.mjs.map +1 -1
  604. package/dist/composite/quote/inline.d.ts +2 -1
  605. package/dist/composite/quote/inline.d.ts.map +1 -1
  606. package/dist/composite/quote/inline.js +29 -45
  607. package/dist/composite/quote/inline.js.map +1 -1
  608. package/dist/composite/quote/inline.mjs +29 -45
  609. package/dist/composite/quote/inline.mjs.map +1 -1
  610. package/dist/composite/quote/statement.d.ts +1 -5
  611. package/dist/composite/quote/statement.d.ts.map +1 -1
  612. package/dist/composite/slider/events.js +1 -1
  613. package/dist/composite/slider/events.js.map +1 -1
  614. package/dist/composite/slider/events.mjs +1 -1
  615. package/dist/composite/slider/events.mjs.map +1 -1
  616. package/dist/composite/social/sharing.js +1 -1
  617. package/dist/composite/social/sharing.js.map +1 -1
  618. package/dist/composite/social/sharing.mjs +1 -1
  619. package/dist/composite/social/sharing.mjs.map +1 -1
  620. package/dist/composite/tabs/standard.d.ts.map +1 -1
  621. package/dist/composite/tabs/standard.js +3 -2
  622. package/dist/composite/tabs/standard.js.map +1 -1
  623. package/dist/composite/tabs/standard.mjs +3 -2
  624. package/dist/composite/tabs/standard.mjs.map +1 -1
  625. package/dist/index.d.ts +0 -1
  626. package/dist/index.d.ts.map +1 -1
  627. package/dist/index.js +0 -2
  628. package/dist/index.js.map +1 -1
  629. package/dist/index.mjs +1 -3
  630. package/dist/index.mjs.map +1 -1
  631. package/dist/layout/image.js +1 -1
  632. package/dist/layout/image.js.map +1 -1
  633. package/dist/layout/image.mjs +1 -1
  634. package/dist/layout/image.mjs.map +1 -1
  635. package/package.json +10 -9
  636. package/dist/model/elements/actions.d.ts +0 -62
  637. package/dist/model/elements/actions.d.ts.map +0 -1
  638. package/dist/model/elements/actions.js +0 -71
  639. package/dist/model/elements/actions.js.map +0 -1
  640. package/dist/model/elements/actions.mjs +0 -54
  641. package/dist/model/elements/actions.mjs.map +0 -1
  642. package/dist/model/elements/assets.d.ts +0 -30
  643. package/dist/model/elements/assets.d.ts.map +0 -1
  644. package/dist/model/elements/assets.js +0 -42
  645. package/dist/model/elements/assets.js.map +0 -1
  646. package/dist/model/elements/assets.mjs +0 -25
  647. package/dist/model/elements/assets.mjs.map +0 -1
  648. package/dist/model/elements/buttons.d.ts +0 -12
  649. package/dist/model/elements/buttons.d.ts.map +0 -1
  650. package/dist/model/elements/buttons.js +0 -26
  651. package/dist/model/elements/buttons.js.map +0 -1
  652. package/dist/model/elements/buttons.mjs +0 -9
  653. package/dist/model/elements/buttons.mjs.map +0 -1
  654. package/dist/model/elements/event.d.ts +0 -22
  655. package/dist/model/elements/event.d.ts.map +0 -1
  656. package/dist/model/elements/event.js +0 -30
  657. package/dist/model/elements/event.js.map +0 -1
  658. package/dist/model/elements/event.mjs +0 -13
  659. package/dist/model/elements/event.mjs.map +0 -1
  660. package/dist/model/elements/headline.d.ts +0 -67
  661. package/dist/model/elements/headline.d.ts.map +0 -1
  662. package/dist/model/elements/headline.js +0 -74
  663. package/dist/model/elements/headline.js.map +0 -1
  664. package/dist/model/elements/headline.mjs +0 -57
  665. package/dist/model/elements/headline.mjs.map +0 -1
  666. package/dist/model/elements/index.d.ts +0 -34
  667. package/dist/model/elements/index.d.ts.map +0 -1
  668. package/dist/model/elements/index.js +0 -37
  669. package/dist/model/elements/index.js.map +0 -1
  670. package/dist/model/elements/index.mjs +0 -37
  671. package/dist/model/elements/index.mjs.map +0 -1
  672. package/dist/model/elements/layout.d.ts +0 -64
  673. package/dist/model/elements/layout.d.ts.map +0 -1
  674. package/dist/model/elements/layout.js +0 -68
  675. package/dist/model/elements/layout.js.map +0 -1
  676. package/dist/model/elements/layout.mjs +0 -51
  677. package/dist/model/elements/layout.mjs.map +0 -1
  678. package/dist/model/elements/rich-text.d.ts +0 -27
  679. package/dist/model/elements/rich-text.d.ts.map +0 -1
  680. package/dist/model/elements/rich-text.js +0 -68
  681. package/dist/model/elements/rich-text.js.map +0 -1
  682. package/dist/model/elements/rich-text.mjs +0 -51
  683. package/dist/model/elements/rich-text.mjs.map +0 -1
  684. package/dist/model/elements/text.d.ts +0 -22
  685. package/dist/model/elements/text.d.ts.map +0 -1
  686. package/dist/model/elements/text.js +0 -30
  687. package/dist/model/elements/text.js.map +0 -1
  688. package/dist/model/elements/text.mjs +0 -13
  689. package/dist/model/elements/text.mjs.map +0 -1
  690. package/dist/model/index.d.ts +0 -2
  691. package/dist/model/index.d.ts.map +0 -1
  692. package/dist/model/modifiers/_types.d.ts +0 -41
  693. package/dist/model/modifiers/_types.d.ts.map +0 -1
  694. package/dist/model/modifiers/index.d.ts +0 -44
  695. package/dist/model/modifiers/index.d.ts.map +0 -1
  696. package/dist/model/modifiers/index.js +0 -136
  697. package/dist/model/modifiers/index.js.map +0 -1
  698. package/dist/model/modifiers/index.mjs +0 -136
  699. package/dist/model/modifiers/index.mjs.map +0 -1
  700. package/dist/model/modifiers/style.d.ts +0 -19
  701. package/dist/model/modifiers/style.d.ts.map +0 -1
  702. package/dist/model/modifiers/style.js +0 -122
  703. package/dist/model/modifiers/style.js.map +0 -1
  704. package/dist/model/modifiers/style.mjs +0 -105
  705. package/dist/model/modifiers/style.mjs.map +0 -1
  706. package/dist/model.d.ts +0 -2
  707. package/dist/model.js +0 -5
  708. package/dist/model.js.map +0 -1
  709. package/dist/model.mjs +0 -5
  710. package/dist/model.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"card-stack.js","sources":["../../../../source/atomic/animations/brand/card-stack.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-styles-library/token';\nimport { isPreferredReducedMotion } from '@universityofmaryland/web-utilities-library/accessibility';\nimport { withViewTimelineAnimation } from '@universityofmaryland/web-utilities-library/styles';\nimport { ElementModel } from 'model';\nimport { assets } from 'atomic';\nimport { type ElementVisual } from '../../../_types';\n\ninterface CardStackProps {\n featured: HTMLImageElement | HTMLVideoElement;\n images: HTMLImageElement[];\n isExpandFeature: boolean;\n}\n\ninterface ConfigurationItem {\n column?: string;\n row?: string;\n zIndex?: number;\n featured?: boolean;\n matchWidth?: boolean;\n offset?: {\n top?: string;\n left?: string;\n right?: string;\n bottom?: string;\n };\n}\n\ninterface Configuration {\n count: number;\n layout: {\n gridTemplateColumns: string;\n gridTemplateRows: string;\n };\n items: ConfigurationItem[];\n}\n\nconst configuration: Configuration[] = [\n {\n count: 4,\n layout: {\n gridTemplateColumns: 'repeat(15, 10vw)',\n gridTemplateRows: 'repeat(15, 8vh)',\n },\n items: [\n {\n column: '3 / 8',\n row: '4 / 5',\n zIndex: 9,\n offset: {\n top: '-10%',\n left: '-5%',\n },\n },\n {\n column: '12 / 15',\n row: '2 / 6',\n offset: {\n top: '-1%',\n right: '-4%',\n },\n },\n {\n column: '4 / 7',\n row: '10 / 15',\n zIndex: 9,\n offset: {\n bottom: '-13%',\n left: '-4%',\n },\n },\n {\n column: '13 / 15',\n row: '10 / 14',\n offset: {\n right: '-8%',\n bottom: '-3%',\n },\n },\n ],\n },\n {\n count: 5,\n layout: {\n gridTemplateColumns: 'repeat(15, 10vw)',\n gridTemplateRows: 'repeat(15, 8vh)',\n },\n items: [\n {\n column: '2 / 6',\n row: '4 / 9',\n zIndex: 9,\n offset: {\n top: '-10%',\n left: '-6%',\n },\n },\n {\n column: '12 / 15',\n row: '2 / 5',\n offset: {\n top: '-3%',\n right: '-5%',\n },\n },\n {\n column: '10 / 12',\n row: '3 / 5',\n offset: {\n bottom: '-20%',\n right: '-1%',\n },\n },\n {\n column: '1 / 4',\n row: '8/ 13',\n zIndex: 9,\n offset: {\n bottom: '-10%',\n left: '-10%',\n },\n },\n {\n column: '12 / 15',\n row: '10 / 14',\n offset: {\n right: '-10%',\n bottom: '-7%',\n },\n },\n ],\n },\n {\n count: 6,\n layout: {\n gridTemplateColumns: 'repeat(15, 10vw)',\n gridTemplateRows: 'repeat(15, 8vh)',\n },\n items: [\n {\n column: '2 / 6',\n row: '4 / 9',\n zIndex: 9,\n offset: {\n top: '-10%',\n left: '-6%',\n },\n },\n {\n column: '12 / 15',\n row: '2 / 5',\n offset: {\n top: '-3%',\n right: '-5%',\n },\n },\n {\n column: '10 / 12',\n row: '3 / 5',\n offset: {\n bottom: '-20%',\n right: '-1%',\n },\n },\n {\n column: '12 / 15',\n row: '6 / 8',\n offset: {\n bottom: '-5%',\n right: '-20%',\n },\n },\n {\n column: '1 / 4',\n row: '8/ 13',\n zIndex: 9,\n offset: {\n bottom: '-10%',\n left: '-10%',\n },\n },\n {\n column: '12 / 15',\n row: '10 / 14',\n offset: {\n right: '-10%',\n bottom: '-7%',\n },\n },\n ],\n },\n {\n count: 7,\n layout: {\n gridTemplateColumns: 'repeat(15, 10vw)',\n gridTemplateRows: 'repeat(15, 8vh)',\n },\n items: [\n {\n column: '2 / 6',\n row: '4 / 9',\n zIndex: 9,\n offset: {\n top: '-10%',\n left: '-6%',\n },\n },\n {\n column: '12 / 15',\n row: '2 / 5',\n offset: {\n top: '-3%',\n right: '-5%',\n },\n },\n {\n column: '10 / 12',\n row: '3 / 5',\n offset: {\n bottom: '-20%',\n right: '-1%',\n },\n },\n {\n column: '12 / 15',\n row: '6 / 8',\n offset: {\n bottom: '-5%',\n right: '-20%',\n },\n },\n {\n column: '1 / 4',\n row: '8/ 13',\n zIndex: 9,\n offset: {\n bottom: '-10%',\n left: '-10%',\n },\n },\n {\n column: '12 / 15',\n row: '10 / 14',\n offset: {\n right: '-10%',\n bottom: '-7%',\n },\n },\n {\n column: '6 / 9',\n row: '10 / 15',\n offset: {\n right: '-10%',\n bottom: '-25%',\n },\n },\n ],\n },\n {\n count: 8,\n layout: {\n gridTemplateColumns: 'repeat(15, 10vw)',\n gridTemplateRows: 'repeat(15, 8vh)',\n },\n items: [\n {\n column: '2 / 6',\n row: '4 / 9',\n zIndex: 9,\n offset: {\n top: '-10%',\n left: '-6%',\n },\n },\n {\n column: '12 / 15',\n row: '2 / 5',\n offset: {\n top: '-3%',\n right: '-5%',\n },\n },\n {\n column: '10 / 12',\n row: '3 / 5',\n offset: {\n bottom: '-20%',\n right: '-1%',\n },\n },\n {\n column: '3 / 9',\n row: '1 / 3',\n offset: {\n right: '-10%',\n top: '-25%',\n },\n },\n {\n column: '12 / 15',\n row: '6 / 8',\n offset: {\n bottom: '-5%',\n right: '-20%',\n },\n },\n {\n column: '1 / 4',\n row: '8/ 13',\n zIndex: 9,\n offset: {\n bottom: '-10%',\n left: '-10%',\n },\n },\n {\n column: '12 / 15',\n row: '10 / 14',\n offset: {\n right: '-10%',\n bottom: '-7%',\n },\n },\n {\n column: '6 / 9',\n row: '10 / 15',\n offset: {\n right: '-10%',\n bottom: '-25%',\n },\n },\n ],\n },\n];\n\n// Class name constants\nconst STACK_CONTAINER_CLASS = 'brand-animations-card-stack';\nconst STACK_ELEMENT_CLASS = `${STACK_CONTAINER_CLASS}-element`;\nconst STACK_GRID_CLASS = `${STACK_CONTAINER_CLASS}-grid`;\nconst STACK_ITEM_CLASS = `${STACK_CONTAINER_CLASS}-item`;\nconst STACK_GRID_ERROR_CLASS = `${STACK_GRID_CLASS}-error`;\n\nconst KEY_FRAME_GRID_EXPAND = 'grid-expand';\nconst KEY_FRAME_GRID_ITEM = 'grid-item';\nconst KEY_FRAME_FEATURED_SIZE = 'featured-size';\n\nconst isPreferReducedMotion = isPreferredReducedMotion();\nconst isScrollTimelineSupported = () =>\n 'ScrollTimeline' in window || CSS.supports('animation-timeline', 'scroll()');\nconst isDisplayWithoutAnimation =\n isPreferReducedMotion || !isScrollTimelineSupported();\n\nconst getResponsiveSizes = () => {\n const windowWidth = window.innerWidth;\n\n if (windowWidth >= 1024) {\n return { width: 0.4, height: 0.4 };\n } else if (windowWidth >= 768) {\n return { width: 0.5, height: 0.5 };\n } else {\n return { width: 0.8, height: 0.5 };\n }\n};\n\nconst keyFrameGridExpand = `\n @keyframes ${KEY_FRAME_GRID_EXPAND} {\n to {\n transform: translate(0, 0);\n width: inherit;\n }\n }\n`;\n\nconst keyFrameGridItem = `\n @keyframes ${KEY_FRAME_GRID_ITEM} {\n to {\n opacity: 0;\n }\n }\n`;\n\nconst keyFrameFeaturedSize = `\n @keyframes ${KEY_FRAME_FEATURED_SIZE} {\n to {\n width: 100%;\n height: 100vh;\n top: 0%;\n }\n }\n`;\n\n/**\n * Waits for all media elements (images and videos) to load and render.\n *\n * @param container - The container element containing the media\n * @returns Promise that resolves when all media is loaded and rendered\n */\nconst waitForMediaLoad = async (container: HTMLElement): Promise<void> => {\n const images = Array.from(container.querySelectorAll('img'));\n const videos = Array.from(container.querySelectorAll('video'));\n\n const imagePromises = images.map((img) => {\n if (img.complete) {\n // Check if image loaded successfully or failed\n if (img.naturalWidth > 0) {\n return Promise.resolve();\n } else {\n // Image is complete but has no natural dimensions - it failed to load\n return Promise.reject(new Error(`Failed to load image: ${img.src}`));\n }\n }\n return new Promise<void>((resolve, reject) => {\n img.addEventListener('load', () => resolve(), { once: true });\n img.addEventListener(\n 'error',\n () => reject(new Error(`Failed to load image: ${img.src}`)),\n { once: true },\n );\n });\n });\n\n const videoPromises = videos.map((video) => {\n if (video.readyState >= 3) {\n return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n video.addEventListener('loadeddata', () => resolve(), { once: true });\n video.addEventListener(\n 'error',\n () => reject(new Error(`Failed to load video: ${video.src}`)),\n { once: true },\n );\n });\n });\n\n await Promise.all([...imagePromises, ...videoPromises]);\n\n return new Promise<void>((resolve) => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n resolve();\n });\n });\n });\n};\n\n/**\n * Retrieves the configuration object for a specific element count.\n *\n * @param count - The number of elements to display\n * @returns The configuration object for the given count, or undefined if not found\n */\nconst getConfigurationByCount = (count: number) => {\n return configuration.find((c) => c.count === count);\n};\n\n/**\n * Gets the stack element from a grid item.\n *\n * @param gridItem - The grid item element\n * @param index - The index of the stack element\n * @returns The stack element or null if not found\n */\nconst getStackElementFromGridItem = (\n gridItem: HTMLElement,\n index: number,\n): HTMLElement | null => {\n return gridItem.querySelector(\n `.${STACK_ELEMENT_CLASS}-${index}`,\n ) as HTMLElement;\n};\n\n/**\n * Calculates the transform values (x, y) needed to center an element\n * relative to the brand-animations-card-stack-grid container with optional offset.\n *\n * @param element - The element to be centered\n * @param gridContainer - The grid container element\n * @param offset - Optional offset values in percentages\n * @returns Transform values {x, y} in pixels to center the element with offset\n */\nconst calculateCenterTransform = (\n element: HTMLElement,\n centerElement: HTMLElement,\n offset?: {\n top?: string;\n left?: string;\n right?: string;\n bottom?: string;\n },\n): { x: number; y: number } => {\n const elementRect = element.getBoundingClientRect();\n const centerRect = centerElement.getBoundingClientRect();\n\n const centerX = centerRect.left + centerRect.width / 2;\n const centerY = centerRect.top + centerRect.height / 2;\n\n const elementCenterX = elementRect.left + elementRect.width / 2;\n const elementCenterY = elementRect.top + elementRect.height / 2;\n\n let translateX = centerX - elementCenterX;\n let translateY = centerY - elementCenterY;\n\n if (offset) {\n const applyOffset = (\n value: string | undefined,\n dimension: number,\n ): number => {\n return value ? (parseFloat(value) / 100) * dimension : 0;\n };\n\n translateX += applyOffset(offset.left, centerRect.width);\n translateX -= applyOffset(offset.right, centerRect.width);\n translateY += applyOffset(offset.top, centerRect.height);\n translateY -= applyOffset(offset.bottom, centerRect.height);\n }\n\n return {\n x: translateX,\n y: translateY,\n };\n};\n\n/**\n * Clears animations from elements.\n *\n * @param featuredElement - The featured element\n * @param gridContainer - The grid container element\n */\nconst clearElementAnimations = (\n featuredElement: HTMLElement | null,\n gridContainer: HTMLElement | null,\n): void => {\n if (featuredElement) {\n featuredElement.style.animation = 'none';\n }\n if (gridContainer) {\n gridContainer.style.animation = 'none';\n }\n};\n\n/**\n * Checks if the current device is mobile based on viewport width.\n *\n * @returns True if device is mobile (width < 768px)\n */\nconst isMobileDevice = (): boolean => {\n return window.innerWidth < 768;\n};\n\n/**\n * Creates a resize handler function that only executes on actual window resizes.\n *\n * @param onResize - Callback to execute on resize\n * @param delay - Delay in milliseconds before executing callback\n * @returns Resize handler function\n */\nconst createResizeHandler = (\n onResize: () => void,\n delay: number = 300,\n): (() => void) => {\n let timeoutId: NodeJS.Timeout | null = null;\n let previousWidth = window.innerWidth;\n\n return () => {\n const currentWidth = window.innerWidth;\n\n // Only trigger on width changes (actual resize, not mobile scroll)\n if (currentWidth === previousWidth) {\n return;\n }\n\n previousWidth = currentWidth;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n onResize();\n timeoutId = null;\n }, delay);\n };\n};\n\n/**\n * Sets opacity with optional transition.\n *\n * @param element - The element to modify\n * @param opacity - The opacity value\n * @param transition - Optional transition string\n */\nconst setElementOpacity = (\n element: HTMLElement,\n opacity: string,\n transition?: string,\n): void => {\n element.style.opacity = opacity;\n if (transition) {\n element.style.transition = transition;\n }\n};\n\n/**\n * Validates required elements for animation.\n *\n * @param gridContainer - The grid container element\n * @param config - Configuration object\n * @returns True if all required elements are present\n */\nconst validateAnimationElements = (\n gridContainer: HTMLElement | null,\n config: Configuration | undefined,\n): boolean => {\n return gridContainer !== null && config !== undefined;\n};\n\n/**\n * Applies dimension and position transforms to a grid element.\n *\n * @param element - The element to transform\n * @param itemConfig - Configuration for this specific item\n * @param featuredElement - The featured element for sizing reference\n * @param gridContainer - The grid container for position reference\n */\nconst applyElementTransforms = (\n element: HTMLElement,\n itemConfig: ConfigurationItem,\n featuredElement: HTMLElement,\n): void => {\n if (featuredElement) {\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const featuredWidth = featuredElement.offsetWidth;\n const featuredHeight = featuredElement.offsetHeight;\n const isLargerThan40Percent =\n featuredWidth > windowWidth * 0.41 ||\n featuredHeight > windowHeight * 0.41;\n\n if (!isLargerThan40Percent) {\n element.style.width = `${featuredWidth}px`;\n element.style.height = `${featuredHeight}px`;\n } else {\n const parentContainer = featuredElement.parentElement;\n const parentWidth = parentContainer\n ? parentContainer.offsetWidth\n : windowWidth;\n\n const { width: widthPercentage, height: heightVh } = getResponsiveSizes();\n const width = Math.round(parentWidth * widthPercentage);\n const height = Math.round(windowHeight * heightVh);\n\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n }\n }\n\n const transform = calculateCenterTransform(\n element,\n featuredElement,\n itemConfig?.offset,\n );\n element.style.transform = `translate(${transform.x}px, ${transform.y}px)`;\n};\n\n/**\n * Processes all grid items for animation.\n *\n * @param gridContainer - The grid container element\n * @param config - Configuration object\n * @returns void\n */\nconst processGridAnimation = (\n featuredElement: HTMLElement,\n gridContainer: HTMLElement,\n config: Configuration,\n): void => {\n const gridItems = Array.from(gridContainer.children) as HTMLElement[];\n\n gridItems.forEach((gridItem, index) => {\n const element = getStackElementFromGridItem(gridItem, index);\n\n if (!element) {\n return;\n }\n\n const itemConfig = config.items[index];\n\n applyElementTransforms(element, itemConfig, featuredElement);\n });\n};\n\nconst createGridElement = (\n element: HTMLImageElement | HTMLVideoElement,\n index: number,\n placement: ConfigurationItem,\n) => {\n const children: ElementVisual[] = [];\n\n if (element.tagName === 'IMG') {\n children.push(\n assets.image.background({\n element: element as HTMLImageElement,\n isScaled: true,\n }),\n );\n }\n\n const rowStart = placement.row ? parseInt(placement.row.split(' / ')[0]) : 0;\n\n const getStartRange = (row: number): number => {\n if (row >= 13) return -70;\n if (row >= 10 && row <= 12) return -40;\n if (row >= 6 && row < 10) return 40;\n return 80;\n };\n\n const getEndRange = (row: number): number => {\n if (row >= 13) return 120;\n if (row >= 10 && row <= 12) return 140;\n if (row >= 6 && row < 10) return 160;\n return 170;\n };\n\n const startRange = getStartRange(rowStart);\n const endRange = getEndRange(rowStart);\n const animationRangeStart = `${startRange}vh`;\n const animationRangeEnd = `${endRange}vh`;\n\n return ElementModel.createDiv({\n className: `${STACK_ELEMENT_CLASS}-${index}`,\n children,\n elementStyles: {\n element: {\n overflow: 'clip',\n height: '100%',\n width: '100%',\n\n ...withViewTimelineAnimation({\n animation: `${KEY_FRAME_GRID_EXPAND} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart,\n animationRangeEnd,\n animationDuration: '1ms',\n }),\n },\n },\n });\n};\n\nconst createGridItem = (\n element: HTMLImageElement | HTMLVideoElement,\n placement: ConfigurationItem,\n index: number,\n) => {\n const rowStart = placement.row ? parseInt(placement.row.split(' / ')[0]) : 0;\n const startRange = rowStart > 8 ? 0 : 80;\n const endRange = rowStart > 8 ? 200 : 200;\n const animationRangeStart = `${startRange}vh`;\n const animationRangeEnd = `${endRange}vh`;\n\n return ElementModel.createDiv({\n className: `${STACK_ITEM_CLASS}-${index}`,\n children: [createGridElement(element, index, placement)],\n elementStyles: {\n element: {\n gridColumn: placement.column,\n gridRow: placement.row,\n zIndex: placement.zIndex || 1,\n width: '100%',\n height: '100%',\n\n [`@media (${token.media.queries.large.max})`]: {\n [`@supports not (animation-timeline: scroll())`]: {\n display: 'none',\n },\n },\n\n ...(isDisplayWithoutAnimation && {\n display: 'none',\n }),\n\n ...withViewTimelineAnimation({\n animation: `${KEY_FRAME_GRID_ITEM} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart,\n animationRangeEnd,\n }),\n },\n },\n });\n};\n\nconst createGrid = (props: CardStackProps) => {\n const totalCount = props.images.length;\n const config = getConfigurationByCount(totalCount);\n\n if (!config) {\n console.warn(`No configuration found for ${totalCount} elements`);\n return ElementModel.createDiv({\n className: STACK_GRID_ERROR_CLASS,\n });\n }\n\n const gridItems = props.images.map((element, index) => {\n const placement = config.items[index];\n return createGridItem(element, placement, index);\n });\n\n return ElementModel.createDiv({\n className: STACK_GRID_CLASS,\n children: gridItems,\n elementStyles: {\n element: {\n display: 'grid',\n gridTemplateColumns: 'repeat(16, 1fr)',\n gridTemplateRows: 'repeat(16, 2vh)',\n gap: token.spacing.min,\n minHeight: '300px',\n\n [`@media (${token.media.queries.large.max})`]: {\n '@supports not (animation-timeline: scroll())': {\n width: '100%',\n },\n },\n\n ...withViewTimelineAnimation({\n gridTemplateColumns: config.layout.gridTemplateColumns,\n gridTemplateRows: config.layout.gridTemplateRows,\n transform: 'translate(-50%, -25%)',\n }),\n },\n },\n });\n};\n\nconst createFeatured = (\n element: HTMLImageElement | HTMLVideoElement,\n isExpand: boolean,\n totalCount: number,\n) => {\n const children: ElementVisual[] = [];\n let video: (ElementVisual & { events: { setPlay: () => void } }) | undefined;\n\n if (element.tagName === 'IMG') {\n children.push(\n assets.image.background({\n element: element as HTMLImageElement,\n isScaled: true,\n }),\n );\n }\n\n if (element.tagName === 'VIDEO') {\n element.setAttribute('muted', 'true');\n element.setAttribute('playsinline', 'true');\n element.setAttribute('loop', 'true');\n\n video = assets.video.toggle({\n video: element as HTMLVideoElement,\n isScaled: true,\n });\n children.push(video);\n }\n\n const { width: widthPercentage, height: heightVh } = getResponsiveSizes();\n\n const featuredElement = ElementModel.createDiv({\n className: `${STACK_ELEMENT_CLASS}-featured`,\n children,\n elementStyles: {\n element: {\n position: 'absolute',\n top: '20vh',\n left: '50%',\n transform: 'translateX(-50%)',\n zIndex: 999,\n width: `${widthPercentage * 100}%`,\n height: `${heightVh * 100}vh`,\n\n ...(isDisplayWithoutAnimation && {\n top: '0',\n }),\n\n [`@media (${token.media.queries.large.max})`]: {\n '@supports not (animation-timeline: view())': {\n width: '100% !important',\n height: '100% !important',\n top: '0',\n },\n },\n\n ...(isExpand && {\n ...withViewTimelineAnimation({\n top: '30vh',\n animation: `${KEY_FRAME_FEATURED_SIZE} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: `${100 + (totalCount - 4) * 10}vh`,\n animationRangeEnd: '250vh',\n }),\n }),\n },\n },\n });\n\n if (isExpand && featuredElement.element instanceof HTMLElement) {\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (video) video.events.setPlay();\n observer.disconnect();\n }\n });\n },\n {\n rootMargin: `-${100 + (totalCount - 4) * 10}px 0px 0px 0px`,\n threshold: 0,\n },\n );\n\n observer.observe(featuredElement.element);\n }\n\n return featuredElement;\n};\n\nconst createSticky = (props: CardStackProps) => {\n const wrapper = ElementModel.createDiv({\n className: `${STACK_CONTAINER_CLASS}-sticky-wrapper`,\n children: [\n createGrid(props),\n createFeatured(\n props.featured,\n props.isExpandFeature,\n props.images.length,\n ),\n ],\n elementStyles: {\n element: {\n position: 'relative',\n\n ...withViewTimelineAnimation({\n position: 'sticky',\n top: 0,\n }),\n },\n },\n });\n\n return ElementModel.createDiv({\n className: `${STACK_CONTAINER_CLASS}-sticky`,\n children: [wrapper],\n elementStyles: {\n element: {\n ...withViewTimelineAnimation({\n height: '200vh',\n\n ...(props.isExpandFeature && {\n height: '250vh',\n }),\n }),\n },\n },\n });\n};\n\nexport default (props: CardStackProps) => {\n const composite = ElementModel.createDiv({\n className: STACK_CONTAINER_CLASS,\n children: [createSticky(props)],\n elementStyles: {\n element: {\n containerType: 'inline-size',\n opacity: '0',\n overflow: 'clip',\n },\n },\n });\n\n const loadAnimation = async () => {\n const totalCount = props.images.length;\n const config = getConfigurationByCount(totalCount);\n const gridContainer = composite.element.querySelector(\n `.${STACK_GRID_CLASS}`,\n ) as HTMLElement;\n const featuredElement = composite.element.querySelector(\n `.${STACK_ELEMENT_CLASS}-featured`,\n ) as HTMLElement;\n let animationsCleared = false;\n\n if (!validateAnimationElements(gridContainer, config)) {\n return;\n }\n\n const clearAnimations = () => {\n if (animationsCleared) return;\n\n clearElementAnimations(featuredElement, gridContainer);\n animationsCleared = true;\n\n setTimeout(() => {\n processGridAnimation(props.featured, gridContainer!, config!);\n }, 100);\n };\n\n try {\n await waitForMediaLoad(gridContainer!);\n } catch (error) {\n console.warn('Media loading failed, proceeding with animation:', error);\n }\n\n processGridAnimation(props.featured, gridContainer!, config!);\n setElementOpacity(composite.element, '1');\n\n if (!isMobileDevice()) {\n const resizeHandler = createResizeHandler(() => {\n setTimeout(() => {\n processGridAnimation(props.featured, gridContainer!, config!);\n setTimeout(() => {\n setElementOpacity(composite.element, '1');\n animationsCleared = false;\n }, 100);\n }, 200);\n });\n\n window.addEventListener('resize', () => {\n if (isMobileDevice()) {\n return;\n }\n\n if (composite.element.style.opacity === '1') {\n setElementOpacity(composite.element, '0', 'opacity 0.3s ease-in-out');\n }\n\n clearAnimations();\n resizeHandler();\n });\n }\n };\n\n composite.styles += keyFrameGridExpand;\n composite.styles += keyFrameGridItem;\n composite.styles += keyFrameFeaturedSize;\n\n return {\n ...composite,\n events: {\n loadAnimation,\n },\n };\n};\n"],"names":["isPreferredReducedMotion","index","assets.image.background","ElementModel.createDiv","withViewTimelineAnimation","token","assets.video.toggle"],"mappings":"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"}
1
+ {"version":3,"file":"card-stack.js","sources":["../../../../source/atomic/animations/brand/card-stack.ts"],"sourcesContent":["import { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport * as token from '@universityofmaryland/web-token-library';\nimport { isPreferredReducedMotion } from '@universityofmaryland/web-utilities-library/accessibility';\nimport { withViewTimelineAnimation } from '@universityofmaryland/web-utilities-library/styles';\nimport { assets } from 'atomic';\nimport { type ElementModel } from '../../../_types';\n\ninterface CardStackProps {\n featured: HTMLImageElement | HTMLVideoElement;\n images: HTMLImageElement[];\n isExpandFeature: boolean;\n}\n\ninterface ConfigurationItem {\n column?: string;\n row?: string;\n zIndex?: number;\n featured?: boolean;\n matchWidth?: boolean;\n offset?: {\n top?: string;\n left?: string;\n right?: string;\n bottom?: string;\n };\n}\n\ninterface Configuration {\n count: number;\n layout: {\n gridTemplateColumns: string;\n gridTemplateRows: string;\n };\n items: ConfigurationItem[];\n}\n\nconst configuration: Configuration[] = [\n {\n count: 4,\n layout: {\n gridTemplateColumns: 'repeat(15, 10vw)',\n gridTemplateRows: 'repeat(15, 8vh)',\n },\n items: [\n {\n column: '3 / 8',\n row: '4 / 5',\n zIndex: 9,\n offset: {\n top: '-10%',\n left: '-5%',\n },\n },\n {\n column: '12 / 15',\n row: '2 / 6',\n offset: {\n top: '-1%',\n right: '-4%',\n },\n },\n {\n column: '4 / 7',\n row: '10 / 15',\n zIndex: 9,\n offset: {\n bottom: '-13%',\n left: '-4%',\n },\n },\n {\n column: '13 / 15',\n row: '10 / 14',\n offset: {\n right: '-8%',\n bottom: '-3%',\n },\n },\n ],\n },\n {\n count: 5,\n layout: {\n gridTemplateColumns: 'repeat(15, 10vw)',\n gridTemplateRows: 'repeat(15, 8vh)',\n },\n items: [\n {\n column: '2 / 6',\n row: '4 / 9',\n zIndex: 9,\n offset: {\n top: '-10%',\n left: '-6%',\n },\n },\n {\n column: '12 / 15',\n row: '2 / 5',\n offset: {\n top: '-3%',\n right: '-5%',\n },\n },\n {\n column: '10 / 12',\n row: '3 / 5',\n offset: {\n bottom: '-20%',\n right: '-1%',\n },\n },\n {\n column: '1 / 4',\n row: '8/ 13',\n zIndex: 9,\n offset: {\n bottom: '-10%',\n left: '-10%',\n },\n },\n {\n column: '12 / 15',\n row: '10 / 14',\n offset: {\n right: '-10%',\n bottom: '-7%',\n },\n },\n ],\n },\n {\n count: 6,\n layout: {\n gridTemplateColumns: 'repeat(15, 10vw)',\n gridTemplateRows: 'repeat(15, 8vh)',\n },\n items: [\n {\n column: '2 / 6',\n row: '4 / 9',\n zIndex: 9,\n offset: {\n top: '-10%',\n left: '-6%',\n },\n },\n {\n column: '12 / 15',\n row: '2 / 5',\n offset: {\n top: '-3%',\n right: '-5%',\n },\n },\n {\n column: '10 / 12',\n row: '3 / 5',\n offset: {\n bottom: '-20%',\n right: '-1%',\n },\n },\n {\n column: '12 / 15',\n row: '6 / 8',\n offset: {\n bottom: '-5%',\n right: '-20%',\n },\n },\n {\n column: '1 / 4',\n row: '8/ 13',\n zIndex: 9,\n offset: {\n bottom: '-10%',\n left: '-10%',\n },\n },\n {\n column: '12 / 15',\n row: '10 / 14',\n offset: {\n right: '-10%',\n bottom: '-7%',\n },\n },\n ],\n },\n {\n count: 7,\n layout: {\n gridTemplateColumns: 'repeat(15, 10vw)',\n gridTemplateRows: 'repeat(15, 8vh)',\n },\n items: [\n {\n column: '2 / 6',\n row: '4 / 9',\n zIndex: 9,\n offset: {\n top: '-10%',\n left: '-6%',\n },\n },\n {\n column: '12 / 15',\n row: '2 / 5',\n offset: {\n top: '-3%',\n right: '-5%',\n },\n },\n {\n column: '10 / 12',\n row: '3 / 5',\n offset: {\n bottom: '-20%',\n right: '-1%',\n },\n },\n {\n column: '12 / 15',\n row: '6 / 8',\n offset: {\n bottom: '-5%',\n right: '-20%',\n },\n },\n {\n column: '1 / 4',\n row: '8/ 13',\n zIndex: 9,\n offset: {\n bottom: '-10%',\n left: '-10%',\n },\n },\n {\n column: '12 / 15',\n row: '10 / 14',\n offset: {\n right: '-10%',\n bottom: '-7%',\n },\n },\n {\n column: '6 / 9',\n row: '10 / 15',\n offset: {\n right: '-10%',\n bottom: '-25%',\n },\n },\n ],\n },\n {\n count: 8,\n layout: {\n gridTemplateColumns: 'repeat(15, 10vw)',\n gridTemplateRows: 'repeat(15, 8vh)',\n },\n items: [\n {\n column: '2 / 6',\n row: '4 / 9',\n zIndex: 9,\n offset: {\n top: '-10%',\n left: '-6%',\n },\n },\n {\n column: '12 / 15',\n row: '2 / 5',\n offset: {\n top: '-3%',\n right: '-5%',\n },\n },\n {\n column: '10 / 12',\n row: '3 / 5',\n offset: {\n bottom: '-20%',\n right: '-1%',\n },\n },\n {\n column: '3 / 9',\n row: '1 / 3',\n offset: {\n right: '-10%',\n top: '-25%',\n },\n },\n {\n column: '12 / 15',\n row: '6 / 8',\n offset: {\n bottom: '-5%',\n right: '-20%',\n },\n },\n {\n column: '1 / 4',\n row: '8/ 13',\n zIndex: 9,\n offset: {\n bottom: '-10%',\n left: '-10%',\n },\n },\n {\n column: '12 / 15',\n row: '10 / 14',\n offset: {\n right: '-10%',\n bottom: '-7%',\n },\n },\n {\n column: '6 / 9',\n row: '10 / 15',\n offset: {\n right: '-10%',\n bottom: '-25%',\n },\n },\n ],\n },\n];\n\n// Class name constants\nconst STACK_CONTAINER_CLASS = 'brand-animations-card-stack';\nconst STACK_ELEMENT_CLASS = `${STACK_CONTAINER_CLASS}-element`;\nconst STACK_GRID_CLASS = `${STACK_CONTAINER_CLASS}-grid`;\nconst STACK_ITEM_CLASS = `${STACK_CONTAINER_CLASS}-item`;\nconst STACK_GRID_ERROR_CLASS = `${STACK_GRID_CLASS}-error`;\n\nconst KEY_FRAME_GRID_EXPAND = 'grid-expand';\nconst KEY_FRAME_GRID_ITEM = 'grid-item';\nconst KEY_FRAME_FEATURED_SIZE = 'featured-size';\n\nconst isPreferReducedMotion = isPreferredReducedMotion();\nconst isScrollTimelineSupported = () =>\n 'ScrollTimeline' in window || CSS.supports('animation-timeline', 'scroll()');\nconst isDisplayWithoutAnimation =\n isPreferReducedMotion || !isScrollTimelineSupported();\n\nconst getResponsiveSizes = () => {\n const windowWidth = window.innerWidth;\n\n if (windowWidth >= 1024) {\n return { width: 0.4, height: 0.4 };\n } else if (windowWidth >= 768) {\n return { width: 0.5, height: 0.5 };\n } else {\n return { width: 0.8, height: 0.5 };\n }\n};\n\nconst keyFrameGridExpand = `\n @keyframes ${KEY_FRAME_GRID_EXPAND} {\n to {\n transform: translate(0, 0);\n width: inherit;\n }\n }\n`;\n\nconst keyFrameGridItem = `\n @keyframes ${KEY_FRAME_GRID_ITEM} {\n to {\n opacity: 0;\n }\n }\n`;\n\nconst keyFrameFeaturedSize = `\n @keyframes ${KEY_FRAME_FEATURED_SIZE} {\n to {\n width: 100%;\n height: 100vh;\n top: 0%;\n }\n }\n`;\n\n/**\n * Waits for all media elements (images and videos) to load and render.\n *\n * @param container - The container element containing the media\n * @returns Promise that resolves when all media is loaded and rendered\n */\nconst waitForMediaLoad = async (container: HTMLElement): Promise<void> => {\n const images = Array.from(container.querySelectorAll('img'));\n const videos = Array.from(container.querySelectorAll('video'));\n\n const imagePromises = images.map((img) => {\n if (img.complete) {\n // Check if image loaded successfully or failed\n if (img.naturalWidth > 0) {\n return Promise.resolve();\n } else {\n // Image is complete but has no natural dimensions - it failed to load\n return Promise.reject(new Error(`Failed to load image: ${img.src}`));\n }\n }\n return new Promise<void>((resolve, reject) => {\n img.addEventListener('load', () => resolve(), { once: true });\n img.addEventListener(\n 'error',\n () => reject(new Error(`Failed to load image: ${img.src}`)),\n { once: true },\n );\n });\n });\n\n const videoPromises = videos.map((video) => {\n if (video.readyState >= 3) {\n return Promise.resolve();\n }\n return new Promise<void>((resolve, reject) => {\n video.addEventListener('loadeddata', () => resolve(), { once: true });\n video.addEventListener(\n 'error',\n () => reject(new Error(`Failed to load video: ${video.src}`)),\n { once: true },\n );\n });\n });\n\n await Promise.all([...imagePromises, ...videoPromises]);\n\n return new Promise<void>((resolve) => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n resolve();\n });\n });\n });\n};\n\n/**\n * Retrieves the configuration object for a specific element count.\n *\n * @param count - The number of elements to display\n * @returns The configuration object for the given count, or undefined if not found\n */\nconst getConfigurationByCount = (count: number) => {\n return configuration.find((c) => c.count === count);\n};\n\n/**\n * Gets the stack element from a grid item.\n *\n * @param gridItem - The grid item element\n * @param index - The index of the stack element\n * @returns The stack element or null if not found\n */\nconst getStackElementFromGridItem = (\n gridItem: HTMLElement,\n index: number,\n): HTMLElement | null => {\n return gridItem.querySelector(\n `.${STACK_ELEMENT_CLASS}-${index}`,\n ) as HTMLElement;\n};\n\n/**\n * Calculates the transform values (x, y) needed to center an element\n * relative to the brand-animations-card-stack-grid container with optional offset.\n *\n * @param element - The element to be centered\n * @param gridContainer - The grid container element\n * @param offset - Optional offset values in percentages\n * @returns Transform values {x, y} in pixels to center the element with offset\n */\nconst calculateCenterTransform = (\n element: HTMLElement,\n centerElement: HTMLElement,\n offset?: {\n top?: string;\n left?: string;\n right?: string;\n bottom?: string;\n },\n): { x: number; y: number } => {\n const elementRect = element.getBoundingClientRect();\n const centerRect = centerElement.getBoundingClientRect();\n\n const centerX = centerRect.left + centerRect.width / 2;\n const centerY = centerRect.top + centerRect.height / 2;\n\n const elementCenterX = elementRect.left + elementRect.width / 2;\n const elementCenterY = elementRect.top + elementRect.height / 2;\n\n let translateX = centerX - elementCenterX;\n let translateY = centerY - elementCenterY;\n\n if (offset) {\n const applyOffset = (\n value: string | undefined,\n dimension: number,\n ): number => {\n return value ? (parseFloat(value) / 100) * dimension : 0;\n };\n\n translateX += applyOffset(offset.left, centerRect.width);\n translateX -= applyOffset(offset.right, centerRect.width);\n translateY += applyOffset(offset.top, centerRect.height);\n translateY -= applyOffset(offset.bottom, centerRect.height);\n }\n\n return {\n x: translateX,\n y: translateY,\n };\n};\n\n/**\n * Clears animations from elements.\n *\n * @param featuredElement - The featured element\n * @param gridContainer - The grid container element\n */\nconst clearElementAnimations = (\n featuredElement: HTMLElement | null,\n gridContainer: HTMLElement | null,\n): void => {\n if (featuredElement) {\n featuredElement.style.animation = 'none';\n }\n if (gridContainer) {\n gridContainer.style.animation = 'none';\n }\n};\n\n/**\n * Checks if the current device is mobile based on viewport width.\n *\n * @returns True if device is mobile (width < 768px)\n */\nconst isMobileDevice = (): boolean => {\n return window.innerWidth < 768;\n};\n\n/**\n * Creates a resize handler function that only executes on actual window resizes.\n *\n * @param onResize - Callback to execute on resize\n * @param delay - Delay in milliseconds before executing callback\n * @returns Resize handler function\n */\nconst createResizeHandler = (\n onResize: () => void,\n delay: number = 300,\n): (() => void) => {\n let timeoutId: NodeJS.Timeout | null = null;\n let previousWidth = window.innerWidth;\n\n return () => {\n const currentWidth = window.innerWidth;\n\n // Only trigger on width changes (actual resize, not mobile scroll)\n if (currentWidth === previousWidth) {\n return;\n }\n\n previousWidth = currentWidth;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n onResize();\n timeoutId = null;\n }, delay);\n };\n};\n\n/**\n * Sets opacity with optional transition.\n *\n * @param element - The element to modify\n * @param opacity - The opacity value\n * @param transition - Optional transition string\n */\nconst setElementOpacity = (\n element: HTMLElement,\n opacity: string,\n transition?: string,\n): void => {\n element.style.opacity = opacity;\n if (transition) {\n element.style.transition = transition;\n }\n};\n\n/**\n * Validates required elements for animation.\n *\n * @param gridContainer - The grid container element\n * @param config - Configuration object\n * @returns True if all required elements are present\n */\nconst validateAnimationElements = (\n gridContainer: HTMLElement | null,\n config: Configuration | undefined,\n): boolean => {\n return gridContainer !== null && config !== undefined;\n};\n\n/**\n * Applies dimension and position transforms to a grid element.\n *\n * @param element - The element to transform\n * @param itemConfig - Configuration for this specific item\n * @param featuredElement - The featured element for sizing reference\n * @param gridContainer - The grid container for position reference\n */\nconst applyElementTransforms = (\n element: HTMLElement,\n itemConfig: ConfigurationItem,\n featuredElement: HTMLElement,\n): void => {\n if (featuredElement) {\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const featuredWidth = featuredElement.offsetWidth;\n const featuredHeight = featuredElement.offsetHeight;\n const isLargerThan40Percent =\n featuredWidth > windowWidth * 0.41 ||\n featuredHeight > windowHeight * 0.41;\n\n if (!isLargerThan40Percent) {\n element.style.width = `${featuredWidth}px`;\n element.style.height = `${featuredHeight}px`;\n } else {\n const parentContainer = featuredElement.parentElement;\n const parentWidth = parentContainer\n ? parentContainer.offsetWidth\n : windowWidth;\n\n const { width: widthPercentage, height: heightVh } = getResponsiveSizes();\n const width = Math.round(parentWidth * widthPercentage);\n const height = Math.round(windowHeight * heightVh);\n\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n }\n }\n\n const transform = calculateCenterTransform(\n element,\n featuredElement,\n itemConfig?.offset,\n );\n element.style.transform = `translate(${transform.x}px, ${transform.y}px)`;\n};\n\n/**\n * Processes all grid items for animation.\n *\n * @param gridContainer - The grid container element\n * @param config - Configuration object\n * @returns void\n */\nconst processGridAnimation = (\n featuredElement: HTMLElement,\n gridContainer: HTMLElement,\n config: Configuration,\n): void => {\n const gridItems = Array.from(gridContainer.children) as HTMLElement[];\n\n gridItems.forEach((gridItem, index) => {\n const element = getStackElementFromGridItem(gridItem, index);\n\n if (!element) {\n return;\n }\n\n const itemConfig = config.items[index];\n\n applyElementTransforms(element, itemConfig, featuredElement);\n });\n};\n\nconst createGridElement = (\n element: HTMLImageElement | HTMLVideoElement,\n index: number,\n placement: ConfigurationItem,\n) => {\n const rowStart = placement.row ? parseInt(placement.row.split(' / ')[0]) : 0;\n\n const getStartRange = (row: number): number => {\n if (row >= 13) return -70;\n if (row >= 10 && row <= 12) return -40;\n if (row >= 6 && row < 10) return 40;\n return 80;\n };\n\n const getEndRange = (row: number): number => {\n if (row >= 13) return 120;\n if (row >= 10 && row <= 12) return 140;\n if (row >= 6 && row < 10) return 160;\n return 170;\n };\n\n const startRange = getStartRange(rowStart);\n const endRange = getEndRange(rowStart);\n const animationRangeStart = `${startRange}vh`;\n const animationRangeEnd = `${endRange}vh`;\n\n const builder = new ElementBuilder()\n .withClassName(`${STACK_ELEMENT_CLASS}-${index}`)\n .withStyles({\n element: {\n overflow: 'clip',\n height: '100%',\n width: '100%',\n\n ...withViewTimelineAnimation({\n animation: `${KEY_FRAME_GRID_EXPAND} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart,\n animationRangeEnd,\n animationDuration: '1ms',\n }),\n },\n });\n\n if (element.tagName === 'IMG') {\n const backgroundImage = assets.image.background({\n element: element as HTMLImageElement,\n isScaled: true,\n });\n builder.withChild(backgroundImage);\n }\n\n return builder.build();\n};\n\nconst createGridItem = (\n element: HTMLImageElement | HTMLVideoElement,\n placement: ConfigurationItem,\n index: number,\n) => {\n const rowStart = placement.row ? parseInt(placement.row.split(' / ')[0]) : 0;\n const startRange = rowStart > 8 ? 0 : 80;\n const endRange = rowStart > 8 ? 200 : 200;\n const animationRangeStart = `${startRange}vh`;\n const animationRangeEnd = `${endRange}vh`;\n\n const gridElement = createGridElement(element, index, placement);\n\n return new ElementBuilder()\n .withClassName(`${STACK_ITEM_CLASS}-${index}`)\n .withStyles({\n element: {\n gridColumn: placement.column,\n gridRow: placement.row,\n zIndex: placement.zIndex || 1,\n width: '100%',\n height: '100%',\n\n [`@media (${token.media.queries.large.max})`]: {\n [`@supports not (animation-timeline: scroll())`]: {\n display: 'none',\n },\n },\n\n ...(isDisplayWithoutAnimation && {\n display: 'none',\n }),\n\n ...withViewTimelineAnimation({\n animation: `${KEY_FRAME_GRID_ITEM} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart,\n animationRangeEnd,\n }),\n },\n })\n .withChild(gridElement)\n .build();\n};\n\nconst createGrid = (props: CardStackProps) => {\n const totalCount = props.images.length;\n const config = getConfigurationByCount(totalCount);\n\n if (!config) {\n console.warn(`No configuration found for ${totalCount} elements`);\n return new ElementBuilder().withClassName(STACK_GRID_ERROR_CLASS).build();\n }\n\n const gridItems = props.images.map((element, index) => {\n const placement = config.items[index];\n return createGridItem(element, placement, index);\n });\n\n const gridItemElements = gridItems.map((item) => item);\n\n return new ElementBuilder()\n .withClassName(STACK_GRID_CLASS)\n .withStyles({\n element: {\n display: 'grid',\n gridTemplateColumns: 'repeat(16, 1fr)',\n gridTemplateRows: 'repeat(16, 2vh)',\n gap: token.spacing.min,\n minHeight: '300px',\n\n [`@media (${token.media.queries.large.max})`]: {\n '@supports not (animation-timeline: scroll())': {\n width: '100%',\n },\n },\n\n ...withViewTimelineAnimation({\n gridTemplateColumns: config.layout.gridTemplateColumns,\n gridTemplateRows: config.layout.gridTemplateRows,\n transform: 'translate(-50%, -25%)',\n }),\n },\n })\n .withChildren(...gridItemElements)\n .build();\n};\n\nconst createFeatured = (\n element: HTMLImageElement | HTMLVideoElement,\n isExpand: boolean,\n totalCount: number,\n) => {\n let video: ElementModel | undefined;\n const { width: widthPercentage, height: heightVh } = getResponsiveSizes();\n\n const builder = new ElementBuilder()\n .withClassName(`${STACK_ELEMENT_CLASS}-featured`)\n .withStyles({\n element: {\n position: 'absolute',\n top: '20vh',\n left: '50%',\n transform: 'translateX(-50%)',\n zIndex: 999,\n width: `${widthPercentage * 100}%`,\n height: `${heightVh * 100}vh`,\n\n ...(isDisplayWithoutAnimation && {\n top: '0',\n }),\n\n [`@media (${token.media.queries.large.max})`]: {\n '@supports not (animation-timeline: view())': {\n width: '100% !important',\n height: '100% !important',\n top: '0',\n },\n },\n\n ...(isExpand && {\n ...withViewTimelineAnimation({\n top: '30vh',\n animation: `${KEY_FRAME_FEATURED_SIZE} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: `${100 + (totalCount - 4) * 10}vh`,\n animationRangeEnd: '250vh',\n }),\n }),\n },\n });\n\n if (element.tagName === 'IMG') {\n const backgroundImage = assets.image.background({\n element: element as HTMLImageElement,\n isScaled: true,\n });\n builder.withChild(backgroundImage);\n }\n\n if (element.tagName === 'VIDEO') {\n element.setAttribute('muted', 'true');\n element.setAttribute('playsinline', 'true');\n element.setAttribute('loop', 'true');\n\n video = assets.video.toggle({\n video: element as HTMLVideoElement,\n isScaled: true,\n });\n\n if (video && video.element instanceof HTMLElement) {\n builder.withChild(video as ElementModel & { element: HTMLElement });\n }\n }\n\n const featuredElement = builder.build();\n\n if (isExpand && featuredElement.element instanceof HTMLElement) {\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (video?.events?.setPlay) video.events.setPlay();\n observer.disconnect();\n }\n });\n },\n {\n rootMargin: `-${100 + (totalCount - 4) * 10}px 0px 0px 0px`,\n threshold: 0,\n },\n );\n\n observer.observe(featuredElement.element);\n }\n\n return featuredElement;\n};\n\nconst createSticky = (props: CardStackProps) => {\n const grid = createGrid(props);\n const featured = createFeatured(\n props.featured,\n props.isExpandFeature,\n props.images.length,\n );\n\n const wrapper = new ElementBuilder()\n .withClassName(`${STACK_CONTAINER_CLASS}-sticky-wrapper`)\n .withStyles({\n element: {\n position: 'relative',\n\n ...withViewTimelineAnimation({\n position: 'sticky',\n top: 0,\n }),\n },\n })\n .withChildren(grid, featured)\n .build();\n\n return new ElementBuilder()\n .withClassName(`${STACK_CONTAINER_CLASS}-sticky`)\n .withStyles({\n element: {\n ...withViewTimelineAnimation({\n height: '200vh',\n\n ...(props.isExpandFeature && {\n height: '250vh',\n }),\n }),\n },\n })\n .withChild(wrapper)\n .build();\n};\n\nexport default (props: CardStackProps) => {\n const sticky = createSticky(props);\n\n const composite = new ElementBuilder()\n .withClassName(STACK_CONTAINER_CLASS)\n .withStyles({\n element: {\n containerType: 'inline-size',\n opacity: '0',\n overflow: 'clip',\n },\n })\n .withChild(sticky)\n .build();\n\n const loadAnimation = async () => {\n const totalCount = props.images.length;\n const config = getConfigurationByCount(totalCount);\n const gridContainer = composite.element.querySelector(\n `.${STACK_GRID_CLASS}`,\n ) as HTMLElement;\n const featuredElement = composite.element.querySelector(\n `.${STACK_ELEMENT_CLASS}-featured`,\n ) as HTMLElement;\n let animationsCleared = false;\n\n if (!validateAnimationElements(gridContainer, config)) {\n return;\n }\n\n const clearAnimations = () => {\n if (animationsCleared) return;\n\n clearElementAnimations(featuredElement, gridContainer);\n animationsCleared = true;\n\n setTimeout(() => {\n processGridAnimation(props.featured, gridContainer!, config!);\n }, 100);\n };\n\n try {\n await waitForMediaLoad(gridContainer!);\n } catch (error) {\n console.warn('Media loading failed, proceeding with animation:', error);\n }\n\n processGridAnimation(props.featured, gridContainer!, config!);\n setElementOpacity(composite.element, '1');\n\n if (!isMobileDevice()) {\n const resizeHandler = createResizeHandler(() => {\n setTimeout(() => {\n processGridAnimation(props.featured, gridContainer!, config!);\n setTimeout(() => {\n setElementOpacity(composite.element, '1');\n animationsCleared = false;\n }, 100);\n }, 200);\n });\n\n window.addEventListener('resize', () => {\n if (isMobileDevice()) {\n return;\n }\n\n if (composite.element.style.opacity === '1') {\n setElementOpacity(composite.element, '0', 'opacity 0.3s ease-in-out');\n }\n\n clearAnimations();\n resizeHandler();\n });\n }\n };\n\n composite.styles += keyFrameGridExpand;\n composite.styles += keyFrameGridItem;\n composite.styles += keyFrameFeaturedSize;\n\n return {\n ...composite,\n events: {\n loadAnimation,\n },\n };\n};\n"],"names":["isPreferredReducedMotion","index","ElementBuilder","withViewTimelineAnimation","assets.image.background","token","assets.video.toggle"],"mappings":"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"}
@@ -1,8 +1,11 @@
1
- import * as token from "@universityofmaryland/web-styles-library/token";
1
+ import { ElementBuilder } from "@universityofmaryland/web-builder-library";
2
+ import * as token from "@universityofmaryland/web-token-library";
2
3
  import { isPreferredReducedMotion } from "@universityofmaryland/web-utilities-library/accessibility";
3
4
  import { withViewTimelineAnimation } from "@universityofmaryland/web-utilities-library/styles";
4
- import { createDiv } from "../../../model/elements/index.mjs";
5
5
  import "@universityofmaryland/web-styles-library/element";
6
+ import "@universityofmaryland/web-styles-library/layout";
7
+ import "@universityofmaryland/web-styles-library/animation";
8
+ import "@universityofmaryland/web-styles-library/typography";
6
9
  import "@universityofmaryland/web-utilities-library/media";
7
10
  import "@universityofmaryland/web-utilities-library/dom";
8
11
  import "@universityofmaryland/web-icons-library/controls";
@@ -13,17 +16,18 @@ import "@universityofmaryland/web-icons-library/arrows";
13
16
  import "../actions/indicator.mjs";
14
17
  import "./chevron-scroll.mjs";
15
18
  import imageContainer from "../../assets/image/background.mjs";
19
+ import "@universityofmaryland/web-styles-library";
16
20
  import "@universityofmaryland/web-utilities-library/performance";
17
21
  import toggle from "../../assets/video/toggle.mjs";
18
22
  import "@universityofmaryland/web-icons-library/location";
19
23
  import "@universityofmaryland/web-icons-library/calendar";
24
+ import "@universityofmaryland/web-utilities-library/theme";
20
25
  import "../../layout/block/stacked.mjs";
21
26
  import "../../layout/overlay/modal.mjs";
22
27
  import "../../layout/person/columns.mjs";
23
28
  import "@universityofmaryland/web-icons-library/social";
24
29
  import "../../text-lockup/date.mjs";
25
30
  import "../../text-lockup/small.mjs";
26
- import "@universityofmaryland/web-styles-library/typography";
27
31
  const configuration = [
28
32
  {
29
33
  count: 4,
@@ -516,15 +520,6 @@ const processGridAnimation = (featuredElement, gridContainer, config) => {
516
520
  });
517
521
  };
518
522
  const createGridElement = (element, index$1, placement) => {
519
- const children = [];
520
- if (element.tagName === "IMG") {
521
- children.push(
522
- imageContainer({
523
- element,
524
- isScaled: true
525
- })
526
- );
527
- }
528
523
  const rowStart = placement.row ? parseInt(placement.row.split(" / ")[0]) : 0;
529
524
  const getStartRange = (row) => {
530
525
  if (row >= 13) return -70;
@@ -542,106 +537,131 @@ const createGridElement = (element, index$1, placement) => {
542
537
  const endRange = getEndRange(rowStart);
543
538
  const animationRangeStart = `${startRange}vh`;
544
539
  const animationRangeEnd = `${endRange}vh`;
545
- return createDiv({
546
- className: `${STACK_ELEMENT_CLASS}-${index$1}`,
547
- children,
548
- elementStyles: {
549
- element: {
550
- overflow: "clip",
551
- height: "100%",
552
- width: "100%",
553
- ...withViewTimelineAnimation({
554
- animation: `${KEY_FRAME_GRID_EXPAND} ease-in-out forwards`,
555
- animationTimeline: "view()",
556
- animationRangeStart,
557
- animationRangeEnd,
558
- animationDuration: "1ms"
559
- })
560
- }
540
+ const builder = new ElementBuilder().withClassName(`${STACK_ELEMENT_CLASS}-${index$1}`).withStyles({
541
+ element: {
542
+ overflow: "clip",
543
+ height: "100%",
544
+ width: "100%",
545
+ ...withViewTimelineAnimation({
546
+ animation: `${KEY_FRAME_GRID_EXPAND} ease-in-out forwards`,
547
+ animationTimeline: "view()",
548
+ animationRangeStart,
549
+ animationRangeEnd,
550
+ animationDuration: "1ms"
551
+ })
561
552
  }
562
553
  });
554
+ if (element.tagName === "IMG") {
555
+ const backgroundImage = imageContainer({
556
+ element,
557
+ isScaled: true
558
+ });
559
+ builder.withChild(backgroundImage);
560
+ }
561
+ return builder.build();
563
562
  };
564
- const createGridItem = (element, placement, index$1) => {
563
+ const createGridItem = (element, placement, index) => {
565
564
  const rowStart = placement.row ? parseInt(placement.row.split(" / ")[0]) : 0;
566
565
  const startRange = rowStart > 8 ? 0 : 80;
567
566
  const endRange = rowStart > 8 ? 200 : 200;
568
567
  const animationRangeStart = `${startRange}vh`;
569
568
  const animationRangeEnd = `${endRange}vh`;
570
- return createDiv({
571
- className: `${STACK_ITEM_CLASS}-${index$1}`,
572
- children: [createGridElement(element, index$1, placement)],
573
- elementStyles: {
574
- element: {
575
- gridColumn: placement.column,
576
- gridRow: placement.row,
577
- zIndex: placement.zIndex || 1,
578
- width: "100%",
579
- height: "100%",
580
- [`@media (${token.media.queries.large.max})`]: {
581
- [`@supports not (animation-timeline: scroll())`]: {
582
- display: "none"
583
- }
584
- },
585
- ...isDisplayWithoutAnimation && {
569
+ const gridElement = createGridElement(element, index, placement);
570
+ return new ElementBuilder().withClassName(`${STACK_ITEM_CLASS}-${index}`).withStyles({
571
+ element: {
572
+ gridColumn: placement.column,
573
+ gridRow: placement.row,
574
+ zIndex: placement.zIndex || 1,
575
+ width: "100%",
576
+ height: "100%",
577
+ [`@media (${token.media.queries.large.max})`]: {
578
+ [`@supports not (animation-timeline: scroll())`]: {
586
579
  display: "none"
587
- },
588
- ...withViewTimelineAnimation({
589
- animation: `${KEY_FRAME_GRID_ITEM} ease-in-out forwards`,
590
- animationTimeline: "view()",
591
- animationRangeStart,
592
- animationRangeEnd
593
- })
594
- }
580
+ }
581
+ },
582
+ ...isDisplayWithoutAnimation && {
583
+ display: "none"
584
+ },
585
+ ...withViewTimelineAnimation({
586
+ animation: `${KEY_FRAME_GRID_ITEM} ease-in-out forwards`,
587
+ animationTimeline: "view()",
588
+ animationRangeStart,
589
+ animationRangeEnd
590
+ })
595
591
  }
596
- });
592
+ }).withChild(gridElement).build();
597
593
  };
598
594
  const createGrid = (props) => {
599
595
  const totalCount = props.images.length;
600
596
  const config = getConfigurationByCount(totalCount);
601
597
  if (!config) {
602
598
  console.warn(`No configuration found for ${totalCount} elements`);
603
- return createDiv({
604
- className: STACK_GRID_ERROR_CLASS
605
- });
599
+ return new ElementBuilder().withClassName(STACK_GRID_ERROR_CLASS).build();
606
600
  }
607
601
  const gridItems = props.images.map((element, index) => {
608
602
  const placement = config.items[index];
609
603
  return createGridItem(element, placement, index);
610
604
  });
611
- return createDiv({
612
- className: STACK_GRID_CLASS,
613
- children: gridItems,
614
- elementStyles: {
615
- element: {
616
- display: "grid",
617
- gridTemplateColumns: "repeat(16, 1fr)",
618
- gridTemplateRows: "repeat(16, 2vh)",
619
- gap: token.spacing.min,
620
- minHeight: "300px",
621
- [`@media (${token.media.queries.large.max})`]: {
622
- "@supports not (animation-timeline: scroll())": {
623
- width: "100%"
624
- }
625
- },
605
+ const gridItemElements = gridItems.map((item) => item);
606
+ return new ElementBuilder().withClassName(STACK_GRID_CLASS).withStyles({
607
+ element: {
608
+ display: "grid",
609
+ gridTemplateColumns: "repeat(16, 1fr)",
610
+ gridTemplateRows: "repeat(16, 2vh)",
611
+ gap: token.spacing.min,
612
+ minHeight: "300px",
613
+ [`@media (${token.media.queries.large.max})`]: {
614
+ "@supports not (animation-timeline: scroll())": {
615
+ width: "100%"
616
+ }
617
+ },
618
+ ...withViewTimelineAnimation({
619
+ gridTemplateColumns: config.layout.gridTemplateColumns,
620
+ gridTemplateRows: config.layout.gridTemplateRows,
621
+ transform: "translate(-50%, -25%)"
622
+ })
623
+ }
624
+ }).withChildren(...gridItemElements).build();
625
+ };
626
+ const createFeatured = (element, isExpand, totalCount) => {
627
+ let video;
628
+ const { width: widthPercentage, height: heightVh } = getResponsiveSizes();
629
+ const builder = new ElementBuilder().withClassName(`${STACK_ELEMENT_CLASS}-featured`).withStyles({
630
+ element: {
631
+ position: "absolute",
632
+ top: "20vh",
633
+ left: "50%",
634
+ transform: "translateX(-50%)",
635
+ zIndex: 999,
636
+ width: `${widthPercentage * 100}%`,
637
+ height: `${heightVh * 100}vh`,
638
+ ...isDisplayWithoutAnimation && {
639
+ top: "0"
640
+ },
641
+ [`@media (${token.media.queries.large.max})`]: {
642
+ "@supports not (animation-timeline: view())": {
643
+ width: "100% !important",
644
+ height: "100% !important",
645
+ top: "0"
646
+ }
647
+ },
648
+ ...isExpand && {
626
649
  ...withViewTimelineAnimation({
627
- gridTemplateColumns: config.layout.gridTemplateColumns,
628
- gridTemplateRows: config.layout.gridTemplateRows,
629
- transform: "translate(-50%, -25%)"
650
+ top: "30vh",
651
+ animation: `${KEY_FRAME_FEATURED_SIZE} ease-in-out forwards`,
652
+ animationTimeline: "view()",
653
+ animationRangeStart: `${100 + (totalCount - 4) * 10}vh`,
654
+ animationRangeEnd: "250vh"
630
655
  })
631
656
  }
632
657
  }
633
658
  });
634
- };
635
- const createFeatured = (element, isExpand, totalCount) => {
636
- const children = [];
637
- let video;
638
659
  if (element.tagName === "IMG") {
639
- children.push(
640
- imageContainer({
641
- element,
642
- isScaled: true
643
- })
644
- );
660
+ const backgroundImage = imageContainer({
661
+ element,
662
+ isScaled: true
663
+ });
664
+ builder.withChild(backgroundImage);
645
665
  }
646
666
  if (element.tagName === "VIDEO") {
647
667
  element.setAttribute("muted", "true");
@@ -651,49 +671,17 @@ const createFeatured = (element, isExpand, totalCount) => {
651
671
  video: element,
652
672
  isScaled: true
653
673
  });
654
- children.push(video);
655
- }
656
- const { width: widthPercentage, height: heightVh } = getResponsiveSizes();
657
- const featuredElement = createDiv({
658
- className: `${STACK_ELEMENT_CLASS}-featured`,
659
- children,
660
- elementStyles: {
661
- element: {
662
- position: "absolute",
663
- top: "20vh",
664
- left: "50%",
665
- transform: "translateX(-50%)",
666
- zIndex: 999,
667
- width: `${widthPercentage * 100}%`,
668
- height: `${heightVh * 100}vh`,
669
- ...isDisplayWithoutAnimation && {
670
- top: "0"
671
- },
672
- [`@media (${token.media.queries.large.max})`]: {
673
- "@supports not (animation-timeline: view())": {
674
- width: "100% !important",
675
- height: "100% !important",
676
- top: "0"
677
- }
678
- },
679
- ...isExpand && {
680
- ...withViewTimelineAnimation({
681
- top: "30vh",
682
- animation: `${KEY_FRAME_FEATURED_SIZE} ease-in-out forwards`,
683
- animationTimeline: "view()",
684
- animationRangeStart: `${100 + (totalCount - 4) * 10}vh`,
685
- animationRangeEnd: "250vh"
686
- })
687
- }
688
- }
674
+ if (video && video.element instanceof HTMLElement) {
675
+ builder.withChild(video);
689
676
  }
690
- });
677
+ }
678
+ const featuredElement = builder.build();
691
679
  if (isExpand && featuredElement.element instanceof HTMLElement) {
692
680
  const observer = new IntersectionObserver(
693
681
  (entries) => {
694
682
  entries.forEach((entry) => {
695
683
  if (entry.isIntersecting) {
696
- if (video) video.events.setPlay();
684
+ if (video?.events?.setPlay) video.events.setPlay();
697
685
  observer.disconnect();
698
686
  }
699
687
  });
@@ -708,53 +696,41 @@ const createFeatured = (element, isExpand, totalCount) => {
708
696
  return featuredElement;
709
697
  };
710
698
  const createSticky = (props) => {
711
- const wrapper = createDiv({
712
- className: `${STACK_CONTAINER_CLASS}-sticky-wrapper`,
713
- children: [
714
- createGrid(props),
715
- createFeatured(
716
- props.featured,
717
- props.isExpandFeature,
718
- props.images.length
719
- )
720
- ],
721
- elementStyles: {
722
- element: {
723
- position: "relative",
724
- ...withViewTimelineAnimation({
725
- position: "sticky",
726
- top: 0
727
- })
728
- }
699
+ const grid = createGrid(props);
700
+ const featured = createFeatured(
701
+ props.featured,
702
+ props.isExpandFeature,
703
+ props.images.length
704
+ );
705
+ const wrapper = new ElementBuilder().withClassName(`${STACK_CONTAINER_CLASS}-sticky-wrapper`).withStyles({
706
+ element: {
707
+ position: "relative",
708
+ ...withViewTimelineAnimation({
709
+ position: "sticky",
710
+ top: 0
711
+ })
729
712
  }
730
- });
731
- return createDiv({
732
- className: `${STACK_CONTAINER_CLASS}-sticky`,
733
- children: [wrapper],
734
- elementStyles: {
735
- element: {
736
- ...withViewTimelineAnimation({
737
- height: "200vh",
738
- ...props.isExpandFeature && {
739
- height: "250vh"
740
- }
741
- })
742
- }
713
+ }).withChildren(grid, featured).build();
714
+ return new ElementBuilder().withClassName(`${STACK_CONTAINER_CLASS}-sticky`).withStyles({
715
+ element: {
716
+ ...withViewTimelineAnimation({
717
+ height: "200vh",
718
+ ...props.isExpandFeature && {
719
+ height: "250vh"
720
+ }
721
+ })
743
722
  }
744
- });
723
+ }).withChild(wrapper).build();
745
724
  };
746
725
  const cardStack = (props) => {
747
- const composite = createDiv({
748
- className: STACK_CONTAINER_CLASS,
749
- children: [createSticky(props)],
750
- elementStyles: {
751
- element: {
752
- containerType: "inline-size",
753
- opacity: "0",
754
- overflow: "clip"
755
- }
726
+ const sticky = createSticky(props);
727
+ const composite = new ElementBuilder().withClassName(STACK_CONTAINER_CLASS).withStyles({
728
+ element: {
729
+ containerType: "inline-size",
730
+ opacity: "0",
731
+ overflow: "clip"
756
732
  }
757
- });
733
+ }).withChild(sticky).build();
758
734
  const loadAnimation = async () => {
759
735
  const totalCount = props.images.length;
760
736
  const config = getConfigurationByCount(totalCount);