@universityofmaryland/web-elements-library 1.4.4 → 1.4.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.
- package/README.md +1 -1
- package/dist/atomic/animations/brand/chevron-scroll.js +3 -3
- package/dist/atomic/animations/brand/chevron-scroll.js.map +1 -1
- package/dist/atomic/animations/brand/chevron-scroll.mjs +3 -3
- package/dist/atomic/animations/brand/chevron-scroll.mjs.map +1 -1
- package/dist/composite/carousel/cards/index.js +1 -1
- package/dist/composite/carousel/cards/index.js.map +1 -1
- package/dist/composite/carousel/cards/index.mjs +1 -1
- package/dist/composite/carousel/cards/index.mjs.map +1 -1
- package/dist/composite/hero/stacked.js +1 -1
- package/dist/composite/hero/stacked.js.map +1 -1
- package/dist/composite/hero/stacked.mjs +1 -1
- package/dist/composite/hero/stacked.mjs.map +1 -1
- package/dist/composite/layout/image/expand.js +10 -10
- package/dist/composite/layout/image/expand.js.map +1 -1
- package/dist/composite/layout/image/expand.mjs +10 -10
- package/dist/composite/layout/image/expand.mjs.map +1 -1
- package/dist/composite/pathway/overlay.js +4 -4
- package/dist/composite/pathway/overlay.js.map +1 -1
- package/dist/composite/pathway/overlay.mjs +4 -4
- package/dist/composite/pathway/overlay.mjs.map +1 -1
- package/dist/utilities/theme/media.d.ts +1 -1
- package/dist/utilities/theme/media.js +1 -1
- package/dist/utilities/theme/media.js.map +1 -1
- package/dist/utilities/theme/media.mjs +1 -1
- package/dist/utilities/theme/media.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# University of Maryland Web Elements Library
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/@universityofmaryland/web-elements-library)
|
|
4
4
|
|
|
5
5
|
Foundational UI building blocks for the UMD Design System, providing atomic elements that combine to create complex, accessible, and brand-compliant University of Maryland digital experiences.
|
|
6
6
|
|
|
@@ -22,7 +22,7 @@ const FirstChevronStyles = `
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
@media (prefers-reduced-motion: no-preference) {
|
|
25
|
-
@supports (animation-timeline:
|
|
25
|
+
@supports (animation-timeline: scroll()) {
|
|
26
26
|
.${ELEMENT_FIRST_CHEVRON} {
|
|
27
27
|
transform: translateX(40%);
|
|
28
28
|
animation: chevron-one forwards;
|
|
@@ -56,7 +56,7 @@ const SecondChevronStyles = `
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
@media (prefers-reduced-motion: no-preference) {
|
|
59
|
-
@supports (animation-timeline:
|
|
59
|
+
@supports (animation-timeline: scroll()) {
|
|
60
60
|
.${ELEMENT_SECOND_CHEVRON} {
|
|
61
61
|
transform: translateX(24%);
|
|
62
62
|
animation: chevron-two forwards;
|
|
@@ -89,7 +89,7 @@ const ThirdChevronStyles = `
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
@media (prefers-reduced-motion: no-preference) {
|
|
92
|
-
@supports (animation-timeline:
|
|
92
|
+
@supports (animation-timeline: scroll()) {
|
|
93
93
|
.${ELEMENT_THIRD_CHEVRON} {
|
|
94
94
|
transform: translateX(60%);
|
|
95
95
|
animation: chevron-three forwards;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chevron-scroll.js","sources":["../../../../source/atomic/animations/brand/chevron-scroll.ts"],"sourcesContent":["import { token } from '@universityofmaryland/web-styles-library';\n\nconst ICON_CHEVRON_BIG = `<svg width=\"252\" height=\"306\" aria-hidden=\"true\" viewBox=\"0 0 252 306\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M126 0H0L126 152.706L0 305.411H126L252 152.706L126 0Z\" /></svg>`;\nconst ICON_CHEVRON_SMALL = `<svg width=\"144\" height=\"202\" aria-hidden=\"true\" viewBox=\"0 0 144 202\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M60.3972 0H0L83.6028 100.765L0 201.529H60.3972L144 100.765L60.3972 0Z\" /></svg>`;\n\nconst ELEMENT_ANIMATION_BRAND_LOGO = 'brand-logo-container';\nconst ELEMENT_FIRST_CHEVRON = 'brand-logo-first-chevron';\nconst ELEMENT_SECOND_CHEVRON = 'brand-logo-second-chevron';\nconst ELEMENT_THIRD_CHEVRON = 'brand-logo-third-chevron';\n\nconst FirstChevronStyles = `\n @keyframes chevron-one {\n from { transform: translateX(-80%); }\n to { transform: translateX(40%); }\n }\n\n .${ELEMENT_FIRST_CHEVRON} {\n top: 0;\n transform: translateX(-80%);\n }\n\n .${ELEMENT_FIRST_CHEVRON} svg {\n fill: ${token.color.gold};\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline:
|
|
1
|
+
{"version":3,"file":"chevron-scroll.js","sources":["../../../../source/atomic/animations/brand/chevron-scroll.ts"],"sourcesContent":["import { token } from '@universityofmaryland/web-styles-library';\n\nconst ICON_CHEVRON_BIG = `<svg width=\"252\" height=\"306\" aria-hidden=\"true\" viewBox=\"0 0 252 306\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M126 0H0L126 152.706L0 305.411H126L252 152.706L126 0Z\" /></svg>`;\nconst ICON_CHEVRON_SMALL = `<svg width=\"144\" height=\"202\" aria-hidden=\"true\" viewBox=\"0 0 144 202\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M60.3972 0H0L83.6028 100.765L0 201.529H60.3972L144 100.765L60.3972 0Z\" /></svg>`;\n\nconst ELEMENT_ANIMATION_BRAND_LOGO = 'brand-logo-container';\nconst ELEMENT_FIRST_CHEVRON = 'brand-logo-first-chevron';\nconst ELEMENT_SECOND_CHEVRON = 'brand-logo-second-chevron';\nconst ELEMENT_THIRD_CHEVRON = 'brand-logo-third-chevron';\n\nconst FirstChevronStyles = `\n @keyframes chevron-one {\n from { transform: translateX(-80%); }\n to { transform: translateX(40%); }\n }\n\n .${ELEMENT_FIRST_CHEVRON} {\n top: 0;\n transform: translateX(-80%);\n }\n\n .${ELEMENT_FIRST_CHEVRON} svg {\n fill: ${token.color.gold};\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_FIRST_CHEVRON} {\n transform: translateX(40%);\n animation: chevron-one forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: contain;\n }\n }\n }\n`;\n\nconst SecondChevronStyles = `\n @keyframes chevron-two {\n from { transform: translateX(-40%); }\n to { transform: translateX(24%); }\n }\n\n .${ELEMENT_SECOND_CHEVRON} {\n top: 10%;\n z-index: 99;\n transform: translateX(-40%);\n }\n\n @media (${token.media.queries.highDef.min}) {\n .${ELEMENT_SECOND_CHEVRON} {\n top: 95px;\n }\n }\n\n .${ELEMENT_SECOND_CHEVRON} svg {\n fill: ${token.color.red};\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_SECOND_CHEVRON} {\n transform: translateX(24%);\n animation: chevron-two forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: contain;\n }\n }\n }\n`;\n\nconst ThirdChevronStyles = `\n @keyframes chevron-three {\n from { transform: translateX(-30%); }\n to { transform: translateX(60%); }\n }\n\n .${ELEMENT_THIRD_CHEVRON} {\n top: 25%;\n transform: translateX(-30%);\n }\n\n @media (${token.media.queries.highDef.min}) {\n .${ELEMENT_THIRD_CHEVRON} {\n top: 195px;\n }\n }\n\n .${ELEMENT_THIRD_CHEVRON} svg {\n fill: ${token.color.black};\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_THIRD_CHEVRON} {\n transform: translateX(60%);\n animation: chevron-three forwards;\n animation-timeline: view();\n animation-range-start: 0;\n animation-range-end: 100vh;\n }\n }\n }\n`;\n\nconst STYLES_ANIMATION_BRAND_LOGO = `\n .${ELEMENT_ANIMATION_BRAND_LOGO} {\n position: relative;\n height: 50vw;\n width: 100vw;\n }\n\n .${ELEMENT_ANIMATION_BRAND_LOGO} > * {\n position: absolute;\n height: 100%;\n right: 0;\n transform: none;\n }\n\n .${ELEMENT_SECOND_CHEVRON} svg,\n .${ELEMENT_THIRD_CHEVRON} svg {\n height: 10vw;\n width: 8.2vw;\n }\n\n @media (${token.media.queries.highDef.min}) {\n .${ELEMENT_SECOND_CHEVRON} svg,\n .${ELEMENT_THIRD_CHEVRON} svg {\n height: 306px;\n width: 252px;\n }\n }\n\n .${FirstChevronStyles} svg {\n height: 7vw;\n width: 5vw;\n }\n\n @media (${token.media.queries.highDef.min}) {\n .${FirstChevronStyles} svg {\n height: 202px;\n width: 144px;\n }\n }\n\n ${FirstChevronStyles} \n ${SecondChevronStyles} \n ${ThirdChevronStyles} \n`;\n\nexport default () =>\n (() => {\n const container = document.createElement('div');\n const first = document.createElement('div');\n const second = document.createElement('div');\n const third = document.createElement('div');\n\n first.classList.add(ELEMENT_FIRST_CHEVRON);\n first.innerHTML = ICON_CHEVRON_SMALL;\n\n second.classList.add(ELEMENT_SECOND_CHEVRON);\n second.innerHTML = ICON_CHEVRON_BIG;\n\n third.classList.add(ELEMENT_THIRD_CHEVRON);\n third.innerHTML = ICON_CHEVRON_BIG;\n\n container.classList.add(ELEMENT_ANIMATION_BRAND_LOGO);\n container.appendChild(first);\n container.appendChild(second);\n container.appendChild(third);\n\n return {\n element: container,\n styles: STYLES_ANIMATION_BRAND_LOGO,\n };\n })();\n"],"names":["token"],"mappings":";;AAEA,MAAM,mBAAmB;AACzB,MAAM,qBAAqB;AAE3B,MAAM,+BAA+B;AACrC,MAAM,wBAAwB;AAC9B,MAAM,yBAAyB;AAC/B,MAAM,wBAAwB;AAE9B,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMtB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,KAKrB,qBAAqB;AAAA,YACdA,OAAAA,MAAM,MAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,SAKnB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW9B,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMvB,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMfA,OAAAA,MAAM,MAAM,QAAQ,QAAQ,GAAG;AAAA,OACpC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,KAKxB,sBAAsB;AAAA,YACfA,OAAAA,MAAM,MAAM,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,SAKlB,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW/B,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMtB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,YAKdA,OAAAA,MAAM,MAAM,QAAQ,QAAQ,GAAG;AAAA,OACpC,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,KAKvB,qBAAqB;AAAA,YACdA,OAAAA,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,SAKpB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW9B,MAAM,8BAA8B;AAAA,KAC/B,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAM5B,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAO5B,sBAAsB;AAAA,KACtB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,YAKdA,OAAAA,MAAM,MAAM,QAAQ,QAAQ,GAAG;AAAA,OACpC,sBAAsB;AAAA,OACtB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMvB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,YAKXA,OAAAA,MAAM,MAAM,QAAQ,QAAQ,GAAG;AAAA,OACpC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMrB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA;AAGtB,MAAA,gBAAe,OACZ,MAAM;AACL,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,QAAM,QAAQ,SAAS,cAAc,KAAK;AAE1C,QAAM,UAAU,IAAI,qBAAqB;AACzC,QAAM,YAAY;AAElB,SAAO,UAAU,IAAI,sBAAsB;AAC3C,SAAO,YAAY;AAEnB,QAAM,UAAU,IAAI,qBAAqB;AACzC,QAAM,YAAY;AAElB,YAAU,UAAU,IAAI,4BAA4B;AACpD,YAAU,YAAY,KAAK;AAC3B,YAAU,YAAY,MAAM;AAC5B,YAAU,YAAY,KAAK;AAE3B,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAEZ,GAAA;;"}
|
|
@@ -21,7 +21,7 @@ const FirstChevronStyles = `
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
@media (prefers-reduced-motion: no-preference) {
|
|
24
|
-
@supports (animation-timeline:
|
|
24
|
+
@supports (animation-timeline: scroll()) {
|
|
25
25
|
.${ELEMENT_FIRST_CHEVRON} {
|
|
26
26
|
transform: translateX(40%);
|
|
27
27
|
animation: chevron-one forwards;
|
|
@@ -55,7 +55,7 @@ const SecondChevronStyles = `
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
@media (prefers-reduced-motion: no-preference) {
|
|
58
|
-
@supports (animation-timeline:
|
|
58
|
+
@supports (animation-timeline: scroll()) {
|
|
59
59
|
.${ELEMENT_SECOND_CHEVRON} {
|
|
60
60
|
transform: translateX(24%);
|
|
61
61
|
animation: chevron-two forwards;
|
|
@@ -88,7 +88,7 @@ const ThirdChevronStyles = `
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
@media (prefers-reduced-motion: no-preference) {
|
|
91
|
-
@supports (animation-timeline:
|
|
91
|
+
@supports (animation-timeline: scroll()) {
|
|
92
92
|
.${ELEMENT_THIRD_CHEVRON} {
|
|
93
93
|
transform: translateX(60%);
|
|
94
94
|
animation: chevron-three forwards;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chevron-scroll.mjs","sources":["../../../../source/atomic/animations/brand/chevron-scroll.ts"],"sourcesContent":["import { token } from '@universityofmaryland/web-styles-library';\n\nconst ICON_CHEVRON_BIG = `<svg width=\"252\" height=\"306\" aria-hidden=\"true\" viewBox=\"0 0 252 306\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M126 0H0L126 152.706L0 305.411H126L252 152.706L126 0Z\" /></svg>`;\nconst ICON_CHEVRON_SMALL = `<svg width=\"144\" height=\"202\" aria-hidden=\"true\" viewBox=\"0 0 144 202\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M60.3972 0H0L83.6028 100.765L0 201.529H60.3972L144 100.765L60.3972 0Z\" /></svg>`;\n\nconst ELEMENT_ANIMATION_BRAND_LOGO = 'brand-logo-container';\nconst ELEMENT_FIRST_CHEVRON = 'brand-logo-first-chevron';\nconst ELEMENT_SECOND_CHEVRON = 'brand-logo-second-chevron';\nconst ELEMENT_THIRD_CHEVRON = 'brand-logo-third-chevron';\n\nconst FirstChevronStyles = `\n @keyframes chevron-one {\n from { transform: translateX(-80%); }\n to { transform: translateX(40%); }\n }\n\n .${ELEMENT_FIRST_CHEVRON} {\n top: 0;\n transform: translateX(-80%);\n }\n\n .${ELEMENT_FIRST_CHEVRON} svg {\n fill: ${token.color.gold};\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline:
|
|
1
|
+
{"version":3,"file":"chevron-scroll.mjs","sources":["../../../../source/atomic/animations/brand/chevron-scroll.ts"],"sourcesContent":["import { token } from '@universityofmaryland/web-styles-library';\n\nconst ICON_CHEVRON_BIG = `<svg width=\"252\" height=\"306\" aria-hidden=\"true\" viewBox=\"0 0 252 306\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M126 0H0L126 152.706L0 305.411H126L252 152.706L126 0Z\" /></svg>`;\nconst ICON_CHEVRON_SMALL = `<svg width=\"144\" height=\"202\" aria-hidden=\"true\" viewBox=\"0 0 144 202\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M60.3972 0H0L83.6028 100.765L0 201.529H60.3972L144 100.765L60.3972 0Z\" /></svg>`;\n\nconst ELEMENT_ANIMATION_BRAND_LOGO = 'brand-logo-container';\nconst ELEMENT_FIRST_CHEVRON = 'brand-logo-first-chevron';\nconst ELEMENT_SECOND_CHEVRON = 'brand-logo-second-chevron';\nconst ELEMENT_THIRD_CHEVRON = 'brand-logo-third-chevron';\n\nconst FirstChevronStyles = `\n @keyframes chevron-one {\n from { transform: translateX(-80%); }\n to { transform: translateX(40%); }\n }\n\n .${ELEMENT_FIRST_CHEVRON} {\n top: 0;\n transform: translateX(-80%);\n }\n\n .${ELEMENT_FIRST_CHEVRON} svg {\n fill: ${token.color.gold};\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_FIRST_CHEVRON} {\n transform: translateX(40%);\n animation: chevron-one forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: contain;\n }\n }\n }\n`;\n\nconst SecondChevronStyles = `\n @keyframes chevron-two {\n from { transform: translateX(-40%); }\n to { transform: translateX(24%); }\n }\n\n .${ELEMENT_SECOND_CHEVRON} {\n top: 10%;\n z-index: 99;\n transform: translateX(-40%);\n }\n\n @media (${token.media.queries.highDef.min}) {\n .${ELEMENT_SECOND_CHEVRON} {\n top: 95px;\n }\n }\n\n .${ELEMENT_SECOND_CHEVRON} svg {\n fill: ${token.color.red};\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_SECOND_CHEVRON} {\n transform: translateX(24%);\n animation: chevron-two forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: contain;\n }\n }\n }\n`;\n\nconst ThirdChevronStyles = `\n @keyframes chevron-three {\n from { transform: translateX(-30%); }\n to { transform: translateX(60%); }\n }\n\n .${ELEMENT_THIRD_CHEVRON} {\n top: 25%;\n transform: translateX(-30%);\n }\n\n @media (${token.media.queries.highDef.min}) {\n .${ELEMENT_THIRD_CHEVRON} {\n top: 195px;\n }\n }\n\n .${ELEMENT_THIRD_CHEVRON} svg {\n fill: ${token.color.black};\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_THIRD_CHEVRON} {\n transform: translateX(60%);\n animation: chevron-three forwards;\n animation-timeline: view();\n animation-range-start: 0;\n animation-range-end: 100vh;\n }\n }\n }\n`;\n\nconst STYLES_ANIMATION_BRAND_LOGO = `\n .${ELEMENT_ANIMATION_BRAND_LOGO} {\n position: relative;\n height: 50vw;\n width: 100vw;\n }\n\n .${ELEMENT_ANIMATION_BRAND_LOGO} > * {\n position: absolute;\n height: 100%;\n right: 0;\n transform: none;\n }\n\n .${ELEMENT_SECOND_CHEVRON} svg,\n .${ELEMENT_THIRD_CHEVRON} svg {\n height: 10vw;\n width: 8.2vw;\n }\n\n @media (${token.media.queries.highDef.min}) {\n .${ELEMENT_SECOND_CHEVRON} svg,\n .${ELEMENT_THIRD_CHEVRON} svg {\n height: 306px;\n width: 252px;\n }\n }\n\n .${FirstChevronStyles} svg {\n height: 7vw;\n width: 5vw;\n }\n\n @media (${token.media.queries.highDef.min}) {\n .${FirstChevronStyles} svg {\n height: 202px;\n width: 144px;\n }\n }\n\n ${FirstChevronStyles} \n ${SecondChevronStyles} \n ${ThirdChevronStyles} \n`;\n\nexport default () =>\n (() => {\n const container = document.createElement('div');\n const first = document.createElement('div');\n const second = document.createElement('div');\n const third = document.createElement('div');\n\n first.classList.add(ELEMENT_FIRST_CHEVRON);\n first.innerHTML = ICON_CHEVRON_SMALL;\n\n second.classList.add(ELEMENT_SECOND_CHEVRON);\n second.innerHTML = ICON_CHEVRON_BIG;\n\n third.classList.add(ELEMENT_THIRD_CHEVRON);\n third.innerHTML = ICON_CHEVRON_BIG;\n\n container.classList.add(ELEMENT_ANIMATION_BRAND_LOGO);\n container.appendChild(first);\n container.appendChild(second);\n container.appendChild(third);\n\n return {\n element: container,\n styles: STYLES_ANIMATION_BRAND_LOGO,\n };\n })();\n"],"names":[],"mappings":";AAEA,MAAM,mBAAmB;AACzB,MAAM,qBAAqB;AAE3B,MAAM,+BAA+B;AACrC,MAAM,wBAAwB;AAC9B,MAAM,yBAAyB;AAC/B,MAAM,wBAAwB;AAE9B,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMtB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,KAKrB,qBAAqB;AAAA,YACd,MAAM,MAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,SAKnB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW9B,MAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMvB,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMf,MAAM,MAAM,QAAQ,QAAQ,GAAG;AAAA,OACpC,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,KAKxB,sBAAsB;AAAA,YACf,MAAM,MAAM,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,SAKlB,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW/B,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMtB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,YAKd,MAAM,MAAM,QAAQ,QAAQ,GAAG;AAAA,OACpC,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,KAKvB,qBAAqB;AAAA,YACd,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,SAKpB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW9B,MAAM,8BAA8B;AAAA,KAC/B,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAM5B,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAO5B,sBAAsB;AAAA,KACtB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,YAKd,MAAM,MAAM,QAAQ,QAAQ,GAAG;AAAA,OACpC,sBAAsB;AAAA,OACtB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMvB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,YAKX,MAAM,MAAM,QAAQ,QAAQ,GAAG;AAAA,OACpC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMrB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA;AAGtB,MAAA,gBAAe,OACZ,MAAM;AACL,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,SAAS,SAAS,cAAc,KAAK;AAC3C,QAAM,QAAQ,SAAS,cAAc,KAAK;AAE1C,QAAM,UAAU,IAAI,qBAAqB;AACzC,QAAM,YAAY;AAElB,SAAO,UAAU,IAAI,sBAAsB;AAC3C,SAAO,YAAY;AAEnB,QAAM,UAAU,IAAI,qBAAqB;AACzC,QAAM,YAAY;AAElB,YAAU,UAAU,IAAI,4BAA4B;AACpD,YAAU,YAAY,KAAK;AAC3B,YAAU,YAAY,MAAM;AAC5B,YAAU,YAAY,KAAK;AAE3B,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAEZ,GAAA;"}
|
|
@@ -207,7 +207,7 @@ const ContainerStyles = `
|
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
@media (prefers-reduced-motion: no-preference) {
|
|
210
|
-
@supports (animation-timeline:
|
|
210
|
+
@supports (animation-timeline: scroll()) {
|
|
211
211
|
.${CAROUSEL_CONTAINER} > svg {
|
|
212
212
|
animation: card-carousel-slide-in ease-in-out forwards;
|
|
213
213
|
animation-timeline: view();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../source/composite/carousel/cards/index.ts"],"sourcesContent":["import {\n element,\n layout,\n token,\n typography,\n} from '@universityofmaryland/web-styles-library';\nimport * as Utility from 'utilities';\nimport * as carouselElements from '../elements';\n\ntype TypeCarouselCardsRequirements = {\n headline?: HTMLElement | null;\n text?: HTMLElement | null;\n actions?: HTMLElement | null;\n slide: HTMLElement;\n shadowRef?: HTMLElement;\n cards: HTMLElement[];\n};\n\nconst MEDIUM = 768;\nconst LARGE = 1024;\n\nconst BACKGROUND_TEXTURE = `<svg aria-hidden=\"true\" width=\"1599\" height=\"618\" viewBox=\"0 0 1599 618\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n\"><mask id=\"mask0_2135_11278\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"1600\" height=\"618\"><rect width=\"1600\" height=\"618\" fill=\"#242424\"></rect></mask><g mask=\"url(#mask0_2135_11278)\"><g opacity=\"0.5\"><mask id=\"mask1_2135_11278\" style=\"mask-type:luminance\" maskUnits=\"userSpaceOnUse\" x=\"-17\" y=\"-56\" width=\"1823\" height=\"408\"><path d=\"M-17 351.98V-56H1806V351.98\" fill=\"white\"></path></mask><g mask=\"url(#mask1_2135_11278)\"><path d=\"M807.562 -68.3515L-433.759 1173.58L-217.501 1389.94L1023.82 148.012L807.562 -68.3515Z\" fill=\"#262626\"></path><path d=\"M360.649 -82.8017L-880.672 1159.13L-649.997 1389.92L591.324 147.986L360.649 -82.8017Z\" fill=\"black\"></path><path d=\"M1154.8 1173.26L-533.139 -515.499L-677.311 -371.256L1010.63 1317.51L1154.8 1173.26Z\" fill=\"#262626\"></path><path d=\"M2162.77 710.525L1312.18 -140.478L1168.01 3.76505L2018.6 854.768L2162.77 710.525Z\" fill=\"black\"></path><path d=\"M1312.16 -140.485L202.096 -1251.09L57.9241 -1106.85L1167.99 3.75794L1312.16 -140.485Z\" fill=\"#EDEDED\"></path><path d=\"M2133.89 -1251.07L1023.83 -140.458L1168 3.78455L2278.07 -1106.83L2133.89 -1251.07Z\" fill=\"#383838\"></path><path d=\"M591.343 147.968L-634.061 -1078.04L-864.736 -847.248L360.668 378.756L591.343 147.968Z\" fill=\"black\"></path><path d=\"M1023.82 147.97L-217.503 -1093.96L-433.761 -877.595L807.559 364.333L1023.82 147.97Z\" fill=\"#383838\"></path></g><mask id=\"mask2_2135_11278\" style=\"mask-type:luminance\" maskUnits=\"userSpaceOnUse\" x=\"-17\" y=\"351\" width=\"1823\" height=\"780\"><path d=\"M-17 351.938V753.629L837.67 753.672L845.662 1130.18L1806 1130.26V352.094\" fill=\"white\"></path></mask><g mask=\"url(#mask2_2135_11278)\"><path d=\"M1023.81 555.952L-217.506 -685.977L-433.764 -469.613L807.557 772.316L1023.81 555.952Z\" fill=\"#262626\"></path><path d=\"M591.347 555.967L-649.973 -685.962L-880.648 -455.174L360.672 786.755L591.347 555.967Z\" fill=\"black\"></path><path d=\"M1010.63 -613.543L-677.305 1075.22L-533.133 1219.46L1154.8 -469.3L1010.63 -613.543Z\" fill=\"#262626\"></path><path d=\"M1760.63 110.929L910.039 961.932L1054.21 1106.17L1904.8 255.172L1760.63 110.929Z\" fill=\"black\"></path><path d=\"M360.674 325.168L-864.73 1551.17L-634.055 1781.96L591.349 555.956L360.674 325.168Z\" fill=\"black\"></path><path d=\"M807.565 339.631L-433.756 1581.56L-217.498 1797.92L1023.82 555.995L807.565 339.631Z\" fill=\"#383838\"></path></g></g></g></svg>`;\n\nconst ELEMENT_NAME = 'umd-element-carousel-cards';\n\nconst ELEMENT_DECLARATION = 'carousel-cards-declaration';\nconst CAROUSEL_CONTAINER = 'element-carousel-container';\nconst CAROUSEL_LOCK = 'element-carousel-lock';\n\nconst INTRO_CONTAINER = 'carousel-cards-intro-container';\nconst INTRO_CONTAINER_LOCK = 'carousel-cards-intro-container-lock';\nconst INTRO_CONTAINER_HEADLINE = 'carousel-cards-intro-container-headline';\nconst INTRO_CONTAINER_TEXT = 'carousel-cards-intro-container-text';\nconst INTRO_CONTAINER_CTA = 'carousel-cards-intro-container-cta';\n\nconst OVERWRITE_ANIMATION_CAROUSEL_DECLARATION = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.declaration}`;\nconst OVERWRITE_ANIMATION_CAROUSEL_CONTAINER = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.container}`;\nconst OVERWRITE_ANIMATION_CAROUSEL_BUTTON = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.button}`;\n\n// prettier-ignore\nconst OverwriteCarouselStyles = `\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_CONTAINER} {\n padding-bottom: 60px;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_DECLARATION} {\n width: 60%;\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON} {\n bottom: 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON} {\n top: 50%;\n transform: translateY(-50%);\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:first-of-type {\n left: 49px;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:first-of-type {\n right: -52px;\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:last-of-type {\n left: 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:last-of-type {\n left: -52px;\n }\n }\n`;\n\n// prettier-ignore\nconst HeadlineStyles = `\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_HEADLINE}`]: typography.sans.largest,\n },\n })}\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_HEADLINE} *`]: typography.sans.largest,\n },\n })}\n\n .${INTRO_CONTAINER_HEADLINE},\n .${INTRO_CONTAINER_HEADLINE} * {\n color: ${token.color.white};\n font-weight: 800;\n text-transform: uppercase;\n }\n`;\n\n// prettier-ignore\nconst TextStyles = `\n * + .${INTRO_CONTAINER_TEXT} {\n margin-top: ${token.spacing.md};\n }\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_TEXT}`]: element.text.rich.advancedDark,\n },\n })}\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_TEXT}`]: typography.sans.medium,\n },\n })}\n`;\n\n// prettier-ignore\nconst ActionStyles = `\n * + .${INTRO_CONTAINER_CTA} {\n margin-top: ${token.spacing.md};\n }\n\n .${INTRO_CONTAINER_CTA} a {\n color: ${token.color.white};\n }\n`;\n\n// prettier-ignore\nconst IntroContainer = `\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n .${INTRO_CONTAINER} {\n margin-bottom: ${token.spacing.md};\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n .${INTRO_CONTAINER} {\n width: calc(40% - ${token.spacing['2xl']});\n padding-right: ${token.spacing['2xl']};\n }\n }\n\n @media (min-width: ${LARGE}px) {\n .${INTRO_CONTAINER} .${INTRO_CONTAINER_LOCK} {\n max-width: inherit;\n padding: 0;\n }\n }\n`;\n\n// prettier-ignore\nconst ContainerLock = `\n .${CAROUSEL_LOCK} {\n position: relative;\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: layout.space.horizontal.larger,\n })}\n }\n\n @media (max-width: ${MEDIUM - 1}px) {\n .${CAROUSEL_LOCK} {\n padding-right: 0;\n }\n }\n\n @media (min-width: ${LARGE}px) {\n .${CAROUSEL_LOCK} {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n }\n\n @media umd-carousel-card (max-width: ${LARGE - 1}px) {\n .${CAROUSEL_LOCK} {\n max-width: inherit;\n padding: 0;\n }\n }\n`;\n\n// prettier-ignore\nconst ContainerStyles = `\n @keyframes card-carousel-slide-in {\n from { transform: translateX(-25vw); }\n to { transform: translateX(0);}\n }\n\n .${CAROUSEL_CONTAINER} {\n background-color: ${token.color.black};\n padding: ${token.spacing['3xl']} 0;\n position: relative;\n overflow: clip;\n }\n\n @container ${ELEMENT_NAME} (max-width: 300px) {\n .${CAROUSEL_CONTAINER} {\n display: none;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${CAROUSEL_CONTAINER} {\n padding: ${token.spacing['4xl']} 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n .${CAROUSEL_CONTAINER} {\n padding: ${token.spacing['max']} 0;\n }\n }\n\n .${CAROUSEL_CONTAINER} > svg {\n width: auto;\n height: 100%;\n object-fit: cover;\n position: absolute;\n top: 0;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${CAROUSEL_CONTAINER} > svg {\n animation: card-carousel-slide-in ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: 0;\n animation-range-end: 100vh;\n transform: translateX(-15vw);\n }\n }\n }\n`\n\n// prettier-ignore\nconst STYLES_CAROUSEL_CARDS_ELEMENT = `\n .${ELEMENT_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n }\n\n .${ELEMENT_DECLARATION} * {\n color: ${token.color.white};\n }\n \n ${carouselElements.blocks.Styles}\n ${ContainerStyles}\n ${ContainerLock}\n ${HeadlineStyles}\n ${TextStyles}\n ${ActionStyles}\n ${IntroContainer}\n ${OverwriteCarouselStyles}\n`;\n\nconst CreateIntro = (props: TypeCarouselCardsRequirements) => {\n const { headline, text, actions } = props;\n const introContainer = document.createElement('div');\n const introWrapper = document.createElement('div');\n\n introWrapper.classList.add(INTRO_CONTAINER_LOCK);\n\n if (headline) {\n headline.classList.add(INTRO_CONTAINER_HEADLINE);\n introWrapper.appendChild(headline);\n }\n\n if (text) {\n text.classList.add(INTRO_CONTAINER_TEXT);\n introWrapper.appendChild(text);\n }\n\n if (actions) {\n actions.classList.add(INTRO_CONTAINER_CTA);\n introWrapper.appendChild(actions);\n }\n\n introContainer.classList.add(INTRO_CONTAINER);\n introContainer.appendChild(introWrapper);\n\n return introContainer;\n};\n\nexport default (props: TypeCarouselCardsRequirements) =>\n (() => {\n const { slide, shadowRef } = props;\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n\n if (slide) slide.style.minHeight = '450px';\n if (shadowRef) shadowRef.style.minHeight = '450px';\n\n const carouselContainer = carouselElements.blocks.CreateElement({\n ...props,\n blocks: props.cards,\n overwriteDisplayLogic: {\n mobileBreakpoint: 650,\n tabletBreakpoint: 1024,\n desktopBreakpoint: 1024,\n mobileCount: 1,\n tabletCount: 2,\n desktopCount: 2,\n maxCount: 2,\n showMobileHint: true,\n showHint: false,\n },\n });\n const introContainer = CreateIntro(props);\n\n wrapper.classList.add(CAROUSEL_LOCK);\n wrapper.appendChild(introContainer);\n wrapper.appendChild(carouselContainer.element);\n\n container.classList.add(CAROUSEL_CONTAINER);\n container.innerHTML = BACKGROUND_TEXTURE;\n container.appendChild(wrapper);\n\n declaration.classList.add(ELEMENT_DECLARATION);\n declaration.appendChild(container);\n\n return {\n element: declaration,\n styles: STYLES_CAROUSEL_CARDS_ELEMENT,\n events: {\n resize: carouselContainer.events.resize,\n load: carouselContainer.events.load,\n },\n };\n })();\n"],"names":["carouselElements.blocks","Utility.theme.convertJSSObjectToStyles","typography","token","element","layout"],"mappings":";;;;;;;AAkBA,MAAM,SAAS;AACf,MAAM,QAAQ;AAEd,MAAM,qBAAqB;AAAA;AAG3B,MAAM,eAAe;AAErB,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,gBAAgB;AAEtB,MAAM,kBAAkB;AACxB,MAAM,uBAAuB;AAC7B,MAAM,2BAA2B;AACjC,MAAM,uBAAuB;AAC7B,MAAM,sBAAsB;AAE5B,MAAM,2CAA2C,IAAI,kBAAkB,KAAKA,OAAwB,SAAS,WAAW;AACxH,MAAM,yCAAyC,IAAI,kBAAkB,KAAKA,OAAwB,SAAS,SAAS;AACpH,MAAM,sCAAsC,IAAI,kBAAkB,KAAKA,OAAwB,SAAS,MAAM;AAG9G,MAAM,0BAA0B;AAAA,eACjB,YAAY,gBAAgB,QAAQ,CAAC;AAAA,MAC9C,sCAAsC;AAAA;AAAA;AAAA;AAAA;AAAA,eAK7B,YAAY,gBAAgB,KAAK;AAAA,MAC1C,wCAAwC;AAAA;AAAA;AAAA;AAAA;AAAA,eAK/B,YAAY,gBAAgB,QAAQ,CAAC;AAAA,MAC9C,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA,eAK1B,YAAY,gBAAgB,KAAK;AAAA,MAC1C,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAM1B,YAAY,gBAAgB,QAAQ,CAAC;AAAA,MAC9C,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA,eAK1B,YAAY,gBAAgB,KAAK;AAAA,MAC1C,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA,eAK1B,YAAY,gBAAgB,QAAQ,CAAC;AAAA,MAC9C,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA,eAK1B,YAAY,gBAAgB,KAAK;AAAA,MAC1C,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAOzC,MAAM,iBAAiB;AAAA,IACnBC,iCAAuC;AAAA,EACvC,UAAU;AAAA,IACR,CAAC,IAAI,wBAAwB,EAAE,GAAGC,OAAAA,WAAW,KAAK;AAAA,EAAA;AAEtD,CAAC,CAAC;AAAA;AAAA,IAEAD,iCAAuC;AAAA,EACvC,UAAU;AAAA,IACR,CAAC,IAAI,wBAAwB,IAAI,GAAGC,OAAAA,WAAW,KAAK;AAAA,EAAA;AAExD,CAAC,CAAC;AAAA;AAAA,KAEC,wBAAwB;AAAA,KACxB,wBAAwB;AAAA,aAChBC,OAAAA,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAO9B,MAAM,aAAa;AAAA,SACV,oBAAoB;AAAA,kBACXA,OAAAA,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,IAG9BF,iCAAuC;AAAA,EACvC,UAAU;AAAA,IACR,CAAC,IAAI,oBAAoB,EAAE,GAAGG,OAAAA,QAAQ,KAAK,KAAK;AAAA,EAAA;AAEpD,CAAC,CAAC;AAAA;AAAA,IAEAH,iCAAuC;AAAA,EACvC,UAAU;AAAA,IACR,CAAC,IAAI,oBAAoB,EAAE,GAAGC,OAAAA,WAAW,KAAK;AAAA,EAAA;AAElD,CAAC,CAAC;AAAA;AAIJ,MAAM,eAAe;AAAA,SACZ,mBAAmB;AAAA,kBACVC,OAAAA,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,KAG7B,mBAAmB;AAAA,aACXA,OAAAA,MAAM,MAAM,KAAK;AAAA;AAAA;AAK9B,MAAM,iBAAiB;AAAA,eACR,YAAY,gBAAgB,QAAQ,CAAC;AAAA,OAC7C,eAAe;AAAA,uBACCA,OAAAA,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA;AAAA,eAIxB,YAAY,gBAAgB,KAAK;AAAA,OACzC,eAAe;AAAA,0BACIA,OAAAA,MAAM,QAAQ,KAAK,CAAC;AAAA,uBACvBA,OAAAA,MAAM,QAAQ,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,uBAIpB,KAAK;AAAA,OACrB,eAAe,KAAK,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ/C,MAAM,gBAAgB;AAAA,KACjB,aAAa;AAAA;AAAA,MAEZF,iCAAuC;AAAA,EACvC,UAAUI,OAAAA,OAAO,MAAM,WAAW;AACpC,CAAC,CAAC;AAAA;AAAA;AAAA,uBAGiB,SAAS,CAAC;AAAA,OAC1B,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,uBAKG,KAAK;AAAA,OACrB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAOqB,QAAQ,CAAC;AAAA,OAC3C,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAQpB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMnB,kBAAkB;AAAA,wBACCF,OAAAA,MAAM,MAAM,KAAK;AAAA,eAC1BA,OAAAA,MAAM,QAAQ,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,eAKpB,YAAY;AAAA,OACpB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,eAKV,YAAY,gBAAgB,MAAM;AAAA,OAC1C,kBAAkB;AAAA,iBACRA,OAAAA,MAAM,QAAQ,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,eAItB,YAAY,gBAAgB,KAAK;AAAA,OACzC,kBAAkB;AAAA,iBACRA,OAAAA,MAAM,QAAQ,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,KAIhC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAUd,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAY3B,MAAM,gCAAgC;AAAA,KACjC,mBAAmB;AAAA,iBACP,YAAY;AAAA;AAAA;AAAA,KAGxB,mBAAmB;AAAA,aACXA,OAAAA,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA,IAG1BH,OAAwB,MAAM;AAAA,IAC9B,eAAe;AAAA,IACf,aAAa;AAAA,IACb,cAAc;AAAA,IACd,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,uBAAuB;AAAA;AAG3B,MAAM,cAAc,CAAC,UAAyC;AAC5D,QAAM,EAAE,UAAU,MAAM,QAAA,IAAY;AACpC,QAAM,iBAAiB,SAAS,cAAc,KAAK;AACnD,QAAM,eAAe,SAAS,cAAc,KAAK;AAEjD,eAAa,UAAU,IAAI,oBAAoB;AAE/C,MAAI,UAAU;AACZ,aAAS,UAAU,IAAI,wBAAwB;AAC/C,iBAAa,YAAY,QAAQ;AAAA,EACnC;AAEA,MAAI,MAAM;AACR,SAAK,UAAU,IAAI,oBAAoB;AACvC,iBAAa,YAAY,IAAI;AAAA,EAC/B;AAEA,MAAI,SAAS;AACX,YAAQ,UAAU,IAAI,mBAAmB;AACzC,iBAAa,YAAY,OAAO;AAAA,EAClC;AAEA,iBAAe,UAAU,IAAI,eAAe;AAC5C,iBAAe,YAAY,YAAY;AAEvC,SAAO;AACT;AAEA,MAAA,QAAe,CAAC,WACb,MAAM;AACL,QAAM,EAAE,OAAO,UAAA,IAAc;AAC7B,QAAM,cAAc,SAAS,cAAc,KAAK;AAChD,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,QAAM,UAAU,SAAS,cAAc,KAAK;AAE5C,MAAI,MAAO,OAAM,MAAM,YAAY;AACnC,MAAI,UAAW,WAAU,MAAM,YAAY;AAE3C,QAAM,oBAAoBA,OAAwB,cAAc;AAAA,IAC9D,GAAG;AAAA,IACH,QAAQ,MAAM;AAAA,IACd,uBAAuB;AAAA,MACrB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,cAAc;AAAA,MACd,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,UAAU;AAAA,IAAA;AAAA,EACZ,CACD;AACD,QAAM,iBAAiB,YAAY,KAAK;AAExC,UAAQ,UAAU,IAAI,aAAa;AACnC,UAAQ,YAAY,cAAc;AAClC,UAAQ,YAAY,kBAAkB,OAAO;AAE7C,YAAU,UAAU,IAAI,kBAAkB;AAC1C,YAAU,YAAY;AACtB,YAAU,YAAY,OAAO;AAE7B,cAAY,UAAU,IAAI,mBAAmB;AAC7C,cAAY,YAAY,SAAS;AAEjC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,MACN,QAAQ,kBAAkB,OAAO;AAAA,MACjC,MAAM,kBAAkB,OAAO;AAAA,IAAA;AAAA,EACjC;AAEJ,GAAA;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../source/composite/carousel/cards/index.ts"],"sourcesContent":["import {\n element,\n layout,\n token,\n typography,\n} from '@universityofmaryland/web-styles-library';\nimport * as Utility from 'utilities';\nimport * as carouselElements from '../elements';\n\ntype TypeCarouselCardsRequirements = {\n headline?: HTMLElement | null;\n text?: HTMLElement | null;\n actions?: HTMLElement | null;\n slide: HTMLElement;\n shadowRef?: HTMLElement;\n cards: HTMLElement[];\n};\n\nconst MEDIUM = 768;\nconst LARGE = 1024;\n\nconst BACKGROUND_TEXTURE = `<svg aria-hidden=\"true\" width=\"1599\" height=\"618\" viewBox=\"0 0 1599 618\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n\"><mask id=\"mask0_2135_11278\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"1600\" height=\"618\"><rect width=\"1600\" height=\"618\" fill=\"#242424\"></rect></mask><g mask=\"url(#mask0_2135_11278)\"><g opacity=\"0.5\"><mask id=\"mask1_2135_11278\" style=\"mask-type:luminance\" maskUnits=\"userSpaceOnUse\" x=\"-17\" y=\"-56\" width=\"1823\" height=\"408\"><path d=\"M-17 351.98V-56H1806V351.98\" fill=\"white\"></path></mask><g mask=\"url(#mask1_2135_11278)\"><path d=\"M807.562 -68.3515L-433.759 1173.58L-217.501 1389.94L1023.82 148.012L807.562 -68.3515Z\" fill=\"#262626\"></path><path d=\"M360.649 -82.8017L-880.672 1159.13L-649.997 1389.92L591.324 147.986L360.649 -82.8017Z\" fill=\"black\"></path><path d=\"M1154.8 1173.26L-533.139 -515.499L-677.311 -371.256L1010.63 1317.51L1154.8 1173.26Z\" fill=\"#262626\"></path><path d=\"M2162.77 710.525L1312.18 -140.478L1168.01 3.76505L2018.6 854.768L2162.77 710.525Z\" fill=\"black\"></path><path d=\"M1312.16 -140.485L202.096 -1251.09L57.9241 -1106.85L1167.99 3.75794L1312.16 -140.485Z\" fill=\"#EDEDED\"></path><path d=\"M2133.89 -1251.07L1023.83 -140.458L1168 3.78455L2278.07 -1106.83L2133.89 -1251.07Z\" fill=\"#383838\"></path><path d=\"M591.343 147.968L-634.061 -1078.04L-864.736 -847.248L360.668 378.756L591.343 147.968Z\" fill=\"black\"></path><path d=\"M1023.82 147.97L-217.503 -1093.96L-433.761 -877.595L807.559 364.333L1023.82 147.97Z\" fill=\"#383838\"></path></g><mask id=\"mask2_2135_11278\" style=\"mask-type:luminance\" maskUnits=\"userSpaceOnUse\" x=\"-17\" y=\"351\" width=\"1823\" height=\"780\"><path d=\"M-17 351.938V753.629L837.67 753.672L845.662 1130.18L1806 1130.26V352.094\" fill=\"white\"></path></mask><g mask=\"url(#mask2_2135_11278)\"><path d=\"M1023.81 555.952L-217.506 -685.977L-433.764 -469.613L807.557 772.316L1023.81 555.952Z\" fill=\"#262626\"></path><path d=\"M591.347 555.967L-649.973 -685.962L-880.648 -455.174L360.672 786.755L591.347 555.967Z\" fill=\"black\"></path><path d=\"M1010.63 -613.543L-677.305 1075.22L-533.133 1219.46L1154.8 -469.3L1010.63 -613.543Z\" fill=\"#262626\"></path><path d=\"M1760.63 110.929L910.039 961.932L1054.21 1106.17L1904.8 255.172L1760.63 110.929Z\" fill=\"black\"></path><path d=\"M360.674 325.168L-864.73 1551.17L-634.055 1781.96L591.349 555.956L360.674 325.168Z\" fill=\"black\"></path><path d=\"M807.565 339.631L-433.756 1581.56L-217.498 1797.92L1023.82 555.995L807.565 339.631Z\" fill=\"#383838\"></path></g></g></g></svg>`;\n\nconst ELEMENT_NAME = 'umd-element-carousel-cards';\n\nconst ELEMENT_DECLARATION = 'carousel-cards-declaration';\nconst CAROUSEL_CONTAINER = 'element-carousel-container';\nconst CAROUSEL_LOCK = 'element-carousel-lock';\n\nconst INTRO_CONTAINER = 'carousel-cards-intro-container';\nconst INTRO_CONTAINER_LOCK = 'carousel-cards-intro-container-lock';\nconst INTRO_CONTAINER_HEADLINE = 'carousel-cards-intro-container-headline';\nconst INTRO_CONTAINER_TEXT = 'carousel-cards-intro-container-text';\nconst INTRO_CONTAINER_CTA = 'carousel-cards-intro-container-cta';\n\nconst OVERWRITE_ANIMATION_CAROUSEL_DECLARATION = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.declaration}`;\nconst OVERWRITE_ANIMATION_CAROUSEL_CONTAINER = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.container}`;\nconst OVERWRITE_ANIMATION_CAROUSEL_BUTTON = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.button}`;\n\n// prettier-ignore\nconst OverwriteCarouselStyles = `\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_CONTAINER} {\n padding-bottom: 60px;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_DECLARATION} {\n width: 60%;\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON} {\n bottom: 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON} {\n top: 50%;\n transform: translateY(-50%);\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:first-of-type {\n left: 49px;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:first-of-type {\n right: -52px;\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:last-of-type {\n left: 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:last-of-type {\n left: -52px;\n }\n }\n`;\n\n// prettier-ignore\nconst HeadlineStyles = `\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_HEADLINE}`]: typography.sans.largest,\n },\n })}\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_HEADLINE} *`]: typography.sans.largest,\n },\n })}\n\n .${INTRO_CONTAINER_HEADLINE},\n .${INTRO_CONTAINER_HEADLINE} * {\n color: ${token.color.white};\n font-weight: 800;\n text-transform: uppercase;\n }\n`;\n\n// prettier-ignore\nconst TextStyles = `\n * + .${INTRO_CONTAINER_TEXT} {\n margin-top: ${token.spacing.md};\n }\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_TEXT}`]: element.text.rich.advancedDark,\n },\n })}\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_TEXT}`]: typography.sans.medium,\n },\n })}\n`;\n\n// prettier-ignore\nconst ActionStyles = `\n * + .${INTRO_CONTAINER_CTA} {\n margin-top: ${token.spacing.md};\n }\n\n .${INTRO_CONTAINER_CTA} a {\n color: ${token.color.white};\n }\n`;\n\n// prettier-ignore\nconst IntroContainer = `\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n .${INTRO_CONTAINER} {\n margin-bottom: ${token.spacing.md};\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n .${INTRO_CONTAINER} {\n width: calc(40% - ${token.spacing['2xl']});\n padding-right: ${token.spacing['2xl']};\n }\n }\n\n @media (min-width: ${LARGE}px) {\n .${INTRO_CONTAINER} .${INTRO_CONTAINER_LOCK} {\n max-width: inherit;\n padding: 0;\n }\n }\n`;\n\n// prettier-ignore\nconst ContainerLock = `\n .${CAROUSEL_LOCK} {\n position: relative;\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: layout.space.horizontal.larger,\n })}\n }\n\n @media (max-width: ${MEDIUM - 1}px) {\n .${CAROUSEL_LOCK} {\n padding-right: 0;\n }\n }\n\n @media (min-width: ${LARGE}px) {\n .${CAROUSEL_LOCK} {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n }\n\n @media umd-carousel-card (max-width: ${LARGE - 1}px) {\n .${CAROUSEL_LOCK} {\n max-width: inherit;\n padding: 0;\n }\n }\n`;\n\n// prettier-ignore\nconst ContainerStyles = `\n @keyframes card-carousel-slide-in {\n from { transform: translateX(-25vw); }\n to { transform: translateX(0);}\n }\n\n .${CAROUSEL_CONTAINER} {\n background-color: ${token.color.black};\n padding: ${token.spacing['3xl']} 0;\n position: relative;\n overflow: clip;\n }\n\n @container ${ELEMENT_NAME} (max-width: 300px) {\n .${CAROUSEL_CONTAINER} {\n display: none;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${CAROUSEL_CONTAINER} {\n padding: ${token.spacing['4xl']} 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n .${CAROUSEL_CONTAINER} {\n padding: ${token.spacing['max']} 0;\n }\n }\n\n .${CAROUSEL_CONTAINER} > svg {\n width: auto;\n height: 100%;\n object-fit: cover;\n position: absolute;\n top: 0;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${CAROUSEL_CONTAINER} > svg {\n animation: card-carousel-slide-in ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: 0;\n animation-range-end: 100vh;\n transform: translateX(-15vw);\n }\n }\n }\n`\n\n// prettier-ignore\nconst STYLES_CAROUSEL_CARDS_ELEMENT = `\n .${ELEMENT_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n }\n\n .${ELEMENT_DECLARATION} * {\n color: ${token.color.white};\n }\n \n ${carouselElements.blocks.Styles}\n ${ContainerStyles}\n ${ContainerLock}\n ${HeadlineStyles}\n ${TextStyles}\n ${ActionStyles}\n ${IntroContainer}\n ${OverwriteCarouselStyles}\n`;\n\nconst CreateIntro = (props: TypeCarouselCardsRequirements) => {\n const { headline, text, actions } = props;\n const introContainer = document.createElement('div');\n const introWrapper = document.createElement('div');\n\n introWrapper.classList.add(INTRO_CONTAINER_LOCK);\n\n if (headline) {\n headline.classList.add(INTRO_CONTAINER_HEADLINE);\n introWrapper.appendChild(headline);\n }\n\n if (text) {\n text.classList.add(INTRO_CONTAINER_TEXT);\n introWrapper.appendChild(text);\n }\n\n if (actions) {\n actions.classList.add(INTRO_CONTAINER_CTA);\n introWrapper.appendChild(actions);\n }\n\n introContainer.classList.add(INTRO_CONTAINER);\n introContainer.appendChild(introWrapper);\n\n return introContainer;\n};\n\nexport default (props: TypeCarouselCardsRequirements) =>\n (() => {\n const { slide, shadowRef } = props;\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n\n if (slide) slide.style.minHeight = '450px';\n if (shadowRef) shadowRef.style.minHeight = '450px';\n\n const carouselContainer = carouselElements.blocks.CreateElement({\n ...props,\n blocks: props.cards,\n overwriteDisplayLogic: {\n mobileBreakpoint: 650,\n tabletBreakpoint: 1024,\n desktopBreakpoint: 1024,\n mobileCount: 1,\n tabletCount: 2,\n desktopCount: 2,\n maxCount: 2,\n showMobileHint: true,\n showHint: false,\n },\n });\n const introContainer = CreateIntro(props);\n\n wrapper.classList.add(CAROUSEL_LOCK);\n wrapper.appendChild(introContainer);\n wrapper.appendChild(carouselContainer.element);\n\n container.classList.add(CAROUSEL_CONTAINER);\n container.innerHTML = BACKGROUND_TEXTURE;\n container.appendChild(wrapper);\n\n declaration.classList.add(ELEMENT_DECLARATION);\n declaration.appendChild(container);\n\n return {\n element: declaration,\n styles: STYLES_CAROUSEL_CARDS_ELEMENT,\n events: {\n resize: carouselContainer.events.resize,\n load: carouselContainer.events.load,\n },\n };\n })();\n"],"names":["carouselElements.blocks","Utility.theme.convertJSSObjectToStyles","typography","token","element","layout"],"mappings":"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"}
|
|
@@ -206,7 +206,7 @@ const ContainerStyles = `
|
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
@media (prefers-reduced-motion: no-preference) {
|
|
209
|
-
@supports (animation-timeline:
|
|
209
|
+
@supports (animation-timeline: scroll()) {
|
|
210
210
|
.${CAROUSEL_CONTAINER} > svg {
|
|
211
211
|
animation: card-carousel-slide-in ease-in-out forwards;
|
|
212
212
|
animation-timeline: view();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../source/composite/carousel/cards/index.ts"],"sourcesContent":["import {\n element,\n layout,\n token,\n typography,\n} from '@universityofmaryland/web-styles-library';\nimport * as Utility from 'utilities';\nimport * as carouselElements from '../elements';\n\ntype TypeCarouselCardsRequirements = {\n headline?: HTMLElement | null;\n text?: HTMLElement | null;\n actions?: HTMLElement | null;\n slide: HTMLElement;\n shadowRef?: HTMLElement;\n cards: HTMLElement[];\n};\n\nconst MEDIUM = 768;\nconst LARGE = 1024;\n\nconst BACKGROUND_TEXTURE = `<svg aria-hidden=\"true\" width=\"1599\" height=\"618\" viewBox=\"0 0 1599 618\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n\"><mask id=\"mask0_2135_11278\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"1600\" height=\"618\"><rect width=\"1600\" height=\"618\" fill=\"#242424\"></rect></mask><g mask=\"url(#mask0_2135_11278)\"><g opacity=\"0.5\"><mask id=\"mask1_2135_11278\" style=\"mask-type:luminance\" maskUnits=\"userSpaceOnUse\" x=\"-17\" y=\"-56\" width=\"1823\" height=\"408\"><path d=\"M-17 351.98V-56H1806V351.98\" fill=\"white\"></path></mask><g mask=\"url(#mask1_2135_11278)\"><path d=\"M807.562 -68.3515L-433.759 1173.58L-217.501 1389.94L1023.82 148.012L807.562 -68.3515Z\" fill=\"#262626\"></path><path d=\"M360.649 -82.8017L-880.672 1159.13L-649.997 1389.92L591.324 147.986L360.649 -82.8017Z\" fill=\"black\"></path><path d=\"M1154.8 1173.26L-533.139 -515.499L-677.311 -371.256L1010.63 1317.51L1154.8 1173.26Z\" fill=\"#262626\"></path><path d=\"M2162.77 710.525L1312.18 -140.478L1168.01 3.76505L2018.6 854.768L2162.77 710.525Z\" fill=\"black\"></path><path d=\"M1312.16 -140.485L202.096 -1251.09L57.9241 -1106.85L1167.99 3.75794L1312.16 -140.485Z\" fill=\"#EDEDED\"></path><path d=\"M2133.89 -1251.07L1023.83 -140.458L1168 3.78455L2278.07 -1106.83L2133.89 -1251.07Z\" fill=\"#383838\"></path><path d=\"M591.343 147.968L-634.061 -1078.04L-864.736 -847.248L360.668 378.756L591.343 147.968Z\" fill=\"black\"></path><path d=\"M1023.82 147.97L-217.503 -1093.96L-433.761 -877.595L807.559 364.333L1023.82 147.97Z\" fill=\"#383838\"></path></g><mask id=\"mask2_2135_11278\" style=\"mask-type:luminance\" maskUnits=\"userSpaceOnUse\" x=\"-17\" y=\"351\" width=\"1823\" height=\"780\"><path d=\"M-17 351.938V753.629L837.67 753.672L845.662 1130.18L1806 1130.26V352.094\" fill=\"white\"></path></mask><g mask=\"url(#mask2_2135_11278)\"><path d=\"M1023.81 555.952L-217.506 -685.977L-433.764 -469.613L807.557 772.316L1023.81 555.952Z\" fill=\"#262626\"></path><path d=\"M591.347 555.967L-649.973 -685.962L-880.648 -455.174L360.672 786.755L591.347 555.967Z\" fill=\"black\"></path><path d=\"M1010.63 -613.543L-677.305 1075.22L-533.133 1219.46L1154.8 -469.3L1010.63 -613.543Z\" fill=\"#262626\"></path><path d=\"M1760.63 110.929L910.039 961.932L1054.21 1106.17L1904.8 255.172L1760.63 110.929Z\" fill=\"black\"></path><path d=\"M360.674 325.168L-864.73 1551.17L-634.055 1781.96L591.349 555.956L360.674 325.168Z\" fill=\"black\"></path><path d=\"M807.565 339.631L-433.756 1581.56L-217.498 1797.92L1023.82 555.995L807.565 339.631Z\" fill=\"#383838\"></path></g></g></g></svg>`;\n\nconst ELEMENT_NAME = 'umd-element-carousel-cards';\n\nconst ELEMENT_DECLARATION = 'carousel-cards-declaration';\nconst CAROUSEL_CONTAINER = 'element-carousel-container';\nconst CAROUSEL_LOCK = 'element-carousel-lock';\n\nconst INTRO_CONTAINER = 'carousel-cards-intro-container';\nconst INTRO_CONTAINER_LOCK = 'carousel-cards-intro-container-lock';\nconst INTRO_CONTAINER_HEADLINE = 'carousel-cards-intro-container-headline';\nconst INTRO_CONTAINER_TEXT = 'carousel-cards-intro-container-text';\nconst INTRO_CONTAINER_CTA = 'carousel-cards-intro-container-cta';\n\nconst OVERWRITE_ANIMATION_CAROUSEL_DECLARATION = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.declaration}`;\nconst OVERWRITE_ANIMATION_CAROUSEL_CONTAINER = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.container}`;\nconst OVERWRITE_ANIMATION_CAROUSEL_BUTTON = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.button}`;\n\n// prettier-ignore\nconst OverwriteCarouselStyles = `\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_CONTAINER} {\n padding-bottom: 60px;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_DECLARATION} {\n width: 60%;\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON} {\n bottom: 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON} {\n top: 50%;\n transform: translateY(-50%);\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:first-of-type {\n left: 49px;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:first-of-type {\n right: -52px;\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:last-of-type {\n left: 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:last-of-type {\n left: -52px;\n }\n }\n`;\n\n// prettier-ignore\nconst HeadlineStyles = `\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_HEADLINE}`]: typography.sans.largest,\n },\n })}\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_HEADLINE} *`]: typography.sans.largest,\n },\n })}\n\n .${INTRO_CONTAINER_HEADLINE},\n .${INTRO_CONTAINER_HEADLINE} * {\n color: ${token.color.white};\n font-weight: 800;\n text-transform: uppercase;\n }\n`;\n\n// prettier-ignore\nconst TextStyles = `\n * + .${INTRO_CONTAINER_TEXT} {\n margin-top: ${token.spacing.md};\n }\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_TEXT}`]: element.text.rich.advancedDark,\n },\n })}\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_TEXT}`]: typography.sans.medium,\n },\n })}\n`;\n\n// prettier-ignore\nconst ActionStyles = `\n * + .${INTRO_CONTAINER_CTA} {\n margin-top: ${token.spacing.md};\n }\n\n .${INTRO_CONTAINER_CTA} a {\n color: ${token.color.white};\n }\n`;\n\n// prettier-ignore\nconst IntroContainer = `\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n .${INTRO_CONTAINER} {\n margin-bottom: ${token.spacing.md};\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n .${INTRO_CONTAINER} {\n width: calc(40% - ${token.spacing['2xl']});\n padding-right: ${token.spacing['2xl']};\n }\n }\n\n @media (min-width: ${LARGE}px) {\n .${INTRO_CONTAINER} .${INTRO_CONTAINER_LOCK} {\n max-width: inherit;\n padding: 0;\n }\n }\n`;\n\n// prettier-ignore\nconst ContainerLock = `\n .${CAROUSEL_LOCK} {\n position: relative;\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: layout.space.horizontal.larger,\n })}\n }\n\n @media (max-width: ${MEDIUM - 1}px) {\n .${CAROUSEL_LOCK} {\n padding-right: 0;\n }\n }\n\n @media (min-width: ${LARGE}px) {\n .${CAROUSEL_LOCK} {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n }\n\n @media umd-carousel-card (max-width: ${LARGE - 1}px) {\n .${CAROUSEL_LOCK} {\n max-width: inherit;\n padding: 0;\n }\n }\n`;\n\n// prettier-ignore\nconst ContainerStyles = `\n @keyframes card-carousel-slide-in {\n from { transform: translateX(-25vw); }\n to { transform: translateX(0);}\n }\n\n .${CAROUSEL_CONTAINER} {\n background-color: ${token.color.black};\n padding: ${token.spacing['3xl']} 0;\n position: relative;\n overflow: clip;\n }\n\n @container ${ELEMENT_NAME} (max-width: 300px) {\n .${CAROUSEL_CONTAINER} {\n display: none;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${CAROUSEL_CONTAINER} {\n padding: ${token.spacing['4xl']} 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n .${CAROUSEL_CONTAINER} {\n padding: ${token.spacing['max']} 0;\n }\n }\n\n .${CAROUSEL_CONTAINER} > svg {\n width: auto;\n height: 100%;\n object-fit: cover;\n position: absolute;\n top: 0;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${CAROUSEL_CONTAINER} > svg {\n animation: card-carousel-slide-in ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: 0;\n animation-range-end: 100vh;\n transform: translateX(-15vw);\n }\n }\n }\n`\n\n// prettier-ignore\nconst STYLES_CAROUSEL_CARDS_ELEMENT = `\n .${ELEMENT_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n }\n\n .${ELEMENT_DECLARATION} * {\n color: ${token.color.white};\n }\n \n ${carouselElements.blocks.Styles}\n ${ContainerStyles}\n ${ContainerLock}\n ${HeadlineStyles}\n ${TextStyles}\n ${ActionStyles}\n ${IntroContainer}\n ${OverwriteCarouselStyles}\n`;\n\nconst CreateIntro = (props: TypeCarouselCardsRequirements) => {\n const { headline, text, actions } = props;\n const introContainer = document.createElement('div');\n const introWrapper = document.createElement('div');\n\n introWrapper.classList.add(INTRO_CONTAINER_LOCK);\n\n if (headline) {\n headline.classList.add(INTRO_CONTAINER_HEADLINE);\n introWrapper.appendChild(headline);\n }\n\n if (text) {\n text.classList.add(INTRO_CONTAINER_TEXT);\n introWrapper.appendChild(text);\n }\n\n if (actions) {\n actions.classList.add(INTRO_CONTAINER_CTA);\n introWrapper.appendChild(actions);\n }\n\n introContainer.classList.add(INTRO_CONTAINER);\n introContainer.appendChild(introWrapper);\n\n return introContainer;\n};\n\nexport default (props: TypeCarouselCardsRequirements) =>\n (() => {\n const { slide, shadowRef } = props;\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n\n if (slide) slide.style.minHeight = '450px';\n if (shadowRef) shadowRef.style.minHeight = '450px';\n\n const carouselContainer = carouselElements.blocks.CreateElement({\n ...props,\n blocks: props.cards,\n overwriteDisplayLogic: {\n mobileBreakpoint: 650,\n tabletBreakpoint: 1024,\n desktopBreakpoint: 1024,\n mobileCount: 1,\n tabletCount: 2,\n desktopCount: 2,\n maxCount: 2,\n showMobileHint: true,\n showHint: false,\n },\n });\n const introContainer = CreateIntro(props);\n\n wrapper.classList.add(CAROUSEL_LOCK);\n wrapper.appendChild(introContainer);\n wrapper.appendChild(carouselContainer.element);\n\n container.classList.add(CAROUSEL_CONTAINER);\n container.innerHTML = BACKGROUND_TEXTURE;\n container.appendChild(wrapper);\n\n declaration.classList.add(ELEMENT_DECLARATION);\n declaration.appendChild(container);\n\n return {\n element: declaration,\n styles: STYLES_CAROUSEL_CARDS_ELEMENT,\n events: {\n resize: carouselContainer.events.resize,\n load: carouselContainer.events.load,\n },\n };\n })();\n"],"names":["carouselElements.blocks","Utility.theme.convertJSSObjectToStyles"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../source/composite/carousel/cards/index.ts"],"sourcesContent":["import {\n element,\n layout,\n token,\n typography,\n} from '@universityofmaryland/web-styles-library';\nimport * as Utility from 'utilities';\nimport * as carouselElements from '../elements';\n\ntype TypeCarouselCardsRequirements = {\n headline?: HTMLElement | null;\n text?: HTMLElement | null;\n actions?: HTMLElement | null;\n slide: HTMLElement;\n shadowRef?: HTMLElement;\n cards: HTMLElement[];\n};\n\nconst MEDIUM = 768;\nconst LARGE = 1024;\n\nconst BACKGROUND_TEXTURE = `<svg aria-hidden=\"true\" width=\"1599\" height=\"618\" viewBox=\"0 0 1599 618\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n\"><mask id=\"mask0_2135_11278\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"1600\" height=\"618\"><rect width=\"1600\" height=\"618\" fill=\"#242424\"></rect></mask><g mask=\"url(#mask0_2135_11278)\"><g opacity=\"0.5\"><mask id=\"mask1_2135_11278\" style=\"mask-type:luminance\" maskUnits=\"userSpaceOnUse\" x=\"-17\" y=\"-56\" width=\"1823\" height=\"408\"><path d=\"M-17 351.98V-56H1806V351.98\" fill=\"white\"></path></mask><g mask=\"url(#mask1_2135_11278)\"><path d=\"M807.562 -68.3515L-433.759 1173.58L-217.501 1389.94L1023.82 148.012L807.562 -68.3515Z\" fill=\"#262626\"></path><path d=\"M360.649 -82.8017L-880.672 1159.13L-649.997 1389.92L591.324 147.986L360.649 -82.8017Z\" fill=\"black\"></path><path d=\"M1154.8 1173.26L-533.139 -515.499L-677.311 -371.256L1010.63 1317.51L1154.8 1173.26Z\" fill=\"#262626\"></path><path d=\"M2162.77 710.525L1312.18 -140.478L1168.01 3.76505L2018.6 854.768L2162.77 710.525Z\" fill=\"black\"></path><path d=\"M1312.16 -140.485L202.096 -1251.09L57.9241 -1106.85L1167.99 3.75794L1312.16 -140.485Z\" fill=\"#EDEDED\"></path><path d=\"M2133.89 -1251.07L1023.83 -140.458L1168 3.78455L2278.07 -1106.83L2133.89 -1251.07Z\" fill=\"#383838\"></path><path d=\"M591.343 147.968L-634.061 -1078.04L-864.736 -847.248L360.668 378.756L591.343 147.968Z\" fill=\"black\"></path><path d=\"M1023.82 147.97L-217.503 -1093.96L-433.761 -877.595L807.559 364.333L1023.82 147.97Z\" fill=\"#383838\"></path></g><mask id=\"mask2_2135_11278\" style=\"mask-type:luminance\" maskUnits=\"userSpaceOnUse\" x=\"-17\" y=\"351\" width=\"1823\" height=\"780\"><path d=\"M-17 351.938V753.629L837.67 753.672L845.662 1130.18L1806 1130.26V352.094\" fill=\"white\"></path></mask><g mask=\"url(#mask2_2135_11278)\"><path d=\"M1023.81 555.952L-217.506 -685.977L-433.764 -469.613L807.557 772.316L1023.81 555.952Z\" fill=\"#262626\"></path><path d=\"M591.347 555.967L-649.973 -685.962L-880.648 -455.174L360.672 786.755L591.347 555.967Z\" fill=\"black\"></path><path d=\"M1010.63 -613.543L-677.305 1075.22L-533.133 1219.46L1154.8 -469.3L1010.63 -613.543Z\" fill=\"#262626\"></path><path d=\"M1760.63 110.929L910.039 961.932L1054.21 1106.17L1904.8 255.172L1760.63 110.929Z\" fill=\"black\"></path><path d=\"M360.674 325.168L-864.73 1551.17L-634.055 1781.96L591.349 555.956L360.674 325.168Z\" fill=\"black\"></path><path d=\"M807.565 339.631L-433.756 1581.56L-217.498 1797.92L1023.82 555.995L807.565 339.631Z\" fill=\"#383838\"></path></g></g></g></svg>`;\n\nconst ELEMENT_NAME = 'umd-element-carousel-cards';\n\nconst ELEMENT_DECLARATION = 'carousel-cards-declaration';\nconst CAROUSEL_CONTAINER = 'element-carousel-container';\nconst CAROUSEL_LOCK = 'element-carousel-lock';\n\nconst INTRO_CONTAINER = 'carousel-cards-intro-container';\nconst INTRO_CONTAINER_LOCK = 'carousel-cards-intro-container-lock';\nconst INTRO_CONTAINER_HEADLINE = 'carousel-cards-intro-container-headline';\nconst INTRO_CONTAINER_TEXT = 'carousel-cards-intro-container-text';\nconst INTRO_CONTAINER_CTA = 'carousel-cards-intro-container-cta';\n\nconst OVERWRITE_ANIMATION_CAROUSEL_DECLARATION = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.declaration}`;\nconst OVERWRITE_ANIMATION_CAROUSEL_CONTAINER = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.container}`;\nconst OVERWRITE_ANIMATION_CAROUSEL_BUTTON = `.${CAROUSEL_CONTAINER} .${carouselElements.blocks.Elements.button}`;\n\n// prettier-ignore\nconst OverwriteCarouselStyles = `\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_CONTAINER} {\n padding-bottom: 60px;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_DECLARATION} {\n width: 60%;\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON} {\n bottom: 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON} {\n top: 50%;\n transform: translateY(-50%);\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:first-of-type {\n left: 49px;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:first-of-type {\n right: -52px;\n }\n }\n\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:last-of-type {\n left: 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n ${OVERWRITE_ANIMATION_CAROUSEL_BUTTON}:last-of-type {\n left: -52px;\n }\n }\n`;\n\n// prettier-ignore\nconst HeadlineStyles = `\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_HEADLINE}`]: typography.sans.largest,\n },\n })}\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_HEADLINE} *`]: typography.sans.largest,\n },\n })}\n\n .${INTRO_CONTAINER_HEADLINE},\n .${INTRO_CONTAINER_HEADLINE} * {\n color: ${token.color.white};\n font-weight: 800;\n text-transform: uppercase;\n }\n`;\n\n// prettier-ignore\nconst TextStyles = `\n * + .${INTRO_CONTAINER_TEXT} {\n margin-top: ${token.spacing.md};\n }\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_TEXT}`]: element.text.rich.advancedDark,\n },\n })}\n\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${INTRO_CONTAINER_TEXT}`]: typography.sans.medium,\n },\n })}\n`;\n\n// prettier-ignore\nconst ActionStyles = `\n * + .${INTRO_CONTAINER_CTA} {\n margin-top: ${token.spacing.md};\n }\n\n .${INTRO_CONTAINER_CTA} a {\n color: ${token.color.white};\n }\n`;\n\n// prettier-ignore\nconst IntroContainer = `\n @container ${ELEMENT_NAME} (max-width: ${LARGE - 1}px) {\n .${INTRO_CONTAINER} {\n margin-bottom: ${token.spacing.md};\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n .${INTRO_CONTAINER} {\n width: calc(40% - ${token.spacing['2xl']});\n padding-right: ${token.spacing['2xl']};\n }\n }\n\n @media (min-width: ${LARGE}px) {\n .${INTRO_CONTAINER} .${INTRO_CONTAINER_LOCK} {\n max-width: inherit;\n padding: 0;\n }\n }\n`;\n\n// prettier-ignore\nconst ContainerLock = `\n .${CAROUSEL_LOCK} {\n position: relative;\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: layout.space.horizontal.larger,\n })}\n }\n\n @media (max-width: ${MEDIUM - 1}px) {\n .${CAROUSEL_LOCK} {\n padding-right: 0;\n }\n }\n\n @media (min-width: ${LARGE}px) {\n .${CAROUSEL_LOCK} {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n }\n\n @media umd-carousel-card (max-width: ${LARGE - 1}px) {\n .${CAROUSEL_LOCK} {\n max-width: inherit;\n padding: 0;\n }\n }\n`;\n\n// prettier-ignore\nconst ContainerStyles = `\n @keyframes card-carousel-slide-in {\n from { transform: translateX(-25vw); }\n to { transform: translateX(0);}\n }\n\n .${CAROUSEL_CONTAINER} {\n background-color: ${token.color.black};\n padding: ${token.spacing['3xl']} 0;\n position: relative;\n overflow: clip;\n }\n\n @container ${ELEMENT_NAME} (max-width: 300px) {\n .${CAROUSEL_CONTAINER} {\n display: none;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${CAROUSEL_CONTAINER} {\n padding: ${token.spacing['4xl']} 0;\n }\n }\n\n @container ${ELEMENT_NAME} (min-width: ${LARGE}px) {\n .${CAROUSEL_CONTAINER} {\n padding: ${token.spacing['max']} 0;\n }\n }\n\n .${CAROUSEL_CONTAINER} > svg {\n width: auto;\n height: 100%;\n object-fit: cover;\n position: absolute;\n top: 0;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${CAROUSEL_CONTAINER} > svg {\n animation: card-carousel-slide-in ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: 0;\n animation-range-end: 100vh;\n transform: translateX(-15vw);\n }\n }\n }\n`\n\n// prettier-ignore\nconst STYLES_CAROUSEL_CARDS_ELEMENT = `\n .${ELEMENT_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n }\n\n .${ELEMENT_DECLARATION} * {\n color: ${token.color.white};\n }\n \n ${carouselElements.blocks.Styles}\n ${ContainerStyles}\n ${ContainerLock}\n ${HeadlineStyles}\n ${TextStyles}\n ${ActionStyles}\n ${IntroContainer}\n ${OverwriteCarouselStyles}\n`;\n\nconst CreateIntro = (props: TypeCarouselCardsRequirements) => {\n const { headline, text, actions } = props;\n const introContainer = document.createElement('div');\n const introWrapper = document.createElement('div');\n\n introWrapper.classList.add(INTRO_CONTAINER_LOCK);\n\n if (headline) {\n headline.classList.add(INTRO_CONTAINER_HEADLINE);\n introWrapper.appendChild(headline);\n }\n\n if (text) {\n text.classList.add(INTRO_CONTAINER_TEXT);\n introWrapper.appendChild(text);\n }\n\n if (actions) {\n actions.classList.add(INTRO_CONTAINER_CTA);\n introWrapper.appendChild(actions);\n }\n\n introContainer.classList.add(INTRO_CONTAINER);\n introContainer.appendChild(introWrapper);\n\n return introContainer;\n};\n\nexport default (props: TypeCarouselCardsRequirements) =>\n (() => {\n const { slide, shadowRef } = props;\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n\n if (slide) slide.style.minHeight = '450px';\n if (shadowRef) shadowRef.style.minHeight = '450px';\n\n const carouselContainer = carouselElements.blocks.CreateElement({\n ...props,\n blocks: props.cards,\n overwriteDisplayLogic: {\n mobileBreakpoint: 650,\n tabletBreakpoint: 1024,\n desktopBreakpoint: 1024,\n mobileCount: 1,\n tabletCount: 2,\n desktopCount: 2,\n maxCount: 2,\n showMobileHint: true,\n showHint: false,\n },\n });\n const introContainer = CreateIntro(props);\n\n wrapper.classList.add(CAROUSEL_LOCK);\n wrapper.appendChild(introContainer);\n wrapper.appendChild(carouselContainer.element);\n\n container.classList.add(CAROUSEL_CONTAINER);\n container.innerHTML = BACKGROUND_TEXTURE;\n container.appendChild(wrapper);\n\n declaration.classList.add(ELEMENT_DECLARATION);\n declaration.appendChild(container);\n\n return {\n element: declaration,\n styles: STYLES_CAROUSEL_CARDS_ELEMENT,\n events: {\n resize: carouselContainer.events.resize,\n load: carouselContainer.events.load,\n },\n };\n })();\n"],"names":["carouselElements.blocks","Utility.theme.convertJSSObjectToStyles"],"mappings":"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"}
|
|
@@ -95,7 +95,7 @@ const createOverlay = (includesAnimation) => {
|
|
|
95
95
|
...includesAnimation && {
|
|
96
96
|
[`@media (${Styles__namespace.token.media.queries.tablet.min})`]: {
|
|
97
97
|
[`@media (prefers-reduced-motion: no-preference)`]: {
|
|
98
|
-
[`@supports (animation-timeline:
|
|
98
|
+
[`@supports (animation-timeline: scroll())`]: {
|
|
99
99
|
animation: `${REF_KEY_FRAME_FADE_OVER} ease-in-out forwards`,
|
|
100
100
|
animationTimeline: "view()",
|
|
101
101
|
animationRangeStart: "30vh",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stacked.js","sources":["../../../source/composite/hero/stacked.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport * as Utils from 'utilities';\nimport { assets, textLockup } from 'atomic';\nimport { ElementModel } from 'model';\nimport { type ElementVisual } from '../../_types';\nimport { type HeroStackedProps } from './_types';\n\nconst REF_KEY_FRAME_FADE_OVER = 'hero-stacked-fade-over';\nconst REF_KEY_FRAME_FONT_COLOR = 'hero-stacked-font-color';\n\nconst keyFrameFadeOver = `\n @keyframes ${REF_KEY_FRAME_FADE_OVER} {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n`;\n\nconst keyFrameFontColor = `\n @keyframes ${REF_KEY_FRAME_FONT_COLOR} {\n from { color: ${Styles.token.color.black}; }\n to { color: ${Styles.token.color.white}; }\n }\n`;\n\nconst createVideoAsset = (video: HTMLVideoElement) => {\n return assets.video.observedAutoPlay({\n video,\n isScaled: true,\n });\n};\n\nconst createImageAsset = (image: HTMLImageElement) => {\n return assets.image.background({\n element: image,\n isScaled: true,\n isGifAllowed: true,\n isShowCaption: true,\n customStyles: {\n [`@media (${Styles.token.media.queries.large.max})`]: {\n [`&:has(.${Styles.element.asset.gif.toggle.className})`]: {\n minHeight: '56vw',\n },\n },\n\n [`@media (${Styles.token.media.queries.tablet.min})`]: {\n [`&:has(.${Styles.element.asset.gif.toggle.className})`]: {\n minHeight: '550px',\n },\n },\n\n [`& .${Styles.element.asset.gif.toggle.className} button`]: {\n zIndex: 99999,\n },\n },\n });\n};\n\nconst createOverlay = (includesAnimation?: boolean) => {\n return ElementModel.createDiv({\n className: 'umd-hero-stacked__overlay',\n elementStyles: {\n element: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n height: '100vh',\n width: '100vw',\n display: 'block',\n backgroundColor: 'rgba(0,0,0,.7)',\n zIndex: 99,\n opacity: 0,\n\n ...(includesAnimation && {\n [`@media (${Styles.token.media.queries.tablet.min})`]: {\n [`@media (prefers-reduced-motion: no-preference)`]: {\n [`@supports (animation-timeline: view())`]: {\n animation: `${REF_KEY_FRAME_FADE_OVER} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '30vh',\n animationRangeEnd: '70vh',\n },\n },\n },\n }),\n },\n },\n });\n};\n\nconst createAsset = ({\n image,\n video,\n includesAnimation,\n isWidthLarge = false,\n isHeightSmall = false,\n}: Pick<\n HeroStackedProps,\n 'image' | 'video' | 'includesAnimation' | 'isWidthLarge' | 'isHeightSmall'\n>) => {\n let mediaElement: ElementVisual | null = null;\n\n if (video && video instanceof HTMLVideoElement) {\n mediaElement = createVideoAsset(video);\n } else if (image) {\n mediaElement = createImageAsset(image);\n }\n\n if (!mediaElement) {\n return null;\n }\n\n const assetInteriorElement = ElementModel.createDiv({\n className: 'umd-hero-stacked__asset--interior',\n children: [mediaElement, createOverlay(includesAnimation)],\n elementStyles: {\n element: {\n overflow: 'clip',\n position: 'relative',\n height: '100%',\n },\n },\n });\n\n const horizontalLock = ElementModel.layout.spaceHorizontalLarger({\n element: document.createElement('div'),\n children: [assetInteriorElement],\n elementStyles: {\n element: {\n height: '100%',\n width: '100%',\n },\n },\n });\n\n const assetContainer = ElementModel.createDiv({\n className: 'umd-hero-stacked__asset',\n children: isWidthLarge\n ? [horizontalLock]\n : [mediaElement, createOverlay(includesAnimation)],\n elementStyles: {\n element: {\n position: 'relative',\n overflow: 'clip',\n display: 'grid',\n\n ['& img, & video']: {\n objectFit: 'cover',\n aspectRatio: '5 / 4',\n\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n maxHeight: '700px',\n minHeight: '300px',\n\n ...(!isHeightSmall && {\n minHeight: '400px',\n height: '65vh !important',\n }),\n },\n },\n },\n },\n });\n\n return assetContainer;\n};\n\nconst createHeadline = (\n props: Pick<\n HeroStackedProps,\n 'headline' | 'isHeightSmall' | 'includesAnimation' | 'isThemeDark'\n >,\n) => {\n const { headline, isHeightSmall, includesAnimation, isThemeDark } = props;\n const characterCount = headline?.textContent?.trim().length || 0;\n const isOverwriteHeadline = characterCount < 30;\n\n if (!headline) return null;\n\n const desktopStyles = {\n [`@container (${Styles.token.media.queries.desktop.min})`]: {\n ...(isOverwriteHeadline && {\n fontSize: '80px',\n }),\n },\n };\n\n const animationStyles = {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n animation: `${REF_KEY_FRAME_FONT_COLOR} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '100vh',\n animationRangeEnd: '130vh',\n\n ...(isHeightSmall && {\n animationRangeStart: '120vh',\n animationRangeEnd: '150vh',\n }),\n }),\n },\n };\n\n const elementStyles = {\n element: {\n color: Styles.token.color.black,\n maxWidth: '700px',\n margin: '0 auto',\n textTransform: 'uppercase',\n marginTop: `${Styles.token.spacing.sm}`,\n\n ...(isThemeDark && {\n color: Styles.token.color.white,\n }),\n\n ...(includesAnimation && {\n ...(!isThemeDark && {\n ...animationStyles,\n }),\n }),\n\n ...desktopStyles,\n },\n siblingAfter: {\n marginTop: `${Styles.token.spacing.md}`,\n },\n };\n\n return ElementModel.headline.campaignLarge({\n element: headline,\n elementStyles,\n });\n};\n\nconst createText = (\n props: Omit<HeroStackedProps, 'image' | 'video' | 'isWidthLarge'>,\n) => {\n const { topPosition, isThemeDark, includesAnimation, isHeightSmall } = props;\n const additionalSpread = topPosition ? parseInt(topPosition) : null;\n const textLockupElement = textLockup.large({\n ...props,\n ribbon: props.eyebrow,\n headlineComposite: createHeadline(props),\n textLargest: props.text,\n });\n\n const lock = ElementModel.layout.spaceHorizontalSmall({\n element: document.createElement('div'),\n children: [textLockupElement],\n elementStyles: {\n element: {\n position: 'relative',\n },\n },\n });\n\n return ElementModel.createDiv({\n className: 'umd-hero-stacked__text',\n children: [lock],\n elementStyles: {\n element: {\n padding: `${Styles.token.spacing.lg} 0`,\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n position: 'relative',\n zIndex: '999',\n\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n padding: `${Styles.token.spacing['6xl']} 0 ${Styles.token.spacing['3xl']}`,\n },\n\n ...(includesAnimation && {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n position: 'sticky',\n top: additionalSpread || 0,\n }),\n },\n }),\n\n [`& *`]: {\n ...(includesAnimation && {\n ...(!isThemeDark && {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n animation: `${REF_KEY_FRAME_FONT_COLOR} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '90vh',\n animationRangeEnd: '110vh',\n\n ...(isHeightSmall && {\n animationRangeStart: '90vh',\n animationRangeEnd: '110vh',\n }),\n }),\n },\n }),\n }),\n },\n\n [`& .${Styles.element.text.decoration.ribbon.className[0]}`]: {\n animation: 'none !important',\n },\n\n [`& .${Styles.element.text.rich.simpleLargest.className}`]: {\n maxWidth: '860px',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n },\n },\n });\n};\n\nexport default (props: HeroStackedProps) => {\n const asset = createAsset(props);\n const hasAsset = asset !== null;\n const shouldAnimateText = hasAsset && props.includesAnimation;\n\n const text = createText({\n ...props,\n includesAnimation: shouldAnimateText,\n });\n\n const children: ElementVisual[] = [text];\n if (hasAsset) {\n children.push(asset);\n }\n\n const composite = ElementModel.createDiv({\n className: 'umd-hero-stacked',\n children,\n elementStyles: {\n element: {\n containerType: 'inline-size',\n\n ...(props.isThemeDark && {\n backgroundColor: Styles.token.color.black,\n }),\n },\n },\n });\n\n composite.styles += keyFrameFadeOver;\n composite.styles += keyFrameFontColor;\n\n return composite;\n};\n"],"names":["Styles","assets.video.observedAutoPlay","assets.image.background","ElementModel.createDiv","ElementModel.layout.spaceHorizontalLarger","headline","Utils.theme.media.withViewTimelineAnimation","ElementModel.headline.campaignLarge","textLockup.large","ElementModel.layout.spaceHorizontalSmall"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stacked.js","sources":["../../../source/composite/hero/stacked.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport * as Utils from 'utilities';\nimport { assets, textLockup } from 'atomic';\nimport { ElementModel } from 'model';\nimport { type ElementVisual } from '../../_types';\nimport { type HeroStackedProps } from './_types';\n\nconst REF_KEY_FRAME_FADE_OVER = 'hero-stacked-fade-over';\nconst REF_KEY_FRAME_FONT_COLOR = 'hero-stacked-font-color';\n\nconst keyFrameFadeOver = `\n @keyframes ${REF_KEY_FRAME_FADE_OVER} {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n`;\n\nconst keyFrameFontColor = `\n @keyframes ${REF_KEY_FRAME_FONT_COLOR} {\n from { color: ${Styles.token.color.black}; }\n to { color: ${Styles.token.color.white}; }\n }\n`;\n\nconst createVideoAsset = (video: HTMLVideoElement) => {\n return assets.video.observedAutoPlay({\n video,\n isScaled: true,\n });\n};\n\nconst createImageAsset = (image: HTMLImageElement) => {\n return assets.image.background({\n element: image,\n isScaled: true,\n isGifAllowed: true,\n isShowCaption: true,\n customStyles: {\n [`@media (${Styles.token.media.queries.large.max})`]: {\n [`&:has(.${Styles.element.asset.gif.toggle.className})`]: {\n minHeight: '56vw',\n },\n },\n\n [`@media (${Styles.token.media.queries.tablet.min})`]: {\n [`&:has(.${Styles.element.asset.gif.toggle.className})`]: {\n minHeight: '550px',\n },\n },\n\n [`& .${Styles.element.asset.gif.toggle.className} button`]: {\n zIndex: 99999,\n },\n },\n });\n};\n\nconst createOverlay = (includesAnimation?: boolean) => {\n return ElementModel.createDiv({\n className: 'umd-hero-stacked__overlay',\n elementStyles: {\n element: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n height: '100vh',\n width: '100vw',\n display: 'block',\n backgroundColor: 'rgba(0,0,0,.7)',\n zIndex: 99,\n opacity: 0,\n\n ...(includesAnimation && {\n [`@media (${Styles.token.media.queries.tablet.min})`]: {\n [`@media (prefers-reduced-motion: no-preference)`]: {\n [`@supports (animation-timeline: scroll())`]: {\n animation: `${REF_KEY_FRAME_FADE_OVER} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '30vh',\n animationRangeEnd: '70vh',\n },\n },\n },\n }),\n },\n },\n });\n};\n\nconst createAsset = ({\n image,\n video,\n includesAnimation,\n isWidthLarge = false,\n isHeightSmall = false,\n}: Pick<\n HeroStackedProps,\n 'image' | 'video' | 'includesAnimation' | 'isWidthLarge' | 'isHeightSmall'\n>) => {\n let mediaElement: ElementVisual | null = null;\n\n if (video && video instanceof HTMLVideoElement) {\n mediaElement = createVideoAsset(video);\n } else if (image) {\n mediaElement = createImageAsset(image);\n }\n\n if (!mediaElement) {\n return null;\n }\n\n const assetInteriorElement = ElementModel.createDiv({\n className: 'umd-hero-stacked__asset--interior',\n children: [mediaElement, createOverlay(includesAnimation)],\n elementStyles: {\n element: {\n overflow: 'clip',\n position: 'relative',\n height: '100%',\n },\n },\n });\n\n const horizontalLock = ElementModel.layout.spaceHorizontalLarger({\n element: document.createElement('div'),\n children: [assetInteriorElement],\n elementStyles: {\n element: {\n height: '100%',\n width: '100%',\n },\n },\n });\n\n const assetContainer = ElementModel.createDiv({\n className: 'umd-hero-stacked__asset',\n children: isWidthLarge\n ? [horizontalLock]\n : [mediaElement, createOverlay(includesAnimation)],\n elementStyles: {\n element: {\n position: 'relative',\n overflow: 'clip',\n display: 'grid',\n\n ['& img, & video']: {\n objectFit: 'cover',\n aspectRatio: '5 / 4',\n\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n maxHeight: '700px',\n minHeight: '300px',\n\n ...(!isHeightSmall && {\n minHeight: '400px',\n height: '65vh !important',\n }),\n },\n },\n },\n },\n });\n\n return assetContainer;\n};\n\nconst createHeadline = (\n props: Pick<\n HeroStackedProps,\n 'headline' | 'isHeightSmall' | 'includesAnimation' | 'isThemeDark'\n >,\n) => {\n const { headline, isHeightSmall, includesAnimation, isThemeDark } = props;\n const characterCount = headline?.textContent?.trim().length || 0;\n const isOverwriteHeadline = characterCount < 30;\n\n if (!headline) return null;\n\n const desktopStyles = {\n [`@container (${Styles.token.media.queries.desktop.min})`]: {\n ...(isOverwriteHeadline && {\n fontSize: '80px',\n }),\n },\n };\n\n const animationStyles = {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n animation: `${REF_KEY_FRAME_FONT_COLOR} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '100vh',\n animationRangeEnd: '130vh',\n\n ...(isHeightSmall && {\n animationRangeStart: '120vh',\n animationRangeEnd: '150vh',\n }),\n }),\n },\n };\n\n const elementStyles = {\n element: {\n color: Styles.token.color.black,\n maxWidth: '700px',\n margin: '0 auto',\n textTransform: 'uppercase',\n marginTop: `${Styles.token.spacing.sm}`,\n\n ...(isThemeDark && {\n color: Styles.token.color.white,\n }),\n\n ...(includesAnimation && {\n ...(!isThemeDark && {\n ...animationStyles,\n }),\n }),\n\n ...desktopStyles,\n },\n siblingAfter: {\n marginTop: `${Styles.token.spacing.md}`,\n },\n };\n\n return ElementModel.headline.campaignLarge({\n element: headline,\n elementStyles,\n });\n};\n\nconst createText = (\n props: Omit<HeroStackedProps, 'image' | 'video' | 'isWidthLarge'>,\n) => {\n const { topPosition, isThemeDark, includesAnimation, isHeightSmall } = props;\n const additionalSpread = topPosition ? parseInt(topPosition) : null;\n const textLockupElement = textLockup.large({\n ...props,\n ribbon: props.eyebrow,\n headlineComposite: createHeadline(props),\n textLargest: props.text,\n });\n\n const lock = ElementModel.layout.spaceHorizontalSmall({\n element: document.createElement('div'),\n children: [textLockupElement],\n elementStyles: {\n element: {\n position: 'relative',\n },\n },\n });\n\n return ElementModel.createDiv({\n className: 'umd-hero-stacked__text',\n children: [lock],\n elementStyles: {\n element: {\n padding: `${Styles.token.spacing.lg} 0`,\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n position: 'relative',\n zIndex: '999',\n\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n padding: `${Styles.token.spacing['6xl']} 0 ${Styles.token.spacing['3xl']}`,\n },\n\n ...(includesAnimation && {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n position: 'sticky',\n top: additionalSpread || 0,\n }),\n },\n }),\n\n [`& *`]: {\n ...(includesAnimation && {\n ...(!isThemeDark && {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n animation: `${REF_KEY_FRAME_FONT_COLOR} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '90vh',\n animationRangeEnd: '110vh',\n\n ...(isHeightSmall && {\n animationRangeStart: '90vh',\n animationRangeEnd: '110vh',\n }),\n }),\n },\n }),\n }),\n },\n\n [`& .${Styles.element.text.decoration.ribbon.className[0]}`]: {\n animation: 'none !important',\n },\n\n [`& .${Styles.element.text.rich.simpleLargest.className}`]: {\n maxWidth: '860px',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n },\n },\n });\n};\n\nexport default (props: HeroStackedProps) => {\n const asset = createAsset(props);\n const hasAsset = asset !== null;\n const shouldAnimateText = hasAsset && props.includesAnimation;\n\n const text = createText({\n ...props,\n includesAnimation: shouldAnimateText,\n });\n\n const children: ElementVisual[] = [text];\n if (hasAsset) {\n children.push(asset);\n }\n\n const composite = ElementModel.createDiv({\n className: 'umd-hero-stacked',\n children,\n elementStyles: {\n element: {\n containerType: 'inline-size',\n\n ...(props.isThemeDark && {\n backgroundColor: Styles.token.color.black,\n }),\n },\n },\n });\n\n composite.styles += keyFrameFadeOver;\n composite.styles += keyFrameFontColor;\n\n return composite;\n};\n"],"names":["Styles","assets.video.observedAutoPlay","assets.image.background","ElementModel.createDiv","ElementModel.layout.spaceHorizontalLarger","headline","Utils.theme.media.withViewTimelineAnimation","ElementModel.headline.campaignLarge","textLockup.large","ElementModel.layout.spaceHorizontalSmall"],"mappings":"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"}
|
|
@@ -77,7 +77,7 @@ const createOverlay = (includesAnimation) => {
|
|
|
77
77
|
...includesAnimation && {
|
|
78
78
|
[`@media (${Styles.token.media.queries.tablet.min})`]: {
|
|
79
79
|
[`@media (prefers-reduced-motion: no-preference)`]: {
|
|
80
|
-
[`@supports (animation-timeline:
|
|
80
|
+
[`@supports (animation-timeline: scroll())`]: {
|
|
81
81
|
animation: `${REF_KEY_FRAME_FADE_OVER} ease-in-out forwards`,
|
|
82
82
|
animationTimeline: "view()",
|
|
83
83
|
animationRangeStart: "30vh",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stacked.mjs","sources":["../../../source/composite/hero/stacked.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport * as Utils from 'utilities';\nimport { assets, textLockup } from 'atomic';\nimport { ElementModel } from 'model';\nimport { type ElementVisual } from '../../_types';\nimport { type HeroStackedProps } from './_types';\n\nconst REF_KEY_FRAME_FADE_OVER = 'hero-stacked-fade-over';\nconst REF_KEY_FRAME_FONT_COLOR = 'hero-stacked-font-color';\n\nconst keyFrameFadeOver = `\n @keyframes ${REF_KEY_FRAME_FADE_OVER} {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n`;\n\nconst keyFrameFontColor = `\n @keyframes ${REF_KEY_FRAME_FONT_COLOR} {\n from { color: ${Styles.token.color.black}; }\n to { color: ${Styles.token.color.white}; }\n }\n`;\n\nconst createVideoAsset = (video: HTMLVideoElement) => {\n return assets.video.observedAutoPlay({\n video,\n isScaled: true,\n });\n};\n\nconst createImageAsset = (image: HTMLImageElement) => {\n return assets.image.background({\n element: image,\n isScaled: true,\n isGifAllowed: true,\n isShowCaption: true,\n customStyles: {\n [`@media (${Styles.token.media.queries.large.max})`]: {\n [`&:has(.${Styles.element.asset.gif.toggle.className})`]: {\n minHeight: '56vw',\n },\n },\n\n [`@media (${Styles.token.media.queries.tablet.min})`]: {\n [`&:has(.${Styles.element.asset.gif.toggle.className})`]: {\n minHeight: '550px',\n },\n },\n\n [`& .${Styles.element.asset.gif.toggle.className} button`]: {\n zIndex: 99999,\n },\n },\n });\n};\n\nconst createOverlay = (includesAnimation?: boolean) => {\n return ElementModel.createDiv({\n className: 'umd-hero-stacked__overlay',\n elementStyles: {\n element: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n height: '100vh',\n width: '100vw',\n display: 'block',\n backgroundColor: 'rgba(0,0,0,.7)',\n zIndex: 99,\n opacity: 0,\n\n ...(includesAnimation && {\n [`@media (${Styles.token.media.queries.tablet.min})`]: {\n [`@media (prefers-reduced-motion: no-preference)`]: {\n [`@supports (animation-timeline: view())`]: {\n animation: `${REF_KEY_FRAME_FADE_OVER} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '30vh',\n animationRangeEnd: '70vh',\n },\n },\n },\n }),\n },\n },\n });\n};\n\nconst createAsset = ({\n image,\n video,\n includesAnimation,\n isWidthLarge = false,\n isHeightSmall = false,\n}: Pick<\n HeroStackedProps,\n 'image' | 'video' | 'includesAnimation' | 'isWidthLarge' | 'isHeightSmall'\n>) => {\n let mediaElement: ElementVisual | null = null;\n\n if (video && video instanceof HTMLVideoElement) {\n mediaElement = createVideoAsset(video);\n } else if (image) {\n mediaElement = createImageAsset(image);\n }\n\n if (!mediaElement) {\n return null;\n }\n\n const assetInteriorElement = ElementModel.createDiv({\n className: 'umd-hero-stacked__asset--interior',\n children: [mediaElement, createOverlay(includesAnimation)],\n elementStyles: {\n element: {\n overflow: 'clip',\n position: 'relative',\n height: '100%',\n },\n },\n });\n\n const horizontalLock = ElementModel.layout.spaceHorizontalLarger({\n element: document.createElement('div'),\n children: [assetInteriorElement],\n elementStyles: {\n element: {\n height: '100%',\n width: '100%',\n },\n },\n });\n\n const assetContainer = ElementModel.createDiv({\n className: 'umd-hero-stacked__asset',\n children: isWidthLarge\n ? [horizontalLock]\n : [mediaElement, createOverlay(includesAnimation)],\n elementStyles: {\n element: {\n position: 'relative',\n overflow: 'clip',\n display: 'grid',\n\n ['& img, & video']: {\n objectFit: 'cover',\n aspectRatio: '5 / 4',\n\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n maxHeight: '700px',\n minHeight: '300px',\n\n ...(!isHeightSmall && {\n minHeight: '400px',\n height: '65vh !important',\n }),\n },\n },\n },\n },\n });\n\n return assetContainer;\n};\n\nconst createHeadline = (\n props: Pick<\n HeroStackedProps,\n 'headline' | 'isHeightSmall' | 'includesAnimation' | 'isThemeDark'\n >,\n) => {\n const { headline, isHeightSmall, includesAnimation, isThemeDark } = props;\n const characterCount = headline?.textContent?.trim().length || 0;\n const isOverwriteHeadline = characterCount < 30;\n\n if (!headline) return null;\n\n const desktopStyles = {\n [`@container (${Styles.token.media.queries.desktop.min})`]: {\n ...(isOverwriteHeadline && {\n fontSize: '80px',\n }),\n },\n };\n\n const animationStyles = {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n animation: `${REF_KEY_FRAME_FONT_COLOR} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '100vh',\n animationRangeEnd: '130vh',\n\n ...(isHeightSmall && {\n animationRangeStart: '120vh',\n animationRangeEnd: '150vh',\n }),\n }),\n },\n };\n\n const elementStyles = {\n element: {\n color: Styles.token.color.black,\n maxWidth: '700px',\n margin: '0 auto',\n textTransform: 'uppercase',\n marginTop: `${Styles.token.spacing.sm}`,\n\n ...(isThemeDark && {\n color: Styles.token.color.white,\n }),\n\n ...(includesAnimation && {\n ...(!isThemeDark && {\n ...animationStyles,\n }),\n }),\n\n ...desktopStyles,\n },\n siblingAfter: {\n marginTop: `${Styles.token.spacing.md}`,\n },\n };\n\n return ElementModel.headline.campaignLarge({\n element: headline,\n elementStyles,\n });\n};\n\nconst createText = (\n props: Omit<HeroStackedProps, 'image' | 'video' | 'isWidthLarge'>,\n) => {\n const { topPosition, isThemeDark, includesAnimation, isHeightSmall } = props;\n const additionalSpread = topPosition ? parseInt(topPosition) : null;\n const textLockupElement = textLockup.large({\n ...props,\n ribbon: props.eyebrow,\n headlineComposite: createHeadline(props),\n textLargest: props.text,\n });\n\n const lock = ElementModel.layout.spaceHorizontalSmall({\n element: document.createElement('div'),\n children: [textLockupElement],\n elementStyles: {\n element: {\n position: 'relative',\n },\n },\n });\n\n return ElementModel.createDiv({\n className: 'umd-hero-stacked__text',\n children: [lock],\n elementStyles: {\n element: {\n padding: `${Styles.token.spacing.lg} 0`,\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n position: 'relative',\n zIndex: '999',\n\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n padding: `${Styles.token.spacing['6xl']} 0 ${Styles.token.spacing['3xl']}`,\n },\n\n ...(includesAnimation && {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n position: 'sticky',\n top: additionalSpread || 0,\n }),\n },\n }),\n\n [`& *`]: {\n ...(includesAnimation && {\n ...(!isThemeDark && {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n animation: `${REF_KEY_FRAME_FONT_COLOR} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '90vh',\n animationRangeEnd: '110vh',\n\n ...(isHeightSmall && {\n animationRangeStart: '90vh',\n animationRangeEnd: '110vh',\n }),\n }),\n },\n }),\n }),\n },\n\n [`& .${Styles.element.text.decoration.ribbon.className[0]}`]: {\n animation: 'none !important',\n },\n\n [`& .${Styles.element.text.rich.simpleLargest.className}`]: {\n maxWidth: '860px',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n },\n },\n });\n};\n\nexport default (props: HeroStackedProps) => {\n const asset = createAsset(props);\n const hasAsset = asset !== null;\n const shouldAnimateText = hasAsset && props.includesAnimation;\n\n const text = createText({\n ...props,\n includesAnimation: shouldAnimateText,\n });\n\n const children: ElementVisual[] = [text];\n if (hasAsset) {\n children.push(asset);\n }\n\n const composite = ElementModel.createDiv({\n className: 'umd-hero-stacked',\n children,\n elementStyles: {\n element: {\n containerType: 'inline-size',\n\n ...(props.isThemeDark && {\n backgroundColor: Styles.token.color.black,\n }),\n },\n },\n });\n\n composite.styles += keyFrameFadeOver;\n composite.styles += keyFrameFontColor;\n\n return composite;\n};\n"],"names":["assets.video.observedAutoPlay","assets.image.background","ElementModel.createDiv","ElementModel.layout.spaceHorizontalLarger","Utils.theme.media.withViewTimelineAnimation","ElementModel.headline.campaignLarge","textLockup.large","ElementModel.layout.spaceHorizontalSmall"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stacked.mjs","sources":["../../../source/composite/hero/stacked.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport * as Utils from 'utilities';\nimport { assets, textLockup } from 'atomic';\nimport { ElementModel } from 'model';\nimport { type ElementVisual } from '../../_types';\nimport { type HeroStackedProps } from './_types';\n\nconst REF_KEY_FRAME_FADE_OVER = 'hero-stacked-fade-over';\nconst REF_KEY_FRAME_FONT_COLOR = 'hero-stacked-font-color';\n\nconst keyFrameFadeOver = `\n @keyframes ${REF_KEY_FRAME_FADE_OVER} {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n`;\n\nconst keyFrameFontColor = `\n @keyframes ${REF_KEY_FRAME_FONT_COLOR} {\n from { color: ${Styles.token.color.black}; }\n to { color: ${Styles.token.color.white}; }\n }\n`;\n\nconst createVideoAsset = (video: HTMLVideoElement) => {\n return assets.video.observedAutoPlay({\n video,\n isScaled: true,\n });\n};\n\nconst createImageAsset = (image: HTMLImageElement) => {\n return assets.image.background({\n element: image,\n isScaled: true,\n isGifAllowed: true,\n isShowCaption: true,\n customStyles: {\n [`@media (${Styles.token.media.queries.large.max})`]: {\n [`&:has(.${Styles.element.asset.gif.toggle.className})`]: {\n minHeight: '56vw',\n },\n },\n\n [`@media (${Styles.token.media.queries.tablet.min})`]: {\n [`&:has(.${Styles.element.asset.gif.toggle.className})`]: {\n minHeight: '550px',\n },\n },\n\n [`& .${Styles.element.asset.gif.toggle.className} button`]: {\n zIndex: 99999,\n },\n },\n });\n};\n\nconst createOverlay = (includesAnimation?: boolean) => {\n return ElementModel.createDiv({\n className: 'umd-hero-stacked__overlay',\n elementStyles: {\n element: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n height: '100vh',\n width: '100vw',\n display: 'block',\n backgroundColor: 'rgba(0,0,0,.7)',\n zIndex: 99,\n opacity: 0,\n\n ...(includesAnimation && {\n [`@media (${Styles.token.media.queries.tablet.min})`]: {\n [`@media (prefers-reduced-motion: no-preference)`]: {\n [`@supports (animation-timeline: scroll())`]: {\n animation: `${REF_KEY_FRAME_FADE_OVER} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '30vh',\n animationRangeEnd: '70vh',\n },\n },\n },\n }),\n },\n },\n });\n};\n\nconst createAsset = ({\n image,\n video,\n includesAnimation,\n isWidthLarge = false,\n isHeightSmall = false,\n}: Pick<\n HeroStackedProps,\n 'image' | 'video' | 'includesAnimation' | 'isWidthLarge' | 'isHeightSmall'\n>) => {\n let mediaElement: ElementVisual | null = null;\n\n if (video && video instanceof HTMLVideoElement) {\n mediaElement = createVideoAsset(video);\n } else if (image) {\n mediaElement = createImageAsset(image);\n }\n\n if (!mediaElement) {\n return null;\n }\n\n const assetInteriorElement = ElementModel.createDiv({\n className: 'umd-hero-stacked__asset--interior',\n children: [mediaElement, createOverlay(includesAnimation)],\n elementStyles: {\n element: {\n overflow: 'clip',\n position: 'relative',\n height: '100%',\n },\n },\n });\n\n const horizontalLock = ElementModel.layout.spaceHorizontalLarger({\n element: document.createElement('div'),\n children: [assetInteriorElement],\n elementStyles: {\n element: {\n height: '100%',\n width: '100%',\n },\n },\n });\n\n const assetContainer = ElementModel.createDiv({\n className: 'umd-hero-stacked__asset',\n children: isWidthLarge\n ? [horizontalLock]\n : [mediaElement, createOverlay(includesAnimation)],\n elementStyles: {\n element: {\n position: 'relative',\n overflow: 'clip',\n display: 'grid',\n\n ['& img, & video']: {\n objectFit: 'cover',\n aspectRatio: '5 / 4',\n\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n maxHeight: '700px',\n minHeight: '300px',\n\n ...(!isHeightSmall && {\n minHeight: '400px',\n height: '65vh !important',\n }),\n },\n },\n },\n },\n });\n\n return assetContainer;\n};\n\nconst createHeadline = (\n props: Pick<\n HeroStackedProps,\n 'headline' | 'isHeightSmall' | 'includesAnimation' | 'isThemeDark'\n >,\n) => {\n const { headline, isHeightSmall, includesAnimation, isThemeDark } = props;\n const characterCount = headline?.textContent?.trim().length || 0;\n const isOverwriteHeadline = characterCount < 30;\n\n if (!headline) return null;\n\n const desktopStyles = {\n [`@container (${Styles.token.media.queries.desktop.min})`]: {\n ...(isOverwriteHeadline && {\n fontSize: '80px',\n }),\n },\n };\n\n const animationStyles = {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n animation: `${REF_KEY_FRAME_FONT_COLOR} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '100vh',\n animationRangeEnd: '130vh',\n\n ...(isHeightSmall && {\n animationRangeStart: '120vh',\n animationRangeEnd: '150vh',\n }),\n }),\n },\n };\n\n const elementStyles = {\n element: {\n color: Styles.token.color.black,\n maxWidth: '700px',\n margin: '0 auto',\n textTransform: 'uppercase',\n marginTop: `${Styles.token.spacing.sm}`,\n\n ...(isThemeDark && {\n color: Styles.token.color.white,\n }),\n\n ...(includesAnimation && {\n ...(!isThemeDark && {\n ...animationStyles,\n }),\n }),\n\n ...desktopStyles,\n },\n siblingAfter: {\n marginTop: `${Styles.token.spacing.md}`,\n },\n };\n\n return ElementModel.headline.campaignLarge({\n element: headline,\n elementStyles,\n });\n};\n\nconst createText = (\n props: Omit<HeroStackedProps, 'image' | 'video' | 'isWidthLarge'>,\n) => {\n const { topPosition, isThemeDark, includesAnimation, isHeightSmall } = props;\n const additionalSpread = topPosition ? parseInt(topPosition) : null;\n const textLockupElement = textLockup.large({\n ...props,\n ribbon: props.eyebrow,\n headlineComposite: createHeadline(props),\n textLargest: props.text,\n });\n\n const lock = ElementModel.layout.spaceHorizontalSmall({\n element: document.createElement('div'),\n children: [textLockupElement],\n elementStyles: {\n element: {\n position: 'relative',\n },\n },\n });\n\n return ElementModel.createDiv({\n className: 'umd-hero-stacked__text',\n children: [lock],\n elementStyles: {\n element: {\n padding: `${Styles.token.spacing.lg} 0`,\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n position: 'relative',\n zIndex: '999',\n\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n padding: `${Styles.token.spacing['6xl']} 0 ${Styles.token.spacing['3xl']}`,\n },\n\n ...(includesAnimation && {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n position: 'sticky',\n top: additionalSpread || 0,\n }),\n },\n }),\n\n [`& *`]: {\n ...(includesAnimation && {\n ...(!isThemeDark && {\n [`@container (${Styles.token.media.queries.tablet.min})`]: {\n ...Utils.theme.media.withViewTimelineAnimation({\n animation: `${REF_KEY_FRAME_FONT_COLOR} ease-in-out forwards`,\n animationTimeline: 'view()',\n animationRangeStart: '90vh',\n animationRangeEnd: '110vh',\n\n ...(isHeightSmall && {\n animationRangeStart: '90vh',\n animationRangeEnd: '110vh',\n }),\n }),\n },\n }),\n }),\n },\n\n [`& .${Styles.element.text.decoration.ribbon.className[0]}`]: {\n animation: 'none !important',\n },\n\n [`& .${Styles.element.text.rich.simpleLargest.className}`]: {\n maxWidth: '860px',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n },\n },\n });\n};\n\nexport default (props: HeroStackedProps) => {\n const asset = createAsset(props);\n const hasAsset = asset !== null;\n const shouldAnimateText = hasAsset && props.includesAnimation;\n\n const text = createText({\n ...props,\n includesAnimation: shouldAnimateText,\n });\n\n const children: ElementVisual[] = [text];\n if (hasAsset) {\n children.push(asset);\n }\n\n const composite = ElementModel.createDiv({\n className: 'umd-hero-stacked',\n children,\n elementStyles: {\n element: {\n containerType: 'inline-size',\n\n ...(props.isThemeDark && {\n backgroundColor: Styles.token.color.black,\n }),\n },\n },\n });\n\n composite.styles += keyFrameFadeOver;\n composite.styles += keyFrameFontColor;\n\n return composite;\n};\n"],"names":["assets.video.observedAutoPlay","assets.image.background","ElementModel.createDiv","ElementModel.layout.spaceHorizontalLarger","Utils.theme.media.withViewTimelineAnimation","ElementModel.headline.campaignLarge","textLockup.large","ElementModel.layout.spaceHorizontalSmall"],"mappings":"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"}
|
|
@@ -40,7 +40,7 @@ const TextAnimation = `
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
@media (prefers-reduced-motion: no-preference) {
|
|
43
|
-
@supports (animation-timeline:
|
|
43
|
+
@supports (animation-timeline: scroll()) {
|
|
44
44
|
.${ELEMENT_EXPAND_TEXT_ANIMATION} {
|
|
45
45
|
position: absolute;
|
|
46
46
|
top: 0;
|
|
@@ -52,7 +52,7 @@ const TextAnimation = `
|
|
|
52
52
|
|
|
53
53
|
@media (${Styles.token.media.queries.tablet.min}) {
|
|
54
54
|
@media (prefers-reduced-motion: no-preference) {
|
|
55
|
-
@supports (animation-timeline:
|
|
55
|
+
@supports (animation-timeline: scroll()) {
|
|
56
56
|
.${ELEMENT_EXPAND_TEXT_ANIMATION} {
|
|
57
57
|
transform: translateY(100vh);
|
|
58
58
|
}
|
|
@@ -77,7 +77,7 @@ const ImageOverlayContainer = `
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
@media (prefers-reduced-motion: no-preference) {
|
|
80
|
-
@supports (animation-timeline:
|
|
80
|
+
@supports (animation-timeline: scroll()) {
|
|
81
81
|
.${ELEMENT_EXPAND_IMAGE_OVERLAY} {
|
|
82
82
|
opacity: 1;
|
|
83
83
|
animation: img-overlay forwards;
|
|
@@ -99,7 +99,7 @@ const ImageSizeContainer = `
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
@media (prefers-reduced-motion: no-preference) {
|
|
102
|
-
@supports (animation-timeline:
|
|
102
|
+
@supports (animation-timeline: scroll()) {
|
|
103
103
|
.${ELEMENT_EXPAND_IMAGE_SIZE} {
|
|
104
104
|
width: ${Styles.token.spacing.maxWidth.smallest};
|
|
105
105
|
height: 70vh;
|
|
@@ -111,7 +111,7 @@ const ImageSizeContainer = `
|
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
@supports not (animation-timeline:
|
|
114
|
+
@supports not (animation-timeline: scroll()) {
|
|
115
115
|
.${ELEMENT_EXPAND_IMAGE_SIZE} {
|
|
116
116
|
height: 100%;
|
|
117
117
|
}
|
|
@@ -130,7 +130,7 @@ const ImagePosition = `
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
@media (prefers-reduced-motion: no-preference) {
|
|
133
|
-
@supports (animation-timeline:
|
|
133
|
+
@supports (animation-timeline: scroll()) {
|
|
134
134
|
.${ELEMENT_EXPAND_IMAGE_POSITION} {
|
|
135
135
|
display: flex;
|
|
136
136
|
justify-content: center;
|
|
@@ -144,7 +144,7 @@ const ImagePosition = `
|
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
@supports not (animation-timeline:
|
|
147
|
+
@supports not (animation-timeline: scroll()) {
|
|
148
148
|
.${ELEMENT_EXPAND_IMAGE_POSITION} {
|
|
149
149
|
height: 100%;
|
|
150
150
|
}
|
|
@@ -166,7 +166,7 @@ const ImageContainer = `
|
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
@media (prefers-reduced-motion: no-preference) {
|
|
169
|
-
@supports (animation-timeline:
|
|
169
|
+
@supports (animation-timeline: scroll()) {
|
|
170
170
|
.${ELEMENT_EXPAND_IMAGE_CONTAINER} {
|
|
171
171
|
position: relative;
|
|
172
172
|
}
|
|
@@ -187,7 +187,7 @@ const STYLES_LAYOUT_IMAGE_EXPAND = `
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
@media (prefers-reduced-motion: no-preference) {
|
|
190
|
-
@supports (animation-timeline:
|
|
190
|
+
@supports (animation-timeline: scroll()) {
|
|
191
191
|
.${ELEMENT_EXPLAND_DECLARATION} {
|
|
192
192
|
height: 180vh;
|
|
193
193
|
}
|
|
@@ -196,7 +196,7 @@ const STYLES_LAYOUT_IMAGE_EXPAND = `
|
|
|
196
196
|
|
|
197
197
|
@media (${Styles.token.media.queries.tablet.min}) {
|
|
198
198
|
@media (prefers-reduced-motion: no-preference) {
|
|
199
|
-
@supports (animation-timeline:
|
|
199
|
+
@supports (animation-timeline: scroll()) {
|
|
200
200
|
.${ELEMENT_EXPLAND_DECLARATION} {
|
|
201
201
|
height: 200vh;
|
|
202
202
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.js","sources":["../../../../source/composite/layout/image/expand.ts"],"sourcesContent":["import { token, layout } from '@universityofmaryland/web-styles-library';\nimport * as Utility from 'utilities';\n\ntype TypeLayoutImageExpandProps = {\n content: HTMLElement;\n image: HTMLImageElement;\n};\n\nconst { spacing } = token;\n\nconst ELEMENT_NAME = 'umd-layout-image-expand';\nconst ELEMENT_EXPLAND_DECLARATION = 'layout-image-expand-declaration';\nconst ELEMENT_EXPAND_CONTAINER = 'layout-image-expand-container';\n\nconst ELEMENT_EXPAND_IMAGE_CONTAINER = 'layout-image-expand-image-container';\nconst ELEMENT_EXPAND_IMAGE_POSITION = 'layout-image-expand-image-position';\nconst ELEMENT_EXPAND_IMAGE_SIZE = 'layout-image-expand-image-size';\nconst ELEMENT_EXPAND_IMAGE_OVERLAY = 'layout-image-expand-image-overlay';\n\nconst ELEMENT_EXPAND_TEXT_CONTAINER = 'layout-image-expand-text-container';\nconst ELEMENT_EXPAND_TEXT_LOCK = 'layout-image-expand-text-lock';\nconst ELEMENT_EXPAND_TEXT_ANIMATION = 'layout-image-expand-text-animation';\n\n// prettier-ignore\nconst TextLock = `\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${ELEMENT_EXPAND_TEXT_LOCK}`]: layout.space.horizontal.larger,\n },\n })}\n\n .${ELEMENT_EXPAND_TEXT_LOCK} {\n display: flex;\n height: 100%;\n }\n`;\n\n// prettier-ignore\nconst TextContainer = `\n .${ELEMENT_EXPAND_TEXT_CONTAINER} {\n position: relative;\n padding-top: ${token.spacing.max};\n padding-bottom: ${token.spacing.max};\n height: 100%;\n z-index: 9999;\n }\n`;\n\n// prettier-ignore\nconst TextAnimation = `\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n width: 100vw;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n position: absolute;\n top: 0;\n height: 80vh;\n transform: translateY(80vh);\n }\n }\n }\n\n @media (${token.media.queries.tablet.min}) {\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n transform: translateY(100vh);\n }\n }\n }\n }\n`;\n\n// prettier-ignore\nconst ImageOverlayContainer = `\n @keyframes img-overlay {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n .${ELEMENT_EXPAND_IMAGE_OVERLAY} {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n background: rgba(0,0,0,0.65);\n opacity: 1;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_OVERLAY} {\n opacity: 1;\n animation: img-overlay forwards;\n animation-timeline: view();\n animation-range-start: 70vh;\n animation-range-end: 100vh;\n }\n }\n }\n`;\n\n// prettier-ignore\nconst ImageSizeContainer = `\n @keyframes img-size {\n to { width: 100%; height: 100vh; }\n }\n\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n overflow: hidden;\n position: relative;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n width: ${token.spacing.maxWidth.smallest};\n height: 70vh;\n animation: img-size ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: 200vh;\n }\n }\n }\n\n @supports not (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n height: 100%;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n height: 100%;\n }\n }\n`;\n\n// prettier-ignore\nconst ImagePosition = `\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n width: 100%;\n margin: 0 auto;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n display: flex;\n justify-content: center;\n position: sticky;\n top: 0; \n animation: img-position ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: 200vh;\n }\n }\n }\n\n @supports not (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n height: 100%;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n height: 100%;\n }\n }\n`;\n\n// prettier-ignore\nconst ImageContainer = `\n .${ELEMENT_EXPAND_IMAGE_CONTAINER} {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_CONTAINER} {\n position: relative;\n }\n }\n }\n`;\n\n// prettier-ignore\nconst Container = `\n .${ELEMENT_EXPAND_CONTAINER} {\n height: 100%;\n width: 100%;\n position: relative;\n }\n`;\n\n// prettier-ignore\nconst STYLES_LAYOUT_IMAGE_EXPAND = `\n .${ELEMENT_EXPLAND_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n overflow: clip;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPLAND_DECLARATION} {\n height: 180vh;\n }\n }\n }\n\n @media (${token.media.queries.tablet.min}) {\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPLAND_DECLARATION} {\n height: 200vh;\n }\n }\n }\n }\n\n .${ELEMENT_EXPLAND_DECLARATION} img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n ${Container}\n ${ImageContainer}\n ${ImageSizeContainer}\n ${ImagePosition}\n ${ImageOverlayContainer}\n ${TextAnimation}\n ${TextContainer}\n ${TextLock}\n`;\n\nconst CreateImageContainer = ({ image }: TypeLayoutImageExpandProps) => {\n const imageContainer = document.createElement('div');\n const imagePosition = document.createElement('div');\n const imageSize = document.createElement('div');\n const imageOverlay = document.createElement('div');\n\n imageOverlay.classList.add(ELEMENT_EXPAND_IMAGE_OVERLAY);\n\n imageSize.classList.add(ELEMENT_EXPAND_IMAGE_SIZE);\n imageSize.appendChild(image);\n imageSize.appendChild(imageOverlay);\n\n imagePosition.classList.add(ELEMENT_EXPAND_IMAGE_POSITION);\n imagePosition.appendChild(imageSize);\n\n imageContainer.appendChild(imagePosition);\n imageContainer.classList.add(ELEMENT_EXPAND_IMAGE_CONTAINER);\n\n return imageContainer;\n};\n\nconst CreateTextContainer = ({ content }: TypeLayoutImageExpandProps) => {\n const textAnimation = document.createElement('div');\n const textContainer = document.createElement('div');\n const textLock = document.createElement('div');\n\n textLock.classList.add(ELEMENT_EXPAND_TEXT_LOCK);\n textLock.appendChild(content);\n\n textContainer.appendChild(textLock);\n textContainer.classList.add(ELEMENT_EXPAND_TEXT_CONTAINER);\n\n textAnimation.classList.add(ELEMENT_EXPAND_TEXT_ANIMATION);\n textAnimation.appendChild(textContainer);\n\n return textAnimation;\n};\n\nexport default (props: TypeLayoutImageExpandProps) => {\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const imageContainer = CreateImageContainer(props);\n const textContainer = CreateTextContainer(props);\n const sizeImageForText = () => {\n const textContainerHeight =\n textContainer.clientHeight +\n Utility.theme.convertPixelStringToNumber(spacing['2xl']) * 2;\n const imageContainerHeight = container.clientHeight;\n\n if (textContainerHeight > imageContainerHeight) {\n container.style.minHeight = `${textContainerHeight}px`;\n }\n };\n\n if (\n Utility.accessibility.isScreenZoomed() &&\n !Utility.accessibility.isPrefferdReducedMotion()\n ) {\n textContainer.style.height = '90vh';\n textContainer.style.transform = 'translateY(0)';\n }\n\n if (!CSS.supports('animation-timeline', 'view()')) {\n setTimeout(() => {\n sizeImageForText();\n }, 1000);\n window.addEventListener('resize', () => sizeImageForText());\n }\n\n container.appendChild(imageContainer);\n container.appendChild(textContainer);\n container.classList.add(ELEMENT_EXPAND_CONTAINER);\n\n declaration.appendChild(container);\n declaration.classList.add(ELEMENT_EXPLAND_DECLARATION);\n\n return { element: declaration, styles: STYLES_LAYOUT_IMAGE_EXPAND };\n};\n"],"names":["token","Utility.theme.convertJSSObjectToStyles","layout","Utility.theme.convertPixelStringToNumber","Utility.accessibility.isScreenZoomed","Utility.accessibility.isPrefferdReducedMotion"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"expand.js","sources":["../../../../source/composite/layout/image/expand.ts"],"sourcesContent":["import { token, layout } from '@universityofmaryland/web-styles-library';\nimport * as Utility from 'utilities';\n\ntype TypeLayoutImageExpandProps = {\n content: HTMLElement;\n image: HTMLImageElement;\n};\n\nconst { spacing } = token;\n\nconst ELEMENT_NAME = 'umd-layout-image-expand';\nconst ELEMENT_EXPLAND_DECLARATION = 'layout-image-expand-declaration';\nconst ELEMENT_EXPAND_CONTAINER = 'layout-image-expand-container';\n\nconst ELEMENT_EXPAND_IMAGE_CONTAINER = 'layout-image-expand-image-container';\nconst ELEMENT_EXPAND_IMAGE_POSITION = 'layout-image-expand-image-position';\nconst ELEMENT_EXPAND_IMAGE_SIZE = 'layout-image-expand-image-size';\nconst ELEMENT_EXPAND_IMAGE_OVERLAY = 'layout-image-expand-image-overlay';\n\nconst ELEMENT_EXPAND_TEXT_CONTAINER = 'layout-image-expand-text-container';\nconst ELEMENT_EXPAND_TEXT_LOCK = 'layout-image-expand-text-lock';\nconst ELEMENT_EXPAND_TEXT_ANIMATION = 'layout-image-expand-text-animation';\n\n// prettier-ignore\nconst TextLock = `\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${ELEMENT_EXPAND_TEXT_LOCK}`]: layout.space.horizontal.larger,\n },\n })}\n\n .${ELEMENT_EXPAND_TEXT_LOCK} {\n display: flex;\n height: 100%;\n }\n`;\n\n// prettier-ignore\nconst TextContainer = `\n .${ELEMENT_EXPAND_TEXT_CONTAINER} {\n position: relative;\n padding-top: ${token.spacing.max};\n padding-bottom: ${token.spacing.max};\n height: 100%;\n z-index: 9999;\n }\n`;\n\n// prettier-ignore\nconst TextAnimation = `\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n width: 100vw;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n position: absolute;\n top: 0;\n height: 80vh;\n transform: translateY(80vh);\n }\n }\n }\n\n @media (${token.media.queries.tablet.min}) {\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n transform: translateY(100vh);\n }\n }\n }\n }\n`;\n\n// prettier-ignore\nconst ImageOverlayContainer = `\n @keyframes img-overlay {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n .${ELEMENT_EXPAND_IMAGE_OVERLAY} {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n background: rgba(0,0,0,0.65);\n opacity: 1;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_OVERLAY} {\n opacity: 1;\n animation: img-overlay forwards;\n animation-timeline: view();\n animation-range-start: 70vh;\n animation-range-end: 100vh;\n }\n }\n }\n`;\n\n// prettier-ignore\nconst ImageSizeContainer = `\n @keyframes img-size {\n to { width: 100%; height: 100vh; }\n }\n\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n overflow: hidden;\n position: relative;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n width: ${token.spacing.maxWidth.smallest};\n height: 70vh;\n animation: img-size ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: 200vh;\n }\n }\n }\n\n @supports not (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n height: 100%;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n height: 100%;\n }\n }\n`;\n\n// prettier-ignore\nconst ImagePosition = `\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n width: 100%;\n margin: 0 auto;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n display: flex;\n justify-content: center;\n position: sticky;\n top: 0; \n animation: img-position ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: 200vh;\n }\n }\n }\n\n @supports not (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n height: 100%;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n height: 100%;\n }\n }\n`;\n\n// prettier-ignore\nconst ImageContainer = `\n .${ELEMENT_EXPAND_IMAGE_CONTAINER} {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_CONTAINER} {\n position: relative;\n }\n }\n }\n`;\n\n// prettier-ignore\nconst Container = `\n .${ELEMENT_EXPAND_CONTAINER} {\n height: 100%;\n width: 100%;\n position: relative;\n }\n`;\n\n// prettier-ignore\nconst STYLES_LAYOUT_IMAGE_EXPAND = `\n .${ELEMENT_EXPLAND_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n overflow: clip;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPLAND_DECLARATION} {\n height: 180vh;\n }\n }\n }\n\n @media (${token.media.queries.tablet.min}) {\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPLAND_DECLARATION} {\n height: 200vh;\n }\n }\n }\n }\n\n .${ELEMENT_EXPLAND_DECLARATION} img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n ${Container}\n ${ImageContainer}\n ${ImageSizeContainer}\n ${ImagePosition}\n ${ImageOverlayContainer}\n ${TextAnimation}\n ${TextContainer}\n ${TextLock}\n`;\n\nconst CreateImageContainer = ({ image }: TypeLayoutImageExpandProps) => {\n const imageContainer = document.createElement('div');\n const imagePosition = document.createElement('div');\n const imageSize = document.createElement('div');\n const imageOverlay = document.createElement('div');\n\n imageOverlay.classList.add(ELEMENT_EXPAND_IMAGE_OVERLAY);\n\n imageSize.classList.add(ELEMENT_EXPAND_IMAGE_SIZE);\n imageSize.appendChild(image);\n imageSize.appendChild(imageOverlay);\n\n imagePosition.classList.add(ELEMENT_EXPAND_IMAGE_POSITION);\n imagePosition.appendChild(imageSize);\n\n imageContainer.appendChild(imagePosition);\n imageContainer.classList.add(ELEMENT_EXPAND_IMAGE_CONTAINER);\n\n return imageContainer;\n};\n\nconst CreateTextContainer = ({ content }: TypeLayoutImageExpandProps) => {\n const textAnimation = document.createElement('div');\n const textContainer = document.createElement('div');\n const textLock = document.createElement('div');\n\n textLock.classList.add(ELEMENT_EXPAND_TEXT_LOCK);\n textLock.appendChild(content);\n\n textContainer.appendChild(textLock);\n textContainer.classList.add(ELEMENT_EXPAND_TEXT_CONTAINER);\n\n textAnimation.classList.add(ELEMENT_EXPAND_TEXT_ANIMATION);\n textAnimation.appendChild(textContainer);\n\n return textAnimation;\n};\n\nexport default (props: TypeLayoutImageExpandProps) => {\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const imageContainer = CreateImageContainer(props);\n const textContainer = CreateTextContainer(props);\n const sizeImageForText = () => {\n const textContainerHeight =\n textContainer.clientHeight +\n Utility.theme.convertPixelStringToNumber(spacing['2xl']) * 2;\n const imageContainerHeight = container.clientHeight;\n\n if (textContainerHeight > imageContainerHeight) {\n container.style.minHeight = `${textContainerHeight}px`;\n }\n };\n\n if (\n Utility.accessibility.isScreenZoomed() &&\n !Utility.accessibility.isPrefferdReducedMotion()\n ) {\n textContainer.style.height = '90vh';\n textContainer.style.transform = 'translateY(0)';\n }\n\n if (!CSS.supports('animation-timeline', 'view()')) {\n setTimeout(() => {\n sizeImageForText();\n }, 1000);\n window.addEventListener('resize', () => sizeImageForText());\n }\n\n container.appendChild(imageContainer);\n container.appendChild(textContainer);\n container.classList.add(ELEMENT_EXPAND_CONTAINER);\n\n declaration.appendChild(container);\n declaration.classList.add(ELEMENT_EXPLAND_DECLARATION);\n\n return { element: declaration, styles: STYLES_LAYOUT_IMAGE_EXPAND };\n};\n"],"names":["token","Utility.theme.convertJSSObjectToStyles","layout","Utility.theme.convertPixelStringToNumber","Utility.accessibility.isScreenZoomed","Utility.accessibility.isPrefferdReducedMotion"],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ const TextAnimation = `
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
@media (prefers-reduced-motion: no-preference) {
|
|
42
|
-
@supports (animation-timeline:
|
|
42
|
+
@supports (animation-timeline: scroll()) {
|
|
43
43
|
.${ELEMENT_EXPAND_TEXT_ANIMATION} {
|
|
44
44
|
position: absolute;
|
|
45
45
|
top: 0;
|
|
@@ -51,7 +51,7 @@ const TextAnimation = `
|
|
|
51
51
|
|
|
52
52
|
@media (${token.media.queries.tablet.min}) {
|
|
53
53
|
@media (prefers-reduced-motion: no-preference) {
|
|
54
|
-
@supports (animation-timeline:
|
|
54
|
+
@supports (animation-timeline: scroll()) {
|
|
55
55
|
.${ELEMENT_EXPAND_TEXT_ANIMATION} {
|
|
56
56
|
transform: translateY(100vh);
|
|
57
57
|
}
|
|
@@ -76,7 +76,7 @@ const ImageOverlayContainer = `
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
@media (prefers-reduced-motion: no-preference) {
|
|
79
|
-
@supports (animation-timeline:
|
|
79
|
+
@supports (animation-timeline: scroll()) {
|
|
80
80
|
.${ELEMENT_EXPAND_IMAGE_OVERLAY} {
|
|
81
81
|
opacity: 1;
|
|
82
82
|
animation: img-overlay forwards;
|
|
@@ -98,7 +98,7 @@ const ImageSizeContainer = `
|
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
@media (prefers-reduced-motion: no-preference) {
|
|
101
|
-
@supports (animation-timeline:
|
|
101
|
+
@supports (animation-timeline: scroll()) {
|
|
102
102
|
.${ELEMENT_EXPAND_IMAGE_SIZE} {
|
|
103
103
|
width: ${token.spacing.maxWidth.smallest};
|
|
104
104
|
height: 70vh;
|
|
@@ -110,7 +110,7 @@ const ImageSizeContainer = `
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
@supports not (animation-timeline:
|
|
113
|
+
@supports not (animation-timeline: scroll()) {
|
|
114
114
|
.${ELEMENT_EXPAND_IMAGE_SIZE} {
|
|
115
115
|
height: 100%;
|
|
116
116
|
}
|
|
@@ -129,7 +129,7 @@ const ImagePosition = `
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
@media (prefers-reduced-motion: no-preference) {
|
|
132
|
-
@supports (animation-timeline:
|
|
132
|
+
@supports (animation-timeline: scroll()) {
|
|
133
133
|
.${ELEMENT_EXPAND_IMAGE_POSITION} {
|
|
134
134
|
display: flex;
|
|
135
135
|
justify-content: center;
|
|
@@ -143,7 +143,7 @@ const ImagePosition = `
|
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
@supports not (animation-timeline:
|
|
146
|
+
@supports not (animation-timeline: scroll()) {
|
|
147
147
|
.${ELEMENT_EXPAND_IMAGE_POSITION} {
|
|
148
148
|
height: 100%;
|
|
149
149
|
}
|
|
@@ -165,7 +165,7 @@ const ImageContainer = `
|
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
@media (prefers-reduced-motion: no-preference) {
|
|
168
|
-
@supports (animation-timeline:
|
|
168
|
+
@supports (animation-timeline: scroll()) {
|
|
169
169
|
.${ELEMENT_EXPAND_IMAGE_CONTAINER} {
|
|
170
170
|
position: relative;
|
|
171
171
|
}
|
|
@@ -186,7 +186,7 @@ const STYLES_LAYOUT_IMAGE_EXPAND = `
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
@media (prefers-reduced-motion: no-preference) {
|
|
189
|
-
@supports (animation-timeline:
|
|
189
|
+
@supports (animation-timeline: scroll()) {
|
|
190
190
|
.${ELEMENT_EXPLAND_DECLARATION} {
|
|
191
191
|
height: 180vh;
|
|
192
192
|
}
|
|
@@ -195,7 +195,7 @@ const STYLES_LAYOUT_IMAGE_EXPAND = `
|
|
|
195
195
|
|
|
196
196
|
@media (${token.media.queries.tablet.min}) {
|
|
197
197
|
@media (prefers-reduced-motion: no-preference) {
|
|
198
|
-
@supports (animation-timeline:
|
|
198
|
+
@supports (animation-timeline: scroll()) {
|
|
199
199
|
.${ELEMENT_EXPLAND_DECLARATION} {
|
|
200
200
|
height: 200vh;
|
|
201
201
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.mjs","sources":["../../../../source/composite/layout/image/expand.ts"],"sourcesContent":["import { token, layout } from '@universityofmaryland/web-styles-library';\nimport * as Utility from 'utilities';\n\ntype TypeLayoutImageExpandProps = {\n content: HTMLElement;\n image: HTMLImageElement;\n};\n\nconst { spacing } = token;\n\nconst ELEMENT_NAME = 'umd-layout-image-expand';\nconst ELEMENT_EXPLAND_DECLARATION = 'layout-image-expand-declaration';\nconst ELEMENT_EXPAND_CONTAINER = 'layout-image-expand-container';\n\nconst ELEMENT_EXPAND_IMAGE_CONTAINER = 'layout-image-expand-image-container';\nconst ELEMENT_EXPAND_IMAGE_POSITION = 'layout-image-expand-image-position';\nconst ELEMENT_EXPAND_IMAGE_SIZE = 'layout-image-expand-image-size';\nconst ELEMENT_EXPAND_IMAGE_OVERLAY = 'layout-image-expand-image-overlay';\n\nconst ELEMENT_EXPAND_TEXT_CONTAINER = 'layout-image-expand-text-container';\nconst ELEMENT_EXPAND_TEXT_LOCK = 'layout-image-expand-text-lock';\nconst ELEMENT_EXPAND_TEXT_ANIMATION = 'layout-image-expand-text-animation';\n\n// prettier-ignore\nconst TextLock = `\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${ELEMENT_EXPAND_TEXT_LOCK}`]: layout.space.horizontal.larger,\n },\n })}\n\n .${ELEMENT_EXPAND_TEXT_LOCK} {\n display: flex;\n height: 100%;\n }\n`;\n\n// prettier-ignore\nconst TextContainer = `\n .${ELEMENT_EXPAND_TEXT_CONTAINER} {\n position: relative;\n padding-top: ${token.spacing.max};\n padding-bottom: ${token.spacing.max};\n height: 100%;\n z-index: 9999;\n }\n`;\n\n// prettier-ignore\nconst TextAnimation = `\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n width: 100vw;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n position: absolute;\n top: 0;\n height: 80vh;\n transform: translateY(80vh);\n }\n }\n }\n\n @media (${token.media.queries.tablet.min}) {\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n transform: translateY(100vh);\n }\n }\n }\n }\n`;\n\n// prettier-ignore\nconst ImageOverlayContainer = `\n @keyframes img-overlay {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n .${ELEMENT_EXPAND_IMAGE_OVERLAY} {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n background: rgba(0,0,0,0.65);\n opacity: 1;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_OVERLAY} {\n opacity: 1;\n animation: img-overlay forwards;\n animation-timeline: view();\n animation-range-start: 70vh;\n animation-range-end: 100vh;\n }\n }\n }\n`;\n\n// prettier-ignore\nconst ImageSizeContainer = `\n @keyframes img-size {\n to { width: 100%; height: 100vh; }\n }\n\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n overflow: hidden;\n position: relative;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n width: ${token.spacing.maxWidth.smallest};\n height: 70vh;\n animation: img-size ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: 200vh;\n }\n }\n }\n\n @supports not (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n height: 100%;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n height: 100%;\n }\n }\n`;\n\n// prettier-ignore\nconst ImagePosition = `\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n width: 100%;\n margin: 0 auto;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n display: flex;\n justify-content: center;\n position: sticky;\n top: 0; \n animation: img-position ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: 200vh;\n }\n }\n }\n\n @supports not (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n height: 100%;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n height: 100%;\n }\n }\n`;\n\n// prettier-ignore\nconst ImageContainer = `\n .${ELEMENT_EXPAND_IMAGE_CONTAINER} {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPAND_IMAGE_CONTAINER} {\n position: relative;\n }\n }\n }\n`;\n\n// prettier-ignore\nconst Container = `\n .${ELEMENT_EXPAND_CONTAINER} {\n height: 100%;\n width: 100%;\n position: relative;\n }\n`;\n\n// prettier-ignore\nconst STYLES_LAYOUT_IMAGE_EXPAND = `\n .${ELEMENT_EXPLAND_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n overflow: clip;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPLAND_DECLARATION} {\n height: 180vh;\n }\n }\n }\n\n @media (${token.media.queries.tablet.min}) {\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: view()) {\n .${ELEMENT_EXPLAND_DECLARATION} {\n height: 200vh;\n }\n }\n }\n }\n\n .${ELEMENT_EXPLAND_DECLARATION} img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n ${Container}\n ${ImageContainer}\n ${ImageSizeContainer}\n ${ImagePosition}\n ${ImageOverlayContainer}\n ${TextAnimation}\n ${TextContainer}\n ${TextLock}\n`;\n\nconst CreateImageContainer = ({ image }: TypeLayoutImageExpandProps) => {\n const imageContainer = document.createElement('div');\n const imagePosition = document.createElement('div');\n const imageSize = document.createElement('div');\n const imageOverlay = document.createElement('div');\n\n imageOverlay.classList.add(ELEMENT_EXPAND_IMAGE_OVERLAY);\n\n imageSize.classList.add(ELEMENT_EXPAND_IMAGE_SIZE);\n imageSize.appendChild(image);\n imageSize.appendChild(imageOverlay);\n\n imagePosition.classList.add(ELEMENT_EXPAND_IMAGE_POSITION);\n imagePosition.appendChild(imageSize);\n\n imageContainer.appendChild(imagePosition);\n imageContainer.classList.add(ELEMENT_EXPAND_IMAGE_CONTAINER);\n\n return imageContainer;\n};\n\nconst CreateTextContainer = ({ content }: TypeLayoutImageExpandProps) => {\n const textAnimation = document.createElement('div');\n const textContainer = document.createElement('div');\n const textLock = document.createElement('div');\n\n textLock.classList.add(ELEMENT_EXPAND_TEXT_LOCK);\n textLock.appendChild(content);\n\n textContainer.appendChild(textLock);\n textContainer.classList.add(ELEMENT_EXPAND_TEXT_CONTAINER);\n\n textAnimation.classList.add(ELEMENT_EXPAND_TEXT_ANIMATION);\n textAnimation.appendChild(textContainer);\n\n return textAnimation;\n};\n\nexport default (props: TypeLayoutImageExpandProps) => {\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const imageContainer = CreateImageContainer(props);\n const textContainer = CreateTextContainer(props);\n const sizeImageForText = () => {\n const textContainerHeight =\n textContainer.clientHeight +\n Utility.theme.convertPixelStringToNumber(spacing['2xl']) * 2;\n const imageContainerHeight = container.clientHeight;\n\n if (textContainerHeight > imageContainerHeight) {\n container.style.minHeight = `${textContainerHeight}px`;\n }\n };\n\n if (\n Utility.accessibility.isScreenZoomed() &&\n !Utility.accessibility.isPrefferdReducedMotion()\n ) {\n textContainer.style.height = '90vh';\n textContainer.style.transform = 'translateY(0)';\n }\n\n if (!CSS.supports('animation-timeline', 'view()')) {\n setTimeout(() => {\n sizeImageForText();\n }, 1000);\n window.addEventListener('resize', () => sizeImageForText());\n }\n\n container.appendChild(imageContainer);\n container.appendChild(textContainer);\n container.classList.add(ELEMENT_EXPAND_CONTAINER);\n\n declaration.appendChild(container);\n declaration.classList.add(ELEMENT_EXPLAND_DECLARATION);\n\n return { element: declaration, styles: STYLES_LAYOUT_IMAGE_EXPAND };\n};\n"],"names":["Utility.theme.convertJSSObjectToStyles","Utility.theme.convertPixelStringToNumber","Utility.accessibility.isScreenZoomed","Utility.accessibility.isPrefferdReducedMotion"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"expand.mjs","sources":["../../../../source/composite/layout/image/expand.ts"],"sourcesContent":["import { token, layout } from '@universityofmaryland/web-styles-library';\nimport * as Utility from 'utilities';\n\ntype TypeLayoutImageExpandProps = {\n content: HTMLElement;\n image: HTMLImageElement;\n};\n\nconst { spacing } = token;\n\nconst ELEMENT_NAME = 'umd-layout-image-expand';\nconst ELEMENT_EXPLAND_DECLARATION = 'layout-image-expand-declaration';\nconst ELEMENT_EXPAND_CONTAINER = 'layout-image-expand-container';\n\nconst ELEMENT_EXPAND_IMAGE_CONTAINER = 'layout-image-expand-image-container';\nconst ELEMENT_EXPAND_IMAGE_POSITION = 'layout-image-expand-image-position';\nconst ELEMENT_EXPAND_IMAGE_SIZE = 'layout-image-expand-image-size';\nconst ELEMENT_EXPAND_IMAGE_OVERLAY = 'layout-image-expand-image-overlay';\n\nconst ELEMENT_EXPAND_TEXT_CONTAINER = 'layout-image-expand-text-container';\nconst ELEMENT_EXPAND_TEXT_LOCK = 'layout-image-expand-text-lock';\nconst ELEMENT_EXPAND_TEXT_ANIMATION = 'layout-image-expand-text-animation';\n\n// prettier-ignore\nconst TextLock = `\n ${Utility.theme.convertJSSObjectToStyles({\n styleObj: {\n [`.${ELEMENT_EXPAND_TEXT_LOCK}`]: layout.space.horizontal.larger,\n },\n })}\n\n .${ELEMENT_EXPAND_TEXT_LOCK} {\n display: flex;\n height: 100%;\n }\n`;\n\n// prettier-ignore\nconst TextContainer = `\n .${ELEMENT_EXPAND_TEXT_CONTAINER} {\n position: relative;\n padding-top: ${token.spacing.max};\n padding-bottom: ${token.spacing.max};\n height: 100%;\n z-index: 9999;\n }\n`;\n\n// prettier-ignore\nconst TextAnimation = `\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n width: 100vw;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n position: absolute;\n top: 0;\n height: 80vh;\n transform: translateY(80vh);\n }\n }\n }\n\n @media (${token.media.queries.tablet.min}) {\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n transform: translateY(100vh);\n }\n }\n }\n }\n`;\n\n// prettier-ignore\nconst ImageOverlayContainer = `\n @keyframes img-overlay {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n .${ELEMENT_EXPAND_IMAGE_OVERLAY} {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n background: rgba(0,0,0,0.65);\n opacity: 1;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_OVERLAY} {\n opacity: 1;\n animation: img-overlay forwards;\n animation-timeline: view();\n animation-range-start: 70vh;\n animation-range-end: 100vh;\n }\n }\n }\n`;\n\n// prettier-ignore\nconst ImageSizeContainer = `\n @keyframes img-size {\n to { width: 100%; height: 100vh; }\n }\n\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n overflow: hidden;\n position: relative;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n width: ${token.spacing.maxWidth.smallest};\n height: 70vh;\n animation: img-size ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: 200vh;\n }\n }\n }\n\n @supports not (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n height: 100%;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n height: 100%;\n }\n }\n`;\n\n// prettier-ignore\nconst ImagePosition = `\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n width: 100%;\n margin: 0 auto;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n display: flex;\n justify-content: center;\n position: sticky;\n top: 0; \n animation: img-position ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: 200vh;\n }\n }\n }\n\n @supports not (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n height: 100%;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n height: 100%;\n }\n }\n`;\n\n// prettier-ignore\nconst ImageContainer = `\n .${ELEMENT_EXPAND_IMAGE_CONTAINER} {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_CONTAINER} {\n position: relative;\n }\n }\n }\n`;\n\n// prettier-ignore\nconst Container = `\n .${ELEMENT_EXPAND_CONTAINER} {\n height: 100%;\n width: 100%;\n position: relative;\n }\n`;\n\n// prettier-ignore\nconst STYLES_LAYOUT_IMAGE_EXPAND = `\n .${ELEMENT_EXPLAND_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n overflow: clip;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPLAND_DECLARATION} {\n height: 180vh;\n }\n }\n }\n\n @media (${token.media.queries.tablet.min}) {\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPLAND_DECLARATION} {\n height: 200vh;\n }\n }\n }\n }\n\n .${ELEMENT_EXPLAND_DECLARATION} img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n ${Container}\n ${ImageContainer}\n ${ImageSizeContainer}\n ${ImagePosition}\n ${ImageOverlayContainer}\n ${TextAnimation}\n ${TextContainer}\n ${TextLock}\n`;\n\nconst CreateImageContainer = ({ image }: TypeLayoutImageExpandProps) => {\n const imageContainer = document.createElement('div');\n const imagePosition = document.createElement('div');\n const imageSize = document.createElement('div');\n const imageOverlay = document.createElement('div');\n\n imageOverlay.classList.add(ELEMENT_EXPAND_IMAGE_OVERLAY);\n\n imageSize.classList.add(ELEMENT_EXPAND_IMAGE_SIZE);\n imageSize.appendChild(image);\n imageSize.appendChild(imageOverlay);\n\n imagePosition.classList.add(ELEMENT_EXPAND_IMAGE_POSITION);\n imagePosition.appendChild(imageSize);\n\n imageContainer.appendChild(imagePosition);\n imageContainer.classList.add(ELEMENT_EXPAND_IMAGE_CONTAINER);\n\n return imageContainer;\n};\n\nconst CreateTextContainer = ({ content }: TypeLayoutImageExpandProps) => {\n const textAnimation = document.createElement('div');\n const textContainer = document.createElement('div');\n const textLock = document.createElement('div');\n\n textLock.classList.add(ELEMENT_EXPAND_TEXT_LOCK);\n textLock.appendChild(content);\n\n textContainer.appendChild(textLock);\n textContainer.classList.add(ELEMENT_EXPAND_TEXT_CONTAINER);\n\n textAnimation.classList.add(ELEMENT_EXPAND_TEXT_ANIMATION);\n textAnimation.appendChild(textContainer);\n\n return textAnimation;\n};\n\nexport default (props: TypeLayoutImageExpandProps) => {\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const imageContainer = CreateImageContainer(props);\n const textContainer = CreateTextContainer(props);\n const sizeImageForText = () => {\n const textContainerHeight =\n textContainer.clientHeight +\n Utility.theme.convertPixelStringToNumber(spacing['2xl']) * 2;\n const imageContainerHeight = container.clientHeight;\n\n if (textContainerHeight > imageContainerHeight) {\n container.style.minHeight = `${textContainerHeight}px`;\n }\n };\n\n if (\n Utility.accessibility.isScreenZoomed() &&\n !Utility.accessibility.isPrefferdReducedMotion()\n ) {\n textContainer.style.height = '90vh';\n textContainer.style.transform = 'translateY(0)';\n }\n\n if (!CSS.supports('animation-timeline', 'view()')) {\n setTimeout(() => {\n sizeImageForText();\n }, 1000);\n window.addEventListener('resize', () => sizeImageForText());\n }\n\n container.appendChild(imageContainer);\n container.appendChild(textContainer);\n container.classList.add(ELEMENT_EXPAND_CONTAINER);\n\n declaration.appendChild(container);\n declaration.classList.add(ELEMENT_EXPLAND_DECLARATION);\n\n return { element: declaration, styles: STYLES_LAYOUT_IMAGE_EXPAND };\n};\n"],"names":["Utility.theme.convertJSSObjectToStyles","Utility.theme.convertPixelStringToNumber","Utility.accessibility.isScreenZoomed","Utility.accessibility.isPrefferdReducedMotion"],"mappings":"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"}
|
|
@@ -207,18 +207,18 @@ const createBackground = (props) => {
|
|
|
207
207
|
position: "absolute",
|
|
208
208
|
top: "0",
|
|
209
209
|
bottom: "0",
|
|
210
|
-
right:
|
|
211
|
-
width:
|
|
210
|
+
right: `-${Styles__namespace.token.spacing.xl}`,
|
|
211
|
+
width: `calc(100% + ${Styles__namespace.token.spacing["6xl"]})`,
|
|
212
212
|
backgroundColor: getBackgroundColor(),
|
|
213
213
|
[`@container (min-width: ${mediumSize}px)`]: {
|
|
214
|
-
right: "-1000px",
|
|
215
|
-
width: "calc(75% + 1000px)",
|
|
216
214
|
...props.includesAnimation && {
|
|
217
215
|
animationTimeline: "view()",
|
|
218
216
|
animationRangeStart: "entry",
|
|
219
217
|
animationRangeEnd: "contain",
|
|
220
218
|
...media.withViewTimelineAnimation({
|
|
219
|
+
width: "calc(75% + 1000px)",
|
|
221
220
|
...props.isImagePositionLeft === true && {
|
|
221
|
+
right: "-1000px",
|
|
222
222
|
animationName: REF_KEY_FRAME_BACKGROUND_LEFT
|
|
223
223
|
},
|
|
224
224
|
...props.isImagePositionLeft === false && {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.js","sources":["../../../source/composite/pathway/overlay.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport * as Atomic from 'atomic';\nimport { ElementModel } from 'model';\nimport { theme } from 'utilities';\nimport { createTextLockupMedium, createAssetContent } from './_common';\nimport { type PathwayOverlayProps } from './_types';\nimport { type ElementVisual } from '../../_types';\n\nconst REF_TEXT_ELEMENT = 'pathway-text-container';\nconst REF_IMAGE_ELEMENT = 'pathway-image-container';\n\nconst REF_KEY_FRAME_BACKGROUND_LEFT = 'pathway-overlay-background-left';\nconst REF_KEY_FRAME_BACKGROUND_RIGHT = 'pathway-overlay-background-right';\n\nconst mediumSize = 800;\nconst largeSize = 1200;\n\nconst keyFrameBackgroundLeft = `\n @keyframes ${REF_KEY_FRAME_BACKGROUND_LEFT} {\n from {\n transform: translateX(30vw);\n }\n to {\n transform: translateX(0);\n }\n }\n`;\n\nconst keyFrameBackgroundRight = `\n @keyframes ${REF_KEY_FRAME_BACKGROUND_RIGHT} {\n from {\n transform: translateX(-30vw);\n }\n to {\n transform: translateX(0);\n }\n }\n`;\n\nconst setupAnimation = (container: HTMLElement) => {\n const textElement = container.querySelector(\n `.${REF_TEXT_ELEMENT}`,\n ) as HTMLElement;\n const imageElement = container.querySelector(\n `.${REF_IMAGE_ELEMENT}`,\n ) as HTMLElement | null;\n\n if (!textElement) return;\n\n const rect = container.getBoundingClientRect();\n const elementTop = rect.top + window.scrollY;\n const viewportBottom = window.scrollY + window.innerHeight;\n const hasAnimationOccured = elementTop < viewportBottom - rect.height * 0.65;\n let isInitialCheck = true;\n\n if (hasAnimationOccured) {\n textElement.style.transition = 'opacity 0s, transform 0s';\n textElement.style.opacity = '1';\n textElement.style.transform = 'translateY(0)';\n\n if (imageElement) {\n imageElement.style.transition = 'opacity 0s, transform 0s';\n imageElement.style.opacity = '1';\n imageElement.style.transform = 'translateY(0)';\n }\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (isInitialCheck && entry.intersectionRatio >= 0.35) {\n textElement.style.transition = 'opacity 0s, transform 0s';\n }\n\n textElement.style.opacity = '1';\n textElement.style.transform = 'translateY(0)';\n\n if (imageElement) {\n if (isInitialCheck && entry.intersectionRatio >= 0.35) {\n imageElement.style.transition = 'opacity 0s, transform 0s';\n }\n imageElement.style.opacity = '1';\n imageElement.style.transform = 'translateY(0)';\n }\n\n observer.unobserve(entry.target);\n }\n\n isInitialCheck = false;\n });\n },\n {\n rootMargin: '0px',\n threshold: [0.35],\n },\n );\n\n observer.observe(container);\n};\n\nconst createAssetColumn = (\n props: Pick<\n PathwayOverlayProps,\n | 'dateSign'\n | 'isThemeDark'\n | 'image'\n | 'video'\n | 'includesAnimation'\n | 'isImagePositionLeft'\n | 'isImageScaled'\n >,\n): ElementVisual | null => {\n const { image, video, includesAnimation, isImagePositionLeft } = props;\n\n if (!image && !video) return null;\n\n return ElementModel.createDiv({\n className: REF_IMAGE_ELEMENT,\n children: [createAssetContent(props)],\n elementStyles: {\n element: {\n position: 'relative',\n height: '100%',\n\n ...(includesAnimation && {\n ...theme.media.withViewTimelineAnimation({\n opacity: '0',\n transform: 'translateY(100px)',\n transition: 'opacity 1s, transform 1s',\n transitionDelay: isImagePositionLeft ? '0s' : '0.5s',\n }),\n }),\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n display: 'grid',\n minHeight: '56vw',\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n ...(isImagePositionLeft === false && {\n order: '2',\n }),\n },\n\n [`@container (min-width: ${largeSize}px)`]: {\n [`& img`]: {\n minHeight: '656px',\n },\n },\n },\n },\n });\n};\n\nconst createTextContent = (props: PathwayOverlayProps): ElementVisual => {\n const wrapper = ElementModel.createDiv({\n className: 'pathway-text-container-wrapper',\n children: [createTextLockupMedium(props)],\n elementStyles: {\n element: {\n padding: `${Styles.token.spacing.md} 0`,\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n ...Styles.layout.space.horizontal.larger,\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n padding: `${Styles.token.spacing['4xl']} ${Styles.token.spacing['2xl']}`,\n\n ...(props.isImagePositionLeft === false && {\n paddingLeft: '0',\n }),\n\n ...(props.isImagePositionLeft && {\n paddingRight: '0',\n }),\n },\n\n [`@container (min-width: ${largeSize}px)`]: {\n padding: `${Styles.token.spacing['8xl']} ${Styles.token.spacing['6xl']}`,\n\n ...(props.isImagePositionLeft === false && {\n paddingLeft: '0',\n }),\n\n ...(props.isImagePositionLeft && {\n paddingRight: '0',\n }),\n },\n },\n },\n });\n\n const container = ElementModel.createDiv({\n className: REF_TEXT_ELEMENT,\n children: [wrapper],\n elementStyles: {\n element: {\n zIndex: '99',\n\n ...(props.includesAnimation && {\n ...theme.media.withViewTimelineAnimation({\n opacity: '0',\n transform: 'translateY(100px)',\n transition: 'opacity 1s, transform 1s',\n transitionDelay: props.isImagePositionLeft ? '0.5s' : '0s',\n }),\n }),\n\n [`@container (min-width: ${mediumSize}px)`]: {\n ...(props.isImagePositionLeft === false && {\n order: '1',\n }),\n },\n },\n },\n });\n\n return container;\n};\n\nconst createBackground = (props: PathwayOverlayProps): ElementVisual => {\n const getBackgroundColor = () => {\n if (props.isThemeDark) return Styles.token.color.black;\n if (props.isThemeLight) return Styles.token.color.gray.lighter;\n if (props.isThemeMaryland) return Styles.token.color.red;\n return Styles.token.color.white;\n };\n\n return ElementModel.createDiv({\n className: 'pathway-overlay-container-background',\n elementStyles: {\n element: {\n position: 'absolute',\n top: '0',\n bottom: '0',\n right: '0',\n width: '100%',\n backgroundColor: getBackgroundColor(),\n\n [`@container (min-width: ${mediumSize}px)`]: {\n right: '-1000px',\n width: 'calc(75% + 1000px)',\n\n ...(props.includesAnimation && {\n animationTimeline: 'view()',\n animationRangeStart: 'entry',\n animationRangeEnd: 'contain',\n\n ...theme.media.withViewTimelineAnimation({\n ...(props.isImagePositionLeft === true && {\n animationName: REF_KEY_FRAME_BACKGROUND_LEFT,\n }),\n\n ...(props.isImagePositionLeft === false && {\n animationName: REF_KEY_FRAME_BACKGROUND_RIGHT,\n left: '-1000px',\n right: 'auto',\n }),\n }),\n }),\n },\n },\n },\n });\n};\n\nconst createLock = (props: PathwayOverlayProps) => {\n const children = [\n createBackground(props),\n createAssetColumn(props),\n createTextContent(props),\n ].filter((item): item is ElementVisual => item !== null);\n const isThemeApplied =\n props.isThemeDark || props.isThemeLight || props.isThemeMaryland;\n\n const lockWrapper = ElementModel.createDiv({\n className: 'pathway-overlay-container-lock-wrapper',\n children,\n elementStyles: {\n element: {\n position: 'relative',\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n padding: '0',\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n alignItems: 'center',\n\n ...(isThemeApplied && {\n padding: `${Styles.token.spacing['6xl']} 0`,\n }),\n },\n },\n },\n });\n\n return ElementModel.layout.spaceHorizontalLarger({\n element: document.createElement('div'),\n children: [lockWrapper],\n elementStyles: {\n element: {\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n paddingLeft: 0,\n paddingRight: 0,\n },\n },\n },\n });\n};\n\nexport default (props: PathwayOverlayProps) => {\n const composite = ElementModel.createDiv({\n className: 'pathway-overlay-container',\n children: [\n ElementModel.createDiv({\n className: 'pathway-overlay-container-wrapper',\n children: [createLock(props)],\n }),\n ],\n elementStyles: {\n element: {\n container: 'inline-size',\n position: 'relative',\n overflow: 'clip',\n },\n },\n });\n\n const loadAnimation = () => {\n if (props.includesAnimation) {\n setupAnimation(composite.element);\n }\n };\n\n composite.styles += keyFrameBackgroundLeft;\n composite.styles += keyFrameBackgroundRight;\n\n return {\n ...composite,\n events: {\n loadAnimation,\n },\n };\n};\n"],"names":["observer","ElementModel.createDiv","createAssetContent","theme.media.withViewTimelineAnimation","createTextLockupMedium","Styles","ElementModel.layout.spaceHorizontalLarger"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,mBAAmB;AACzB,MAAM,oBAAoB;AAE1B,MAAM,gCAAgC;AACtC,MAAM,iCAAiC;AAEvC,MAAM,aAAa;AACnB,MAAM,YAAY;AAElB,MAAM,yBAAyB;AAAA,eAChB,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU5C,MAAM,0BAA0B;AAAA,eACjB,8BAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU7C,MAAM,iBAAiB,CAAC,cAA2B;AACjD,QAAM,cAAc,UAAU;AAAA,IAC5B,IAAI,gBAAgB;AAAA,EAAA;AAEtB,QAAM,eAAe,UAAU;AAAA,IAC7B,IAAI,iBAAiB;AAAA,EAAA;AAGvB,MAAI,CAAC,YAAa;AAElB,QAAM,OAAO,UAAU,sBAAA;AACvB,QAAM,aAAa,KAAK,MAAM,OAAO;AACrC,QAAM,iBAAiB,OAAO,UAAU,OAAO;AAC/C,QAAM,sBAAsB,aAAa,iBAAiB,KAAK,SAAS;AACxE,MAAI,iBAAiB;AAErB,MAAI,qBAAqB;AACvB,gBAAY,MAAM,aAAa;AAC/B,gBAAY,MAAM,UAAU;AAC5B,gBAAY,MAAM,YAAY;AAE9B,QAAI,cAAc;AAChB,mBAAa,MAAM,aAAa;AAChC,mBAAa,MAAM,UAAU;AAC7B,mBAAa,MAAM,YAAY;AAAA,IACjC;AACA;AAAA,EACF;AAEA,QAAM,WAAW,IAAI;AAAA,IACnB,CAAC,SAASA,cAAa;AACrB,cAAQ,QAAQ,CAAC,UAAU;AACzB,YAAI,MAAM,gBAAgB;AACxB,cAAI,kBAAkB,MAAM,qBAAqB,MAAM;AACrD,wBAAY,MAAM,aAAa;AAAA,UACjC;AAEA,sBAAY,MAAM,UAAU;AAC5B,sBAAY,MAAM,YAAY;AAE9B,cAAI,cAAc;AAChB,gBAAI,kBAAkB,MAAM,qBAAqB,MAAM;AACrD,2BAAa,MAAM,aAAa;AAAA,YAClC;AACA,yBAAa,MAAM,UAAU;AAC7B,yBAAa,MAAM,YAAY;AAAA,UACjC;AAEAA,oBAAS,UAAU,MAAM,MAAM;AAAA,QACjC;AAEA,yBAAiB;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,IACA;AAAA,MACE,YAAY;AAAA,MACZ,WAAW,CAAC,IAAI;AAAA,IAAA;AAAA,EAClB;AAGF,WAAS,QAAQ,SAAS;AAC5B;AAEA,MAAM,oBAAoB,CACxB,UAUyB;AACzB,QAAM,EAAE,OAAO,OAAO,mBAAmB,wBAAwB;AAEjE,MAAI,CAAC,SAAS,CAAC,MAAO,QAAO;AAE7B,SAAOC,gBAAuB;AAAA,IAC5B,WAAW;AAAA,IACX,UAAU,CAACC,2BAAmB,KAAK,CAAC;AAAA,IACpC,eAAe;AAAA,MACb,SAAS;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,QAER,GAAI,qBAAqB;AAAA,UACvB,GAAGC,gCAAsC;AAAA,YACvC,SAAS;AAAA,YACT,WAAW;AAAA,YACX,YAAY;AAAA,YACZ,iBAAiB,sBAAsB,OAAO;AAAA,UAAA,CAC/C;AAAA,QAAA;AAAA,QAGH,CAAC,0BAA0B,aAAa,CAAC,KAAK,GAAG;AAAA,UAC/C,SAAS;AAAA,UACT,WAAW;AAAA,QAAA;AAAA,QAGb,CAAC,0BAA0B,UAAU,KAAK,GAAG;AAAA,UAC3C,GAAI,wBAAwB,SAAS;AAAA,YACnC,OAAO;AAAA,UAAA;AAAA,QACT;AAAA,QAGF,CAAC,0BAA0B,SAAS,KAAK,GAAG;AAAA,UAC1C,CAAC,OAAO,GAAG;AAAA,YACT,WAAW;AAAA,UAAA;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF,CACD;AACH;AAEA,MAAM,oBAAoB,CAAC,UAA8C;AACvE,QAAM,UAAUF,MAAAA,UAAuB;AAAA,IACrC,WAAW;AAAA,IACX,UAAU,CAACG,+BAAuB,KAAK,CAAC;AAAA,IACxC,eAAe;AAAA,MACb,SAAS;AAAA,QACP,SAAS,GAAGC,kBAAO,MAAM,QAAQ,EAAE;AAAA,QAEnC,CAAC,0BAA0B,aAAa,CAAC,KAAK,GAAG;AAAA,UAC/C,GAAGA,kBAAO,OAAO,MAAM,WAAW;AAAA,QAAA;AAAA,QAGpC,CAAC,0BAA0B,UAAU,KAAK,GAAG;AAAA,UAC3C,SAAS,GAAGA,kBAAO,MAAM,QAAQ,KAAK,CAAC,IAAIA,kBAAO,MAAM,QAAQ,KAAK,CAAC;AAAA,UAEtE,GAAI,MAAM,wBAAwB,SAAS;AAAA,YACzC,aAAa;AAAA,UAAA;AAAA,UAGf,GAAI,MAAM,uBAAuB;AAAA,YAC/B,cAAc;AAAA,UAAA;AAAA,QAChB;AAAA,QAGF,CAAC,0BAA0B,SAAS,KAAK,GAAG;AAAA,UAC1C,SAAS,GAAGA,kBAAO,MAAM,QAAQ,KAAK,CAAC,IAAIA,kBAAO,MAAM,QAAQ,KAAK,CAAC;AAAA,UAEtE,GAAI,MAAM,wBAAwB,SAAS;AAAA,YACzC,aAAa;AAAA,UAAA;AAAA,UAGf,GAAI,MAAM,uBAAuB;AAAA,YAC/B,cAAc;AAAA,UAAA;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CACD;AAED,QAAM,YAAYJ,MAAAA,UAAuB;AAAA,IACvC,WAAW;AAAA,IACX,UAAU,CAAC,OAAO;AAAA,IAClB,eAAe;AAAA,MACb,SAAS;AAAA,QACP,QAAQ;AAAA,QAER,GAAI,MAAM,qBAAqB;AAAA,UAC7B,GAAGE,gCAAsC;AAAA,YACvC,SAAS;AAAA,YACT,WAAW;AAAA,YACX,YAAY;AAAA,YACZ,iBAAiB,MAAM,sBAAsB,SAAS;AAAA,UAAA,CACvD;AAAA,QAAA;AAAA,QAGH,CAAC,0BAA0B,UAAU,KAAK,GAAG;AAAA,UAC3C,GAAI,MAAM,wBAAwB,SAAS;AAAA,YACzC,OAAO;AAAA,UAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF,CACD;AAED,SAAO;AACT;AAEA,MAAM,mBAAmB,CAAC,UAA8C;AACtE,QAAM,qBAAqB,MAAM;AAC/B,QAAI,MAAM,YAAa,QAAOE,kBAAO,MAAM,MAAM;AACjD,QAAI,MAAM,aAAc,QAAOA,kBAAO,MAAM,MAAM,KAAK;AACvD,QAAI,MAAM,gBAAiB,QAAOA,kBAAO,MAAM,MAAM;AACrD,WAAOA,kBAAO,MAAM,MAAM;AAAA,EAC5B;AAEA,SAAOJ,gBAAuB;AAAA,IAC5B,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,QACP,UAAU;AAAA,QACV,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,OAAO;AAAA,QACP,iBAAiB,mBAAA;AAAA,QAEjB,CAAC,0BAA0B,UAAU,KAAK,GAAG;AAAA,UAC3C,OAAO;AAAA,UACP,OAAO;AAAA,UAEP,GAAI,MAAM,qBAAqB;AAAA,YAC7B,mBAAmB;AAAA,YACnB,qBAAqB;AAAA,YACrB,mBAAmB;AAAA,YAEnB,GAAGE,gCAAsC;AAAA,cACvC,GAAI,MAAM,wBAAwB,QAAQ;AAAA,gBACxC,eAAe;AAAA,cAAA;AAAA,cAGjB,GAAI,MAAM,wBAAwB,SAAS;AAAA,gBACzC,eAAe;AAAA,gBACf,MAAM;AAAA,gBACN,OAAO;AAAA,cAAA;AAAA,YACT,CACD;AAAA,UAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,CACD;AACH;AAEA,MAAM,aAAa,CAAC,UAA+B;AACjD,QAAM,WAAW;AAAA,IACf,iBAAiB,KAAK;AAAA,IACtB,kBAAkB,KAAK;AAAA,IACvB,kBAAkB,KAAK;AAAA,EAAA,EACvB,OAAO,CAAC,SAAgC,SAAS,IAAI;AACvD,QAAM,iBACJ,MAAM,eAAe,MAAM,gBAAgB,MAAM;AAEnD,QAAM,cAAcF,MAAAA,UAAuB;AAAA,IACzC,WAAW;AAAA,IACX;AAAA,IACA,eAAe;AAAA,MACb,SAAS;AAAA,QACP,UAAU;AAAA,QAEV,CAAC,0BAA0B,aAAa,CAAC,KAAK,GAAG;AAAA,UAC/C,SAAS;AAAA,QAAA;AAAA,QAGX,CAAC,0BAA0B,UAAU,KAAK,GAAG;AAAA,UAC3C,SAAS;AAAA,UACT,qBAAqB;AAAA,UACrB,YAAY;AAAA,UAEZ,GAAI,kBAAkB;AAAA,YACpB,SAAS,GAAGI,kBAAO,MAAM,QAAQ,KAAK,CAAC;AAAA,UAAA;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAAA,EACF,CACD;AAED,SAAOC,6BAA0C;AAAA,IAC/C,SAAS,SAAS,cAAc,KAAK;AAAA,IACrC,UAAU,CAAC,WAAW;AAAA,IACtB,eAAe;AAAA,MACb,SAAS;AAAA,QACP,CAAC,0BAA0B,aAAa,CAAC,KAAK,GAAG;AAAA,UAC/C,aAAa;AAAA,UACb,cAAc;AAAA,QAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF,CACD;AACH;AAEA,MAAA,UAAe,CAAC,UAA+B;AAC7C,QAAM,YAAYL,MAAAA,UAAuB;AAAA,IACvC,WAAW;AAAA,IACX,UAAU;AAAA,MACRA,gBAAuB;AAAA,QACrB,WAAW;AAAA,QACX,UAAU,CAAC,WAAW,KAAK,CAAC;AAAA,MAAA,CAC7B;AAAA,IAAA;AAAA,IAEH,eAAe;AAAA,MACb,SAAS;AAAA,QACP,WAAW;AAAA,QACX,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,EACF,CACD;AAED,QAAM,gBAAgB,MAAM;AAC1B,QAAI,MAAM,mBAAmB;AAC3B,qBAAe,UAAU,OAAO;AAAA,IAClC;AAAA,EACF;AAEA,YAAU,UAAU;AACpB,YAAU,UAAU;AAEpB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,MACN;AAAA,IAAA;AAAA,EACF;AAEJ;;"}
|
|
1
|
+
{"version":3,"file":"overlay.js","sources":["../../../source/composite/pathway/overlay.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport * as Atomic from 'atomic';\nimport { ElementModel } from 'model';\nimport { theme } from 'utilities';\nimport { createTextLockupMedium, createAssetContent } from './_common';\nimport { type PathwayOverlayProps } from './_types';\nimport { type ElementVisual } from '../../_types';\n\nconst REF_TEXT_ELEMENT = 'pathway-text-container';\nconst REF_IMAGE_ELEMENT = 'pathway-image-container';\n\nconst REF_KEY_FRAME_BACKGROUND_LEFT = 'pathway-overlay-background-left';\nconst REF_KEY_FRAME_BACKGROUND_RIGHT = 'pathway-overlay-background-right';\n\nconst mediumSize = 800;\nconst largeSize = 1200;\n\nconst keyFrameBackgroundLeft = `\n @keyframes ${REF_KEY_FRAME_BACKGROUND_LEFT} {\n from {\n transform: translateX(30vw);\n }\n to {\n transform: translateX(0);\n }\n }\n`;\n\nconst keyFrameBackgroundRight = `\n @keyframes ${REF_KEY_FRAME_BACKGROUND_RIGHT} {\n from {\n transform: translateX(-30vw);\n }\n to {\n transform: translateX(0);\n }\n }\n`;\n\nconst setupAnimation = (container: HTMLElement) => {\n const textElement = container.querySelector(\n `.${REF_TEXT_ELEMENT}`,\n ) as HTMLElement;\n const imageElement = container.querySelector(\n `.${REF_IMAGE_ELEMENT}`,\n ) as HTMLElement | null;\n\n if (!textElement) return;\n\n const rect = container.getBoundingClientRect();\n const elementTop = rect.top + window.scrollY;\n const viewportBottom = window.scrollY + window.innerHeight;\n const hasAnimationOccured = elementTop < viewportBottom - rect.height * 0.65;\n let isInitialCheck = true;\n\n if (hasAnimationOccured) {\n textElement.style.transition = 'opacity 0s, transform 0s';\n textElement.style.opacity = '1';\n textElement.style.transform = 'translateY(0)';\n\n if (imageElement) {\n imageElement.style.transition = 'opacity 0s, transform 0s';\n imageElement.style.opacity = '1';\n imageElement.style.transform = 'translateY(0)';\n }\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (isInitialCheck && entry.intersectionRatio >= 0.35) {\n textElement.style.transition = 'opacity 0s, transform 0s';\n }\n\n textElement.style.opacity = '1';\n textElement.style.transform = 'translateY(0)';\n\n if (imageElement) {\n if (isInitialCheck && entry.intersectionRatio >= 0.35) {\n imageElement.style.transition = 'opacity 0s, transform 0s';\n }\n imageElement.style.opacity = '1';\n imageElement.style.transform = 'translateY(0)';\n }\n\n observer.unobserve(entry.target);\n }\n\n isInitialCheck = false;\n });\n },\n {\n rootMargin: '0px',\n threshold: [0.35],\n },\n );\n\n observer.observe(container);\n};\n\nconst createAssetColumn = (\n props: Pick<\n PathwayOverlayProps,\n | 'dateSign'\n | 'isThemeDark'\n | 'image'\n | 'video'\n | 'includesAnimation'\n | 'isImagePositionLeft'\n | 'isImageScaled'\n >,\n): ElementVisual | null => {\n const { image, video, includesAnimation, isImagePositionLeft } = props;\n\n if (!image && !video) return null;\n\n return ElementModel.createDiv({\n className: REF_IMAGE_ELEMENT,\n children: [createAssetContent(props)],\n elementStyles: {\n element: {\n position: 'relative',\n height: '100%',\n\n ...(includesAnimation && {\n ...theme.media.withViewTimelineAnimation({\n opacity: '0',\n transform: 'translateY(100px)',\n transition: 'opacity 1s, transform 1s',\n transitionDelay: isImagePositionLeft ? '0s' : '0.5s',\n }),\n }),\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n display: 'grid',\n minHeight: '56vw',\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n ...(isImagePositionLeft === false && {\n order: '2',\n }),\n },\n\n [`@container (min-width: ${largeSize}px)`]: {\n [`& img`]: {\n minHeight: '656px',\n },\n },\n },\n },\n });\n};\n\nconst createTextContent = (props: PathwayOverlayProps): ElementVisual => {\n const wrapper = ElementModel.createDiv({\n className: 'pathway-text-container-wrapper',\n children: [createTextLockupMedium(props)],\n elementStyles: {\n element: {\n padding: `${Styles.token.spacing.md} 0`,\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n ...Styles.layout.space.horizontal.larger,\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n padding: `${Styles.token.spacing['4xl']} ${Styles.token.spacing['2xl']}`,\n\n ...(props.isImagePositionLeft === false && {\n paddingLeft: '0',\n }),\n\n ...(props.isImagePositionLeft && {\n paddingRight: '0',\n }),\n },\n\n [`@container (min-width: ${largeSize}px)`]: {\n padding: `${Styles.token.spacing['8xl']} ${Styles.token.spacing['6xl']}`,\n\n ...(props.isImagePositionLeft === false && {\n paddingLeft: '0',\n }),\n\n ...(props.isImagePositionLeft && {\n paddingRight: '0',\n }),\n },\n },\n },\n });\n\n const container = ElementModel.createDiv({\n className: REF_TEXT_ELEMENT,\n children: [wrapper],\n elementStyles: {\n element: {\n zIndex: '99',\n\n ...(props.includesAnimation && {\n ...theme.media.withViewTimelineAnimation({\n opacity: '0',\n transform: 'translateY(100px)',\n transition: 'opacity 1s, transform 1s',\n transitionDelay: props.isImagePositionLeft ? '0.5s' : '0s',\n }),\n }),\n\n [`@container (min-width: ${mediumSize}px)`]: {\n ...(props.isImagePositionLeft === false && {\n order: '1',\n }),\n },\n },\n },\n });\n\n return container;\n};\n\nconst createBackground = (props: PathwayOverlayProps): ElementVisual => {\n const getBackgroundColor = () => {\n if (props.isThemeDark) return Styles.token.color.black;\n if (props.isThemeLight) return Styles.token.color.gray.lighter;\n if (props.isThemeMaryland) return Styles.token.color.red;\n return Styles.token.color.white;\n };\n\n return ElementModel.createDiv({\n className: 'pathway-overlay-container-background',\n elementStyles: {\n element: {\n position: 'absolute',\n top: '0',\n bottom: '0',\n right: `-${Styles.token.spacing.xl}`,\n width: `calc(100% + ${Styles.token.spacing['6xl']})`,\n backgroundColor: getBackgroundColor(),\n\n [`@container (min-width: ${mediumSize}px)`]: {\n ...(props.includesAnimation && {\n animationTimeline: 'view()',\n animationRangeStart: 'entry',\n animationRangeEnd: 'contain',\n\n ...theme.media.withViewTimelineAnimation({\n width: 'calc(75% + 1000px)',\n\n ...(props.isImagePositionLeft === true && {\n right: '-1000px',\n animationName: REF_KEY_FRAME_BACKGROUND_LEFT,\n }),\n\n ...(props.isImagePositionLeft === false && {\n animationName: REF_KEY_FRAME_BACKGROUND_RIGHT,\n left: '-1000px',\n right: 'auto',\n }),\n }),\n }),\n },\n },\n },\n });\n};\n\nconst createLock = (props: PathwayOverlayProps) => {\n const children = [\n createBackground(props),\n createAssetColumn(props),\n createTextContent(props),\n ].filter((item): item is ElementVisual => item !== null);\n const isThemeApplied =\n props.isThemeDark || props.isThemeLight || props.isThemeMaryland;\n\n const lockWrapper = ElementModel.createDiv({\n className: 'pathway-overlay-container-lock-wrapper',\n children,\n elementStyles: {\n element: {\n position: 'relative',\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n padding: '0',\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n alignItems: 'center',\n\n ...(isThemeApplied && {\n padding: `${Styles.token.spacing['6xl']} 0`,\n }),\n },\n },\n },\n });\n\n return ElementModel.layout.spaceHorizontalLarger({\n element: document.createElement('div'),\n children: [lockWrapper],\n elementStyles: {\n element: {\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n paddingLeft: 0,\n paddingRight: 0,\n },\n },\n },\n });\n};\n\nexport default (props: PathwayOverlayProps) => {\n const composite = ElementModel.createDiv({\n className: 'pathway-overlay-container',\n children: [\n ElementModel.createDiv({\n className: 'pathway-overlay-container-wrapper',\n children: [createLock(props)],\n }),\n ],\n elementStyles: {\n element: {\n container: 'inline-size',\n position: 'relative',\n overflow: 'clip',\n },\n },\n });\n\n const loadAnimation = () => {\n if (props.includesAnimation) {\n setupAnimation(composite.element);\n }\n };\n\n composite.styles += keyFrameBackgroundLeft;\n composite.styles += keyFrameBackgroundRight;\n\n return {\n ...composite,\n events: {\n loadAnimation,\n },\n };\n};\n"],"names":["observer","ElementModel.createDiv","createAssetContent","theme.media.withViewTimelineAnimation","createTextLockupMedium","Styles","ElementModel.layout.spaceHorizontalLarger"],"mappings":"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"}
|
|
@@ -189,18 +189,18 @@ const createBackground = (props) => {
|
|
|
189
189
|
position: "absolute",
|
|
190
190
|
top: "0",
|
|
191
191
|
bottom: "0",
|
|
192
|
-
right:
|
|
193
|
-
width:
|
|
192
|
+
right: `-${Styles.token.spacing.xl}`,
|
|
193
|
+
width: `calc(100% + ${Styles.token.spacing["6xl"]})`,
|
|
194
194
|
backgroundColor: getBackgroundColor(),
|
|
195
195
|
[`@container (min-width: ${mediumSize}px)`]: {
|
|
196
|
-
right: "-1000px",
|
|
197
|
-
width: "calc(75% + 1000px)",
|
|
198
196
|
...props.includesAnimation && {
|
|
199
197
|
animationTimeline: "view()",
|
|
200
198
|
animationRangeStart: "entry",
|
|
201
199
|
animationRangeEnd: "contain",
|
|
202
200
|
...withViewTimelineAnimation({
|
|
201
|
+
width: "calc(75% + 1000px)",
|
|
203
202
|
...props.isImagePositionLeft === true && {
|
|
203
|
+
right: "-1000px",
|
|
204
204
|
animationName: REF_KEY_FRAME_BACKGROUND_LEFT
|
|
205
205
|
},
|
|
206
206
|
...props.isImagePositionLeft === false && {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.mjs","sources":["../../../source/composite/pathway/overlay.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport * as Atomic from 'atomic';\nimport { ElementModel } from 'model';\nimport { theme } from 'utilities';\nimport { createTextLockupMedium, createAssetContent } from './_common';\nimport { type PathwayOverlayProps } from './_types';\nimport { type ElementVisual } from '../../_types';\n\nconst REF_TEXT_ELEMENT = 'pathway-text-container';\nconst REF_IMAGE_ELEMENT = 'pathway-image-container';\n\nconst REF_KEY_FRAME_BACKGROUND_LEFT = 'pathway-overlay-background-left';\nconst REF_KEY_FRAME_BACKGROUND_RIGHT = 'pathway-overlay-background-right';\n\nconst mediumSize = 800;\nconst largeSize = 1200;\n\nconst keyFrameBackgroundLeft = `\n @keyframes ${REF_KEY_FRAME_BACKGROUND_LEFT} {\n from {\n transform: translateX(30vw);\n }\n to {\n transform: translateX(0);\n }\n }\n`;\n\nconst keyFrameBackgroundRight = `\n @keyframes ${REF_KEY_FRAME_BACKGROUND_RIGHT} {\n from {\n transform: translateX(-30vw);\n }\n to {\n transform: translateX(0);\n }\n }\n`;\n\nconst setupAnimation = (container: HTMLElement) => {\n const textElement = container.querySelector(\n `.${REF_TEXT_ELEMENT}`,\n ) as HTMLElement;\n const imageElement = container.querySelector(\n `.${REF_IMAGE_ELEMENT}`,\n ) as HTMLElement | null;\n\n if (!textElement) return;\n\n const rect = container.getBoundingClientRect();\n const elementTop = rect.top + window.scrollY;\n const viewportBottom = window.scrollY + window.innerHeight;\n const hasAnimationOccured = elementTop < viewportBottom - rect.height * 0.65;\n let isInitialCheck = true;\n\n if (hasAnimationOccured) {\n textElement.style.transition = 'opacity 0s, transform 0s';\n textElement.style.opacity = '1';\n textElement.style.transform = 'translateY(0)';\n\n if (imageElement) {\n imageElement.style.transition = 'opacity 0s, transform 0s';\n imageElement.style.opacity = '1';\n imageElement.style.transform = 'translateY(0)';\n }\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (isInitialCheck && entry.intersectionRatio >= 0.35) {\n textElement.style.transition = 'opacity 0s, transform 0s';\n }\n\n textElement.style.opacity = '1';\n textElement.style.transform = 'translateY(0)';\n\n if (imageElement) {\n if (isInitialCheck && entry.intersectionRatio >= 0.35) {\n imageElement.style.transition = 'opacity 0s, transform 0s';\n }\n imageElement.style.opacity = '1';\n imageElement.style.transform = 'translateY(0)';\n }\n\n observer.unobserve(entry.target);\n }\n\n isInitialCheck = false;\n });\n },\n {\n rootMargin: '0px',\n threshold: [0.35],\n },\n );\n\n observer.observe(container);\n};\n\nconst createAssetColumn = (\n props: Pick<\n PathwayOverlayProps,\n | 'dateSign'\n | 'isThemeDark'\n | 'image'\n | 'video'\n | 'includesAnimation'\n | 'isImagePositionLeft'\n | 'isImageScaled'\n >,\n): ElementVisual | null => {\n const { image, video, includesAnimation, isImagePositionLeft } = props;\n\n if (!image && !video) return null;\n\n return ElementModel.createDiv({\n className: REF_IMAGE_ELEMENT,\n children: [createAssetContent(props)],\n elementStyles: {\n element: {\n position: 'relative',\n height: '100%',\n\n ...(includesAnimation && {\n ...theme.media.withViewTimelineAnimation({\n opacity: '0',\n transform: 'translateY(100px)',\n transition: 'opacity 1s, transform 1s',\n transitionDelay: isImagePositionLeft ? '0s' : '0.5s',\n }),\n }),\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n display: 'grid',\n minHeight: '56vw',\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n ...(isImagePositionLeft === false && {\n order: '2',\n }),\n },\n\n [`@container (min-width: ${largeSize}px)`]: {\n [`& img`]: {\n minHeight: '656px',\n },\n },\n },\n },\n });\n};\n\nconst createTextContent = (props: PathwayOverlayProps): ElementVisual => {\n const wrapper = ElementModel.createDiv({\n className: 'pathway-text-container-wrapper',\n children: [createTextLockupMedium(props)],\n elementStyles: {\n element: {\n padding: `${Styles.token.spacing.md} 0`,\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n ...Styles.layout.space.horizontal.larger,\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n padding: `${Styles.token.spacing['4xl']} ${Styles.token.spacing['2xl']}`,\n\n ...(props.isImagePositionLeft === false && {\n paddingLeft: '0',\n }),\n\n ...(props.isImagePositionLeft && {\n paddingRight: '0',\n }),\n },\n\n [`@container (min-width: ${largeSize}px)`]: {\n padding: `${Styles.token.spacing['8xl']} ${Styles.token.spacing['6xl']}`,\n\n ...(props.isImagePositionLeft === false && {\n paddingLeft: '0',\n }),\n\n ...(props.isImagePositionLeft && {\n paddingRight: '0',\n }),\n },\n },\n },\n });\n\n const container = ElementModel.createDiv({\n className: REF_TEXT_ELEMENT,\n children: [wrapper],\n elementStyles: {\n element: {\n zIndex: '99',\n\n ...(props.includesAnimation && {\n ...theme.media.withViewTimelineAnimation({\n opacity: '0',\n transform: 'translateY(100px)',\n transition: 'opacity 1s, transform 1s',\n transitionDelay: props.isImagePositionLeft ? '0.5s' : '0s',\n }),\n }),\n\n [`@container (min-width: ${mediumSize}px)`]: {\n ...(props.isImagePositionLeft === false && {\n order: '1',\n }),\n },\n },\n },\n });\n\n return container;\n};\n\nconst createBackground = (props: PathwayOverlayProps): ElementVisual => {\n const getBackgroundColor = () => {\n if (props.isThemeDark) return Styles.token.color.black;\n if (props.isThemeLight) return Styles.token.color.gray.lighter;\n if (props.isThemeMaryland) return Styles.token.color.red;\n return Styles.token.color.white;\n };\n\n return ElementModel.createDiv({\n className: 'pathway-overlay-container-background',\n elementStyles: {\n element: {\n position: 'absolute',\n top: '0',\n bottom: '0',\n right: '0',\n width: '100%',\n backgroundColor: getBackgroundColor(),\n\n [`@container (min-width: ${mediumSize}px)`]: {\n right: '-1000px',\n width: 'calc(75% + 1000px)',\n\n ...(props.includesAnimation && {\n animationTimeline: 'view()',\n animationRangeStart: 'entry',\n animationRangeEnd: 'contain',\n\n ...theme.media.withViewTimelineAnimation({\n ...(props.isImagePositionLeft === true && {\n animationName: REF_KEY_FRAME_BACKGROUND_LEFT,\n }),\n\n ...(props.isImagePositionLeft === false && {\n animationName: REF_KEY_FRAME_BACKGROUND_RIGHT,\n left: '-1000px',\n right: 'auto',\n }),\n }),\n }),\n },\n },\n },\n });\n};\n\nconst createLock = (props: PathwayOverlayProps) => {\n const children = [\n createBackground(props),\n createAssetColumn(props),\n createTextContent(props),\n ].filter((item): item is ElementVisual => item !== null);\n const isThemeApplied =\n props.isThemeDark || props.isThemeLight || props.isThemeMaryland;\n\n const lockWrapper = ElementModel.createDiv({\n className: 'pathway-overlay-container-lock-wrapper',\n children,\n elementStyles: {\n element: {\n position: 'relative',\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n padding: '0',\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n alignItems: 'center',\n\n ...(isThemeApplied && {\n padding: `${Styles.token.spacing['6xl']} 0`,\n }),\n },\n },\n },\n });\n\n return ElementModel.layout.spaceHorizontalLarger({\n element: document.createElement('div'),\n children: [lockWrapper],\n elementStyles: {\n element: {\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n paddingLeft: 0,\n paddingRight: 0,\n },\n },\n },\n });\n};\n\nexport default (props: PathwayOverlayProps) => {\n const composite = ElementModel.createDiv({\n className: 'pathway-overlay-container',\n children: [\n ElementModel.createDiv({\n className: 'pathway-overlay-container-wrapper',\n children: [createLock(props)],\n }),\n ],\n elementStyles: {\n element: {\n container: 'inline-size',\n position: 'relative',\n overflow: 'clip',\n },\n },\n });\n\n const loadAnimation = () => {\n if (props.includesAnimation) {\n setupAnimation(composite.element);\n }\n };\n\n composite.styles += keyFrameBackgroundLeft;\n composite.styles += keyFrameBackgroundRight;\n\n return {\n ...composite,\n events: {\n loadAnimation,\n },\n };\n};\n"],"names":["observer","ElementModel.createDiv","theme.media.withViewTimelineAnimation","ElementModel.layout.spaceHorizontalLarger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"overlay.mjs","sources":["../../../source/composite/pathway/overlay.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport * as Atomic from 'atomic';\nimport { ElementModel } from 'model';\nimport { theme } from 'utilities';\nimport { createTextLockupMedium, createAssetContent } from './_common';\nimport { type PathwayOverlayProps } from './_types';\nimport { type ElementVisual } from '../../_types';\n\nconst REF_TEXT_ELEMENT = 'pathway-text-container';\nconst REF_IMAGE_ELEMENT = 'pathway-image-container';\n\nconst REF_KEY_FRAME_BACKGROUND_LEFT = 'pathway-overlay-background-left';\nconst REF_KEY_FRAME_BACKGROUND_RIGHT = 'pathway-overlay-background-right';\n\nconst mediumSize = 800;\nconst largeSize = 1200;\n\nconst keyFrameBackgroundLeft = `\n @keyframes ${REF_KEY_FRAME_BACKGROUND_LEFT} {\n from {\n transform: translateX(30vw);\n }\n to {\n transform: translateX(0);\n }\n }\n`;\n\nconst keyFrameBackgroundRight = `\n @keyframes ${REF_KEY_FRAME_BACKGROUND_RIGHT} {\n from {\n transform: translateX(-30vw);\n }\n to {\n transform: translateX(0);\n }\n }\n`;\n\nconst setupAnimation = (container: HTMLElement) => {\n const textElement = container.querySelector(\n `.${REF_TEXT_ELEMENT}`,\n ) as HTMLElement;\n const imageElement = container.querySelector(\n `.${REF_IMAGE_ELEMENT}`,\n ) as HTMLElement | null;\n\n if (!textElement) return;\n\n const rect = container.getBoundingClientRect();\n const elementTop = rect.top + window.scrollY;\n const viewportBottom = window.scrollY + window.innerHeight;\n const hasAnimationOccured = elementTop < viewportBottom - rect.height * 0.65;\n let isInitialCheck = true;\n\n if (hasAnimationOccured) {\n textElement.style.transition = 'opacity 0s, transform 0s';\n textElement.style.opacity = '1';\n textElement.style.transform = 'translateY(0)';\n\n if (imageElement) {\n imageElement.style.transition = 'opacity 0s, transform 0s';\n imageElement.style.opacity = '1';\n imageElement.style.transform = 'translateY(0)';\n }\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries, observer) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (isInitialCheck && entry.intersectionRatio >= 0.35) {\n textElement.style.transition = 'opacity 0s, transform 0s';\n }\n\n textElement.style.opacity = '1';\n textElement.style.transform = 'translateY(0)';\n\n if (imageElement) {\n if (isInitialCheck && entry.intersectionRatio >= 0.35) {\n imageElement.style.transition = 'opacity 0s, transform 0s';\n }\n imageElement.style.opacity = '1';\n imageElement.style.transform = 'translateY(0)';\n }\n\n observer.unobserve(entry.target);\n }\n\n isInitialCheck = false;\n });\n },\n {\n rootMargin: '0px',\n threshold: [0.35],\n },\n );\n\n observer.observe(container);\n};\n\nconst createAssetColumn = (\n props: Pick<\n PathwayOverlayProps,\n | 'dateSign'\n | 'isThemeDark'\n | 'image'\n | 'video'\n | 'includesAnimation'\n | 'isImagePositionLeft'\n | 'isImageScaled'\n >,\n): ElementVisual | null => {\n const { image, video, includesAnimation, isImagePositionLeft } = props;\n\n if (!image && !video) return null;\n\n return ElementModel.createDiv({\n className: REF_IMAGE_ELEMENT,\n children: [createAssetContent(props)],\n elementStyles: {\n element: {\n position: 'relative',\n height: '100%',\n\n ...(includesAnimation && {\n ...theme.media.withViewTimelineAnimation({\n opacity: '0',\n transform: 'translateY(100px)',\n transition: 'opacity 1s, transform 1s',\n transitionDelay: isImagePositionLeft ? '0s' : '0.5s',\n }),\n }),\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n display: 'grid',\n minHeight: '56vw',\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n ...(isImagePositionLeft === false && {\n order: '2',\n }),\n },\n\n [`@container (min-width: ${largeSize}px)`]: {\n [`& img`]: {\n minHeight: '656px',\n },\n },\n },\n },\n });\n};\n\nconst createTextContent = (props: PathwayOverlayProps): ElementVisual => {\n const wrapper = ElementModel.createDiv({\n className: 'pathway-text-container-wrapper',\n children: [createTextLockupMedium(props)],\n elementStyles: {\n element: {\n padding: `${Styles.token.spacing.md} 0`,\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n ...Styles.layout.space.horizontal.larger,\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n padding: `${Styles.token.spacing['4xl']} ${Styles.token.spacing['2xl']}`,\n\n ...(props.isImagePositionLeft === false && {\n paddingLeft: '0',\n }),\n\n ...(props.isImagePositionLeft && {\n paddingRight: '0',\n }),\n },\n\n [`@container (min-width: ${largeSize}px)`]: {\n padding: `${Styles.token.spacing['8xl']} ${Styles.token.spacing['6xl']}`,\n\n ...(props.isImagePositionLeft === false && {\n paddingLeft: '0',\n }),\n\n ...(props.isImagePositionLeft && {\n paddingRight: '0',\n }),\n },\n },\n },\n });\n\n const container = ElementModel.createDiv({\n className: REF_TEXT_ELEMENT,\n children: [wrapper],\n elementStyles: {\n element: {\n zIndex: '99',\n\n ...(props.includesAnimation && {\n ...theme.media.withViewTimelineAnimation({\n opacity: '0',\n transform: 'translateY(100px)',\n transition: 'opacity 1s, transform 1s',\n transitionDelay: props.isImagePositionLeft ? '0.5s' : '0s',\n }),\n }),\n\n [`@container (min-width: ${mediumSize}px)`]: {\n ...(props.isImagePositionLeft === false && {\n order: '1',\n }),\n },\n },\n },\n });\n\n return container;\n};\n\nconst createBackground = (props: PathwayOverlayProps): ElementVisual => {\n const getBackgroundColor = () => {\n if (props.isThemeDark) return Styles.token.color.black;\n if (props.isThemeLight) return Styles.token.color.gray.lighter;\n if (props.isThemeMaryland) return Styles.token.color.red;\n return Styles.token.color.white;\n };\n\n return ElementModel.createDiv({\n className: 'pathway-overlay-container-background',\n elementStyles: {\n element: {\n position: 'absolute',\n top: '0',\n bottom: '0',\n right: `-${Styles.token.spacing.xl}`,\n width: `calc(100% + ${Styles.token.spacing['6xl']})`,\n backgroundColor: getBackgroundColor(),\n\n [`@container (min-width: ${mediumSize}px)`]: {\n ...(props.includesAnimation && {\n animationTimeline: 'view()',\n animationRangeStart: 'entry',\n animationRangeEnd: 'contain',\n\n ...theme.media.withViewTimelineAnimation({\n width: 'calc(75% + 1000px)',\n\n ...(props.isImagePositionLeft === true && {\n right: '-1000px',\n animationName: REF_KEY_FRAME_BACKGROUND_LEFT,\n }),\n\n ...(props.isImagePositionLeft === false && {\n animationName: REF_KEY_FRAME_BACKGROUND_RIGHT,\n left: '-1000px',\n right: 'auto',\n }),\n }),\n }),\n },\n },\n },\n });\n};\n\nconst createLock = (props: PathwayOverlayProps) => {\n const children = [\n createBackground(props),\n createAssetColumn(props),\n createTextContent(props),\n ].filter((item): item is ElementVisual => item !== null);\n const isThemeApplied =\n props.isThemeDark || props.isThemeLight || props.isThemeMaryland;\n\n const lockWrapper = ElementModel.createDiv({\n className: 'pathway-overlay-container-lock-wrapper',\n children,\n elementStyles: {\n element: {\n position: 'relative',\n\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n padding: '0',\n },\n\n [`@container (min-width: ${mediumSize}px)`]: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n alignItems: 'center',\n\n ...(isThemeApplied && {\n padding: `${Styles.token.spacing['6xl']} 0`,\n }),\n },\n },\n },\n });\n\n return ElementModel.layout.spaceHorizontalLarger({\n element: document.createElement('div'),\n children: [lockWrapper],\n elementStyles: {\n element: {\n [`@container (max-width: ${mediumSize - 1}px)`]: {\n paddingLeft: 0,\n paddingRight: 0,\n },\n },\n },\n });\n};\n\nexport default (props: PathwayOverlayProps) => {\n const composite = ElementModel.createDiv({\n className: 'pathway-overlay-container',\n children: [\n ElementModel.createDiv({\n className: 'pathway-overlay-container-wrapper',\n children: [createLock(props)],\n }),\n ],\n elementStyles: {\n element: {\n container: 'inline-size',\n position: 'relative',\n overflow: 'clip',\n },\n },\n });\n\n const loadAnimation = () => {\n if (props.includesAnimation) {\n setupAnimation(composite.element);\n }\n };\n\n composite.styles += keyFrameBackgroundLeft;\n composite.styles += keyFrameBackgroundRight;\n\n return {\n ...composite,\n events: {\n loadAnimation,\n },\n };\n};\n"],"names":["observer","ElementModel.createDiv","theme.media.withViewTimelineAnimation","ElementModel.layout.spaceHorizontalLarger"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const withViewTimelineAnimation: (styles: Record<string, any>) => {
|
|
2
2
|
'@media (prefers-reduced-motion: no-preference)': {
|
|
3
|
-
'@supports (animation-timeline:
|
|
3
|
+
'@supports (animation-timeline: scroll())': Record<string, any>;
|
|
4
4
|
};
|
|
5
5
|
};
|
|
6
6
|
export declare const createContainerQuery: (comparison: string | undefined, breakpoint: number, styles?: {}) => {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const withViewTimelineAnimation = (styles) => ({
|
|
4
4
|
"@media (prefers-reduced-motion: no-preference)": {
|
|
5
|
-
"@supports (animation-timeline:
|
|
5
|
+
"@supports (animation-timeline: scroll())": styles
|
|
6
6
|
}
|
|
7
7
|
});
|
|
8
8
|
const createContainerQuery = (comparison = "max-width", breakpoint, styles = {}) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","sources":["../../../source/utilities/theme/media.ts"],"sourcesContent":["/**\n * Media query and responsive utilities\n */\n\n/**\n * Wrap styles with view timeline animation support\n * Checks for reduced motion preference and animation-timeline support\n */\nexport const withViewTimelineAnimation = (styles: Record<string, any>) => ({\n '@media (prefers-reduced-motion: no-preference)': {\n '@supports (animation-timeline:
|
|
1
|
+
{"version":3,"file":"media.js","sources":["../../../source/utilities/theme/media.ts"],"sourcesContent":["/**\n * Media query and responsive utilities\n */\n\n/**\n * Wrap styles with view timeline animation support\n * Checks for reduced motion preference and animation-timeline support\n */\nexport const withViewTimelineAnimation = (styles: Record<string, any>) => ({\n '@media (prefers-reduced-motion: no-preference)': {\n '@supports (animation-timeline: scroll())': styles,\n },\n});\n\n/**\n * Creates container query-style media query for responsive layouts.\n * @param {number} breakpoint - The breakpoint value in pixels\n * @param {string} comparison - The comparison operator ('min-width' or 'max-width')\n * @param {object} styles - The styles to apply at this breakpoint\n * @returns {object} Media query object with styles\n */\nexport const createContainerQuery = (\n comparison = 'max-width',\n breakpoint: number,\n styles = {},\n) => {\n return {\n [`@media (${comparison}: ${breakpoint}px)`]: styles,\n };\n};\n\n/**\n * Creates a container query for a range of viewport sizes.\n * @param {number} min - The minimum breakpoint in pixels\n * @param {number} max - The maximum breakpoint in pixels\n * @param {object} styles - The styles to apply within this range\n * @returns {object} Media query object\n */\nexport const createRangeContainerQuery = (\n min: number,\n max: number,\n styles = {},\n) => {\n return {\n [`@media (min-width: ${min}px) and (max-width: ${max})`]: styles,\n };\n};\n"],"names":[],"mappings":";;AAQO,MAAM,4BAA4B,CAAC,YAAiC;AAAA,EACzE,kDAAkD;AAAA,IAChD,4CAA4C;AAAA,EAAA;AAEhD;AASO,MAAM,uBAAuB,CAClC,aAAa,aACb,YACA,SAAS,CAAA,MACN;AACH,SAAO;AAAA,IACL,CAAC,WAAW,UAAU,KAAK,UAAU,KAAK,GAAG;AAAA,EAAA;AAEjD;AASO,MAAM,4BAA4B,CACvC,KACA,KACA,SAAS,CAAA,MACN;AACH,SAAO;AAAA,IACL,CAAC,sBAAsB,GAAG,uBAAuB,GAAG,GAAG,GAAG;AAAA,EAAA;AAE9D;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const withViewTimelineAnimation = (styles) => ({
|
|
2
2
|
"@media (prefers-reduced-motion: no-preference)": {
|
|
3
|
-
"@supports (animation-timeline:
|
|
3
|
+
"@supports (animation-timeline: scroll())": styles
|
|
4
4
|
}
|
|
5
5
|
});
|
|
6
6
|
const createContainerQuery = (comparison = "max-width", breakpoint, styles = {}) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.mjs","sources":["../../../source/utilities/theme/media.ts"],"sourcesContent":["/**\n * Media query and responsive utilities\n */\n\n/**\n * Wrap styles with view timeline animation support\n * Checks for reduced motion preference and animation-timeline support\n */\nexport const withViewTimelineAnimation = (styles: Record<string, any>) => ({\n '@media (prefers-reduced-motion: no-preference)': {\n '@supports (animation-timeline:
|
|
1
|
+
{"version":3,"file":"media.mjs","sources":["../../../source/utilities/theme/media.ts"],"sourcesContent":["/**\n * Media query and responsive utilities\n */\n\n/**\n * Wrap styles with view timeline animation support\n * Checks for reduced motion preference and animation-timeline support\n */\nexport const withViewTimelineAnimation = (styles: Record<string, any>) => ({\n '@media (prefers-reduced-motion: no-preference)': {\n '@supports (animation-timeline: scroll())': styles,\n },\n});\n\n/**\n * Creates container query-style media query for responsive layouts.\n * @param {number} breakpoint - The breakpoint value in pixels\n * @param {string} comparison - The comparison operator ('min-width' or 'max-width')\n * @param {object} styles - The styles to apply at this breakpoint\n * @returns {object} Media query object with styles\n */\nexport const createContainerQuery = (\n comparison = 'max-width',\n breakpoint: number,\n styles = {},\n) => {\n return {\n [`@media (${comparison}: ${breakpoint}px)`]: styles,\n };\n};\n\n/**\n * Creates a container query for a range of viewport sizes.\n * @param {number} min - The minimum breakpoint in pixels\n * @param {number} max - The maximum breakpoint in pixels\n * @param {object} styles - The styles to apply within this range\n * @returns {object} Media query object\n */\nexport const createRangeContainerQuery = (\n min: number,\n max: number,\n styles = {},\n) => {\n return {\n [`@media (min-width: ${min}px) and (max-width: ${max})`]: styles,\n };\n};\n"],"names":[],"mappings":"AAQO,MAAM,4BAA4B,CAAC,YAAiC;AAAA,EACzE,kDAAkD;AAAA,IAChD,4CAA4C;AAAA,EAAA;AAEhD;AASO,MAAM,uBAAuB,CAClC,aAAa,aACb,YACA,SAAS,CAAA,MACN;AACH,SAAO;AAAA,IACL,CAAC,WAAW,UAAU,KAAK,UAAU,KAAK,GAAG;AAAA,EAAA;AAEjD;AASO,MAAM,4BAA4B,CACvC,KACA,KACA,SAAS,CAAA,MACN;AACH,SAAO;AAAA,IACL,CAAC,sBAAsB,GAAG,uBAAuB,GAAG,GAAG,GAAG;AAAA,EAAA;AAE9D;"}
|