@universityofmaryland/web-elements-library 1.6.17 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/atomic/animations/brand/card-stack.js +2 -3
- package/dist/atomic/animations/brand/card-stack.js.map +1 -1
- package/dist/atomic/animations/brand/chevron-flow.d.ts +1 -7
- package/dist/atomic/animations/brand/chevron-flow.d.ts.map +1 -1
- package/dist/atomic/animations/brand/chevron-flow.js +82 -159
- package/dist/atomic/animations/brand/chevron-flow.js.map +1 -1
- package/dist/atomic/animations/brand/chevron-scroll.d.ts +1 -4
- package/dist/atomic/animations/brand/chevron-scroll.d.ts.map +1 -1
- package/dist/atomic/animations/brand/chevron-scroll.js +89 -143
- package/dist/atomic/animations/brand/chevron-scroll.js.map +1 -1
- package/dist/atomic/assets/image/caption.d.ts +9 -0
- package/dist/atomic/assets/image/caption.d.ts.map +1 -0
- package/dist/atomic/assets/image/caption.js +166 -0
- package/dist/atomic/assets/image/caption.js.map +1 -0
- package/dist/atomic/assets/image/gif.d.ts.map +1 -1
- package/dist/atomic/assets/image/gif.js +6 -1
- package/dist/atomic/assets/image/gif.js.map +1 -1
- package/dist/atomic/assets/image/index.d.ts +1 -0
- package/dist/atomic/assets/image/index.d.ts.map +1 -1
- package/dist/atomic/assets/image/index.js +2 -0
- package/dist/atomic/assets/image/index.js.map +1 -1
- package/dist/atomic/assets/video/toggle.d.ts.map +1 -1
- package/dist/atomic/assets/video/toggle.js +9 -2
- package/dist/atomic/assets/video/toggle.js.map +1 -1
- package/dist/atomic/buttons/fullscreen.d.ts +1 -0
- package/dist/atomic/buttons/fullscreen.d.ts.map +1 -1
- package/dist/atomic/buttons/fullscreen.js +35 -3
- package/dist/atomic/buttons/fullscreen.js.map +1 -1
- package/dist/atomic/layout/overlay/modal.d.ts +1 -10
- package/dist/atomic/layout/overlay/modal.d.ts.map +1 -1
- package/dist/atomic/layout/overlay/modal.js +28 -44
- package/dist/atomic/layout/overlay/modal.js.map +1 -1
- package/dist/atomic/layout/person/columns.js +2 -3
- package/dist/atomic/layout/person/columns.js.map +1 -1
- package/dist/atomic/text-lockup/date.d.ts +1 -4
- package/dist/atomic/text-lockup/date.d.ts.map +1 -1
- package/dist/atomic/text-lockup/date.js +42 -75
- package/dist/atomic/text-lockup/date.js.map +1 -1
- package/dist/composite/accordion/item.d.ts +3 -16
- package/dist/composite/accordion/item.d.ts.map +1 -1
- package/dist/composite/accordion/item.js +152 -245
- package/dist/composite/accordion/item.js.map +1 -1
- package/dist/composite/card/block.js +2 -3
- package/dist/composite/card/block.js.map +1 -1
- package/dist/composite/card/event-time.js +2 -3
- package/dist/composite/card/event-time.js.map +1 -1
- package/dist/composite/card/list.js +2 -3
- package/dist/composite/card/list.js.map +1 -1
- package/dist/composite/card/overlay/color.js +3 -3
- package/dist/composite/card/overlay/icon.js +3 -3
- package/dist/composite/card/overlay/image.d.ts.map +1 -1
- package/dist/composite/card/overlay/image.js +9 -12
- package/dist/composite/card/overlay/image.js.map +1 -1
- package/dist/composite/card/video/block.js +4 -3
- package/dist/composite/card/video/block.js.map +1 -1
- package/dist/composite/carousel/cards/index.d.ts +1 -8
- package/dist/composite/carousel/cards/index.d.ts.map +1 -1
- package/dist/composite/carousel/cards/index.js +163 -282
- package/dist/composite/carousel/cards/index.js.map +1 -1
- package/dist/composite/carousel/default/index.d.ts +9 -15
- package/dist/composite/carousel/default/index.d.ts.map +1 -1
- package/dist/composite/carousel/default/index.js +78 -129
- package/dist/composite/carousel/default/index.js.map +1 -1
- package/dist/composite/carousel/elements/equal-width-items.d.ts +37 -0
- package/dist/composite/carousel/elements/equal-width-items.d.ts.map +1 -0
- package/dist/composite/carousel/elements/{blocks.js → equal-width-items.js} +157 -227
- package/dist/composite/carousel/elements/equal-width-items.js.map +1 -0
- package/dist/composite/carousel/elements/full-screen.d.ts +3 -2
- package/dist/composite/carousel/elements/full-screen.d.ts.map +1 -1
- package/dist/composite/carousel/elements/full-screen.js +34 -41
- package/dist/composite/carousel/elements/full-screen.js.map +1 -1
- package/dist/composite/carousel/elements/image.d.ts +15 -2
- package/dist/composite/carousel/elements/image.d.ts.map +1 -1
- package/dist/composite/carousel/elements/image.js +176 -151
- package/dist/composite/carousel/elements/image.js.map +1 -1
- package/dist/composite/carousel/elements/index.d.ts +4 -1
- package/dist/composite/carousel/elements/index.d.ts.map +1 -1
- package/dist/composite/carousel/elements/indicator-wrapper.d.ts +13 -0
- package/dist/composite/carousel/elements/indicator-wrapper.d.ts.map +1 -0
- package/dist/composite/carousel/elements/indicator-wrapper.js +67 -0
- package/dist/composite/carousel/elements/indicator-wrapper.js.map +1 -0
- package/dist/composite/carousel/elements/nav-button.d.ts +82 -0
- package/dist/composite/carousel/elements/nav-button.d.ts.map +1 -0
- package/dist/composite/carousel/elements/nav-button.js +164 -0
- package/dist/composite/carousel/elements/nav-button.js.map +1 -0
- package/dist/composite/carousel/elements/overlay.d.ts +3 -2
- package/dist/composite/carousel/elements/overlay.d.ts.map +1 -1
- package/dist/composite/carousel/elements/overlay.js +85 -55
- package/dist/composite/carousel/elements/overlay.js.map +1 -1
- package/dist/composite/carousel/image/multiple.d.ts +2 -7
- package/dist/composite/carousel/image/multiple.d.ts.map +1 -1
- package/dist/composite/carousel/image/multiple.js +85 -150
- package/dist/composite/carousel/image/multiple.js.map +1 -1
- package/dist/composite/carousel/image/standard.d.ts +2 -7
- package/dist/composite/carousel/image/standard.d.ts.map +1 -1
- package/dist/composite/carousel/image/standard.js +148 -262
- package/dist/composite/carousel/image/standard.js.map +1 -1
- package/dist/composite/carousel/thumbnail/index.d.ts +1 -8
- package/dist/composite/carousel/thumbnail/index.d.ts.map +1 -1
- package/dist/composite/carousel/thumbnail/index.js +72 -113
- package/dist/composite/carousel/thumbnail/index.js.map +1 -1
- package/dist/composite/carousel/wide/container.d.ts +21 -20
- package/dist/composite/carousel/wide/container.d.ts.map +1 -1
- package/dist/composite/carousel/wide/container.js +37 -12
- package/dist/composite/carousel/wide/container.js.map +1 -1
- package/dist/composite/carousel/wide/controls.d.ts +5 -10
- package/dist/composite/carousel/wide/controls.d.ts.map +1 -1
- package/dist/composite/carousel/wide/controls.js +24 -94
- package/dist/composite/carousel/wide/controls.js.map +1 -1
- package/dist/composite/carousel/wide/frames.d.ts +18 -10
- package/dist/composite/carousel/wide/frames.d.ts.map +1 -1
- package/dist/composite/carousel/wide/frames.js +60 -78
- package/dist/composite/carousel/wide/frames.js.map +1 -1
- package/dist/composite/carousel/wide/index.d.ts.map +1 -1
- package/dist/composite/carousel/wide/index.js +11 -19
- package/dist/composite/carousel/wide/index.js.map +1 -1
- package/dist/composite/hero/custom/expand.js +3 -4
- package/dist/composite/hero/custom/expand.js.map +1 -1
- package/dist/composite/hero/custom/grid.js +2 -3
- package/dist/composite/hero/custom/grid.js.map +1 -1
- package/dist/composite/hero/custom/video-arrow.js +4 -3
- package/dist/composite/hero/custom/video-arrow.js.map +1 -1
- package/dist/composite/hero/logo.js +3 -3
- package/dist/composite/hero/minimal.js +3 -3
- package/dist/composite/hero/overlay.js +5 -4
- package/dist/composite/hero/overlay.js.map +1 -1
- package/dist/composite/hero/stacked.js +3 -3
- package/dist/composite/hero/standard.js +4 -3
- package/dist/composite/hero/standard.js.map +1 -1
- package/dist/composite/layout/box/logo.d.ts +1 -4
- package/dist/composite/layout/box/logo.d.ts.map +1 -1
- package/dist/composite/layout/box/logo.js +55 -103
- package/dist/composite/layout/box/logo.js.map +1 -1
- package/dist/composite/layout/image/expand.d.ts +1 -4
- package/dist/composite/layout/image/expand.d.ts.map +1 -1
- package/dist/composite/layout/image/expand.js +136 -243
- package/dist/composite/layout/image/expand.js.map +1 -1
- package/dist/composite/layout/scroll-top/index.d.ts +1 -7
- package/dist/composite/layout/scroll-top/index.d.ts.map +1 -1
- package/dist/composite/layout/scroll-top/index.js +65 -77
- package/dist/composite/layout/scroll-top/index.js.map +1 -1
- package/dist/composite/layout/sticky-columns/index.d.ts +2 -2
- package/dist/composite/layout/sticky-columns/index.d.ts.map +1 -1
- package/dist/composite/layout/sticky-columns/index.js +42 -70
- package/dist/composite/layout/sticky-columns/index.js.map +1 -1
- package/dist/composite/media/elements/gif.js +3 -3
- package/dist/composite/media/inline/caption.d.ts +4 -2
- package/dist/composite/media/inline/caption.d.ts.map +1 -1
- package/dist/composite/media/inline/caption.js +56 -67
- package/dist/composite/media/inline/caption.js.map +1 -1
- package/dist/composite/media/inline/index.d.ts +9 -8
- package/dist/composite/media/inline/index.d.ts.map +1 -1
- package/dist/composite/media/inline/standard.d.ts +1 -4
- package/dist/composite/media/inline/standard.d.ts.map +1 -1
- package/dist/composite/media/inline/standard.js +16 -24
- package/dist/composite/media/inline/standard.js.map +1 -1
- package/dist/composite/media/inline/wrapped.d.ts +4 -2
- package/dist/composite/media/inline/wrapped.d.ts.map +1 -1
- package/dist/composite/media/inline/wrapped.js +80 -83
- package/dist/composite/media/inline/wrapped.js.map +1 -1
- package/dist/composite/navigation/utility/alert.js +3 -4
- package/dist/composite/navigation/utility/alert.js.map +1 -1
- package/dist/composite/pathway/_common.js +4 -3
- package/dist/composite/pathway/_common.js.map +1 -1
- package/dist/composite/pathway/hero.js +3 -3
- package/dist/composite/person/bio/full.js +3 -3
- package/dist/composite/person/bio/small.js +2 -3
- package/dist/composite/person/bio/small.js.map +1 -1
- package/dist/composite/person/block.js +2 -3
- package/dist/composite/person/block.js.map +1 -1
- package/dist/composite/person/hero.js +3 -3
- package/dist/composite/person/list.js +2 -3
- package/dist/composite/person/list.js.map +1 -1
- package/dist/composite/person/tabular.js +2 -3
- package/dist/composite/person/tabular.js.map +1 -1
- package/dist/composite/slider/events.d.ts +6 -12
- package/dist/composite/slider/events.d.ts.map +1 -1
- package/dist/composite/slider/events.js +304 -428
- package/dist/composite/slider/events.js.map +1 -1
- package/dist/layout/image.d.ts +5 -10
- package/dist/layout/image.d.ts.map +1 -1
- package/dist/layout/image.js +27 -88
- package/dist/layout/image.js.map +1 -1
- package/dist/layout/index.d.ts +1 -1
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout.js +2 -2
- package/package.json +6 -6
- package/dist/composite/carousel/elements/blocks.d.ts +0 -42
- package/dist/composite/carousel/elements/blocks.d.ts.map +0 -1
- package/dist/composite/carousel/elements/blocks.js.map +0 -1
- package/dist/composite/carousel/wide/_elementModel.d.ts +0 -18
- package/dist/composite/carousel/wide/_elementModel.d.ts.map +0 -1
- package/dist/composite/carousel/wide/_elementModel.js +0 -29
- package/dist/composite/carousel/wide/_elementModel.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as token from "@universityofmaryland/web-token-library";
|
|
2
|
+
import { ElementBuilder } from "@universityofmaryland/web-builder-library";
|
|
3
|
+
import { combineStyles } from "@universityofmaryland/web-utilities-library/styles";
|
|
2
4
|
import { close_large } from "@universityofmaryland/web-icons-library/controls";
|
|
3
|
-
import "@universityofmaryland/web-builder-library";
|
|
4
5
|
import "@universityofmaryland/web-styles-library/element";
|
|
5
6
|
import "@universityofmaryland/web-styles-library/layout";
|
|
6
7
|
import "@universityofmaryland/web-styles-library/animation";
|
|
@@ -12,7 +13,6 @@ import "@universityofmaryland/web-icons-library/files";
|
|
|
12
13
|
import "@universityofmaryland/web-icons-library/brand";
|
|
13
14
|
import "@universityofmaryland/web-icons-library/arrows";
|
|
14
15
|
import "@universityofmaryland/web-utilities-library/performance";
|
|
15
|
-
import "../../../atomic/animations/brand/chevron-scroll.js";
|
|
16
16
|
import "../../../atomic/animations/brand/card-stack.js";
|
|
17
17
|
import "@universityofmaryland/web-styles-library";
|
|
18
18
|
import "@universityofmaryland/web-utilities-library/accessibility";
|
|
@@ -23,49 +23,42 @@ import "../../../atomic/layout/block/stacked.js";
|
|
|
23
23
|
import { createModal } from "../../../atomic/layout/overlay/modal.js";
|
|
24
24
|
import "../../../atomic/layout/person/columns.js";
|
|
25
25
|
import "@universityofmaryland/web-icons-library/social";
|
|
26
|
-
import "
|
|
26
|
+
import "@universityofmaryland/web-utilities-library/string";
|
|
27
|
+
import "@universityofmaryland/web-utilities-library/animation";
|
|
27
28
|
import "../../../atomic/text-lockup/small.js";
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
29
|
+
const createCompositeCarouselFullScreen = ({ content }) => {
|
|
30
|
+
const modal = createModal({ content });
|
|
31
|
+
const modalEvents = modal.events;
|
|
32
|
+
const closeButtonModel = new ElementBuilder("button").withClassName("carousel-fixed-screen-button").withAttribute("type", "button").withAria({ label: "Close" }).withHTML(close_large).withStyles({
|
|
33
|
+
element: {
|
|
34
|
+
position: "absolute",
|
|
35
|
+
top: "10px",
|
|
36
|
+
right: "10px",
|
|
37
|
+
[`@media (${token.media.queries.tablet.min})`]: {
|
|
38
|
+
top: "calc(10vh - 22px)",
|
|
39
|
+
right: "calc(10vw - 22px)"
|
|
40
|
+
},
|
|
41
|
+
"& svg": {
|
|
42
|
+
fill: token.color.white,
|
|
43
|
+
width: "20px",
|
|
44
|
+
height: "20px"
|
|
45
|
+
}
|
|
42
46
|
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
let styles = STYLES_FIXED_FULL_SCREEN;
|
|
55
|
-
styles += modal.styles;
|
|
56
|
-
closeButton.setAttribute("type", "button");
|
|
57
|
-
closeButton.setAttribute("aria-label", "Close");
|
|
58
|
-
closeButton.classList.add(ELEMENT_CLOSE_BUTTON);
|
|
59
|
-
closeButton.innerHTML = close_large;
|
|
60
|
-
closeButton.addEventListener("click", modal.events.hide);
|
|
61
|
-
modal.element.appendChild(closeButton);
|
|
47
|
+
}).on("click", () => {
|
|
48
|
+
if (!modalEvents) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
modalEvents.hide();
|
|
52
|
+
}).build();
|
|
53
|
+
modal.element.appendChild(closeButtonModel.element);
|
|
54
|
+
const show = modalEvents ? modalEvents.show : () => {
|
|
55
|
+
};
|
|
56
|
+
const hide = modalEvents ? modalEvents.hide : () => {
|
|
57
|
+
};
|
|
62
58
|
return {
|
|
63
59
|
element: modal.element,
|
|
64
|
-
styles,
|
|
65
|
-
events: {
|
|
66
|
-
show: modal.events.show,
|
|
67
|
-
hide: modal.events.hide
|
|
68
|
-
}
|
|
60
|
+
styles: combineStyles(modal.styles, closeButtonModel.styles),
|
|
61
|
+
events: { show, hide }
|
|
69
62
|
};
|
|
70
63
|
};
|
|
71
64
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"full-screen.js","sources":["../../../../source/composite/carousel/elements/full-screen.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport { close_large as iconCloseLarge } from '@universityofmaryland/web-icons-library/controls';\nimport { layout } from 'atomic';\n\ntype TypeFixedFullScreenProps = {\n content: HTMLElement;\n callback: () => void;\n};\n\
|
|
1
|
+
{"version":3,"file":"full-screen.js","sources":["../../../../source/composite/carousel/elements/full-screen.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { combineStyles } from '@universityofmaryland/web-utilities-library/styles';\nimport { close_large as iconCloseLarge } from '@universityofmaryland/web-icons-library/controls';\nimport { layout } from 'atomic';\n\ntype TypeFixedFullScreenProps = {\n content: HTMLElement;\n callback: () => void;\n};\n\ntype FullScreenModel = {\n element: HTMLElement;\n styles: string;\n events: {\n show: () => void;\n hide: () => void;\n };\n};\n\nexport const createCompositeCarouselFullScreen = ({ content }: TypeFixedFullScreenProps) => {\n const modal = layout.overlay.modal({ content });\n const modalEvents = modal.events;\n\n const closeButtonModel = new ElementBuilder('button')\n .withClassName('carousel-fixed-screen-button')\n .withAttribute('type', 'button')\n .withAria({ label: 'Close' })\n .withHTML(iconCloseLarge)\n .withStyles({\n element: {\n position: 'absolute',\n top: '10px',\n right: '10px',\n [`@media (${token.media.queries.tablet.min})`]: {\n top: 'calc(10vh - 22px)',\n right: 'calc(10vw - 22px)',\n },\n '& svg': {\n fill: token.color.white,\n width: '20px',\n height: '20px',\n },\n },\n })\n .on('click', () => {\n if (!modalEvents) {\n return;\n }\n modalEvents.hide();\n })\n .build();\n\n modal.element.appendChild(closeButtonModel.element);\n\n const show = modalEvents ? modalEvents.show : () => {};\n const hide = modalEvents ? modalEvents.hide : () => {};\n\n return {\n element: modal.element,\n styles: combineStyles(modal.styles, closeButtonModel.styles),\n events: { show, hide },\n } as FullScreenModel;\n};\n"],"names":["layout.overlay.modal","iconCloseLarge"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBO,MAAM,oCAAoC,CAAC,EAAE,cAAwC;AAC1F,QAAM,QAAQA,YAAqB,EAAE,SAAS;AAC9C,QAAM,cAAc,MAAM;AAE1B,QAAM,mBAAmB,IAAI,eAAe,QAAQ,EACjD,cAAc,8BAA8B,EAC5C,cAAc,QAAQ,QAAQ,EAC9B,SAAS,EAAE,OAAO,QAAA,CAAS,EAC3B,SAASC,WAAc,EACvB,WAAW;AAAA,IACV,SAAS;AAAA,MACP,UAAU;AAAA,MACV,KAAK;AAAA,MACL,OAAO;AAAA,MACP,CAAC,WAAW,MAAM,MAAM,QAAQ,OAAO,GAAG,GAAG,GAAG;AAAA,QAC9C,KAAK;AAAA,QACL,OAAO;AAAA,MAAA;AAAA,MAET,SAAS;AAAA,QACP,MAAM,MAAM,MAAM;AAAA,QAClB,OAAO;AAAA,QACP,QAAQ;AAAA,MAAA;AAAA,IACV;AAAA,EACF,CACD,EACA,GAAG,SAAS,MAAM;AACjB,QAAI,CAAC,aAAa;AAChB;AAAA,IACF;AACA,gBAAY,KAAA;AAAA,EACd,CAAC,EACA,MAAA;AAEH,QAAM,QAAQ,YAAY,iBAAiB,OAAO;AAElD,QAAM,OAAO,cAAc,YAAY,OAAO,MAAM;AAAA,EAAC;AACrD,QAAM,OAAO,cAAc,YAAY,OAAO,MAAM;AAAA,EAAC;AAErD,SAAO;AAAA,IACL,SAAS,MAAM;AAAA,IACf,QAAQ,cAAc,MAAM,QAAQ,iBAAiB,MAAM;AAAA,IAC3D,QAAQ,EAAE,MAAM,KAAA;AAAA,EAAK;AAEzB;"}
|
|
@@ -2,10 +2,22 @@ type TypeCarouselImageProps = {
|
|
|
2
2
|
slides: HTMLElement[];
|
|
3
3
|
callback?: (index: number) => void;
|
|
4
4
|
maxHeight?: number;
|
|
5
|
+
isThemeDark?: boolean;
|
|
6
|
+
includeButtonWrapper?: boolean;
|
|
5
7
|
};
|
|
6
|
-
|
|
7
|
-
element:
|
|
8
|
+
type CarouselImageModel = {
|
|
9
|
+
element: HTMLElement;
|
|
8
10
|
styles: string;
|
|
11
|
+
buttons: {
|
|
12
|
+
prev: {
|
|
13
|
+
element: HTMLElement;
|
|
14
|
+
styles: string;
|
|
15
|
+
};
|
|
16
|
+
next: {
|
|
17
|
+
element: HTMLElement;
|
|
18
|
+
styles: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
9
21
|
events: {
|
|
10
22
|
Load: () => void;
|
|
11
23
|
EventMoveTo: (index: number) => void;
|
|
@@ -14,5 +26,6 @@ export declare const createCompositeCarouselImage: (props: TypeCarouselImageProp
|
|
|
14
26
|
EventSlideRight: () => void;
|
|
15
27
|
};
|
|
16
28
|
};
|
|
29
|
+
export declare const createCompositeCarouselImage: (props: TypeCarouselImageProps) => CarouselImageModel;
|
|
17
30
|
export {};
|
|
18
31
|
//# sourceMappingURL=image.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../../source/composite/carousel/elements/image.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../../source/composite/carousel/elements/image.ts"],"names":[],"mappings":"AAOA,KAAK,sBAAsB,GAAG;IAC5B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QAAE,IAAI,EAAE;YAAE,OAAO,EAAE,WAAW,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,IAAI,EAAE;YAAE,OAAO,EAAE,WAAW,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAC5G,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,IAAI,CAAC;QACjB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QACrC,WAAW,EAAE,MAAM,IAAI,CAAC;QACxB,cAAc,EAAE,MAAM,IAAI,CAAC;QAC3B,eAAe,EAAE,MAAM,IAAI,CAAC;KAC7B,CAAC;CACH,CAAC;AAqLF,eAAO,MAAM,4BAA4B,GAAI,OAAO,sBAAsB,uBAuKpE,CAAC"}
|
|
@@ -1,142 +1,118 @@
|
|
|
1
1
|
import * as token from "@universityofmaryland/web-token-library";
|
|
2
|
+
import { ElementBuilder } from "@universityofmaryland/web-builder-library";
|
|
2
3
|
import { debounce } from "@universityofmaryland/web-utilities-library/performance";
|
|
3
4
|
import { getResponsiveImageSize } from "@universityofmaryland/web-utilities-library/media";
|
|
4
5
|
import { setupSwipeDetection } from "@universityofmaryland/web-utilities-library/events";
|
|
5
|
-
import {
|
|
6
|
+
import { createCarouselNavButton, buttonColorsOnGray } from "./nav-button.js";
|
|
6
7
|
const ANIMATION_DURATION = 500;
|
|
7
8
|
const ATTRIBUTE_ACTIVE_SLIDE = "data-active-slide";
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const ELEMENT_CAROUSEL_SLIDE = "carousel-image-slide";
|
|
11
|
-
const ELEMENT_CAROUSEL_SLIDER_BUTTON = "carousel-slider-button";
|
|
12
|
-
const OVERWRITE_ACTIVE_SLIDE = `.${ELEMENT_CAROUSEL_SLIDE}[${ATTRIBUTE_ACTIVE_SLIDE}]`;
|
|
13
|
-
const SliderButtons = `
|
|
14
|
-
.${ELEMENT_CAROUSEL_SLIDER_BUTTON} {
|
|
15
|
-
background-color: ${token.color.white};
|
|
16
|
-
display: flex;
|
|
17
|
-
justify-content: center;
|
|
18
|
-
align-items: center;
|
|
19
|
-
height: 40px;
|
|
20
|
-
width: 40px;
|
|
21
|
-
position: absolute;
|
|
22
|
-
top: 50%;
|
|
23
|
-
z-index: 99;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.${ELEMENT_CAROUSEL_SLIDER_BUTTON}:first-of-type {
|
|
27
|
-
left: ${token.spacing.sm};
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
.${ELEMENT_CAROUSEL_SLIDER_BUTTON}:first-of-type svg {
|
|
31
|
-
transform: rotate(180deg);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.${ELEMENT_CAROUSEL_SLIDER_BUTTON}:last-of-type {
|
|
35
|
-
right: ${token.spacing.sm};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.${ELEMENT_CAROUSEL_SLIDER_BUTTON} svg {
|
|
39
|
-
fill: ${token.color.black};
|
|
40
|
-
width: 16px;
|
|
41
|
-
}
|
|
42
|
-
`;
|
|
43
|
-
const SlideStyles = `
|
|
44
|
-
.${ELEMENT_CAROUSEL_SLIDE} {
|
|
45
|
-
height: 100%;
|
|
46
|
-
width: 100%;
|
|
47
|
-
position: absolute;
|
|
48
|
-
left: 100%;
|
|
49
|
-
display: none;
|
|
50
|
-
transition: transform ${ANIMATION_DURATION}ms ease-in-out;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
${OVERWRITE_ACTIVE_SLIDE} {
|
|
54
|
-
z-index: 99;
|
|
55
|
-
left: 0;
|
|
56
|
-
display: block;
|
|
57
|
-
transform: translateX(0);
|
|
58
|
-
}
|
|
59
|
-
`;
|
|
60
|
-
const SliderStyles = `
|
|
61
|
-
.${ELEMENT_CAROUSEL_CONTAINER} {
|
|
62
|
-
position: relative;
|
|
63
|
-
}
|
|
64
|
-
`;
|
|
65
|
-
const STYLES_CAROUSEL_IMAGE_ELEMENT = `
|
|
66
|
-
.${ELEMENT_CAROUSEL_DECLARATION} {
|
|
67
|
-
overflow: hidden;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
${SliderStyles}
|
|
71
|
-
${SlideStyles}
|
|
72
|
-
${SliderButtons}
|
|
73
|
-
`;
|
|
9
|
+
const BUTTON_CLASS_NEXT = "carousel-slider-button--next";
|
|
10
|
+
const BUTTON_CLASS_PREV = "carousel-slider-button--prev";
|
|
74
11
|
const CreateButton = ({
|
|
75
12
|
EventSlide,
|
|
76
|
-
isRight = true
|
|
13
|
+
isRight = true,
|
|
14
|
+
isThemeDark
|
|
77
15
|
}) => {
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
16
|
+
const buttonClassName = isRight ? BUTTON_CLASS_NEXT : BUTTON_CLASS_PREV;
|
|
17
|
+
const buttonDirection = isRight ? "next" : "prev";
|
|
18
|
+
return createCarouselNavButton({
|
|
19
|
+
className: buttonClassName,
|
|
20
|
+
direction: buttonDirection
|
|
21
|
+
}).withStyles({
|
|
22
|
+
element: {
|
|
23
|
+
position: "relative",
|
|
24
|
+
top: "auto",
|
|
25
|
+
left: "auto",
|
|
26
|
+
right: "auto",
|
|
27
|
+
zIndex: 99,
|
|
28
|
+
...buttonColorsOnGray(isThemeDark),
|
|
29
|
+
[`@media (${token.media.queries.desktop.min})`]: {
|
|
30
|
+
position: "absolute",
|
|
31
|
+
top: "50%",
|
|
32
|
+
left: 0,
|
|
33
|
+
right: "auto",
|
|
34
|
+
...isRight && {
|
|
35
|
+
left: "auto",
|
|
36
|
+
right: 0
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}).on("click", (event) => {
|
|
41
|
+
const button = event.currentTarget;
|
|
88
42
|
event.stopPropagation();
|
|
89
|
-
if (isRight)
|
|
90
|
-
|
|
43
|
+
if (isRight) {
|
|
44
|
+
EventSlide({});
|
|
45
|
+
} else {
|
|
46
|
+
EventSlide({ forward: false });
|
|
47
|
+
}
|
|
91
48
|
button.disabled = true;
|
|
92
49
|
setTimeout(() => {
|
|
93
50
|
button.disabled = false;
|
|
94
51
|
}, ANIMATION_DURATION + 100);
|
|
95
|
-
});
|
|
96
|
-
|
|
52
|
+
}).build();
|
|
53
|
+
};
|
|
54
|
+
const CreateSlide = ({ slide }) => {
|
|
55
|
+
return new ElementBuilder(slide).withClassName("carousel-image-slide").withStyles({
|
|
56
|
+
element: {
|
|
57
|
+
height: "100%",
|
|
58
|
+
width: "100%",
|
|
59
|
+
position: "absolute",
|
|
60
|
+
left: "100%",
|
|
61
|
+
display: "none",
|
|
62
|
+
transition: `transform ${ANIMATION_DURATION}ms ease-in-out`,
|
|
63
|
+
"&[data-active-slide]": {
|
|
64
|
+
zIndex: 99,
|
|
65
|
+
left: 0,
|
|
66
|
+
display: "block",
|
|
67
|
+
transform: "translateX(0)"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}).build();
|
|
97
71
|
};
|
|
98
72
|
const SetCarouselSize = ({
|
|
99
73
|
slider,
|
|
100
74
|
activeSlide,
|
|
101
|
-
transition = false,
|
|
102
75
|
maxHeight
|
|
103
76
|
}) => {
|
|
104
77
|
const windowHeight = window.innerHeight - 48;
|
|
105
78
|
const children = Array.from(activeSlide.children);
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
79
|
+
const sliderContainer = slider.parentElement;
|
|
80
|
+
const sliderWrapper = sliderContainer && sliderContainer.parentElement;
|
|
81
|
+
const buttonRoot = sliderWrapper || sliderContainer;
|
|
82
|
+
const buttons = buttonRoot ? Array.from(buttonRoot.querySelectorAll(`.${BUTTON_CLASS_PREV}, .${BUTTON_CLASS_NEXT}`)) : [];
|
|
109
83
|
const img = activeSlide.querySelector("img");
|
|
110
|
-
const maxWindowHeight = maxHeight
|
|
84
|
+
const maxWindowHeight = Math.min(maxHeight || windowHeight, windowHeight);
|
|
111
85
|
const imageSize = getResponsiveImageSize({
|
|
112
86
|
image: img,
|
|
113
87
|
parentNode: slider,
|
|
114
88
|
maxWindowHeight
|
|
115
89
|
});
|
|
116
|
-
const imageContainer = children.find(
|
|
117
|
-
|
|
118
|
-
);
|
|
90
|
+
const imageContainer = children.find((child) => child.contains(img));
|
|
91
|
+
const isMobile = window.matchMedia(`(${token.media.queries.tablet.max})`).matches;
|
|
119
92
|
let size = imageSize;
|
|
120
93
|
imageContainer.style.height = `${imageSize}px`;
|
|
94
|
+
if (isMobile) {
|
|
95
|
+
buttons.forEach((button) => {
|
|
96
|
+
button.style.top = "";
|
|
97
|
+
});
|
|
98
|
+
} else {
|
|
99
|
+
buttons.forEach((button) => {
|
|
100
|
+
button.style.top = `${imageSize / 2 - button.offsetHeight / 2}px`;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
121
103
|
if (children.length > 1) {
|
|
122
|
-
size = children.reduce((
|
|
123
|
-
return currentElement.offsetHeight +
|
|
104
|
+
size = children.reduce((accumulator, currentElement) => {
|
|
105
|
+
return currentElement.offsetHeight + accumulator;
|
|
124
106
|
}, 0);
|
|
125
107
|
}
|
|
126
|
-
buttons.forEach((button) => button.style.top = `${imageSize / 2}px`);
|
|
127
|
-
if (transition) {
|
|
128
|
-
slider.style.transition = `height ${ANIMATION_DURATION}ms ease-in-out`;
|
|
129
|
-
} else {
|
|
130
|
-
slider.style.transition = `none`;
|
|
131
|
-
}
|
|
132
108
|
slider.style.height = `${size}px`;
|
|
133
109
|
};
|
|
134
110
|
const SlideActiveSlide = ({
|
|
135
111
|
slide,
|
|
136
112
|
isRight = true
|
|
137
113
|
}) => {
|
|
138
|
-
const transformDirection = isRight ? "
|
|
139
|
-
slide.style.transform =
|
|
114
|
+
const transformDirection = isRight ? "-100%" : "100%";
|
|
115
|
+
slide.style.transform = `translateX(${transformDirection})`;
|
|
140
116
|
setTimeout(() => {
|
|
141
117
|
slide.removeAttribute(ATTRIBUTE_ACTIVE_SLIDE);
|
|
142
118
|
}, ANIMATION_DURATION);
|
|
@@ -149,14 +125,14 @@ const SlideUpcomingSlide = ({
|
|
|
149
125
|
isRight = true
|
|
150
126
|
}) => {
|
|
151
127
|
const amount = "90";
|
|
152
|
-
const
|
|
128
|
+
const translate = isRight ? `translateX(-${amount}%)` : `translateX(${amount}%)`;
|
|
153
129
|
const startingPosition = isRight ? `${amount}%` : `-${amount}%`;
|
|
154
130
|
slide.style.zIndex = "9";
|
|
155
131
|
slide.style.transition = `transform ${ANIMATION_DURATION}ms ease-in-out`;
|
|
156
132
|
slide.style.display = "block";
|
|
157
133
|
slide.style.left = `${startingPosition}`;
|
|
158
134
|
setTimeout(() => {
|
|
159
|
-
slide.style.transform =
|
|
135
|
+
slide.style.transform = translate;
|
|
160
136
|
}, 1);
|
|
161
137
|
setTimeout(() => {
|
|
162
138
|
slide.style.transition = "none";
|
|
@@ -169,92 +145,141 @@ const SlideUpcomingSlide = ({
|
|
|
169
145
|
}, ANIMATION_DURATION + 100);
|
|
170
146
|
};
|
|
171
147
|
const createCompositeCarouselImage = (props) => (() => {
|
|
172
|
-
const { slides, callback, maxHeight } = props;
|
|
173
|
-
const container = document.createElement("div");
|
|
174
|
-
const slider = document.createElement("div");
|
|
148
|
+
const { slides, callback, maxHeight, isThemeDark, includeButtonWrapper = true } = props;
|
|
175
149
|
let activeIndex = 0;
|
|
176
|
-
let
|
|
150
|
+
let sliderElement = null;
|
|
177
151
|
const EventSlide = ({ forward = true }) => {
|
|
178
152
|
SlideActiveSlide({ slide: slides[activeIndex], isRight: forward });
|
|
179
153
|
if (forward) {
|
|
180
154
|
activeIndex = activeIndex + 1;
|
|
181
|
-
if (activeIndex >= slides.length)
|
|
155
|
+
if (activeIndex >= slides.length) {
|
|
156
|
+
activeIndex = 0;
|
|
157
|
+
}
|
|
182
158
|
} else {
|
|
183
159
|
activeIndex = activeIndex - 1;
|
|
184
|
-
if (activeIndex < 0)
|
|
160
|
+
if (activeIndex < 0) {
|
|
161
|
+
activeIndex = slides.length - 1;
|
|
162
|
+
}
|
|
185
163
|
}
|
|
186
164
|
SlideUpcomingSlide({ slide: slides[activeIndex], isRight: forward });
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
165
|
+
if (sliderElement) {
|
|
166
|
+
SetCarouselSize({
|
|
167
|
+
slider: sliderElement,
|
|
168
|
+
activeSlide: slides[activeIndex],
|
|
169
|
+
maxHeight
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
if (callback) {
|
|
173
|
+
callback(activeIndex);
|
|
174
|
+
}
|
|
194
175
|
};
|
|
195
176
|
const EventMoveTo = (index) => {
|
|
196
177
|
SlideActiveSlide({ slide: slides[activeIndex], isRight: true });
|
|
197
178
|
activeIndex = index;
|
|
198
179
|
SlideUpcomingSlide({ slide: slides[activeIndex], isRight: true });
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
180
|
+
if (sliderElement) {
|
|
181
|
+
SetCarouselSize({
|
|
182
|
+
slider: sliderElement,
|
|
183
|
+
activeSlide: slides[activeIndex],
|
|
184
|
+
maxHeight
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
if (callback) {
|
|
188
|
+
callback(activeIndex);
|
|
189
|
+
}
|
|
206
190
|
};
|
|
207
191
|
const EventSlideLeft = () => EventSlide({ forward: false });
|
|
208
192
|
const EventSlideRight = () => EventSlide({ forward: true });
|
|
209
193
|
const EventSwipe = () => {
|
|
210
|
-
const swipes = (
|
|
211
|
-
if (!
|
|
194
|
+
const swipes = (isRightSwipe) => {
|
|
195
|
+
if (!isRightSwipe) {
|
|
212
196
|
EventSlide({ forward: true });
|
|
213
197
|
} else {
|
|
214
198
|
EventSlide({ forward: false });
|
|
215
199
|
}
|
|
216
200
|
};
|
|
217
|
-
|
|
218
|
-
container:
|
|
219
|
-
|
|
220
|
-
});
|
|
201
|
+
if (sliderElement) {
|
|
202
|
+
setupSwipeDetection({ container: sliderElement, callback: swipes });
|
|
203
|
+
}
|
|
221
204
|
};
|
|
222
205
|
const EventResize = () => {
|
|
223
|
-
|
|
206
|
+
if (!sliderElement || sliderElement.offsetWidth === 0) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
SetCarouselSize({
|
|
210
|
+
slider: sliderElement,
|
|
211
|
+
activeSlide: slides[activeIndex],
|
|
212
|
+
maxHeight
|
|
213
|
+
});
|
|
224
214
|
};
|
|
225
215
|
const Load = () => {
|
|
226
216
|
const setSize = () => {
|
|
217
|
+
if (!sliderElement) return;
|
|
227
218
|
const activeSlide = slides[activeIndex];
|
|
228
|
-
SetCarouselSize({ slider, activeSlide, maxHeight });
|
|
219
|
+
SetCarouselSize({ slider: sliderElement, activeSlide, maxHeight });
|
|
229
220
|
activeSlide.setAttribute(ATTRIBUTE_ACTIVE_SLIDE, "");
|
|
230
221
|
};
|
|
231
222
|
setTimeout(setSize, 100);
|
|
232
223
|
setTimeout(setSize, 300);
|
|
233
224
|
};
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}
|
|
243
|
-
)
|
|
244
|
-
|
|
245
|
-
|
|
225
|
+
const prevButtonModel = CreateButton({ EventSlide, isRight: false, isThemeDark });
|
|
226
|
+
const nextButtonModel = CreateButton({ EventSlide, isRight: true, isThemeDark });
|
|
227
|
+
const slidesElements = slides.map((slide) => CreateSlide({ slide }));
|
|
228
|
+
const sliderModel = new ElementBuilder().withClassName("carousel-image-slider").withStyles({
|
|
229
|
+
element: {
|
|
230
|
+
position: "relative",
|
|
231
|
+
overflow: "hidden",
|
|
232
|
+
width: "100%"
|
|
233
|
+
}
|
|
234
|
+
}).ref((element) => {
|
|
235
|
+
sliderElement = element;
|
|
236
|
+
}).withChildren(...slidesElements).build();
|
|
237
|
+
const containerBuilder = new ElementBuilder().withClassName("carousel-image-slider-container").withStyles({
|
|
238
|
+
element: {
|
|
239
|
+
position: "relative",
|
|
240
|
+
width: "100%",
|
|
241
|
+
...includeButtonWrapper && {
|
|
242
|
+
display: "flex",
|
|
243
|
+
flexWrap: "wrap",
|
|
244
|
+
justifyContent: "center",
|
|
245
|
+
[`@media (${token.media.queries.desktop.min})`]: {
|
|
246
|
+
display: "block"
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}).withChild(sliderModel);
|
|
251
|
+
if (includeButtonWrapper) {
|
|
252
|
+
const buttonWrapperModel = new ElementBuilder().withClassName("carousel-image-slider-buttons").withStyles({
|
|
253
|
+
element: {
|
|
254
|
+
display: "flex",
|
|
255
|
+
justifyContent: "center",
|
|
256
|
+
gap: token.spacing.min,
|
|
257
|
+
width: "100%",
|
|
258
|
+
marginTop: token.spacing.md,
|
|
259
|
+
marginBottom: token.spacing.md,
|
|
260
|
+
[`@media (${token.media.queries.desktop.min})`]: {
|
|
261
|
+
width: "auto",
|
|
262
|
+
marginTop: 0,
|
|
263
|
+
marginBottom: 0
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}).withChildren(prevButtonModel, nextButtonModel).build();
|
|
267
|
+
containerBuilder.withChild(buttonWrapperModel);
|
|
268
|
+
}
|
|
269
|
+
const containerModel = containerBuilder.withEvents({
|
|
270
|
+
Load,
|
|
271
|
+
EventMoveTo,
|
|
272
|
+
EventResize,
|
|
273
|
+
EventSlideLeft,
|
|
274
|
+
EventSlideRight
|
|
275
|
+
}).build();
|
|
246
276
|
window.addEventListener("resize", debounce(EventResize, 10));
|
|
247
277
|
EventSwipe();
|
|
248
278
|
return {
|
|
249
|
-
element:
|
|
250
|
-
styles,
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
EventMoveTo,
|
|
254
|
-
EventResize,
|
|
255
|
-
EventSlideLeft,
|
|
256
|
-
EventSlideRight
|
|
257
|
-
}
|
|
279
|
+
element: containerModel.element,
|
|
280
|
+
styles: containerModel.styles,
|
|
281
|
+
buttons: { prev: prevButtonModel, next: nextButtonModel },
|
|
282
|
+
events: containerModel.events
|
|
258
283
|
};
|
|
259
284
|
})();
|
|
260
285
|
export {
|