@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,225 +1,133 @@
|
|
|
1
1
|
import * as Styles from "@universityofmaryland/web-styles-library";
|
|
2
|
-
import {
|
|
2
|
+
import { ElementBuilder } from "@universityofmaryland/web-builder-library";
|
|
3
3
|
import { debounce } from "@universityofmaryland/web-utilities-library/performance";
|
|
4
|
-
const { token } = Styles;
|
|
5
4
|
const SMALL = 480;
|
|
6
|
-
const ELEMENT_NAME = "umd-element-accordion-item";
|
|
7
|
-
const ELEMENT_DECLARATION = "accordion-declaration";
|
|
8
|
-
const ELEMENT_CONTAINER = "accordion-container";
|
|
9
|
-
const ELEMENT_HEADLINE = "accordion-headline";
|
|
10
|
-
const ELEMENT_BODY_WRAPPER = "accordion-body-wrapper";
|
|
11
|
-
const ELEMENT_BODY = "accordion-body";
|
|
12
|
-
const ATTRIBUTE_THEME = "theme";
|
|
13
|
-
const THEME_DARK = "dark";
|
|
14
5
|
const ANIMATION_TIME = 500;
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
${OVERWRITE_THEME_DARK_HEADLINE}[aria-expanded='true'] > *,
|
|
41
|
-
${OVERWRITE_THEME_DARK_HEADLINE}:hover > *,
|
|
42
|
-
${OVERWRITE_THEME_DARK_HEADLINE}:focus > * {
|
|
43
|
-
color: ${token.color.gold};
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
${OVERWRITE_THEME_DARK_BODY_WRAPPER} {
|
|
47
|
-
background-color: ${token.color.gray.darker};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
${OVERWRITE_THEME_DARK_BODY},
|
|
51
|
-
${OVERWRITE_THEME_DARK_BODY} * {
|
|
52
|
-
color: ${token.color.white};
|
|
53
|
-
}
|
|
54
|
-
`;
|
|
55
|
-
const bodyStyles = `
|
|
56
|
-
${jssToCSS({
|
|
57
|
-
styleObj: {
|
|
58
|
-
[`.${ELEMENT_BODY_WRAPPER}`]: Styles.typography.sans.medium
|
|
59
|
-
}
|
|
60
|
-
})}
|
|
61
|
-
|
|
62
|
-
.${ELEMENT_BODY_WRAPPER} {
|
|
63
|
-
background-color: ${token.color.gray.lightest};
|
|
64
|
-
height: 0;
|
|
65
|
-
overflow: hidden;
|
|
66
|
-
display: none;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.${ELEMENT_BODY} {
|
|
70
|
-
padding: ${token.spacing.md};
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
@container ${ELEMENT_NAME} (min-width: ${SMALL}px) {
|
|
74
|
-
.${ELEMENT_BODY} {
|
|
75
|
-
padding: ${token.spacing.lg};
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.${ELEMENT_BODY} > * {
|
|
80
|
-
margin-top: ${token.spacing.sm};
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.${ELEMENT_BODY} > *:first-child {
|
|
84
|
-
margin-top: 0;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
@container ${ELEMENT_NAME} (min-width: ${SMALL}px) {
|
|
88
|
-
.${ELEMENT_BODY} > * {
|
|
89
|
-
margin-top: ${token.spacing.lg};
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
`;
|
|
93
|
-
const headlineStyles = `
|
|
94
|
-
${jssToCSS({
|
|
95
|
-
styleObj: {
|
|
96
|
-
[`.${ELEMENT_HEADLINE}`]: Styles.typography.sans.large
|
|
97
|
-
}
|
|
98
|
-
})}
|
|
99
|
-
|
|
100
|
-
.${ELEMENT_HEADLINE} {
|
|
101
|
-
display: flex;
|
|
102
|
-
border-top: 2px solid transparent;
|
|
103
|
-
padding: ${token.spacing.md};
|
|
104
|
-
padding-right: ${token.spacing["4xl"]};
|
|
105
|
-
background-color: ${token.color.gray.lightest};
|
|
106
|
-
position: relative;
|
|
107
|
-
transition: background 0.5s, border 0.5s, color 0.5s, padding 0.5s;
|
|
108
|
-
width: 100%;
|
|
109
|
-
text-align: left;
|
|
110
|
-
color: ${token.color.black};
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
.${ELEMENT_HEADLINE} > * {
|
|
114
|
-
color: ${token.color.black};
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
@container ${ELEMENT_NAME} (min-width: ${SMALL}px) {
|
|
118
|
-
.${ELEMENT_HEADLINE} {
|
|
119
|
-
padding: ${token.spacing.lg};
|
|
120
|
-
padding-right: ${token.spacing["6xl"]}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
.${ELEMENT_HEADLINE}:before,
|
|
125
|
-
.${ELEMENT_HEADLINE}:after {
|
|
126
|
-
content: '';
|
|
127
|
-
background-color: ${token.color.red};
|
|
128
|
-
position: absolute;
|
|
129
|
-
right: ${token.spacing.md};
|
|
130
|
-
transition: background 0.5s, height 0.5s, right 0.5s, top 0.5s,
|
|
131
|
-
transform 0.5s, width 0.5s;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
.${ELEMENT_HEADLINE}:before {
|
|
135
|
-
height: 4px;
|
|
136
|
-
top: calc(50% - 2px);
|
|
137
|
-
width: 16px;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
@container ${ELEMENT_NAME} (min-width: ${SMALL}px) {
|
|
141
|
-
.${ELEMENT_HEADLINE}:before {
|
|
142
|
-
width: 20px;
|
|
143
|
-
right: 32px;
|
|
6
|
+
const { token } = Styles;
|
|
7
|
+
const CreateBody = ({ text, isStateOpen, isThemeDark }) => {
|
|
8
|
+
if (!text) return null;
|
|
9
|
+
const bodyContent = new ElementBuilder().withClassName("accordion-body").withStyles({
|
|
10
|
+
element: {
|
|
11
|
+
padding: token.spacing.md,
|
|
12
|
+
...isThemeDark && {
|
|
13
|
+
color: token.color.white
|
|
14
|
+
},
|
|
15
|
+
[`@container umd-element-accordion-item (min-width: ${SMALL}px)`]: {
|
|
16
|
+
padding: token.spacing.lg
|
|
17
|
+
},
|
|
18
|
+
"& > *": {
|
|
19
|
+
marginTop: token.spacing.sm,
|
|
20
|
+
[`@container umd-element-accordion-item (min-width: ${SMALL}px)`]: {
|
|
21
|
+
marginTop: token.spacing.lg
|
|
22
|
+
},
|
|
23
|
+
"&:first-child": { marginTop: "0" }
|
|
24
|
+
},
|
|
25
|
+
"& *": {
|
|
26
|
+
...isThemeDark && {
|
|
27
|
+
color: token.color.white
|
|
28
|
+
}
|
|
29
|
+
}
|
|
144
30
|
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
.${ELEMENT_HEADLINE}:after {
|
|
156
|
-
height: 20px;
|
|
157
|
-
top: calc(50% - 10px);
|
|
158
|
-
right: calc(${token.spacing.lg} + 8px);
|
|
31
|
+
}).withChild(text).build();
|
|
32
|
+
return new ElementBuilder().withClassName("accordion-body-wrapper").withAria({ hidden: isStateOpen ? "false" : "true" }).styled(Styles.typography.sans.medium).withStyles({
|
|
33
|
+
element: {
|
|
34
|
+
backgroundColor: token.color.gray.lightest,
|
|
35
|
+
height: "0",
|
|
36
|
+
overflow: "hidden",
|
|
37
|
+
display: "none",
|
|
38
|
+
...isThemeDark && {
|
|
39
|
+
backgroundColor: token.color.gray.darker
|
|
40
|
+
}
|
|
159
41
|
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
.${ELEMENT_HEADLINE}[aria-expanded='true'],
|
|
163
|
-
.${ELEMENT_HEADLINE}:hover,
|
|
164
|
-
.${ELEMENT_HEADLINE}:focus {
|
|
165
|
-
background-color: ${token.color.gray.lightest};
|
|
166
|
-
border-top: 2px solid ${token.color.red};
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
.${ELEMENT_HEADLINE}[aria-expanded='true'] > *,
|
|
170
|
-
.${ELEMENT_HEADLINE}:hover > *,
|
|
171
|
-
.${ELEMENT_HEADLINE}:focus > * {
|
|
172
|
-
color: ${token.color.red};
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
.${ELEMENT_HEADLINE}[aria-expanded='true']:after {
|
|
176
|
-
transform: rotate(90deg);
|
|
177
|
-
}
|
|
178
|
-
`;
|
|
179
|
-
const STYLES_ACCORDION_ELEMENT = `
|
|
180
|
-
.${ELEMENT_DECLARATION} {
|
|
181
|
-
container: ${ELEMENT_NAME} / inline-size;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
${headlineStyles}
|
|
185
|
-
${bodyStyles}
|
|
186
|
-
${OverwriteThemeDark}
|
|
187
|
-
`;
|
|
188
|
-
const CreateBody = ({ text, isOpen }) => {
|
|
189
|
-
const contentWrapper = document.createElement("div");
|
|
190
|
-
contentWrapper.classList.add(ELEMENT_BODY_WRAPPER);
|
|
191
|
-
if (text) {
|
|
192
|
-
const wrapper = document.createElement("div");
|
|
193
|
-
wrapper.classList.add(ELEMENT_BODY);
|
|
194
|
-
contentWrapper.ariaHidden = isOpen ? "false" : "true";
|
|
195
|
-
wrapper.appendChild(text);
|
|
196
|
-
contentWrapper.appendChild(wrapper);
|
|
197
|
-
return contentWrapper;
|
|
198
|
-
}
|
|
199
|
-
return null;
|
|
42
|
+
}).withChild(bodyContent).build();
|
|
200
43
|
};
|
|
201
44
|
const CreateHeadline = ({
|
|
202
45
|
headline,
|
|
203
|
-
|
|
46
|
+
isThemeDark,
|
|
47
|
+
isStateOpen,
|
|
204
48
|
open,
|
|
205
49
|
close
|
|
206
50
|
}) => {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
51
|
+
if (!headline) return null;
|
|
52
|
+
return new ElementBuilder("button").withClassName("accordion-headline").withAria({ expanded: isStateOpen ? "true" : "false" }).withChild(headline).on("click", (event) => {
|
|
53
|
+
const button = event.currentTarget;
|
|
54
|
+
const isExpanded = button.ariaExpanded === "true";
|
|
55
|
+
if (isExpanded) {
|
|
56
|
+
close({ hasAnimation: true });
|
|
57
|
+
} else {
|
|
58
|
+
open({ hasAnimation: true });
|
|
59
|
+
}
|
|
60
|
+
}).styled(Styles.typography.sans.large).withStyles({
|
|
61
|
+
element: {
|
|
62
|
+
display: "flex",
|
|
63
|
+
borderTop: "2px solid transparent",
|
|
64
|
+
padding: token.spacing.md,
|
|
65
|
+
paddingRight: token.spacing["4xl"],
|
|
66
|
+
backgroundColor: token.color.gray.lightest,
|
|
67
|
+
position: "relative",
|
|
68
|
+
transition: "background 0.5s, border 0.5s, color 0.5s, padding 0.5s",
|
|
69
|
+
width: "100%",
|
|
70
|
+
textAlign: "left",
|
|
71
|
+
color: token.color.black,
|
|
72
|
+
...isThemeDark && {
|
|
73
|
+
backgroundColor: token.color.gray.darker
|
|
74
|
+
},
|
|
75
|
+
[`@container umd-element-accordion-item (min-width: ${SMALL}px)`]: {
|
|
76
|
+
padding: token.spacing.lg,
|
|
77
|
+
paddingRight: token.spacing["6xl"]
|
|
78
|
+
},
|
|
79
|
+
"& > *": {
|
|
80
|
+
...isThemeDark && {
|
|
81
|
+
color: token.color.white
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"&:before, &:after": {
|
|
85
|
+
content: "''",
|
|
86
|
+
backgroundColor: token.color.red,
|
|
87
|
+
position: "absolute",
|
|
88
|
+
right: token.spacing.md,
|
|
89
|
+
transition: "background 0.5s, height 0.5s, right 0.5s, top 0.5s, transform 0.5s, width 0.5s",
|
|
90
|
+
...isThemeDark && {
|
|
91
|
+
backgroundColor: token.color.gold
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"&:before": {
|
|
95
|
+
height: "4px",
|
|
96
|
+
top: "calc(50% - 2px)",
|
|
97
|
+
width: "16px",
|
|
98
|
+
[`@container umd-element-accordion-item (min-width: ${SMALL}px)`]: {
|
|
99
|
+
width: "20px",
|
|
100
|
+
right: "32px"
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
"&:after": {
|
|
104
|
+
height: "16px",
|
|
105
|
+
top: "calc(50% - 8px)",
|
|
106
|
+
right: `calc(${token.spacing.md} + 6px)`,
|
|
107
|
+
width: "4px",
|
|
108
|
+
[`@container umd-element-accordion-item (min-width: ${SMALL}px)`]: {
|
|
109
|
+
height: "20px",
|
|
110
|
+
top: "calc(50% - 10px)",
|
|
111
|
+
right: `calc(${token.spacing.lg} + 8px)`
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"&[aria-expanded='true'], &:hover, &:focus": {
|
|
115
|
+
borderTop: `2px solid ${token.color.red}`,
|
|
116
|
+
...isThemeDark && {
|
|
117
|
+
borderTop: `2px solid ${token.color.gold}`
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"&[aria-expanded='true'] > *, &:hover > *, &:focus > *": {
|
|
121
|
+
color: token.color.red,
|
|
122
|
+
...isThemeDark && {
|
|
123
|
+
color: token.color.gold
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"&[aria-expanded='true']:after": {
|
|
127
|
+
transform: "rotate(90deg)"
|
|
218
128
|
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
return null;
|
|
129
|
+
}
|
|
130
|
+
}).build();
|
|
223
131
|
};
|
|
224
132
|
const ActionAnimation = ({
|
|
225
133
|
container,
|
|
@@ -230,29 +138,31 @@ const ActionAnimation = ({
|
|
|
230
138
|
"button"
|
|
231
139
|
);
|
|
232
140
|
const bodyWrapperElement = container.querySelector(
|
|
233
|
-
|
|
234
|
-
);
|
|
235
|
-
const bodyElement = container.querySelector(
|
|
236
|
-
`.${ELEMENT_BODY}`
|
|
141
|
+
".accordion-body-wrapper"
|
|
237
142
|
);
|
|
143
|
+
const bodyElement = container.querySelector(".accordion-body");
|
|
238
144
|
if (!headlineContainer || !bodyWrapperElement || !bodyElement) {
|
|
239
|
-
|
|
145
|
+
console.warn("headlineContainer or bodyWrapperElement is not found");
|
|
146
|
+
return;
|
|
240
147
|
}
|
|
241
|
-
|
|
242
|
-
bodyWrapperElement.style.transition = `height ${ANIMATION_TIME}ms ease-in-out`;
|
|
243
|
-
if (isOpening) {
|
|
148
|
+
const animateOpen = () => {
|
|
244
149
|
bodyWrapperElement.style.display = "block";
|
|
245
150
|
setTimeout(() => {
|
|
246
151
|
headlineContainer.ariaExpanded = "true";
|
|
247
152
|
bodyWrapperElement.ariaHidden = "false";
|
|
248
153
|
}, 100);
|
|
249
|
-
}
|
|
154
|
+
};
|
|
155
|
+
const animateClose = () => {
|
|
250
156
|
headlineContainer.ariaExpanded = "false";
|
|
251
157
|
bodyWrapperElement.ariaHidden = "true";
|
|
252
158
|
setTimeout(() => {
|
|
253
159
|
bodyWrapperElement.style.display = "none";
|
|
254
160
|
}, ANIMATION_TIME + 50);
|
|
255
|
-
}
|
|
161
|
+
};
|
|
162
|
+
if (hasAnimation)
|
|
163
|
+
bodyWrapperElement.style.transition = `height ${ANIMATION_TIME}ms ease-in-out`;
|
|
164
|
+
if (isOpening) animateOpen();
|
|
165
|
+
else animateClose();
|
|
256
166
|
setTimeout(() => {
|
|
257
167
|
const bodyHeight = bodyElement.offsetHeight;
|
|
258
168
|
bodyWrapperElement.style.height = isOpening ? `${bodyHeight}px` : "0";
|
|
@@ -262,52 +172,49 @@ const ActionAnimation = ({
|
|
|
262
172
|
}, 100 + ANIMATION_TIME);
|
|
263
173
|
};
|
|
264
174
|
const createCompositeAccordionItem = (props) => (() => {
|
|
265
|
-
const {
|
|
266
|
-
const
|
|
267
|
-
|
|
175
|
+
const { isStateOpen = false, context } = props;
|
|
176
|
+
const containerBuilder = new ElementBuilder().withClassName(
|
|
177
|
+
"accordion-container"
|
|
178
|
+
);
|
|
179
|
+
const container = containerBuilder.getElement();
|
|
268
180
|
let isOpen = isStateOpen;
|
|
269
181
|
const open = (props2) => {
|
|
270
182
|
ActionAnimation({ ...props2, container, isOpening: true });
|
|
271
183
|
isOpen = true;
|
|
184
|
+
context?.dispatchEvent(
|
|
185
|
+
new CustomEvent("accordion:open", { bubbles: true, composed: true })
|
|
186
|
+
);
|
|
272
187
|
};
|
|
273
188
|
const close = (props2) => {
|
|
274
189
|
ActionAnimation({ ...props2, container, isOpening: false });
|
|
275
190
|
isOpen = false;
|
|
191
|
+
context?.dispatchEvent(
|
|
192
|
+
new CustomEvent("accordion:close", { bubbles: true, composed: true })
|
|
193
|
+
);
|
|
276
194
|
};
|
|
277
195
|
const EventSize = () => {
|
|
278
196
|
if (!isOpen) return;
|
|
279
197
|
const bodyElement = container.querySelector(
|
|
280
|
-
|
|
198
|
+
".accordion-body"
|
|
281
199
|
);
|
|
282
200
|
const bodyWrapperElement = container.querySelector(
|
|
283
|
-
|
|
201
|
+
".accordion-body-wrapper"
|
|
284
202
|
);
|
|
285
203
|
bodyWrapperElement.style.height = `${bodyElement.offsetHeight}px`;
|
|
286
204
|
};
|
|
287
|
-
const
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
const headline = CreateHeadline({ ...props, isOpen, open, close });
|
|
291
|
-
const body = CreateBody({ ...props, isOpen });
|
|
292
|
-
if (headline) container.appendChild(headline);
|
|
293
|
-
if (body) container.appendChild(body);
|
|
294
|
-
container.classList.add(ELEMENT_CONTAINER);
|
|
295
|
-
if (isThemeLight) container.setAttribute(ATTRIBUTE_THEME, "light");
|
|
296
|
-
if (isThemeDark) container.setAttribute(ATTRIBUTE_THEME, "dark");
|
|
297
|
-
declaration.appendChild(container);
|
|
298
|
-
declaration.classList.add(ELEMENT_DECLARATION);
|
|
205
|
+
const headline = CreateHeadline({ ...props, isStateOpen, open, close });
|
|
206
|
+
const body = CreateBody({ ...props, isStateOpen });
|
|
207
|
+
const containerModel = containerBuilder.withChildren(headline, body).build();
|
|
299
208
|
if (isStateOpen) {
|
|
300
|
-
|
|
209
|
+
ActionAnimation({ container, isOpening: true, hasAnimation: false });
|
|
210
|
+
isOpen = true;
|
|
301
211
|
}
|
|
302
|
-
window.addEventListener("resize", debounce(
|
|
303
|
-
return {
|
|
304
|
-
element:
|
|
305
|
-
|
|
306
|
-
events: {
|
|
307
|
-
open,
|
|
308
|
-
close
|
|
212
|
+
window.addEventListener("resize", debounce(EventSize, 20));
|
|
213
|
+
return new ElementBuilder().withClassName("accordion-declaration").withStyles({
|
|
214
|
+
element: {
|
|
215
|
+
container: "umd-element-accordion-item / inline-size"
|
|
309
216
|
}
|
|
310
|
-
};
|
|
217
|
+
}).withChild(containerModel).withEvents({ open, close }).build();
|
|
311
218
|
})();
|
|
312
219
|
export {
|
|
313
220
|
createCompositeAccordionItem
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.js","sources":["../../../source/composite/accordion/item.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\nimport { debounce } from '@universityofmaryland/web-utilities-library/performance';\n\ntype TypeHeadlineText = { headline?: HTMLElement | null };\ntype TypeBodyText = { text?: HTMLElement | null };\ntype TypeAccordionState = { isOpen: boolean };\ntype StateProps = {\n hasAnimation?: boolean;\n};\n\ntype TypeAccordionProps = TypeHeadlineText &\n TypeBodyText & {\n isThemeLight?: boolean;\n isThemeDark?: boolean;\n isStateOpen: boolean;\n };\n\ntype TypeHeadlineProps = TypeHeadlineText &\n TypeAccordionState & {\n close: (arg: StateProps) => void;\n open: (arg: StateProps) => void;\n };\n\ntype TypeBodyProps = TypeBodyText & TypeAccordionState;\n\ntype ActionAnimationProps = StateProps & {\n container: HTMLDivElement;\n isOpening: boolean;\n};\n\nconst { token } = Styles;\n\nconst SMALL = 480;\n\nconst ELEMENT_NAME = 'umd-element-accordion-item';\nconst ELEMENT_DECLARATION = 'accordion-declaration';\nconst ELEMENT_CONTAINER = 'accordion-container';\nconst ELEMENT_HEADLINE = 'accordion-headline';\nconst ELEMENT_BODY_WRAPPER = 'accordion-body-wrapper';\nconst ELEMENT_BODY = 'accordion-body';\n\nconst ATTRIBUTE_THEME = 'theme';\nconst THEME_DARK = 'dark';\nconst ANIMATION_TIME = 500;\n\nconst IS_THEME_DARK = `[${ATTRIBUTE_THEME}='${THEME_DARK}']`;\n\nconst OVERWRITE_THEME_DARK_HEADLINE = `.${ELEMENT_CONTAINER}${IS_THEME_DARK} .${ELEMENT_HEADLINE}`;\nconst OVERWRITE_THEME_DARK_BODY_WRAPPER = `.${ELEMENT_CONTAINER}${IS_THEME_DARK} .${ELEMENT_BODY_WRAPPER}`;\nconst OVERWRITE_THEME_DARK_BODY = `.${ELEMENT_CONTAINER}${IS_THEME_DARK} .${ELEMENT_BODY}`;\n\n// prettier-ignore\nconst OverwriteThemeDark = `\n ${OVERWRITE_THEME_DARK_HEADLINE} {\n background-color: ${token.color.gray.darker};\n }\n\n ${OVERWRITE_THEME_DARK_HEADLINE} > * {\n color: ${token.color.white}\n }\n\n ${OVERWRITE_THEME_DARK_HEADLINE}:before,\n ${OVERWRITE_THEME_DARK_HEADLINE}:after {\n background-color: ${token.color.gold};\n }\n\n ${OVERWRITE_THEME_DARK_HEADLINE}[aria-expanded='true'],\n ${OVERWRITE_THEME_DARK_HEADLINE}:hover,\n ${OVERWRITE_THEME_DARK_HEADLINE}:focus {\n background-color: ${token.color.gray.darker};\n border-top: 2px solid ${token.color.gold};\n }\n\n ${OVERWRITE_THEME_DARK_HEADLINE}[aria-expanded='true'] > *,\n ${OVERWRITE_THEME_DARK_HEADLINE}:hover > *,\n ${OVERWRITE_THEME_DARK_HEADLINE}:focus > * {\n color: ${token.color.gold};\n }\n\n ${OVERWRITE_THEME_DARK_BODY_WRAPPER} {\n background-color: ${token.color.gray.darker};\n }\n\n ${OVERWRITE_THEME_DARK_BODY},\n ${OVERWRITE_THEME_DARK_BODY} * {\n color: ${token.color.white};\n }\n`;\n\n// prettier-ignore\nconst bodyStyles = `\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_BODY_WRAPPER}`]: Styles.typography.sans.medium\n },\n })}\n\n .${ELEMENT_BODY_WRAPPER} {\n background-color: ${token.color.gray.lightest};\n height: 0;\n overflow: hidden;\n display: none;\n }\n\n .${ELEMENT_BODY} {\n padding: ${token.spacing.md};\n }\n\n @container ${ELEMENT_NAME} (min-width: ${SMALL}px) {\n .${ELEMENT_BODY} {\n padding: ${token.spacing.lg};\n }\n }\n\n .${ELEMENT_BODY} > * {\n margin-top: ${token.spacing.sm};\n }\n\n .${ELEMENT_BODY} > *:first-child {\n margin-top: 0;\n }\n\n @container ${ELEMENT_NAME} (min-width: ${SMALL}px) {\n .${ELEMENT_BODY} > * {\n margin-top: ${token.spacing.lg};\n }\n }\n`;\n\n// prettier-ignore\nconst headlineStyles = `\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADLINE}`]: Styles.typography.sans.large,\n },\n })}\n\n .${ELEMENT_HEADLINE} {\n display: flex;\n border-top: 2px solid transparent;\n padding: ${token.spacing.md};\n padding-right: ${token.spacing['4xl']};\n background-color: ${token.color.gray.lightest};\n position: relative;\n transition: background 0.5s, border 0.5s, color 0.5s, padding 0.5s;\n width: 100%;\n text-align: left;\n color: ${token.color.black};\n }\n\n .${ELEMENT_HEADLINE} > * {\n color: ${token.color.black};\n }\n\n @container ${ELEMENT_NAME} (min-width: ${SMALL}px) {\n .${ELEMENT_HEADLINE} {\n padding: ${token.spacing.lg};\n padding-right: ${token.spacing['6xl']}\n }\n }\n\n .${ELEMENT_HEADLINE}:before,\n .${ELEMENT_HEADLINE}:after {\n content: '';\n background-color: ${token.color.red};\n position: absolute;\n right: ${token.spacing.md};\n transition: background 0.5s, height 0.5s, right 0.5s, top 0.5s,\n transform 0.5s, width 0.5s;\n }\n\n .${ELEMENT_HEADLINE}:before {\n height: 4px;\n top: calc(50% - 2px);\n width: 16px;\n }\n\n @container ${ELEMENT_NAME} (min-width: ${SMALL}px) {\n .${ELEMENT_HEADLINE}:before {\n width: 20px;\n right: 32px;\n }\n }\n\n .${ELEMENT_HEADLINE}:after {\n height: 16px;\n top: calc(50% - 8px);\n right: calc(${token.spacing.md} + 6px);\n width: 4px;\n }\n\n @container ${ELEMENT_NAME} (min-width: ${SMALL}px) {\n .${ELEMENT_HEADLINE}:after {\n height: 20px;\n top: calc(50% - 10px);\n right: calc(${token.spacing.lg} + 8px);\n }\n }\n\n .${ELEMENT_HEADLINE}[aria-expanded='true'],\n .${ELEMENT_HEADLINE}:hover,\n .${ELEMENT_HEADLINE}:focus {\n background-color: ${token.color.gray.lightest};\n border-top: 2px solid ${token.color.red};\n }\n\n .${ELEMENT_HEADLINE}[aria-expanded='true'] > *,\n .${ELEMENT_HEADLINE}:hover > *,\n .${ELEMENT_HEADLINE}:focus > * {\n color: ${token.color.red};\n }\n\n .${ELEMENT_HEADLINE}[aria-expanded='true']:after {\n transform: rotate(90deg);\n }\n`;\n\nconst STYLES_ACCORDION_ELEMENT = `\n .${ELEMENT_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n }\n\n ${headlineStyles}\n ${bodyStyles}\n ${OverwriteThemeDark}\n`;\n\nconst CreateBody = ({ text, isOpen }: TypeBodyProps) => {\n const contentWrapper = document.createElement('div');\n\n contentWrapper.classList.add(ELEMENT_BODY_WRAPPER);\n\n if (text) {\n const wrapper = document.createElement('div');\n wrapper.classList.add(ELEMENT_BODY);\n contentWrapper.ariaHidden = isOpen ? 'false' : 'true';\n wrapper.appendChild(text);\n contentWrapper.appendChild(wrapper);\n\n return contentWrapper;\n }\n\n return null;\n};\n\nconst CreateHeadline = ({\n headline,\n isOpen,\n open,\n close,\n}: TypeHeadlineProps) => {\n const headlineContainer = document.createElement('button');\n\n headlineContainer.classList.add(ELEMENT_HEADLINE);\n headlineContainer.ariaExpanded = isOpen ? 'true' : 'false';\n\n if (headline) {\n headlineContainer.appendChild(headline);\n\n headlineContainer.addEventListener('click', () => {\n const isExpanded = headlineContainer.ariaExpanded == 'true';\n\n if (isExpanded) {\n close({ hasAnimation: true });\n } else {\n open({ hasAnimation: true });\n }\n });\n\n return headlineContainer;\n }\n\n return null;\n};\n\nconst ActionAnimation = ({\n container,\n isOpening = true,\n hasAnimation = true,\n}: ActionAnimationProps) => {\n const headlineContainer = container.querySelector(\n 'button',\n ) as HTMLButtonElement;\n const bodyWrapperElement = container.querySelector(\n `.${ELEMENT_BODY_WRAPPER}`,\n ) as HTMLElement;\n const bodyElement = container.querySelector(\n `.${ELEMENT_BODY}`,\n ) as HTMLElement;\n\n if (!headlineContainer || !bodyWrapperElement || !bodyElement) {\n throw new Error('headlineContainer or bodyWrapperElement is not found');\n }\n\n if (hasAnimation)\n bodyWrapperElement.style.transition = `height ${ANIMATION_TIME}ms ease-in-out`;\n\n if (isOpening) {\n bodyWrapperElement.style.display = 'block';\n\n setTimeout(() => {\n headlineContainer.ariaExpanded = 'true';\n bodyWrapperElement.ariaHidden = 'false';\n }, 100);\n } else {\n headlineContainer.ariaExpanded = 'false';\n bodyWrapperElement.ariaHidden = 'true';\n\n setTimeout(() => {\n bodyWrapperElement.style.display = 'none';\n }, ANIMATION_TIME + 50);\n }\n\n setTimeout(() => {\n const bodyHeight = bodyElement.offsetHeight;\n bodyWrapperElement.style.height = isOpening ? `${bodyHeight}px` : '0';\n }, 100);\n\n setTimeout(() => {\n bodyWrapperElement.style.transition = 'none';\n }, 100 + ANIMATION_TIME);\n};\n\nexport const createCompositeAccordionItem = (props: TypeAccordionProps) =>\n (() => {\n const { isThemeDark, isThemeLight, isStateOpen = false } = props;\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n let isOpen = isStateOpen;\n\n const open = (props: StateProps) => {\n ActionAnimation({ ...props, container, isOpening: true });\n isOpen = true;\n };\n const close = (props: StateProps) => {\n ActionAnimation({ ...props, container, isOpening: false });\n isOpen = false;\n };\n const EventSize = () => {\n if (!isOpen) return;\n const bodyElement = container.querySelector(\n `.${ELEMENT_BODY}`,\n ) as HTMLElement;\n const bodyWrapperElement = container.querySelector(\n `.${ELEMENT_BODY_WRAPPER}`,\n ) as HTMLElement;\n\n bodyWrapperElement.style.height = `${bodyElement.offsetHeight}px`;\n };\n const resize = () => {\n EventSize();\n };\n\n const headline = CreateHeadline({ ...props, isOpen, open, close });\n const body = CreateBody({ ...props, isOpen });\n\n if (headline) container.appendChild(headline);\n if (body) container.appendChild(body);\n\n container.classList.add(ELEMENT_CONTAINER);\n if (isThemeLight) container.setAttribute(ATTRIBUTE_THEME, 'light');\n if (isThemeDark) container.setAttribute(ATTRIBUTE_THEME, 'dark');\n\n declaration.appendChild(container);\n declaration.classList.add(ELEMENT_DECLARATION);\n\n if (isStateOpen) {\n open({ hasAnimation: false });\n }\n\n window.addEventListener('resize', debounce(resize, 20));\n\n return {\n element: declaration,\n styles: STYLES_ACCORDION_ELEMENT,\n events: {\n open,\n close,\n },\n };\n })();\n"],"names":["props"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"item.js","sources":["../../../source/composite/accordion/item.ts"],"sourcesContent":["import * as Styles from '@universityofmaryland/web-styles-library';\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { debounce } from '@universityofmaryland/web-utilities-library/performance';\n\ntype TypeAccordionProps = {\n headline?: HTMLElement | null;\n text?: HTMLElement | null;\n isThemeLight?: boolean;\n isThemeDark?: boolean;\n isStateOpen: boolean;\n context?: HTMLElement;\n};\n\ntype StateProps = {\n hasAnimation?: boolean;\n};\n\ntype StateFunctions = {\n open: (props: StateProps) => void;\n close: (props: StateProps) => void;\n};\n\ntype ActionAnimationProps = StateProps & {\n container: HTMLDivElement;\n isOpening: boolean;\n};\n\nconst SMALL = 480;\nconst ANIMATION_TIME = 500;\n\nconst { token } = Styles;\n\nconst CreateBody = ({ text, isStateOpen, isThemeDark }: TypeAccordionProps) => {\n if (!text) return null;\n\n const bodyContent = new ElementBuilder()\n .withClassName('accordion-body')\n .withStyles({\n element: {\n padding: token.spacing.md,\n ...(isThemeDark && {\n color: token.color.white,\n }),\n [`@container umd-element-accordion-item (min-width: ${SMALL}px)`]: {\n padding: token.spacing.lg,\n },\n '& > *': {\n marginTop: token.spacing.sm,\n [`@container umd-element-accordion-item (min-width: ${SMALL}px)`]: {\n marginTop: token.spacing.lg,\n },\n '&:first-child': { marginTop: '0' },\n },\n '& *': {\n ...(isThemeDark && {\n color: token.color.white,\n }),\n },\n },\n })\n .withChild(text)\n .build();\n\n return new ElementBuilder()\n .withClassName('accordion-body-wrapper')\n .withAria({ hidden: isStateOpen ? 'false' : 'true' })\n .styled(Styles.typography.sans.medium)\n .withStyles({\n element: {\n backgroundColor: token.color.gray.lightest,\n height: '0',\n overflow: 'hidden',\n display: 'none',\n ...(isThemeDark && {\n backgroundColor: token.color.gray.darker,\n }),\n },\n })\n .withChild(bodyContent)\n .build();\n};\n\nconst CreateHeadline = ({\n headline,\n isThemeDark,\n isStateOpen,\n open,\n close,\n}: TypeAccordionProps & StateFunctions) => {\n if (!headline) return null;\n\n return new ElementBuilder('button')\n .withClassName('accordion-headline')\n .withAria({ expanded: isStateOpen ? 'true' : 'false' })\n .withChild(headline)\n .on('click', (event) => {\n const button = event.currentTarget as HTMLButtonElement;\n const isExpanded = button.ariaExpanded === 'true';\n\n if (isExpanded) {\n close({ hasAnimation: true });\n } else {\n open({ hasAnimation: true });\n }\n })\n .styled(Styles.typography.sans.large)\n .withStyles({\n element: {\n display: 'flex',\n borderTop: '2px solid transparent',\n padding: token.spacing.md,\n paddingRight: token.spacing['4xl'],\n backgroundColor: token.color.gray.lightest,\n position: 'relative',\n transition: 'background 0.5s, border 0.5s, color 0.5s, padding 0.5s',\n width: '100%',\n textAlign: 'left',\n color: token.color.black,\n ...(isThemeDark && {\n backgroundColor: token.color.gray.darker,\n }),\n [`@container umd-element-accordion-item (min-width: ${SMALL}px)`]: {\n padding: token.spacing.lg,\n paddingRight: token.spacing['6xl'],\n },\n '& > *': {\n ...(isThemeDark && {\n color: token.color.white,\n }),\n },\n '&:before, &:after': {\n content: \"''\",\n backgroundColor: token.color.red,\n position: 'absolute',\n right: token.spacing.md,\n transition:\n 'background 0.5s, height 0.5s, right 0.5s, top 0.5s, transform 0.5s, width 0.5s',\n ...(isThemeDark && {\n backgroundColor: token.color.gold,\n }),\n },\n '&:before': {\n height: '4px',\n top: 'calc(50% - 2px)',\n width: '16px',\n [`@container umd-element-accordion-item (min-width: ${SMALL}px)`]: {\n width: '20px',\n right: '32px',\n },\n },\n '&:after': {\n height: '16px',\n top: 'calc(50% - 8px)',\n right: `calc(${token.spacing.md} + 6px)`,\n width: '4px',\n [`@container umd-element-accordion-item (min-width: ${SMALL}px)`]: {\n height: '20px',\n top: 'calc(50% - 10px)',\n right: `calc(${token.spacing.lg} + 8px)`,\n },\n },\n \"&[aria-expanded='true'], &:hover, &:focus\": {\n borderTop: `2px solid ${token.color.red}`,\n ...(isThemeDark && {\n borderTop: `2px solid ${token.color.gold}`,\n }),\n },\n \"&[aria-expanded='true'] > *, &:hover > *, &:focus > *\": {\n color: token.color.red,\n ...(isThemeDark && {\n color: token.color.gold,\n }),\n },\n \"&[aria-expanded='true']:after\": {\n transform: 'rotate(90deg)',\n },\n },\n })\n .build();\n};\n\nconst ActionAnimation = ({\n container,\n isOpening = true,\n hasAnimation = true,\n}: ActionAnimationProps) => {\n const headlineContainer = container.querySelector(\n 'button',\n ) as HTMLButtonElement;\n const bodyWrapperElement = container.querySelector(\n '.accordion-body-wrapper',\n ) as HTMLElement;\n const bodyElement = container.querySelector('.accordion-body') as HTMLElement;\n\n if (!headlineContainer || !bodyWrapperElement || !bodyElement) {\n console.warn('headlineContainer or bodyWrapperElement is not found');\n return;\n }\n\n const animateOpen = () => {\n bodyWrapperElement.style.display = 'block';\n setTimeout(() => {\n headlineContainer.ariaExpanded = 'true';\n bodyWrapperElement.ariaHidden = 'false';\n }, 100);\n };\n\n const animateClose = () => {\n headlineContainer.ariaExpanded = 'false';\n bodyWrapperElement.ariaHidden = 'true';\n setTimeout(() => {\n bodyWrapperElement.style.display = 'none';\n }, ANIMATION_TIME + 50);\n };\n\n if (hasAnimation)\n bodyWrapperElement.style.transition = `height ${ANIMATION_TIME}ms ease-in-out`;\n\n if (isOpening) animateOpen();\n else animateClose();\n\n setTimeout(() => {\n const bodyHeight = bodyElement.offsetHeight;\n bodyWrapperElement.style.height = isOpening ? `${bodyHeight}px` : '0';\n }, 100);\n\n setTimeout(() => {\n bodyWrapperElement.style.transition = 'none';\n }, 100 + ANIMATION_TIME);\n};\n\nexport const createCompositeAccordionItem = (props: TypeAccordionProps) =>\n (() => {\n const { isStateOpen = false, context } = props;\n const containerBuilder = new ElementBuilder().withClassName(\n 'accordion-container',\n );\n const container = containerBuilder.getElement() as HTMLDivElement;\n\t\tlet isOpen = isStateOpen;\n\n const open = (props: StateProps) => {\n ActionAnimation({ ...props, container, isOpening: true });\n isOpen = true;\n context?.dispatchEvent(\n new CustomEvent('accordion:open', { bubbles: true, composed: true }),\n );\n };\n\n const close = (props: StateProps) => {\n ActionAnimation({ ...props, container, isOpening: false });\n isOpen = false;\n context?.dispatchEvent(\n new CustomEvent('accordion:close', { bubbles: true, composed: true }),\n );\n };\n\t\t\n const EventSize = () => {\n if (!isOpen) return;\n const bodyElement = container.querySelector(\n '.accordion-body',\n ) as HTMLElement;\n const bodyWrapperElement = container.querySelector(\n '.accordion-body-wrapper',\n ) as HTMLElement;\n\n bodyWrapperElement.style.height = `${bodyElement.offsetHeight}px`;\n };\n\n const headline = CreateHeadline({ ...props, isStateOpen, open, close });\n const body = CreateBody({ ...props, isStateOpen });\n\n const containerModel = containerBuilder\n .withChildren(headline, body)\n .build();\n\n if (isStateOpen) {\n // Initial render: animate open without dispatching an event — the\n // accordion:open/close events represent toggles, not initial state.\n ActionAnimation({ container, isOpening: true, hasAnimation: false });\n isOpen = true;\n }\n\n window.addEventListener('resize', debounce(EventSize, 20));\n\n return new ElementBuilder()\n .withClassName('accordion-declaration')\n .withStyles({\n element: {\n container: 'umd-element-accordion-item / inline-size',\n },\n })\n .withChild(containerModel)\n .withEvents({ open, close })\n .build();\n })();\n"],"names":["props"],"mappings":"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"}
|
|
@@ -13,7 +13,6 @@ import "@universityofmaryland/web-icons-library/files";
|
|
|
13
13
|
import "@universityofmaryland/web-icons-library/brand";
|
|
14
14
|
import "@universityofmaryland/web-icons-library/arrows";
|
|
15
15
|
import "@universityofmaryland/web-utilities-library/performance";
|
|
16
|
-
import "../../atomic/animations/brand/chevron-scroll.js";
|
|
17
16
|
import "../../atomic/animations/brand/card-stack.js";
|
|
18
17
|
import { createImageBackground } from "../../atomic/assets/image/background.js";
|
|
19
18
|
import "@universityofmaryland/web-styles-library";
|
|
@@ -22,10 +21,10 @@ import "@universityofmaryland/web-icons-library/location";
|
|
|
22
21
|
import "@universityofmaryland/web-icons-library/calendar";
|
|
23
22
|
import "@universityofmaryland/web-utilities-library/theme";
|
|
24
23
|
import { image, textContainer, container } from "../../atomic/layout/block/stacked.js";
|
|
25
|
-
import "../../atomic/layout/overlay/modal.js";
|
|
26
24
|
import "../../atomic/layout/person/columns.js";
|
|
27
25
|
import "@universityofmaryland/web-icons-library/social";
|
|
28
|
-
import "
|
|
26
|
+
import "@universityofmaryland/web-utilities-library/string";
|
|
27
|
+
import "@universityofmaryland/web-utilities-library/animation";
|
|
29
28
|
import "../../atomic/text-lockup/small.js";
|
|
30
29
|
import { createTextLockupSmallScaling } from "../../atomic/text-lockup/small-scaling.js";
|
|
31
30
|
const smallBreakpoint = token.media.breakpointValues.small.max;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block.js","sources":["../../../source/composite/card/block.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport { createMediaQuery } from '@universityofmaryland/web-utilities-library/styles';\nimport { assets, layout, textLockup } from 'atomic';\nimport { CardBlockProps } from './_types';\nimport { type UMDElement } from '../../_types';\n\nconst smallBreakpoint = token.media.breakpointValues.small.max;\n\nexport const createCompositeCardBlock = (props: CardBlockProps) => {\n const {\n dateSign,\n hasBorder,\n hasEyebrowRibbon,\n image,\n imageLoading = 'lazy',\n isAligned,\n isThemeDark,\n isTransparent,\n newsId,\n } = props;\n const shouldImageBeFullWidth = hasEyebrowRibbon;\n const children: UMDElement[] = [];\n const sizingProps = {\n isThemeDark,\n isTransparent,\n hasBorder,\n };\n\n if (image) {\n children.push(\n layout.block.stacked.image({\n children: [\n assets.image.background({\n element: image,\n isScaled: true,\n isAspectStandard: isAligned,\n dateSign,\n imageLoading,\n }),\n ],\n customStyles: {\n ...(shouldImageBeFullWidth && {\n ...createMediaQuery('max-width', smallBreakpoint, {\n marginBottom: token.spacing.md,\n width: '100%',\n }),\n }),\n },\n ...sizingProps,\n }),\n );\n }\n\n children.push(\n layout.block.stacked.textContainer({\n children: [textLockup.smallScaling(props)],\n ...sizingProps,\n hasImage: !!image,\n }),\n );\n\n const composite = layout.block.stacked.container({\n children,\n ...sizingProps,\n });\n\n if (newsId) {\n composite?.element.setAttribute('news-id', newsId);\n }\n\n return composite;\n};\n"],"names":["image","layout.block.stacked.image","assets.image.background","layout.block.stacked.textContainer","textLockup.smallScaling","layout.block.stacked.container"],"mappings":"
|
|
1
|
+
{"version":3,"file":"block.js","sources":["../../../source/composite/card/block.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport { createMediaQuery } from '@universityofmaryland/web-utilities-library/styles';\nimport { assets, layout, textLockup } from 'atomic';\nimport { CardBlockProps } from './_types';\nimport { type UMDElement } from '../../_types';\n\nconst smallBreakpoint = token.media.breakpointValues.small.max;\n\nexport const createCompositeCardBlock = (props: CardBlockProps) => {\n const {\n dateSign,\n hasBorder,\n hasEyebrowRibbon,\n image,\n imageLoading = 'lazy',\n isAligned,\n isThemeDark,\n isTransparent,\n newsId,\n } = props;\n const shouldImageBeFullWidth = hasEyebrowRibbon;\n const children: UMDElement[] = [];\n const sizingProps = {\n isThemeDark,\n isTransparent,\n hasBorder,\n };\n\n if (image) {\n children.push(\n layout.block.stacked.image({\n children: [\n assets.image.background({\n element: image,\n isScaled: true,\n isAspectStandard: isAligned,\n dateSign,\n imageLoading,\n }),\n ],\n customStyles: {\n ...(shouldImageBeFullWidth && {\n ...createMediaQuery('max-width', smallBreakpoint, {\n marginBottom: token.spacing.md,\n width: '100%',\n }),\n }),\n },\n ...sizingProps,\n }),\n );\n }\n\n children.push(\n layout.block.stacked.textContainer({\n children: [textLockup.smallScaling(props)],\n ...sizingProps,\n hasImage: !!image,\n }),\n );\n\n const composite = layout.block.stacked.container({\n children,\n ...sizingProps,\n });\n\n if (newsId) {\n composite?.element.setAttribute('news-id', newsId);\n }\n\n return composite;\n};\n"],"names":["image","layout.block.stacked.image","assets.image.background","layout.block.stacked.textContainer","textLockup.smallScaling","layout.block.stacked.container"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAM,kBAAkB,MAAM,MAAM,iBAAiB,MAAM;AAEpD,MAAM,2BAA2B,CAAC,UAA0B;AACjE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IAAA,OACAA;AAAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AACJ,QAAM,yBAAyB;AAC/B,QAAM,WAAyB,CAAA;AAC/B,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,MAAIA,SAAO;AACT,aAAS;AAAA,MACPC,MAA2B;AAAA,QACzB,UAAU;AAAA,UACRC,sBAAwB;AAAA,YACtB,SAASF;AAAAA,YACT,UAAU;AAAA,YACV,kBAAkB;AAAA,YAClB;AAAA,YACA;AAAA,UAAA,CACD;AAAA,QAAA;AAAA,QAEH,cAAc;AAAA,UACZ,GAAI,0BAA0B;AAAA,YAC5B,GAAG,iBAAiB,aAAa,iBAAiB;AAAA,cAChD,cAAc,MAAM,QAAQ;AAAA,cAC5B,OAAO;AAAA,YAAA,CACR;AAAA,UAAA;AAAA,QACH;AAAA,QAEF,GAAG;AAAA,MAAA,CACJ;AAAA,IAAA;AAAA,EAEL;AAEA,WAAS;AAAA,IACPG,cAAmC;AAAA,MACjC,UAAU,CAACC,6BAAwB,KAAK,CAAC;AAAA,MACzC,GAAG;AAAA,MACH,UAAU,CAAC,CAACJ;AAAAA,IAAA,CACb;AAAA,EAAA;AAGH,QAAM,YAAYK,UAA+B;AAAA,IAC/C;AAAA,IACA,GAAG;AAAA,EAAA,CACJ;AAED,MAAI,QAAQ;AACV,eAAW,QAAQ,aAAa,WAAW,MAAM;AAAA,EACnD;AAEA,SAAO;AACT;"}
|
|
@@ -17,17 +17,16 @@ import "@universityofmaryland/web-icons-library/files";
|
|
|
17
17
|
import "@universityofmaryland/web-icons-library/brand";
|
|
18
18
|
import "@universityofmaryland/web-icons-library/arrows";
|
|
19
19
|
import "@universityofmaryland/web-utilities-library/performance";
|
|
20
|
-
import "../../atomic/animations/brand/chevron-scroll.js";
|
|
21
20
|
import "../../atomic/animations/brand/card-stack.js";
|
|
22
21
|
import { createImageBackground } from "../../atomic/assets/image/background.js";
|
|
23
22
|
import "@universityofmaryland/web-styles-library";
|
|
24
23
|
import "@universityofmaryland/web-utilities-library/accessibility";
|
|
25
24
|
import "@universityofmaryland/web-icons-library/calendar";
|
|
26
25
|
import "../../atomic/layout/block/stacked.js";
|
|
27
|
-
import "../../atomic/layout/overlay/modal.js";
|
|
28
26
|
import "../../atomic/layout/person/columns.js";
|
|
29
27
|
import "@universityofmaryland/web-icons-library/social";
|
|
30
|
-
import "
|
|
28
|
+
import "@universityofmaryland/web-utilities-library/string";
|
|
29
|
+
import "@universityofmaryland/web-utilities-library/animation";
|
|
31
30
|
import { createTextLockupSmall } from "../../atomic/text-lockup/small.js";
|
|
32
31
|
const mediumBreakpointStart = token.media.breakpointValues.medium.min;
|
|
33
32
|
const smallBreakpoint = token.media.breakpointValues.small.max;
|