@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.
Files changed (195) hide show
  1. package/README.md +1 -1
  2. package/dist/atomic/animations/brand/card-stack.js +2 -3
  3. package/dist/atomic/animations/brand/card-stack.js.map +1 -1
  4. package/dist/atomic/animations/brand/chevron-flow.d.ts +1 -7
  5. package/dist/atomic/animations/brand/chevron-flow.d.ts.map +1 -1
  6. package/dist/atomic/animations/brand/chevron-flow.js +82 -159
  7. package/dist/atomic/animations/brand/chevron-flow.js.map +1 -1
  8. package/dist/atomic/animations/brand/chevron-scroll.d.ts +1 -4
  9. package/dist/atomic/animations/brand/chevron-scroll.d.ts.map +1 -1
  10. package/dist/atomic/animations/brand/chevron-scroll.js +89 -143
  11. package/dist/atomic/animations/brand/chevron-scroll.js.map +1 -1
  12. package/dist/atomic/assets/image/caption.d.ts +9 -0
  13. package/dist/atomic/assets/image/caption.d.ts.map +1 -0
  14. package/dist/atomic/assets/image/caption.js +166 -0
  15. package/dist/atomic/assets/image/caption.js.map +1 -0
  16. package/dist/atomic/assets/image/gif.d.ts.map +1 -1
  17. package/dist/atomic/assets/image/gif.js +6 -1
  18. package/dist/atomic/assets/image/gif.js.map +1 -1
  19. package/dist/atomic/assets/image/index.d.ts +1 -0
  20. package/dist/atomic/assets/image/index.d.ts.map +1 -1
  21. package/dist/atomic/assets/image/index.js +2 -0
  22. package/dist/atomic/assets/image/index.js.map +1 -1
  23. package/dist/atomic/assets/video/toggle.d.ts.map +1 -1
  24. package/dist/atomic/assets/video/toggle.js +9 -2
  25. package/dist/atomic/assets/video/toggle.js.map +1 -1
  26. package/dist/atomic/buttons/fullscreen.d.ts +1 -0
  27. package/dist/atomic/buttons/fullscreen.d.ts.map +1 -1
  28. package/dist/atomic/buttons/fullscreen.js +35 -3
  29. package/dist/atomic/buttons/fullscreen.js.map +1 -1
  30. package/dist/atomic/layout/overlay/modal.d.ts +1 -10
  31. package/dist/atomic/layout/overlay/modal.d.ts.map +1 -1
  32. package/dist/atomic/layout/overlay/modal.js +28 -44
  33. package/dist/atomic/layout/overlay/modal.js.map +1 -1
  34. package/dist/atomic/layout/person/columns.js +2 -3
  35. package/dist/atomic/layout/person/columns.js.map +1 -1
  36. package/dist/atomic/text-lockup/date.d.ts +1 -4
  37. package/dist/atomic/text-lockup/date.d.ts.map +1 -1
  38. package/dist/atomic/text-lockup/date.js +42 -75
  39. package/dist/atomic/text-lockup/date.js.map +1 -1
  40. package/dist/composite/accordion/item.d.ts +3 -16
  41. package/dist/composite/accordion/item.d.ts.map +1 -1
  42. package/dist/composite/accordion/item.js +152 -245
  43. package/dist/composite/accordion/item.js.map +1 -1
  44. package/dist/composite/card/block.js +2 -3
  45. package/dist/composite/card/block.js.map +1 -1
  46. package/dist/composite/card/event-time.js +2 -3
  47. package/dist/composite/card/event-time.js.map +1 -1
  48. package/dist/composite/card/list.js +2 -3
  49. package/dist/composite/card/list.js.map +1 -1
  50. package/dist/composite/card/overlay/color.js +3 -3
  51. package/dist/composite/card/overlay/icon.js +3 -3
  52. package/dist/composite/card/overlay/image.d.ts.map +1 -1
  53. package/dist/composite/card/overlay/image.js +9 -12
  54. package/dist/composite/card/overlay/image.js.map +1 -1
  55. package/dist/composite/card/video/block.js +4 -3
  56. package/dist/composite/card/video/block.js.map +1 -1
  57. package/dist/composite/carousel/cards/index.d.ts +1 -8
  58. package/dist/composite/carousel/cards/index.d.ts.map +1 -1
  59. package/dist/composite/carousel/cards/index.js +163 -282
  60. package/dist/composite/carousel/cards/index.js.map +1 -1
  61. package/dist/composite/carousel/default/index.d.ts +9 -15
  62. package/dist/composite/carousel/default/index.d.ts.map +1 -1
  63. package/dist/composite/carousel/default/index.js +78 -129
  64. package/dist/composite/carousel/default/index.js.map +1 -1
  65. package/dist/composite/carousel/elements/equal-width-items.d.ts +37 -0
  66. package/dist/composite/carousel/elements/equal-width-items.d.ts.map +1 -0
  67. package/dist/composite/carousel/elements/{blocks.js → equal-width-items.js} +157 -227
  68. package/dist/composite/carousel/elements/equal-width-items.js.map +1 -0
  69. package/dist/composite/carousel/elements/full-screen.d.ts +3 -2
  70. package/dist/composite/carousel/elements/full-screen.d.ts.map +1 -1
  71. package/dist/composite/carousel/elements/full-screen.js +34 -41
  72. package/dist/composite/carousel/elements/full-screen.js.map +1 -1
  73. package/dist/composite/carousel/elements/image.d.ts +15 -2
  74. package/dist/composite/carousel/elements/image.d.ts.map +1 -1
  75. package/dist/composite/carousel/elements/image.js +176 -151
  76. package/dist/composite/carousel/elements/image.js.map +1 -1
  77. package/dist/composite/carousel/elements/index.d.ts +4 -1
  78. package/dist/composite/carousel/elements/index.d.ts.map +1 -1
  79. package/dist/composite/carousel/elements/indicator-wrapper.d.ts +13 -0
  80. package/dist/composite/carousel/elements/indicator-wrapper.d.ts.map +1 -0
  81. package/dist/composite/carousel/elements/indicator-wrapper.js +67 -0
  82. package/dist/composite/carousel/elements/indicator-wrapper.js.map +1 -0
  83. package/dist/composite/carousel/elements/nav-button.d.ts +82 -0
  84. package/dist/composite/carousel/elements/nav-button.d.ts.map +1 -0
  85. package/dist/composite/carousel/elements/nav-button.js +164 -0
  86. package/dist/composite/carousel/elements/nav-button.js.map +1 -0
  87. package/dist/composite/carousel/elements/overlay.d.ts +3 -2
  88. package/dist/composite/carousel/elements/overlay.d.ts.map +1 -1
  89. package/dist/composite/carousel/elements/overlay.js +85 -55
  90. package/dist/composite/carousel/elements/overlay.js.map +1 -1
  91. package/dist/composite/carousel/image/multiple.d.ts +2 -7
  92. package/dist/composite/carousel/image/multiple.d.ts.map +1 -1
  93. package/dist/composite/carousel/image/multiple.js +85 -150
  94. package/dist/composite/carousel/image/multiple.js.map +1 -1
  95. package/dist/composite/carousel/image/standard.d.ts +2 -7
  96. package/dist/composite/carousel/image/standard.d.ts.map +1 -1
  97. package/dist/composite/carousel/image/standard.js +148 -262
  98. package/dist/composite/carousel/image/standard.js.map +1 -1
  99. package/dist/composite/carousel/thumbnail/index.d.ts +1 -8
  100. package/dist/composite/carousel/thumbnail/index.d.ts.map +1 -1
  101. package/dist/composite/carousel/thumbnail/index.js +72 -113
  102. package/dist/composite/carousel/thumbnail/index.js.map +1 -1
  103. package/dist/composite/carousel/wide/container.d.ts +21 -20
  104. package/dist/composite/carousel/wide/container.d.ts.map +1 -1
  105. package/dist/composite/carousel/wide/container.js +37 -12
  106. package/dist/composite/carousel/wide/container.js.map +1 -1
  107. package/dist/composite/carousel/wide/controls.d.ts +5 -10
  108. package/dist/composite/carousel/wide/controls.d.ts.map +1 -1
  109. package/dist/composite/carousel/wide/controls.js +24 -94
  110. package/dist/composite/carousel/wide/controls.js.map +1 -1
  111. package/dist/composite/carousel/wide/frames.d.ts +18 -10
  112. package/dist/composite/carousel/wide/frames.d.ts.map +1 -1
  113. package/dist/composite/carousel/wide/frames.js +60 -78
  114. package/dist/composite/carousel/wide/frames.js.map +1 -1
  115. package/dist/composite/carousel/wide/index.d.ts.map +1 -1
  116. package/dist/composite/carousel/wide/index.js +11 -19
  117. package/dist/composite/carousel/wide/index.js.map +1 -1
  118. package/dist/composite/hero/custom/expand.js +3 -4
  119. package/dist/composite/hero/custom/expand.js.map +1 -1
  120. package/dist/composite/hero/custom/grid.js +2 -3
  121. package/dist/composite/hero/custom/grid.js.map +1 -1
  122. package/dist/composite/hero/custom/video-arrow.js +4 -3
  123. package/dist/composite/hero/custom/video-arrow.js.map +1 -1
  124. package/dist/composite/hero/logo.js +3 -3
  125. package/dist/composite/hero/minimal.js +3 -3
  126. package/dist/composite/hero/overlay.js +5 -4
  127. package/dist/composite/hero/overlay.js.map +1 -1
  128. package/dist/composite/hero/stacked.js +3 -3
  129. package/dist/composite/hero/standard.js +4 -3
  130. package/dist/composite/hero/standard.js.map +1 -1
  131. package/dist/composite/layout/box/logo.d.ts +1 -4
  132. package/dist/composite/layout/box/logo.d.ts.map +1 -1
  133. package/dist/composite/layout/box/logo.js +55 -103
  134. package/dist/composite/layout/box/logo.js.map +1 -1
  135. package/dist/composite/layout/image/expand.d.ts +1 -4
  136. package/dist/composite/layout/image/expand.d.ts.map +1 -1
  137. package/dist/composite/layout/image/expand.js +136 -243
  138. package/dist/composite/layout/image/expand.js.map +1 -1
  139. package/dist/composite/layout/scroll-top/index.d.ts +1 -7
  140. package/dist/composite/layout/scroll-top/index.d.ts.map +1 -1
  141. package/dist/composite/layout/scroll-top/index.js +65 -77
  142. package/dist/composite/layout/scroll-top/index.js.map +1 -1
  143. package/dist/composite/layout/sticky-columns/index.d.ts +2 -2
  144. package/dist/composite/layout/sticky-columns/index.d.ts.map +1 -1
  145. package/dist/composite/layout/sticky-columns/index.js +42 -70
  146. package/dist/composite/layout/sticky-columns/index.js.map +1 -1
  147. package/dist/composite/media/elements/gif.js +3 -3
  148. package/dist/composite/media/inline/caption.d.ts +4 -2
  149. package/dist/composite/media/inline/caption.d.ts.map +1 -1
  150. package/dist/composite/media/inline/caption.js +56 -67
  151. package/dist/composite/media/inline/caption.js.map +1 -1
  152. package/dist/composite/media/inline/index.d.ts +9 -8
  153. package/dist/composite/media/inline/index.d.ts.map +1 -1
  154. package/dist/composite/media/inline/standard.d.ts +1 -4
  155. package/dist/composite/media/inline/standard.d.ts.map +1 -1
  156. package/dist/composite/media/inline/standard.js +16 -24
  157. package/dist/composite/media/inline/standard.js.map +1 -1
  158. package/dist/composite/media/inline/wrapped.d.ts +4 -2
  159. package/dist/composite/media/inline/wrapped.d.ts.map +1 -1
  160. package/dist/composite/media/inline/wrapped.js +80 -83
  161. package/dist/composite/media/inline/wrapped.js.map +1 -1
  162. package/dist/composite/navigation/utility/alert.js +3 -4
  163. package/dist/composite/navigation/utility/alert.js.map +1 -1
  164. package/dist/composite/pathway/_common.js +4 -3
  165. package/dist/composite/pathway/_common.js.map +1 -1
  166. package/dist/composite/pathway/hero.js +3 -3
  167. package/dist/composite/person/bio/full.js +3 -3
  168. package/dist/composite/person/bio/small.js +2 -3
  169. package/dist/composite/person/bio/small.js.map +1 -1
  170. package/dist/composite/person/block.js +2 -3
  171. package/dist/composite/person/block.js.map +1 -1
  172. package/dist/composite/person/hero.js +3 -3
  173. package/dist/composite/person/list.js +2 -3
  174. package/dist/composite/person/list.js.map +1 -1
  175. package/dist/composite/person/tabular.js +2 -3
  176. package/dist/composite/person/tabular.js.map +1 -1
  177. package/dist/composite/slider/events.d.ts +6 -12
  178. package/dist/composite/slider/events.d.ts.map +1 -1
  179. package/dist/composite/slider/events.js +304 -428
  180. package/dist/composite/slider/events.js.map +1 -1
  181. package/dist/layout/image.d.ts +5 -10
  182. package/dist/layout/image.d.ts.map +1 -1
  183. package/dist/layout/image.js +27 -88
  184. package/dist/layout/image.js.map +1 -1
  185. package/dist/layout/index.d.ts +1 -1
  186. package/dist/layout/index.d.ts.map +1 -1
  187. package/dist/layout.js +2 -2
  188. package/package.json +6 -6
  189. package/dist/composite/carousel/elements/blocks.d.ts +0 -42
  190. package/dist/composite/carousel/elements/blocks.d.ts.map +0 -1
  191. package/dist/composite/carousel/elements/blocks.js.map +0 -1
  192. package/dist/composite/carousel/wide/_elementModel.d.ts +0 -18
  193. package/dist/composite/carousel/wide/_elementModel.d.ts.map +0 -1
  194. package/dist/composite/carousel/wide/_elementModel.js +0 -29
  195. package/dist/composite/carousel/wide/_elementModel.js.map +0 -1
@@ -1,109 +1,61 @@
1
1
  import * as token from "@universityofmaryland/web-token-library";
2
- import * as typography from "@universityofmaryland/web-styles-library/typography";
3
- import { jssToCSS } from "@universityofmaryland/web-utilities-library/styles";
4
- const ATTRIBUTE_THEME = "theme";
5
- const ATTRIBUTE_BORDER = "border";
6
- const THEME_DARK = "dark";
7
- const ELEMENT_NAME = "umd-logo-block";
8
- const ELEMENT_LOGO_BLOCK_CONTAINER = "logo-block-container";
9
- const ELEMENT_LOGO_BLOCK_ASSET = "logo-block-asset";
10
- const ELEMENT_LOGO_BLOCK_TEXT = "logo-block-text";
11
- const IS_THEME_DARK = `[${ATTRIBUTE_THEME}="${THEME_DARK}"]`;
12
- const IS_BORDER = `[${ATTRIBUTE_BORDER}]`;
13
- const OVERWRITE_THEME_DARK_ASSET = `.${ELEMENT_LOGO_BLOCK_CONTAINER}${IS_THEME_DARK} .${ELEMENT_LOGO_BLOCK_ASSET}`;
14
- const OVERWRITE_THEME_DARK_TEXT = `.${ELEMENT_LOGO_BLOCK_CONTAINER}${IS_THEME_DARK} .${ELEMENT_LOGO_BLOCK_TEXT}`;
15
- const OVERWRITE_BORDER_ASSET = `.${ELEMENT_LOGO_BLOCK_CONTAINER}${IS_BORDER} .${ELEMENT_LOGO_BLOCK_ASSET}`;
16
- const OVERWRITE_THEME_DARK_BORDER_ASSET = `.${ELEMENT_LOGO_BLOCK_CONTAINER}${IS_THEME_DARK}${IS_BORDER} .${ELEMENT_LOGO_BLOCK_ASSET}`;
17
- const VariantThemeStyles = `
18
- ${OVERWRITE_THEME_DARK_ASSET} {
19
- background-color: ${token.color.gray.darker};
20
- padding: ${token.spacing.xl};
21
- }
22
-
23
- ${OVERWRITE_THEME_DARK_BORDER_ASSET} {
24
- border: 1px solid ${token.color.gray.dark};
25
- }
26
-
27
- ${OVERWRITE_THEME_DARK_TEXT},
28
- ${OVERWRITE_THEME_DARK_TEXT} * {
29
- color: ${token.color.white};
30
- };
31
- `;
32
- const VariantBorderStyles = `
33
- ${OVERWRITE_BORDER_ASSET} {
34
- border: 1px solid ${token.color.gray.light};
35
- padding: ${token.spacing.xl};
36
- height: 100%;
37
- }
38
- `;
39
- const TextStyles = `
40
- .${ELEMENT_LOGO_BLOCK_TEXT},
41
- .${ELEMENT_LOGO_BLOCK_TEXT} * {
42
- color: ${token.color.gray.darker};
43
- }
44
-
45
- ${jssToCSS({
46
- styleObj: {
47
- [`.${ELEMENT_LOGO_BLOCK_TEXT}`]: typography.sans.min
48
- }
49
- })}
50
-
51
- ${jssToCSS({
52
- styleObj: {
53
- [`.${ELEMENT_LOGO_BLOCK_TEXT} *`]: typography.sans.min
54
- }
55
- })}
56
-
57
- .${ELEMENT_LOGO_BLOCK_TEXT} a:hover,
58
- .${ELEMENT_LOGO_BLOCK_TEXT} a:focus {
59
- text-decoration: underline;
60
- }
61
- `;
62
- const STYLES_LOGO_BLOCK_ELEMENT = `
63
- .${ELEMENT_LOGO_BLOCK_CONTAINER} {
64
- container: ${ELEMENT_NAME} / inline-size;
65
- height: 100%;
66
- }
67
-
68
- .${ELEMENT_LOGO_BLOCK_ASSET} {
69
- display: flex;
70
- justify-content: center;
71
- align-items: center;
72
- }
73
-
74
- .${ELEMENT_LOGO_BLOCK_ASSET} > * {
75
- max-height: 50px;
76
- max-width: 150px;
77
- display: flex;
78
- }
79
-
80
- .${ELEMENT_LOGO_BLOCK_ASSET} img {
81
- object-fit: contain;
82
- }
83
-
84
- .${ELEMENT_LOGO_BLOCK_ASSET} + * {
85
- margin-top: ${token.spacing.min};
86
- }
87
-
88
- ${TextStyles}
89
- ${VariantBorderStyles}
90
- ${VariantThemeStyles}
91
- `;
2
+ import * as Styles from "@universityofmaryland/web-styles-library";
3
+ import { ElementBuilder } from "@universityofmaryland/web-builder-library";
92
4
  const CreateBoxLogoElement = (element) => {
93
5
  const { isThemeDark, image, text, isBordered = false } = element;
94
- const elementContainer = document.createElement("div");
95
- const assetContainer = document.createElement("div");
96
- assetContainer.appendChild(image);
97
- assetContainer.classList.add(ELEMENT_LOGO_BLOCK_ASSET);
98
- elementContainer.classList.add(ELEMENT_LOGO_BLOCK_CONTAINER);
99
- if (isThemeDark) elementContainer.setAttribute(ATTRIBUTE_THEME, THEME_DARK);
100
- if (isBordered) elementContainer.setAttribute(ATTRIBUTE_BORDER, "");
101
- elementContainer.appendChild(assetContainer);
102
- if (text) {
103
- text.classList.add(ELEMENT_LOGO_BLOCK_TEXT);
104
- elementContainer.appendChild(text);
105
- }
106
- return { element: elementContainer, styles: STYLES_LOGO_BLOCK_ELEMENT };
6
+ const createText = () => {
7
+ if (!text) {
8
+ console.warn("CreateBoxLogoElement: text element is not provided");
9
+ return null;
10
+ }
11
+ return new ElementBuilder(text).withClassName("logo-block-text").styled(Styles.typography.sans.min).withStyles({
12
+ element: {
13
+ color: token.color.gray.darker,
14
+ ...isThemeDark && { color: token.color.white },
15
+ "& *": {
16
+ ...Styles.typography.sans.min,
17
+ color: token.color.gray.darker,
18
+ ...isThemeDark && { color: token.color.white }
19
+ },
20
+ "& a:hover, & a:focus": {
21
+ textDecoration: "underline"
22
+ }
23
+ }
24
+ }).build();
25
+ };
26
+ const assetBuilder = new ElementBuilder().withClassName("logo-block-asset").withChild(image).withStyles({
27
+ element: {
28
+ display: "flex",
29
+ justifyContent: "center",
30
+ alignItems: "center",
31
+ ...isBordered && {
32
+ border: `1px solid ${token.color.gray.light}`,
33
+ ...isThemeDark && { border: `1px solid ${token.color.gray.dark}` },
34
+ height: "100%"
35
+ },
36
+ ...isThemeDark && {
37
+ backgroundColor: token.color.gray.darker
38
+ },
39
+ ...(isBordered || isThemeDark) && { padding: token.spacing.xl },
40
+ "& > *": {
41
+ maxHeight: "50px",
42
+ maxWidth: "150px",
43
+ display: "flex"
44
+ },
45
+ "& img": {
46
+ objectFit: "contain"
47
+ }
48
+ },
49
+ siblingAfter: {
50
+ marginTop: token.spacing.min
51
+ }
52
+ });
53
+ return new ElementBuilder().withClassName("logo-block-container").withStyles({
54
+ element: {
55
+ containerType: "inline-size",
56
+ height: "100%"
57
+ }
58
+ }).withChild(assetBuilder).withChild(createText()).build();
107
59
  };
108
60
  const createCompositeLayoutBoxLogo = CreateBoxLogoElement;
109
61
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"logo.js","sources":["../../../../source/composite/layout/box/logo.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport * as typography from '@universityofmaryland/web-styles-library/typography';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\n\nexport type TypeLogoRequirements = {\n isBordered?: boolean;\n isThemeDark?: boolean;\n image: HTMLElement;\n text?: HTMLElement | null;\n};\n\nconst ATTRIBUTE_THEME = 'theme';\nconst ATTRIBUTE_BORDER = 'border';\nconst THEME_DARK = 'dark';\n\nconst ELEMENT_NAME = 'umd-logo-block';\nconst ELEMENT_LOGO_BLOCK_CONTAINER = 'logo-block-container';\nconst ELEMENT_LOGO_BLOCK_ASSET = 'logo-block-asset';\nconst ELEMENT_LOGO_BLOCK_TEXT = 'logo-block-text';\n\nconst IS_THEME_DARK = `[${ATTRIBUTE_THEME}=\"${THEME_DARK}\"]`;\nconst IS_BORDER = `[${ATTRIBUTE_BORDER}]`;\n\nconst OVERWRITE_THEME_DARK_ASSET = `.${ELEMENT_LOGO_BLOCK_CONTAINER}${IS_THEME_DARK} .${ELEMENT_LOGO_BLOCK_ASSET}`;\nconst OVERWRITE_THEME_DARK_TEXT = `.${ELEMENT_LOGO_BLOCK_CONTAINER}${IS_THEME_DARK} .${ELEMENT_LOGO_BLOCK_TEXT}`;\n\nconst OVERWRITE_BORDER_ASSET = `.${ELEMENT_LOGO_BLOCK_CONTAINER}${IS_BORDER} .${ELEMENT_LOGO_BLOCK_ASSET}`;\nconst OVERWRITE_THEME_DARK_BORDER_ASSET = `.${ELEMENT_LOGO_BLOCK_CONTAINER}${IS_THEME_DARK}${IS_BORDER} .${ELEMENT_LOGO_BLOCK_ASSET}`;\n\n// prettier-ignore\nconst VariantThemeStyles = `\n ${OVERWRITE_THEME_DARK_ASSET} {\n background-color: ${token.color.gray.darker};\n padding: ${token.spacing.xl};\n }\n\n ${OVERWRITE_THEME_DARK_BORDER_ASSET} {\n border: 1px solid ${token.color.gray.dark};\n }\n\n ${OVERWRITE_THEME_DARK_TEXT},\n ${OVERWRITE_THEME_DARK_TEXT} * {\n color: ${token.color.white};\n };\n`;\n\n// prettier-ignore\nconst VariantBorderStyles = `\n ${OVERWRITE_BORDER_ASSET} {\n border: 1px solid ${token.color.gray.light};\n padding: ${token.spacing.xl};\n height: 100%;\n }\n`;\n\n// prettier-ignore\nconst TextStyles = `\n .${ELEMENT_LOGO_BLOCK_TEXT},\n .${ELEMENT_LOGO_BLOCK_TEXT} * {\n color: ${token.color.gray.darker};\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_LOGO_BLOCK_TEXT}`]: typography.sans.min,\n },\n })}\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_LOGO_BLOCK_TEXT} *`]: typography.sans.min,\n },\n })}\n\n .${ELEMENT_LOGO_BLOCK_TEXT} a:hover,\n .${ELEMENT_LOGO_BLOCK_TEXT} a:focus {\n text-decoration: underline;\n }\n`;\n\n// prettier-ignore\nconst STYLES_LOGO_BLOCK_ELEMENT = `\n .${ELEMENT_LOGO_BLOCK_CONTAINER} {\n container: ${ELEMENT_NAME} / inline-size;\n height: 100%;\n }\n\n .${ELEMENT_LOGO_BLOCK_ASSET} {\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .${ELEMENT_LOGO_BLOCK_ASSET} > * {\n max-height: 50px;\n max-width: 150px;\n display: flex;\n }\n\n .${ELEMENT_LOGO_BLOCK_ASSET} img {\n object-fit: contain;\n }\n\n .${ELEMENT_LOGO_BLOCK_ASSET} + * {\n margin-top: ${token.spacing.min};\n }\n\n ${TextStyles}\n ${VariantBorderStyles}\n ${VariantThemeStyles}\n`;\n\nconst CreateBoxLogoElement = (element: TypeLogoRequirements) => {\n const { isThemeDark, image, text, isBordered = false } = element;\n\n const elementContainer = document.createElement('div');\n const assetContainer = document.createElement('div');\n\n assetContainer.appendChild(image);\n assetContainer.classList.add(ELEMENT_LOGO_BLOCK_ASSET);\n\n elementContainer.classList.add(ELEMENT_LOGO_BLOCK_CONTAINER);\n if (isThemeDark) elementContainer.setAttribute(ATTRIBUTE_THEME, THEME_DARK);\n if (isBordered) elementContainer.setAttribute(ATTRIBUTE_BORDER, '');\n elementContainer.appendChild(assetContainer);\n\n if (text) {\n text.classList.add(ELEMENT_LOGO_BLOCK_TEXT);\n elementContainer.appendChild(text);\n }\n\n return { element: elementContainer, styles: STYLES_LOGO_BLOCK_ELEMENT };\n};\n\nexport const createCompositeLayoutBoxLogo = CreateBoxLogoElement;\n"],"names":[],"mappings":";;;AAWA,MAAM,kBAAkB;AACxB,MAAM,mBAAmB;AACzB,MAAM,aAAa;AAEnB,MAAM,eAAe;AACrB,MAAM,+BAA+B;AACrC,MAAM,2BAA2B;AACjC,MAAM,0BAA0B;AAEhC,MAAM,gBAAgB,IAAI,eAAe,KAAK,UAAU;AACxD,MAAM,YAAY,IAAI,gBAAgB;AAEtC,MAAM,6BAA6B,IAAI,4BAA4B,GAAG,aAAa,KAAK,wBAAwB;AAChH,MAAM,4BAA4B,IAAI,4BAA4B,GAAG,aAAa,KAAK,uBAAuB;AAE9G,MAAM,yBAAyB,IAAI,4BAA4B,GAAG,SAAS,KAAK,wBAAwB;AACxG,MAAM,oCAAoC,IAAI,4BAA4B,GAAG,aAAa,GAAG,SAAS,KAAK,wBAAwB;AAGnI,MAAM,qBAAqB;AAAA,IACvB,0BAA0B;AAAA,wBACN,MAAM,MAAM,KAAK,MAAM;AAAA,eAChC,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,IAG3B,iCAAiC;AAAA,wBACb,MAAM,MAAM,KAAK,IAAI;AAAA;AAAA;AAAA,IAGzC,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,aAChB,MAAM,MAAM,KAAK;AAAA;AAAA;AAK9B,MAAM,sBAAsB;AAAA,IACxB,sBAAsB;AAAA,wBACF,MAAM,MAAM,KAAK,KAAK;AAAA,eAC/B,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA;AAM/B,MAAM,aAAa;AAAA,KACd,uBAAuB;AAAA,KACvB,uBAAuB;AAAA,aACf,MAAM,MAAM,KAAK,MAAM;AAAA;AAAA;AAAA,IAGhC,SAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,uBAAuB,EAAE,GAAG,WAAW,KAAK;AAAA,EAAA;AAErD,CAAC,CAAC;AAAA;AAAA,IAEA,SAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,uBAAuB,IAAI,GAAG,WAAW,KAAK;AAAA,EAAA;AAEvD,CAAC,CAAC;AAAA;AAAA,KAEC,uBAAuB;AAAA,KACvB,uBAAuB;AAAA;AAAA;AAAA;AAM5B,MAAM,4BAA4B;AAAA,KAC7B,4BAA4B;AAAA,iBAChB,YAAY;AAAA;AAAA;AAAA;AAAA,KAIxB,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMxB,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMxB,wBAAwB;AAAA;AAAA;AAAA;AAAA,KAIxB,wBAAwB;AAAA,kBACX,MAAM,QAAQ,GAAG;AAAA;AAAA;AAAA,IAG/B,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB,kBAAkB;AAAA;AAGtB,MAAM,uBAAuB,CAAC,YAAkC;AAC9D,QAAM,EAAE,aAAa,OAAO,MAAM,aAAa,UAAU;AAEzD,QAAM,mBAAmB,SAAS,cAAc,KAAK;AACrD,QAAM,iBAAiB,SAAS,cAAc,KAAK;AAEnD,iBAAe,YAAY,KAAK;AAChC,iBAAe,UAAU,IAAI,wBAAwB;AAErD,mBAAiB,UAAU,IAAI,4BAA4B;AAC3D,MAAI,YAAa,kBAAiB,aAAa,iBAAiB,UAAU;AAC1E,MAAI,WAAY,kBAAiB,aAAa,kBAAkB,EAAE;AAClE,mBAAiB,YAAY,cAAc;AAE3C,MAAI,MAAM;AACR,SAAK,UAAU,IAAI,uBAAuB;AAC1C,qBAAiB,YAAY,IAAI;AAAA,EACnC;AAEA,SAAO,EAAE,SAAS,kBAAkB,QAAQ,0BAAA;AAC9C;AAEO,MAAM,+BAA+B;"}
1
+ {"version":3,"file":"logo.js","sources":["../../../../source/composite/layout/box/logo.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport * as Styles from '@universityofmaryland/web-styles-library';\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\n\nexport type TypeLogoRequirements = {\n isBordered?: boolean;\n isThemeDark?: boolean;\n image: HTMLElement;\n text?: HTMLElement | null;\n};\n\nconst CreateBoxLogoElement = (element: TypeLogoRequirements) => {\n const { isThemeDark, image, text, isBordered = false } = element;\n\n const createText = () => {\n if (!text) {\n console.warn('CreateBoxLogoElement: text element is not provided');\n return null;\n }\n\n return new ElementBuilder(text)\n .withClassName('logo-block-text')\n .styled(Styles.typography.sans.min)\n .withStyles({\n element: {\n color: token.color.gray.darker,\n ...(isThemeDark && { color: token.color.white }),\n '& *': {\n ...Styles.typography.sans.min,\n color: token.color.gray.darker,\n ...(isThemeDark && { color: token.color.white }),\n },\n '& a:hover, & a:focus': {\n textDecoration: 'underline',\n },\n },\n })\n .build();\n };\n\n const assetBuilder = new ElementBuilder()\n .withClassName('logo-block-asset')\n .withChild(image)\n .withStyles({\n element: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n ...(isBordered && {\n border: `1px solid ${token.color.gray.light}`,\n ...(isThemeDark && { border: `1px solid ${token.color.gray.dark}` }),\n height: '100%',\n }),\n ...(isThemeDark && {\n backgroundColor: token.color.gray.darker,\n }),\n ...((isBordered || isThemeDark) && { padding: token.spacing.xl }),\n '& > *': {\n maxHeight: '50px',\n maxWidth: '150px',\n display: 'flex',\n },\n '& img': {\n objectFit: 'contain',\n },\n },\n siblingAfter: {\n marginTop: token.spacing.min,\n },\n });\n\n return new ElementBuilder()\n .withClassName('logo-block-container')\n .withStyles({\n element: {\n containerType: 'inline-size',\n height: '100%',\n },\n })\n .withChild(assetBuilder)\n .withChild(createText())\n .build();\n};\n\nexport const createCompositeLayoutBoxLogo = CreateBoxLogoElement;\n"],"names":[],"mappings":";;;AAWA,MAAM,uBAAuB,CAAC,YAAkC;AAC9D,QAAM,EAAE,aAAa,OAAO,MAAM,aAAa,UAAU;AAEzD,QAAM,aAAa,MAAM;AACvB,QAAI,CAAC,MAAM;AACT,cAAQ,KAAK,oDAAoD;AACjE,aAAO;AAAA,IACT;AAEA,WAAO,IAAI,eAAe,IAAI,EAC3B,cAAc,iBAAiB,EAC/B,OAAO,OAAO,WAAW,KAAK,GAAG,EACjC,WAAW;AAAA,MACV,SAAS;AAAA,QACP,OAAO,MAAM,MAAM,KAAK;AAAA,QACxB,GAAI,eAAe,EAAE,OAAO,MAAM,MAAM,MAAA;AAAA,QACxC,OAAO;AAAA,UACL,GAAG,OAAO,WAAW,KAAK;AAAA,UAC1B,OAAO,MAAM,MAAM,KAAK;AAAA,UACxB,GAAI,eAAe,EAAE,OAAO,MAAM,MAAM,MAAA;AAAA,QAAM;AAAA,QAEhD,wBAAwB;AAAA,UACtB,gBAAgB;AAAA,QAAA;AAAA,MAClB;AAAA,IACF,CACD,EACA,MAAA;AAAA,EACL;AAEA,QAAM,eAAe,IAAI,eAAA,EACtB,cAAc,kBAAkB,EAChC,UAAU,KAAK,EACf,WAAW;AAAA,IACV,SAAS;AAAA,MACP,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,GAAI,cAAc;AAAA,QAChB,QAAQ,aAAa,MAAM,MAAM,KAAK,KAAK;AAAA,QAC3C,GAAI,eAAe,EAAE,QAAQ,aAAa,MAAM,MAAM,KAAK,IAAI,GAAA;AAAA,QAC/D,QAAQ;AAAA,MAAA;AAAA,MAEV,GAAI,eAAe;AAAA,QACjB,iBAAiB,MAAM,MAAM,KAAK;AAAA,MAAA;AAAA,MAEpC,IAAK,cAAc,gBAAgB,EAAE,SAAS,MAAM,QAAQ,GAAA;AAAA,MAC5D,SAAS;AAAA,QACP,WAAW;AAAA,QACX,UAAU;AAAA,QACV,SAAS;AAAA,MAAA;AAAA,MAEX,SAAS;AAAA,QACP,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,IAEF,cAAc;AAAA,MACZ,WAAW,MAAM,QAAQ;AAAA,IAAA;AAAA,EAC3B,CACD;AAEH,SAAO,IAAI,eAAA,EACR,cAAc,sBAAsB,EACpC,WAAW;AAAA,IACV,SAAS;AAAA,MACP,eAAe;AAAA,MACf,QAAQ;AAAA,IAAA;AAAA,EACV,CACD,EACA,UAAU,YAAY,EACtB,UAAU,WAAA,CAAY,EACtB,MAAA;AACL;AAEO,MAAM,+BAA+B;"}
@@ -2,9 +2,6 @@ type TypeLayoutImageExpandProps = {
2
2
  content: HTMLElement;
3
3
  image: HTMLImageElement;
4
4
  };
5
- export declare const createCompositeLayoutImageExpand: (props: TypeLayoutImageExpandProps) => {
6
- element: HTMLDivElement;
7
- styles: string;
8
- };
5
+ export declare const createCompositeLayoutImageExpand: (props: TypeLayoutImageExpandProps) => import('../../../../builder/dist/index.d.ts').ElementModel<HTMLElement>;
9
6
  export {};
10
7
  //# sourceMappingURL=expand.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../../../source/composite/layout/image/expand.ts"],"names":[],"mappings":"AASA,KAAK,0BAA0B,GAAG;IAChC,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;CACzB,CAAC;AA8TF,eAAO,MAAM,gCAAgC,UAtCJ,0BAA0B;;;CAsCK,CAAC"}
1
+ {"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../../../source/composite/layout/image/expand.ts"],"names":[],"mappings":"AAYA,KAAK,0BAA0B,GAAG;IAChC,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;CACzB,CAAC;AA+NF,eAAO,MAAM,gCAAgC,UA/DJ,0BAA0B,kFA+DK,CAAC"}
@@ -1,267 +1,165 @@
1
1
  import * as token from "@universityofmaryland/web-token-library";
2
2
  import * as layout from "@universityofmaryland/web-styles-library/layout";
3
- import { jssToCSS, parsePixelValue } from "@universityofmaryland/web-utilities-library/styles";
3
+ import { ElementBuilder } from "@universityofmaryland/web-builder-library";
4
+ import { withViewTimelineAnimation, parsePixelValue } from "@universityofmaryland/web-utilities-library/styles";
4
5
  import { isScreenZoomed, isPreferredReducedMotion } from "@universityofmaryland/web-utilities-library/accessibility";
5
- const { spacing } = token;
6
- const ELEMENT_NAME = "umd-layout-image-expand";
7
- const ELEMENT_EXPLAND_DECLARATION = "layout-image-expand-declaration";
8
- const ELEMENT_EXPAND_CONTAINER = "layout-image-expand-container";
9
- const ELEMENT_EXPAND_IMAGE_CONTAINER = "layout-image-expand-image-container";
10
- const ELEMENT_EXPAND_IMAGE_POSITION = "layout-image-expand-image-position";
11
- const ELEMENT_EXPAND_IMAGE_SIZE = "layout-image-expand-image-size";
12
- const ELEMENT_EXPAND_IMAGE_OVERLAY = "layout-image-expand-image-overlay";
13
- const ELEMENT_EXPAND_TEXT_CONTAINER = "layout-image-expand-text-container";
14
- const ELEMENT_EXPAND_TEXT_LOCK = "layout-image-expand-text-lock";
15
- const ELEMENT_EXPAND_TEXT_ANIMATION = "layout-image-expand-text-animation";
16
- const TextLock = `
17
- ${jssToCSS({
18
- styleObj: {
19
- [`.${ELEMENT_EXPAND_TEXT_LOCK}`]: layout.space.horizontal.larger
20
- }
21
- })}
22
-
23
- .${ELEMENT_EXPAND_TEXT_LOCK} {
24
- display: flex;
25
- height: 100%;
26
- }
27
- `;
28
- const TextContainer = `
29
- .${ELEMENT_EXPAND_TEXT_CONTAINER} {
30
- position: relative;
31
- padding-top: ${token.spacing.max};
32
- padding-bottom: ${token.spacing.max};
33
- height: 100%;
34
- z-index: 9999;
35
- }
36
- `;
37
- const TextAnimation = `
38
- .${ELEMENT_EXPAND_TEXT_ANIMATION} {
39
- width: 100vw;
40
- }
41
-
42
- @media (prefers-reduced-motion: no-preference) {
43
- @supports (animation-timeline: scroll()) {
44
- .${ELEMENT_EXPAND_TEXT_ANIMATION} {
45
- position: absolute;
46
- top: 0;
47
- height: 80vh;
48
- transform: translateY(80vh);
49
- }
50
- }
51
- }
52
-
53
- @media (${token.media.queries.tablet.min}) {
54
- @media (prefers-reduced-motion: no-preference) {
55
- @supports (animation-timeline: scroll()) {
56
- .${ELEMENT_EXPAND_TEXT_ANIMATION} {
57
- transform: translateY(100vh);
58
- }
59
- }
60
- }
61
- }
62
- `;
63
- const ImageOverlayContainer = `
6
+ const KEYFRAMES = `
64
7
  @keyframes img-overlay {
65
8
  from { opacity: 0; }
66
9
  to { opacity: 1; }
67
10
  }
68
11
 
69
- .${ELEMENT_EXPAND_IMAGE_OVERLAY} {
70
- position: absolute;
71
- top: 0;
72
- left: 0;
73
- height: 100%;
74
- width: 100%;
75
- background: rgba(0,0,0,0.65);
76
- opacity: 1;
77
- }
78
-
79
- @media (prefers-reduced-motion: no-preference) {
80
- @supports (animation-timeline: scroll()) {
81
- .${ELEMENT_EXPAND_IMAGE_OVERLAY} {
82
- opacity: 1;
83
- animation: img-overlay forwards;
84
- animation-timeline: view();
85
- animation-range-start: 70vh;
86
- animation-range-end: 100vh;
87
- }
88
- }
89
- }
90
- `;
91
- const ImageSizeContainer = `
92
12
  @keyframes img-size {
93
13
  to { width: 100%; height: 100vh; }
94
14
  }
95
-
96
- .${ELEMENT_EXPAND_IMAGE_SIZE} {
97
- overflow: hidden;
98
- position: relative;
99
- }
100
-
101
- @media (prefers-reduced-motion: no-preference) {
102
- @supports (animation-timeline: scroll()) {
103
- .${ELEMENT_EXPAND_IMAGE_SIZE} {
104
- width: ${token.spacing.maxWidth.smallest};
105
- height: 70vh;
106
- animation: img-size ease-in-out forwards;
107
- animation-timeline: view();
108
- animation-range-start: cover;
109
- animation-range-end: 200vh;
110
- }
111
- }
112
- }
113
-
114
- @supports not (animation-timeline: scroll()) {
115
- .${ELEMENT_EXPAND_IMAGE_SIZE} {
116
- height: 100%;
117
- }
118
- }
119
-
120
- @media (prefers-reduced-motion: reduce) {
121
- .${ELEMENT_EXPAND_IMAGE_SIZE} {
122
- height: 100%;
123
- }
124
- }
125
15
  `;
126
- const ImagePosition = `
127
- .${ELEMENT_EXPAND_IMAGE_POSITION} {
128
- width: 100%;
129
- margin: 0 auto;
130
- }
131
-
132
- @media (prefers-reduced-motion: no-preference) {
133
- @supports (animation-timeline: scroll()) {
134
- .${ELEMENT_EXPAND_IMAGE_POSITION} {
135
- display: flex;
136
- justify-content: center;
137
- position: sticky;
138
- top: 0;
139
- animation: img-position ease-in-out forwards;
140
- animation-timeline: view();
141
- animation-range-start: cover;
142
- animation-range-end: 200vh;
143
- }
144
- }
145
- }
146
-
147
- @supports not (animation-timeline: scroll()) {
148
- .${ELEMENT_EXPAND_IMAGE_POSITION} {
149
- height: 100%;
150
- }
151
- }
152
-
153
- @media (prefers-reduced-motion: reduce) {
154
- .${ELEMENT_EXPAND_IMAGE_POSITION} {
155
- height: 100%;
16
+ const CreateImageContainer = ({ image }) => {
17
+ const imageOverlay = new ElementBuilder().withClassName("layout-image-expand-image-overlay").withStyles({
18
+ element: {
19
+ position: "absolute",
20
+ top: 0,
21
+ left: 0,
22
+ height: "100%",
23
+ width: "100%",
24
+ background: "rgba(0,0,0,0.65)",
25
+ opacity: 1,
26
+ ...withViewTimelineAnimation({
27
+ animation: "img-overlay forwards",
28
+ animationTimeline: "view()",
29
+ animationRangeStart: "70vh",
30
+ animationRangeEnd: "100vh"
31
+ })
156
32
  }
157
- }
158
- `;
159
- const ImageContainer = `
160
- .${ELEMENT_EXPAND_IMAGE_CONTAINER} {
161
- position: absolute;
162
- top: 0;
163
- left: 0;
164
- width: 100%;
165
- height: 100%;
166
- }
167
-
168
- @media (prefers-reduced-motion: no-preference) {
169
- @supports (animation-timeline: scroll()) {
170
- .${ELEMENT_EXPAND_IMAGE_CONTAINER} {
171
- position: relative;
33
+ }).build();
34
+ const imageSize = new ElementBuilder().withClassName("layout-image-expand-image-size").withStyles({
35
+ element: {
36
+ overflow: "hidden",
37
+ position: "relative",
38
+ ...withViewTimelineAnimation({
39
+ width: token.spacing.maxWidth.smallest,
40
+ height: "70vh",
41
+ animation: "img-size ease-in-out forwards",
42
+ animationTimeline: "view()",
43
+ animationRangeStart: "cover",
44
+ animationRangeEnd: "200vh"
45
+ }),
46
+ "@supports not (animation-timeline: scroll())": {
47
+ height: "100%"
48
+ },
49
+ "@media (prefers-reduced-motion: reduce)": {
50
+ height: "100%"
51
+ },
52
+ "& img": {
53
+ display: "block",
54
+ width: "100%",
55
+ height: "100%",
56
+ objectFit: "cover"
172
57
  }
173
58
  }
174
- }
175
- `;
176
- const Container = `
177
- .${ELEMENT_EXPAND_CONTAINER} {
178
- height: 100%;
179
- width: 100%;
180
- position: relative;
181
- }
182
- `;
183
- const STYLES_LAYOUT_IMAGE_EXPAND = `
184
- .${ELEMENT_EXPLAND_DECLARATION} {
185
- container: ${ELEMENT_NAME} / inline-size;
186
- overflow: clip;
187
- }
188
-
189
- @media (prefers-reduced-motion: no-preference) {
190
- @supports (animation-timeline: scroll()) {
191
- .${ELEMENT_EXPLAND_DECLARATION} {
192
- height: 180vh;
59
+ }).withChildren(image, imageOverlay).build();
60
+ const imagePosition = new ElementBuilder().withClassName("layout-image-expand-image-position").withStyles({
61
+ element: {
62
+ width: "100%",
63
+ margin: "0 auto",
64
+ ...withViewTimelineAnimation({
65
+ display: "flex",
66
+ justifyContent: "center",
67
+ position: "sticky",
68
+ top: 0,
69
+ animation: "img-position ease-in-out forwards",
70
+ animationTimeline: "view()",
71
+ animationRangeStart: "cover",
72
+ animationRangeEnd: "200vh"
73
+ }),
74
+ "@supports not (animation-timeline: scroll())": {
75
+ height: "100%"
76
+ },
77
+ "@media (prefers-reduced-motion: reduce)": {
78
+ height: "100%"
193
79
  }
194
80
  }
195
- }
196
-
197
- @media (${token.media.queries.tablet.min}) {
198
- @media (prefers-reduced-motion: no-preference) {
199
- @supports (animation-timeline: scroll()) {
200
- .${ELEMENT_EXPLAND_DECLARATION} {
201
- height: 200vh;
202
- }
203
- }
81
+ }).withChild(imageSize).build();
82
+ return new ElementBuilder().withClassName("layout-image-expand-image-container").withStyles({
83
+ element: {
84
+ position: "absolute",
85
+ top: 0,
86
+ left: 0,
87
+ width: "100%",
88
+ height: "100%",
89
+ ...withViewTimelineAnimation({
90
+ position: "relative"
91
+ })
204
92
  }
205
- }
206
-
207
- .${ELEMENT_EXPLAND_DECLARATION} img {
208
- display: block;
209
- width: 100%;
210
- height: 100%;
211
- object-fit: cover;
212
- }
213
-
214
- ${Container}
215
- ${ImageContainer}
216
- ${ImageSizeContainer}
217
- ${ImagePosition}
218
- ${ImageOverlayContainer}
219
- ${TextAnimation}
220
- ${TextContainer}
221
- ${TextLock}
222
- `;
223
- const CreateImageContainer = ({ image }) => {
224
- const imageContainer = document.createElement("div");
225
- const imagePosition = document.createElement("div");
226
- const imageSize = document.createElement("div");
227
- const imageOverlay = document.createElement("div");
228
- imageOverlay.classList.add(ELEMENT_EXPAND_IMAGE_OVERLAY);
229
- imageSize.classList.add(ELEMENT_EXPAND_IMAGE_SIZE);
230
- imageSize.appendChild(image);
231
- imageSize.appendChild(imageOverlay);
232
- imagePosition.classList.add(ELEMENT_EXPAND_IMAGE_POSITION);
233
- imagePosition.appendChild(imageSize);
234
- imageContainer.appendChild(imagePosition);
235
- imageContainer.classList.add(ELEMENT_EXPAND_IMAGE_CONTAINER);
236
- return imageContainer;
93
+ }).withChild(imagePosition).build();
237
94
  };
238
95
  const CreateTextContainer = ({ content }) => {
239
- const textAnimation = document.createElement("div");
240
- const textContainer = document.createElement("div");
241
- const textLock = document.createElement("div");
242
- textLock.classList.add(ELEMENT_EXPAND_TEXT_LOCK);
243
- textLock.appendChild(content);
244
- textContainer.appendChild(textLock);
245
- textContainer.classList.add(ELEMENT_EXPAND_TEXT_CONTAINER);
246
- textAnimation.classList.add(ELEMENT_EXPAND_TEXT_ANIMATION);
247
- textAnimation.appendChild(textContainer);
248
- return textAnimation;
96
+ const textLock = new ElementBuilder().withClassName("layout-image-expand-text-lock").withStyles({
97
+ element: {
98
+ ...layout.space.horizontal.larger,
99
+ display: "flex",
100
+ height: "100%"
101
+ }
102
+ }).withChild(content).build();
103
+ const textContainer = new ElementBuilder().withClassName("layout-image-expand-text-container").withStyles({
104
+ element: {
105
+ position: "relative",
106
+ paddingTop: token.spacing.max,
107
+ paddingBottom: token.spacing.max,
108
+ height: "100%",
109
+ zIndex: 9999
110
+ }
111
+ }).withChild(textLock).build();
112
+ return new ElementBuilder().withClassName("layout-image-expand-text-animation").withStyles({
113
+ element: {
114
+ width: "100vw",
115
+ ...withViewTimelineAnimation({
116
+ position: "absolute",
117
+ top: 0,
118
+ height: "80vh",
119
+ transform: "translateY(80vh)"
120
+ }),
121
+ [`@media (${token.media.queries.tablet.min})`]: {
122
+ ...withViewTimelineAnimation({
123
+ transform: "translateY(100vh)"
124
+ })
125
+ }
126
+ }
127
+ }).withChild(textContainer).build();
249
128
  };
250
129
  const CreateImageExpandElement = (props) => {
251
- const declaration = document.createElement("div");
252
- const container = document.createElement("div");
253
- const imageContainer = CreateImageContainer(props);
254
- const textContainer = CreateTextContainer(props);
130
+ const imageContainerModel = CreateImageContainer(props);
131
+ const textContainerModel = CreateTextContainer(props);
132
+ let containerElement;
255
133
  const sizeImageForText = () => {
256
- const textContainerHeight = textContainer.clientHeight + parsePixelValue(spacing["2xl"]) * 2;
257
- const imageContainerHeight = container.clientHeight;
134
+ const textContainerHeight = textContainerModel.element.clientHeight + parsePixelValue(token.spacing["2xl"]) * 2;
135
+ const imageContainerHeight = containerElement.clientHeight;
258
136
  if (textContainerHeight > imageContainerHeight) {
259
- container.style.minHeight = `${textContainerHeight}px`;
137
+ containerElement.style.minHeight = `${textContainerHeight}px`;
260
138
  }
261
139
  };
140
+ const containerModel = new ElementBuilder().withClassName("layout-image-expand-container").withStyles({
141
+ element: {
142
+ height: "100%",
143
+ width: "100%",
144
+ position: "relative"
145
+ }
146
+ }).ref((element) => {
147
+ containerElement = element;
148
+ }).withChildren(imageContainerModel, textContainerModel).build();
149
+ const declarationModel = new ElementBuilder().withClassName("layout-image-expand-declaration").withStyles({
150
+ element: {
151
+ containerType: "inline-size",
152
+ overflow: "clip",
153
+ ...withViewTimelineAnimation({ height: "180vh" }),
154
+ [`@media (${token.media.queries.tablet.min})`]: {
155
+ ...withViewTimelineAnimation({ height: "200vh" })
156
+ }
157
+ }
158
+ }).withChild(containerModel).build();
159
+ declarationModel.styles += KEYFRAMES;
262
160
  if (isScreenZoomed() && !isPreferredReducedMotion()) {
263
- textContainer.style.height = "90vh";
264
- textContainer.style.transform = "translateY(0)";
161
+ textContainerModel.element.style.height = "90vh";
162
+ textContainerModel.element.style.transform = "translateY(0)";
265
163
  }
266
164
  if (!CSS.supports("animation-timeline", "view()")) {
267
165
  setTimeout(() => {
@@ -269,12 +167,7 @@ const CreateImageExpandElement = (props) => {
269
167
  }, 1e3);
270
168
  window.addEventListener("resize", () => sizeImageForText());
271
169
  }
272
- container.appendChild(imageContainer);
273
- container.appendChild(textContainer);
274
- container.classList.add(ELEMENT_EXPAND_CONTAINER);
275
- declaration.appendChild(container);
276
- declaration.classList.add(ELEMENT_EXPLAND_DECLARATION);
277
- return { element: declaration, styles: STYLES_LAYOUT_IMAGE_EXPAND };
170
+ return declarationModel;
278
171
  };
279
172
  const createCompositeLayoutImageExpand = CreateImageExpandElement;
280
173
  export {