@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 +1 @@
1
- {"version":3,"file":"expand.js","sources":["../../../../source/composite/layout/image/expand.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport * as layout from '@universityofmaryland/web-styles-library/layout';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\nimport { parsePixelValue } from '@universityofmaryland/web-utilities-library/styles';\nimport {\n isScreenZoomed,\n isPreferredReducedMotion,\n} from '@universityofmaryland/web-utilities-library/accessibility';\n\ntype TypeLayoutImageExpandProps = {\n content: HTMLElement;\n image: HTMLImageElement;\n};\n\nconst { spacing } = token;\n\nconst ELEMENT_NAME = 'umd-layout-image-expand';\nconst ELEMENT_EXPLAND_DECLARATION = 'layout-image-expand-declaration';\nconst ELEMENT_EXPAND_CONTAINER = 'layout-image-expand-container';\n\nconst ELEMENT_EXPAND_IMAGE_CONTAINER = 'layout-image-expand-image-container';\nconst ELEMENT_EXPAND_IMAGE_POSITION = 'layout-image-expand-image-position';\nconst ELEMENT_EXPAND_IMAGE_SIZE = 'layout-image-expand-image-size';\nconst ELEMENT_EXPAND_IMAGE_OVERLAY = 'layout-image-expand-image-overlay';\n\nconst ELEMENT_EXPAND_TEXT_CONTAINER = 'layout-image-expand-text-container';\nconst ELEMENT_EXPAND_TEXT_LOCK = 'layout-image-expand-text-lock';\nconst ELEMENT_EXPAND_TEXT_ANIMATION = 'layout-image-expand-text-animation';\n\n// prettier-ignore\nconst TextLock = `\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_EXPAND_TEXT_LOCK}`]: layout.space.horizontal.larger,\n },\n })}\n\n .${ELEMENT_EXPAND_TEXT_LOCK} {\n display: flex;\n height: 100%;\n }\n`;\n\n// prettier-ignore\nconst TextContainer = `\n .${ELEMENT_EXPAND_TEXT_CONTAINER} {\n position: relative;\n padding-top: ${token.spacing.max};\n padding-bottom: ${token.spacing.max};\n height: 100%;\n z-index: 9999;\n }\n`;\n\n// prettier-ignore\nconst TextAnimation = `\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n width: 100vw;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n position: absolute;\n top: 0;\n height: 80vh;\n transform: translateY(80vh);\n }\n }\n }\n\n @media (${token.media.queries.tablet.min}) {\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_TEXT_ANIMATION} {\n transform: translateY(100vh);\n }\n }\n }\n }\n`;\n\n// prettier-ignore\nconst ImageOverlayContainer = `\n @keyframes img-overlay {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n .${ELEMENT_EXPAND_IMAGE_OVERLAY} {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n background: rgba(0,0,0,0.65);\n opacity: 1;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_OVERLAY} {\n opacity: 1;\n animation: img-overlay forwards;\n animation-timeline: view();\n animation-range-start: 70vh;\n animation-range-end: 100vh;\n }\n }\n }\n`;\n\n// prettier-ignore\nconst ImageSizeContainer = `\n @keyframes img-size {\n to { width: 100%; height: 100vh; }\n }\n\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n overflow: hidden;\n position: relative;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n width: ${token.spacing.maxWidth.smallest};\n height: 70vh;\n animation: img-size ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: 200vh;\n }\n }\n }\n\n @supports not (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n height: 100%;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .${ELEMENT_EXPAND_IMAGE_SIZE} {\n height: 100%;\n }\n }\n`;\n\n// prettier-ignore\nconst ImagePosition = `\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n width: 100%;\n margin: 0 auto;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n display: flex;\n justify-content: center;\n position: sticky;\n top: 0; \n animation: img-position ease-in-out forwards;\n animation-timeline: view();\n animation-range-start: cover;\n animation-range-end: 200vh;\n }\n }\n }\n\n @supports not (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n height: 100%;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .${ELEMENT_EXPAND_IMAGE_POSITION} {\n height: 100%;\n }\n }\n`;\n\n// prettier-ignore\nconst ImageContainer = `\n .${ELEMENT_EXPAND_IMAGE_CONTAINER} {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPAND_IMAGE_CONTAINER} {\n position: relative;\n }\n }\n }\n`;\n\n// prettier-ignore\nconst Container = `\n .${ELEMENT_EXPAND_CONTAINER} {\n height: 100%;\n width: 100%;\n position: relative;\n }\n`;\n\n// prettier-ignore\nconst STYLES_LAYOUT_IMAGE_EXPAND = `\n .${ELEMENT_EXPLAND_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n overflow: clip;\n }\n\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPLAND_DECLARATION} {\n height: 180vh;\n }\n }\n }\n\n @media (${token.media.queries.tablet.min}) {\n @media (prefers-reduced-motion: no-preference) {\n @supports (animation-timeline: scroll()) {\n .${ELEMENT_EXPLAND_DECLARATION} {\n height: 200vh;\n }\n }\n }\n }\n\n .${ELEMENT_EXPLAND_DECLARATION} img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n ${Container}\n ${ImageContainer}\n ${ImageSizeContainer}\n ${ImagePosition}\n ${ImageOverlayContainer}\n ${TextAnimation}\n ${TextContainer}\n ${TextLock}\n`;\n\nconst CreateImageContainer = ({ image }: TypeLayoutImageExpandProps) => {\n const imageContainer = document.createElement('div');\n const imagePosition = document.createElement('div');\n const imageSize = document.createElement('div');\n const imageOverlay = document.createElement('div');\n\n imageOverlay.classList.add(ELEMENT_EXPAND_IMAGE_OVERLAY);\n\n imageSize.classList.add(ELEMENT_EXPAND_IMAGE_SIZE);\n imageSize.appendChild(image);\n imageSize.appendChild(imageOverlay);\n\n imagePosition.classList.add(ELEMENT_EXPAND_IMAGE_POSITION);\n imagePosition.appendChild(imageSize);\n\n imageContainer.appendChild(imagePosition);\n imageContainer.classList.add(ELEMENT_EXPAND_IMAGE_CONTAINER);\n\n return imageContainer;\n};\n\nconst CreateTextContainer = ({ content }: TypeLayoutImageExpandProps) => {\n const textAnimation = document.createElement('div');\n const textContainer = document.createElement('div');\n const textLock = document.createElement('div');\n\n textLock.classList.add(ELEMENT_EXPAND_TEXT_LOCK);\n textLock.appendChild(content);\n\n textContainer.appendChild(textLock);\n textContainer.classList.add(ELEMENT_EXPAND_TEXT_CONTAINER);\n\n textAnimation.classList.add(ELEMENT_EXPAND_TEXT_ANIMATION);\n textAnimation.appendChild(textContainer);\n\n return textAnimation;\n};\n\nconst CreateImageExpandElement = (props: TypeLayoutImageExpandProps) => {\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const imageContainer = CreateImageContainer(props);\n const textContainer = CreateTextContainer(props);\n const sizeImageForText = () => {\n const textContainerHeight =\n textContainer.clientHeight +\n parsePixelValue(spacing['2xl']) * 2;\n const imageContainerHeight = container.clientHeight;\n\n if (textContainerHeight > imageContainerHeight) {\n container.style.minHeight = `${textContainerHeight}px`;\n }\n };\n\n if (isScreenZoomed() && !isPreferredReducedMotion()) {\n textContainer.style.height = '90vh';\n textContainer.style.transform = 'translateY(0)';\n }\n\n if (!CSS.supports('animation-timeline', 'view()')) {\n setTimeout(() => {\n sizeImageForText();\n }, 1000);\n window.addEventListener('resize', () => sizeImageForText());\n }\n\n container.appendChild(imageContainer);\n container.appendChild(textContainer);\n container.classList.add(ELEMENT_EXPAND_CONTAINER);\n\n declaration.appendChild(container);\n declaration.classList.add(ELEMENT_EXPLAND_DECLARATION);\n\n return { element: declaration, styles: STYLES_LAYOUT_IMAGE_EXPAND };\n};\n\nexport const createCompositeLayoutImageExpand = CreateImageExpandElement;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"expand.js","sources":["../../../../source/composite/layout/image/expand.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport * as layout from '@universityofmaryland/web-styles-library/layout';\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport {\n parsePixelValue,\n withViewTimelineAnimation,\n} from '@universityofmaryland/web-utilities-library/styles';\nimport {\n isScreenZoomed,\n isPreferredReducedMotion,\n} from '@universityofmaryland/web-utilities-library/accessibility';\n\ntype TypeLayoutImageExpandProps = {\n content: HTMLElement;\n image: HTMLImageElement;\n};\n\nconst KEYFRAMES = `\n @keyframes img-overlay {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n @keyframes img-size {\n to { width: 100%; height: 100vh; }\n }\n`;\n\nconst CreateImageContainer = ({ image }: TypeLayoutImageExpandProps) => {\n const imageOverlay = new ElementBuilder()\n .withClassName('layout-image-expand-image-overlay')\n .withStyles({\n element: {\n position: 'absolute',\n top: 0,\n left: 0,\n height: '100%',\n width: '100%',\n background: 'rgba(0,0,0,0.65)',\n opacity: 1,\n ...withViewTimelineAnimation({\n animation: 'img-overlay forwards',\n animationTimeline: 'view()',\n animationRangeStart: '70vh',\n animationRangeEnd: '100vh',\n }),\n },\n })\n .build();\n\n const imageSize = new ElementBuilder()\n .withClassName('layout-image-expand-image-size')\n .withStyles({\n element: {\n overflow: 'hidden',\n position: 'relative',\n ...withViewTimelineAnimation({\n width: token.spacing.maxWidth.smallest,\n height: '70vh',\n animation: 'img-size ease-in-out forwards',\n animationTimeline: 'view()',\n animationRangeStart: 'cover',\n animationRangeEnd: '200vh',\n }),\n '@supports not (animation-timeline: scroll())': {\n height: '100%',\n },\n '@media (prefers-reduced-motion: reduce)': {\n height: '100%',\n },\n '& img': {\n display: 'block',\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n },\n },\n })\n .withChildren(image, imageOverlay)\n .build();\n\n const imagePosition = new ElementBuilder()\n .withClassName('layout-image-expand-image-position')\n .withStyles({\n element: {\n width: '100%',\n margin: '0 auto',\n ...withViewTimelineAnimation({\n display: 'flex',\n justifyContent: 'center',\n position: 'sticky',\n top: 0,\n animation: 'img-position ease-in-out forwards',\n animationTimeline: 'view()',\n animationRangeStart: 'cover',\n animationRangeEnd: '200vh',\n }),\n '@supports not (animation-timeline: scroll())': {\n height: '100%',\n },\n '@media (prefers-reduced-motion: reduce)': {\n height: '100%',\n },\n },\n })\n .withChild(imageSize)\n .build();\n\n return new ElementBuilder()\n .withClassName('layout-image-expand-image-container')\n .withStyles({\n element: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n ...withViewTimelineAnimation({\n position: 'relative',\n }),\n },\n })\n .withChild(imagePosition)\n .build();\n};\n\nconst CreateTextContainer = ({ content }: TypeLayoutImageExpandProps) => {\n const textLock = new ElementBuilder()\n .withClassName('layout-image-expand-text-lock')\n .withStyles({\n element: {\n ...layout.space.horizontal.larger,\n display: 'flex',\n height: '100%',\n },\n })\n .withChild(content)\n .build();\n\n const textContainer = new ElementBuilder()\n .withClassName('layout-image-expand-text-container')\n .withStyles({\n element: {\n position: 'relative',\n paddingTop: token.spacing.max,\n paddingBottom: token.spacing.max,\n height: '100%',\n zIndex: 9999,\n },\n })\n .withChild(textLock)\n .build();\n\n return new ElementBuilder()\n .withClassName('layout-image-expand-text-animation')\n .withStyles({\n element: {\n width: '100vw',\n ...withViewTimelineAnimation({\n position: 'absolute',\n top: 0,\n height: '80vh',\n transform: 'translateY(80vh)',\n }),\n [`@media (${token.media.queries.tablet.min})`]: {\n ...withViewTimelineAnimation({\n transform: 'translateY(100vh)',\n }),\n },\n },\n })\n .withChild(textContainer)\n .build();\n};\n\nconst CreateImageExpandElement = (props: TypeLayoutImageExpandProps) => {\n const imageContainerModel = CreateImageContainer(props);\n const textContainerModel = CreateTextContainer(props);\n let containerElement!: HTMLElement;\n\n const sizeImageForText = () => {\n const textContainerHeight =\n textContainerModel.element.clientHeight +\n parsePixelValue(token.spacing['2xl']) * 2;\n const imageContainerHeight = containerElement.clientHeight;\n\n if (textContainerHeight > imageContainerHeight) {\n containerElement.style.minHeight = `${textContainerHeight}px`;\n }\n };\n\n const containerModel = new ElementBuilder()\n .withClassName('layout-image-expand-container')\n .withStyles({\n element: {\n height: '100%',\n width: '100%',\n position: 'relative',\n },\n })\n .ref((element) => {\n containerElement = element;\n })\n .withChildren(imageContainerModel, textContainerModel)\n .build();\n\n const declarationModel = new ElementBuilder()\n .withClassName('layout-image-expand-declaration')\n .withStyles({\n element: {\n containerType: 'inline-size',\n overflow: 'clip',\n ...withViewTimelineAnimation({ height: '180vh' }),\n [`@media (${token.media.queries.tablet.min})`]: {\n ...withViewTimelineAnimation({ height: '200vh' }),\n },\n },\n })\n .withChild(containerModel)\n .build();\n\n declarationModel.styles += KEYFRAMES;\n\n if (isScreenZoomed() && !isPreferredReducedMotion()) {\n textContainerModel.element.style.height = '90vh';\n textContainerModel.element.style.transform = 'translateY(0)';\n }\n\n if (!CSS.supports('animation-timeline', 'view()')) {\n setTimeout(() => {\n sizeImageForText();\n }, 1000);\n window.addEventListener('resize', () => sizeImageForText());\n }\n\n return declarationModel;\n};\n\nexport const createCompositeLayoutImageExpand = CreateImageExpandElement;\n"],"names":[],"mappings":"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"}
@@ -1,12 +1,6 @@
1
1
  type TypeScrollTopProps = {
2
2
  isFixed?: boolean;
3
3
  };
4
- export declare const createCompositeLayoutScrollTop: (props: TypeScrollTopProps) => {
5
- element: HTMLDivElement;
6
- styles: string;
7
- events: {
8
- load: () => void;
9
- };
10
- };
4
+ export declare const createCompositeLayoutScrollTop: (props: TypeScrollTopProps) => import('../../../../builder/dist/index.d.ts').ElementModel<HTMLElement>;
11
5
  export {};
12
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../source/composite/layout/scroll-top/index.ts"],"names":[],"mappings":"AAIA,KAAK,kBAAkB,GAAG;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AA8IF,eAAO,MAAM,8BAA8B,UAxGJ,kBAAkB;;;;;;CAwGW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../source/composite/layout/scroll-top/index.ts"],"names":[],"mappings":"AAKA,KAAK,kBAAkB,GAAG;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAqIF,eAAO,MAAM,8BAA8B,UAnIJ,kBAAkB,kFAmIW,CAAC"}
@@ -1,52 +1,60 @@
1
1
  import * as token from "@universityofmaryland/web-token-library";
2
+ import { ElementBuilder } from "@universityofmaryland/web-builder-library";
2
3
  import { debounce } from "@universityofmaryland/web-utilities-library/performance";
3
4
  import { arrow_up } from "@universityofmaryland/web-icons-library/arrows";
4
- const ELEMENT_NAME = "umd-element-scroll-top";
5
- const ELEMENT_SCROLL_TOP_DECLARATION = "scroll-top-declarion";
6
- const ELEMENT_SCROLL_TOP_CONTAINER = "scroll-top-container";
7
- const STYLES_SCROLL_TOP_ELEMENT = `
8
- .${ELEMENT_SCROLL_TOP_DECLARATION} {
9
- container: ${ELEMENT_NAME} / inline-size;
10
- }
11
-
12
- .${ELEMENT_SCROLL_TOP_CONTAINER} {
13
- background-color: ${token.color.black};
14
- width: 100%;
15
- height: 100%;
16
- min-height: 40px;
17
- display: flex;
18
- justify-content: center;
19
- align-items: center;
20
- border: 1px solid ${token.color.gold};
21
- cursor: pointer;
22
- transition: transform 250ms ease-in-out;
23
- }
24
-
25
- .${ELEMENT_SCROLL_TOP_CONTAINER} svg {
26
- display: block;
27
- width: 14px;
28
- height: 14px;
29
- }
30
- `;
31
5
  const CreateScrollTopElement = (props) => (() => {
6
+ const DEFAULT_STARTING_POSITION = `translateX(100vh)`;
32
7
  const { isFixed = false } = props;
33
- const declaration = document.createElement("div");
34
- const container = document.createElement("button");
35
- const text = document.createElement("span");
36
- const defaultStartingPosition = `translateX(100vh)`;
37
- const getSpacing = () => window.innerWidth > 768 ? 40 : 8;
38
8
  let startingPosition = null;
39
9
  let isShowing = false;
10
+ const textBuilder = new ElementBuilder("span").withClassName("sr-only").withHTML("Scroll To Top");
11
+ const containerBuilder = new ElementBuilder("button").withClassName("scroll-top-container").withHTML(arrow_up).withChild(textBuilder).withStyles({
12
+ element: {
13
+ backgroundColor: token.color.black,
14
+ width: "100%",
15
+ height: "100%",
16
+ minHeight: "40px",
17
+ display: "flex",
18
+ justifyContent: "center",
19
+ alignItems: "center",
20
+ border: `1px solid ${token.color.gold}`,
21
+ cursor: "pointer",
22
+ transition: "transform 250ms ease-in-out",
23
+ "& svg": {
24
+ display: "block",
25
+ width: "14px",
26
+ height: "14px"
27
+ }
28
+ }
29
+ }).on("click", () => {
30
+ window.scrollTo({ top: 0, left: 0, behavior: "smooth" });
31
+ });
32
+ const declarationBuilder = new ElementBuilder().withClassName("scroll-top-declarion").withChild(containerBuilder).withStyles({
33
+ element: {
34
+ container: "umd-element-scroll-top / inline-size",
35
+ width: "100%",
36
+ height: "100%",
37
+ ...isFixed && {
38
+ width: "40px",
39
+ height: "40px",
40
+ position: "absolute",
41
+ inset: "0",
42
+ margin: "auto"
43
+ }
44
+ }
45
+ });
46
+ const container = containerBuilder.getElement();
47
+ const declaration = declarationBuilder.getElement();
40
48
  const eventResize = () => {
41
49
  startingPosition = declaration.getBoundingClientRect().right;
50
+ if (isFixed && !isShowing) {
51
+ setHiddenPosition();
52
+ }
42
53
  };
43
54
  const eventScroll = () => {
44
- const windowHeight = window.innerHeight;
45
55
  const pagePosition = window.scrollY;
46
- const isPastFirstView = pagePosition > windowHeight;
47
- const isNearBottom = pagePosition + windowHeight >= document.body.scrollHeight - windowHeight;
48
- const showWindow = isPastFirstView && !isNearBottom;
49
- if (showWindow) {
56
+ const isPastFirstView = pagePosition > 0;
57
+ if (isPastFirstView) {
50
58
  setVisiblePosition();
51
59
  } else {
52
60
  setHiddenPosition();
@@ -59,58 +67,38 @@ const CreateScrollTopElement = (props) => (() => {
59
67
  }
60
68
  };
61
69
  const setHiddenPosition = () => {
62
- if (isShowing) {
63
- isShowing = false;
64
- if (startingPosition) {
65
- const spacing = getSpacing();
66
- const translateAmount = window.innerWidth - startingPosition;
67
- const position = translateAmount + spacing + container.offsetWidth;
68
- container.style.transform = `translateX(${position}px)`;
69
- } else {
70
- container.style.transform = defaultStartingPosition;
70
+ const getSpacing = () => {
71
+ if (window.innerWidth > 768) {
72
+ return 40;
71
73
  }
74
+ return 8;
75
+ };
76
+ isShowing = false;
77
+ if (startingPosition) {
78
+ const spacing = getSpacing();
79
+ const translateAmount = window.innerWidth - startingPosition;
80
+ const position = translateAmount + spacing + container.offsetWidth;
81
+ container.style.transform = `translateX(${position}px)`;
82
+ } else {
83
+ container.style.transform = DEFAULT_STARTING_POSITION;
72
84
  }
73
85
  };
74
86
  const load = () => {
75
87
  startingPosition = declaration.getBoundingClientRect().right;
76
88
  container.style.transition = "none";
77
- setHiddenPosition();
89
+ if (isFixed) {
90
+ eventScroll();
91
+ }
78
92
  setTimeout(() => {
79
93
  container.style.transition = "transform 250ms ease-in-out";
80
94
  }, 100);
81
95
  };
82
- text.classList.add("sr-only");
83
- text.innerHTML = "Scroll To Top";
84
- container.classList.add(ELEMENT_SCROLL_TOP_CONTAINER);
85
- container.addEventListener("click", () => {
86
- window.scrollTo({
87
- top: 0,
88
- left: 0,
89
- behavior: "smooth"
90
- });
91
- });
92
- container.innerHTML = arrow_up;
93
- container.appendChild(text);
94
- declaration.appendChild(container);
95
- declaration.classList.add(ELEMENT_SCROLL_TOP_DECLARATION);
96
96
  if (isFixed) {
97
- container.style.transform = defaultStartingPosition;
98
- window.addEventListener(
99
- "scroll",
100
- debounce(() => eventScroll(), 10)
101
- );
102
- window.addEventListener(
103
- "resize",
104
- debounce(() => eventResize(), 20)
105
- );
97
+ container.style.transform = DEFAULT_STARTING_POSITION;
98
+ window.addEventListener("scroll", debounce(eventScroll, 10));
99
+ window.addEventListener("resize", debounce(eventResize, 20));
106
100
  }
107
- return {
108
- element: declaration,
109
- styles: STYLES_SCROLL_TOP_ELEMENT,
110
- events: {
111
- load
112
- }
113
- };
101
+ return declarationBuilder.withEvents({ load }).build();
114
102
  })();
115
103
  const createCompositeLayoutScrollTop = CreateScrollTopElement;
116
104
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../source/composite/layout/scroll-top/index.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport { debounce } from '@universityofmaryland/web-utilities-library/performance';\nimport { arrow_up as iconArrowUp } from '@universityofmaryland/web-icons-library/arrows';\n\ntype TypeScrollTopProps = {\n isFixed?: boolean;\n};\n\nconst ELEMENT_NAME = 'umd-element-scroll-top';\nconst ELEMENT_SCROLL_TOP_DECLARATION = 'scroll-top-declarion';\nconst ELEMENT_SCROLL_TOP_CONTAINER = 'scroll-top-container';\n\n// prettier-ignore\nconst STYLES_SCROLL_TOP_ELEMENT = `\n .${ELEMENT_SCROLL_TOP_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n }\n\n .${ELEMENT_SCROLL_TOP_CONTAINER} {\n background-color: ${token.color.black};\n width: 100%;\n height: 100%;\n min-height: 40px;\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1px solid ${token.color.gold};\n cursor: pointer;\n transition: transform 250ms ease-in-out;\n }\n\n .${ELEMENT_SCROLL_TOP_CONTAINER} svg {\n display: block;\n width: 14px;\n height: 14px;\n }\n`;\n\n// @media (${token.media.queries.medium.max}) {\n// .${ELEMENT_SCROLL_TOP_CONTAINER} {\n// display: none;\n// }\n// }\n\nconst CreateScrollTopElement = (props: TypeScrollTopProps) =>\n (() => {\n const { isFixed = false } = props;\n const declaration = document.createElement('div');\n const container = document.createElement('button');\n const text = document.createElement('span');\n const defaultStartingPosition = `translateX(100vh)`;\n const getSpacing = () => (window.innerWidth > 768 ? 40 : 8);\n let startingPosition: null | number = null;\n let isShowing = false;\n\n const eventResize = () => {\n startingPosition = declaration.getBoundingClientRect().right;\n };\n\n const eventScroll = () => {\n const windowHeight = window.innerHeight;\n const pagePosition = window.scrollY;\n const isPastFirstView = pagePosition > windowHeight;\n const isNearBottom =\n pagePosition + windowHeight >=\n document.body.scrollHeight - windowHeight;\n const showWindow = isPastFirstView && !isNearBottom;\n\n if (showWindow) {\n setVisiblePosition();\n } else {\n setHiddenPosition();\n }\n };\n\n const setVisiblePosition = () => {\n if (!isShowing) {\n container.style.transform = 'translateX(0)';\n isShowing = true;\n }\n };\n\n const setHiddenPosition = () => {\n if (isShowing) {\n isShowing = false;\n\n if (startingPosition) {\n const spacing = getSpacing();\n const translateAmount = window.innerWidth - startingPosition;\n const position = translateAmount + spacing + container.offsetWidth;\n\n container.style.transform = `translateX(${position}px)`;\n } else {\n container.style.transform = defaultStartingPosition;\n }\n }\n };\n\n const load = () => {\n startingPosition = declaration.getBoundingClientRect().right;\n container.style.transition = 'none';\n setHiddenPosition();\n\n setTimeout(() => {\n container.style.transition = 'transform 250ms ease-in-out';\n }, 100);\n };\n\n text.classList.add('sr-only');\n text.innerHTML = 'Scroll To Top';\n\n container.classList.add(ELEMENT_SCROLL_TOP_CONTAINER);\n container.addEventListener('click', () => {\n window.scrollTo({\n top: 0,\n left: 0,\n behavior: 'smooth',\n });\n });\n container.innerHTML = iconArrowUp;\n container.appendChild(text);\n\n declaration.appendChild(container);\n declaration.classList.add(ELEMENT_SCROLL_TOP_DECLARATION);\n\n if (isFixed) {\n container.style.transform = defaultStartingPosition;\n\n window.addEventListener(\n 'scroll',\n debounce(() => eventScroll(), 10),\n );\n\n window.addEventListener(\n 'resize',\n debounce(() => eventResize(), 20),\n );\n }\n\n return {\n element: declaration,\n styles: STYLES_SCROLL_TOP_ELEMENT,\n events: {\n load,\n },\n };\n })();\n\nexport const createCompositeLayoutScrollTop = CreateScrollTopElement;\n"],"names":["iconArrowUp"],"mappings":";;;AAQA,MAAM,eAAe;AACrB,MAAM,iCAAiC;AACvC,MAAM,+BAA+B;AAGrC,MAAM,4BAA4B;AAAA,KAC7B,8BAA8B;AAAA,iBAClB,YAAY;AAAA;AAAA;AAAA,KAGxB,4BAA4B;AAAA,wBACT,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOjB,MAAM,MAAM,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,KAKnC,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAajC,MAAM,yBAAyB,CAAC,WAC7B,MAAM;AACL,QAAM,EAAE,UAAU,MAAA,IAAU;AAC5B,QAAM,cAAc,SAAS,cAAc,KAAK;AAChD,QAAM,YAAY,SAAS,cAAc,QAAQ;AACjD,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,QAAM,0BAA0B;AAChC,QAAM,aAAa,MAAO,OAAO,aAAa,MAAM,KAAK;AACzD,MAAI,mBAAkC;AACtC,MAAI,YAAY;AAEhB,QAAM,cAAc,MAAM;AACxB,uBAAmB,YAAY,wBAAwB;AAAA,EACzD;AAEA,QAAM,cAAc,MAAM;AACxB,UAAM,eAAe,OAAO;AAC5B,UAAM,eAAe,OAAO;AAC5B,UAAM,kBAAkB,eAAe;AACvC,UAAM,eACJ,eAAe,gBACf,SAAS,KAAK,eAAe;AAC/B,UAAM,aAAa,mBAAmB,CAAC;AAEvC,QAAI,YAAY;AACd,yBAAA;AAAA,IACF,OAAO;AACL,wBAAA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,qBAAqB,MAAM;AAC/B,QAAI,CAAC,WAAW;AACd,gBAAU,MAAM,YAAY;AAC5B,kBAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,oBAAoB,MAAM;AAC9B,QAAI,WAAW;AACb,kBAAY;AAEZ,UAAI,kBAAkB;AACpB,cAAM,UAAU,WAAA;AAChB,cAAM,kBAAkB,OAAO,aAAa;AAC5C,cAAM,WAAW,kBAAkB,UAAU,UAAU;AAEvD,kBAAU,MAAM,YAAY,cAAc,QAAQ;AAAA,MACpD,OAAO;AACL,kBAAU,MAAM,YAAY;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAEA,QAAM,OAAO,MAAM;AACjB,uBAAmB,YAAY,wBAAwB;AACvD,cAAU,MAAM,aAAa;AAC7B,sBAAA;AAEA,eAAW,MAAM;AACf,gBAAU,MAAM,aAAa;AAAA,IAC/B,GAAG,GAAG;AAAA,EACR;AAEA,OAAK,UAAU,IAAI,SAAS;AAC5B,OAAK,YAAY;AAEjB,YAAU,UAAU,IAAI,4BAA4B;AACpD,YAAU,iBAAiB,SAAS,MAAM;AACxC,WAAO,SAAS;AAAA,MACd,KAAK;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,IAAA,CACX;AAAA,EACH,CAAC;AACD,YAAU,YAAYA;AACtB,YAAU,YAAY,IAAI;AAE1B,cAAY,YAAY,SAAS;AACjC,cAAY,UAAU,IAAI,8BAA8B;AAExD,MAAI,SAAS;AACX,cAAU,MAAM,YAAY;AAE5B,WAAO;AAAA,MACL;AAAA,MACA,SAAS,MAAM,YAAA,GAAe,EAAE;AAAA,IAAA;AAGlC,WAAO;AAAA,MACL;AAAA,MACA,SAAS,MAAM,YAAA,GAAe,EAAE;AAAA,IAAA;AAAA,EAEpC;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,MACN;AAAA,IAAA;AAAA,EACF;AAEJ,GAAA;AAEK,MAAM,iCAAiC;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../source/composite/layout/scroll-top/index.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { debounce } from '@universityofmaryland/web-utilities-library/performance';\nimport { arrow_up as iconArrowUp } from '@universityofmaryland/web-icons-library/arrows';\n\ntype TypeScrollTopProps = {\n isFixed?: boolean;\n};\n\nconst CreateScrollTopElement = (props: TypeScrollTopProps) =>\n (() => {\n const DEFAULT_STARTING_POSITION = `translateX(100vh)`;\n const { isFixed = false } = props;\n\n let startingPosition: null | number = null;\n let isShowing = false;\n\n const textBuilder = new ElementBuilder('span')\n .withClassName('sr-only')\n .withHTML('Scroll To Top');\n\n const containerBuilder = new ElementBuilder('button')\n .withClassName('scroll-top-container')\n .withHTML(iconArrowUp)\n .withChild(textBuilder)\n .withStyles({\n element: {\n backgroundColor: token.color.black,\n width: '100%',\n height: '100%',\n minHeight: '40px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n border: `1px solid ${token.color.gold}`,\n cursor: 'pointer',\n transition: 'transform 250ms ease-in-out',\n '& svg': {\n display: 'block',\n width: '14px',\n height: '14px',\n },\n },\n })\n .on('click', () => {\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\n });\n\n const declarationBuilder = new ElementBuilder()\n .withClassName('scroll-top-declarion')\n .withChild(containerBuilder)\n .withStyles({\n element: {\n container: 'umd-element-scroll-top / inline-size',\n width: '100%',\n height: '100%',\n ...(isFixed && {\n width: '40px',\n height: '40px',\n position: 'absolute',\n inset: '0',\n margin: 'auto',\n }),\n },\n });\n\n const container = containerBuilder.getElement() as HTMLButtonElement;\n const declaration = declarationBuilder.getElement() as HTMLDivElement;\n\n const eventResize = () => {\n startingPosition = declaration.getBoundingClientRect().right;\n\n if (isFixed && !isShowing) {\n setHiddenPosition();\n }\n };\n\n const eventScroll = () => {\n const pagePosition = window.scrollY;\n const isPastFirstView = pagePosition > 0;\n\n if (isPastFirstView) {\n setVisiblePosition();\n } else {\n setHiddenPosition();\n }\n };\n\n const setVisiblePosition = () => {\n if (!isShowing) {\n container.style.transform = 'translateX(0)';\n isShowing = true;\n }\n };\n\n const setHiddenPosition = () => {\n const getSpacing = () => {\n if (window.innerWidth > 768) {\n return 40;\n }\n\n return 8;\n };\n\n isShowing = false;\n\n if (startingPosition) {\n const spacing = getSpacing();\n const translateAmount = window.innerWidth - startingPosition;\n const position = translateAmount + spacing + container.offsetWidth;\n\n container.style.transform = `translateX(${position}px)`;\n } else {\n container.style.transform = DEFAULT_STARTING_POSITION;\n }\n };\n\n const load = () => {\n startingPosition = declaration.getBoundingClientRect().right;\n container.style.transition = 'none';\n\n if (isFixed) {\n eventScroll();\n }\n\n setTimeout(() => {\n container.style.transition = 'transform 250ms ease-in-out';\n }, 100);\n };\n\n if (isFixed) {\n container.style.transform = DEFAULT_STARTING_POSITION;\n\n window.addEventListener('scroll', debounce(eventScroll, 10));\n window.addEventListener('resize', debounce(eventResize, 20));\n }\n\n return declarationBuilder.withEvents({ load }).build();\n })();\n\nexport const createCompositeLayoutScrollTop = CreateScrollTopElement;\n"],"names":["iconArrowUp"],"mappings":"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"}
@@ -4,8 +4,8 @@ type TypeStickyProps = {
4
4
  isStickyLast?: boolean | null;
5
5
  topPosition?: string | null;
6
6
  };
7
- export declare const createCompositeLayoutStickyColumns: (element: TypeStickyProps) => {
8
- element: HTMLDivElement;
7
+ export declare const createCompositeLayoutStickyColumns: (props: TypeStickyProps) => {
8
+ element: HTMLElement;
9
9
  styles: string;
10
10
  events: {
11
11
  setPosition: ({ value }: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../source/composite/layout/sticky-columns/index.ts"],"names":[],"mappings":"AAIA,KAAK,eAAe,GAAG;IACrB,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAuGF,eAAO,MAAM,kCAAkC,YA5CF,eAAe;;;;iCAM1B;YAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE;;CAsCkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../source/composite/layout/sticky-columns/index.ts"],"names":[],"mappings":"AAIA,KAAK,eAAe,GAAG;IACrB,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AA+EF,eAAO,MAAM,kCAAkC,UA7EJ,eAAe;;;;iCAIxB;YAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE;;CAyEkB,CAAC"}
@@ -1,84 +1,56 @@
1
1
  import * as token from "@universityofmaryland/web-token-library";
2
2
  import * as layout from "@universityofmaryland/web-styles-library/layout";
3
- import { jssToCSS } from "@universityofmaryland/web-utilities-library/styles";
4
- const ELEMENT_NAME = "umd-sticky-columns";
5
- const ATTRIBUTE_STICKY_LAST = "sticky-last";
6
- const ELEMENT_STICKY_CONTAINER = "sticky-columns-container";
7
- const ELEMENT_STICKY_CONTAINER_WRAPPER = "sticky-columns-container-wrapper";
8
- const ELEMENT_STICKY_COLUMN = "sticky-column";
9
- const ELEMENT_STATIC_COLUMN = "static-column";
10
- const OVERWRITE_STICKY_LAST_STICKY = `.${ELEMENT_STICKY_CONTAINER}[${ATTRIBUTE_STICKY_LAST}] .${ELEMENT_STICKY_COLUMN}`;
11
- const OverwriteStickyLast = `
12
- @media (min-width: ${token.media.breakpoints.highDef.min}) {
13
- ${OVERWRITE_STICKY_LAST_STICKY} {
14
- order: 2;
15
- }
16
- }
17
- `;
18
- const ColumnSticky = `
19
- @media (min-width: ${token.media.breakpoints.highDef.min}) {
20
- .${ELEMENT_STICKY_COLUMN} {
21
- position: sticky;
22
- top: 32px;
23
- }
24
- }
25
- `;
26
- const STYLES_STICKY_COLUMNS_ELEMENT = `
27
- .${ELEMENT_STICKY_CONTAINER} {
28
- container: ${ELEMENT_NAME} / inline-size;
29
- }
30
-
31
- ${jssToCSS({
32
- styleObj: {
33
- [`.${ELEMENT_STICKY_CONTAINER_WRAPPER}`]: layout.grid.gap.two
34
- }
35
- })}
36
-
37
- .${ELEMENT_STICKY_CONTAINER_WRAPPER} {
38
- align-items: start;
39
- grid-template-columns: 1fr;
40
- }
41
-
42
- @media (min-width: ${token.media.breakpoints.highDef.min}) {
43
- .${ELEMENT_STICKY_CONTAINER_WRAPPER} {
44
- grid-template-columns: 1fr 1fr;
45
- }
46
- }
47
-
48
- ${ColumnSticky}
49
- ${OverwriteStickyLast}
50
- `;
51
- const CreateStickyColumnsElement = (element) => {
52
- const { stickyColumn, staticColumn, isStickyLast, topPosition } = element;
53
- const container = document.createElement("div");
54
- const wrapper = document.createElement("div");
55
- const stickyElement = document.createElement("div");
3
+ import { ElementBuilder } from "@universityofmaryland/web-builder-library";
4
+ const CreateStickyColumnsElement = (props) => {
5
+ const { stickyColumn, staticColumn, isStickyLast, topPosition } = props;
6
+ let stickyColumnElement = null;
56
7
  const setPosition = ({ value }) => {
8
+ if (!stickyColumnElement) return;
57
9
  if (value) {
58
- stickyElement.style.top = value;
10
+ stickyColumnElement.style.top = value;
59
11
  } else {
60
- stickyElement.style.removeProperty("top");
12
+ stickyColumnElement.style.removeProperty("top");
61
13
  }
62
14
  };
63
- if (isStickyLast) container.setAttribute(ATTRIBUTE_STICKY_LAST, "");
64
- container.classList.add(ELEMENT_STICKY_CONTAINER);
65
- wrapper.classList.add(ELEMENT_STICKY_CONTAINER_WRAPPER);
66
- if (stickyColumn) {
67
- stickyElement.classList.add(ELEMENT_STICKY_COLUMN);
68
- stickyElement.appendChild(stickyColumn);
69
- wrapper.appendChild(stickyElement);
70
- }
71
- if (staticColumn) {
72
- staticColumn.classList.add(ELEMENT_STATIC_COLUMN);
73
- wrapper.appendChild(staticColumn);
74
- }
75
- container.appendChild(wrapper);
15
+ const createStickyColumn = () => {
16
+ if (!stickyColumn) return null;
17
+ return new ElementBuilder().withClassName("sticky-column").withStyles({
18
+ element: {
19
+ [`@media (${token.media.queries.highDef.min})`]: {
20
+ position: "sticky",
21
+ top: "32px",
22
+ ...isStickyLast && { order: 2 }
23
+ }
24
+ }
25
+ }).withChild(stickyColumn).ref((element) => {
26
+ stickyColumnElement = element;
27
+ });
28
+ };
29
+ const createStaticColumn = () => {
30
+ if (!staticColumn) return null;
31
+ return new ElementBuilder(staticColumn).withClassName("static-column");
32
+ };
33
+ const children = [createStickyColumn(), createStaticColumn()].filter((child) => child !== null);
34
+ const wrapperModel = new ElementBuilder().withClassName("sticky-columns-container-wrapper").styled(layout.grid.gap.two).withStyles({
35
+ element: {
36
+ alignItems: "start",
37
+ gridTemplateColumns: "1fr",
38
+ [`@media (${token.media.queries.highDef.min})`]: {
39
+ gridTemplateColumns: "1fr 1fr"
40
+ }
41
+ }
42
+ }).withChildren(...children).build();
43
+ const containerModel = new ElementBuilder().withClassName("sticky-columns-container").withStyles({
44
+ element: {
45
+ containerType: "inline-size"
46
+ }
47
+ }).withChild(wrapperModel).build();
76
48
  if (topPosition) {
77
49
  setPosition({ value: topPosition });
78
50
  }
79
51
  return {
80
- element: container,
81
- styles: STYLES_STICKY_COLUMNS_ELEMENT,
52
+ element: containerModel.element,
53
+ styles: containerModel.styles,
82
54
  events: {
83
55
  setPosition
84
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../source/composite/layout/sticky-columns/index.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport * as layout from '@universityofmaryland/web-styles-library/layout';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\n\ntype TypeStickyProps = {\n stickyColumn?: HTMLElement | null;\n staticColumn?: HTMLElement | null;\n isStickyLast?: boolean | null;\n topPosition?: string | null;\n};\n\nconst ELEMENT_NAME = 'umd-sticky-columns';\nconst ATTRIBUTE_STICKY_LAST = 'sticky-last';\n\nconst ELEMENT_STICKY_CONTAINER = 'sticky-columns-container';\nconst ELEMENT_STICKY_CONTAINER_WRAPPER = 'sticky-columns-container-wrapper';\n\nconst ELEMENT_STICKY_COLUMN = 'sticky-column';\nconst ELEMENT_STATIC_COLUMN = 'static-column';\n\nconst OVERWRITE_STICKY_LAST_STICKY = `.${ELEMENT_STICKY_CONTAINER}[${ATTRIBUTE_STICKY_LAST}] .${ELEMENT_STICKY_COLUMN}`;\n\n// prettier-ignore\nconst OverwriteStickyLast = `\n @media (min-width: ${token.media.breakpoints.highDef.min}) {\n ${OVERWRITE_STICKY_LAST_STICKY} {\n order: 2;\n }\n }\n`;\n\n// prettier-ignore\nconst ColumnSticky = `\n @media (min-width: ${token.media.breakpoints.highDef.min}) {\n .${ELEMENT_STICKY_COLUMN} {\n position: sticky;\n top: 32px;\n }\n }\n`;\n\n// prettier-ignore\nconst STYLES_STICKY_COLUMNS_ELEMENT = `\n .${ELEMENT_STICKY_CONTAINER} {\n container: ${ELEMENT_NAME} / inline-size;\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_STICKY_CONTAINER_WRAPPER}`]: layout.grid.gap.two,\n },\n })}\n\n .${ELEMENT_STICKY_CONTAINER_WRAPPER} {\n align-items: start;\n grid-template-columns: 1fr;\n }\n\n @media (min-width: ${token.media.breakpoints.highDef.min}) {\n .${ELEMENT_STICKY_CONTAINER_WRAPPER} {\n grid-template-columns: 1fr 1fr;\n }\n }\n\n ${ColumnSticky}\n ${OverwriteStickyLast}\n`;\n\nconst CreateStickyColumnsElement = (element: TypeStickyProps) => {\n const { stickyColumn, staticColumn, isStickyLast, topPosition } = element;\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n const stickyElement = document.createElement('div');\n\n const setPosition = ({ value }: { value: string | null }) => {\n if (value) {\n stickyElement.style.top = value;\n } else {\n stickyElement.style.removeProperty('top');\n }\n };\n\n if (isStickyLast) container.setAttribute(ATTRIBUTE_STICKY_LAST, '');\n container.classList.add(ELEMENT_STICKY_CONTAINER);\n wrapper.classList.add(ELEMENT_STICKY_CONTAINER_WRAPPER);\n\n if (stickyColumn) {\n stickyElement.classList.add(ELEMENT_STICKY_COLUMN);\n stickyElement.appendChild(stickyColumn);\n wrapper.appendChild(stickyElement);\n }\n\n if (staticColumn) {\n staticColumn.classList.add(ELEMENT_STATIC_COLUMN);\n wrapper.appendChild(staticColumn);\n }\n\n container.appendChild(wrapper);\n\n if (topPosition) {\n setPosition({ value: topPosition });\n }\n\n return {\n element: container,\n styles: STYLES_STICKY_COLUMNS_ELEMENT,\n events: {\n setPosition,\n },\n };\n};\n\nexport const createCompositeLayoutStickyColumns = CreateStickyColumnsElement;\n"],"names":[],"mappings":";;;AAWA,MAAM,eAAe;AACrB,MAAM,wBAAwB;AAE9B,MAAM,2BAA2B;AACjC,MAAM,mCAAmC;AAEzC,MAAM,wBAAwB;AAC9B,MAAM,wBAAwB;AAE9B,MAAM,+BAA+B,IAAI,wBAAwB,IAAI,qBAAqB,MAAM,qBAAqB;AAGrH,MAAM,sBAAsB;AAAA,uBACL,MAAM,MAAM,YAAY,QAAQ,GAAG;AAAA,MACpD,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAOlC,MAAM,eAAe;AAAA,uBACE,MAAM,MAAM,YAAY,QAAQ,GAAG;AAAA,OACnD,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ5B,MAAM,gCAAgC;AAAA,KACjC,wBAAwB;AAAA,iBACZ,YAAY;AAAA;AAAA;AAAA,IAGzB,SAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,gCAAgC,EAAE,GAAG,OAAO,KAAK,IAAI;AAAA,EAAA;AAE9D,CAAC,CAAC;AAAA;AAAA,KAEC,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA,uBAKd,MAAM,MAAM,YAAY,QAAQ,GAAG;AAAA,OACnD,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKnC,YAAY;AAAA,IACZ,mBAAmB;AAAA;AAGvB,MAAM,6BAA6B,CAAC,YAA6B;AAC/D,QAAM,EAAE,cAAc,cAAc,cAAc,gBAAgB;AAClE,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,QAAM,gBAAgB,SAAS,cAAc,KAAK;AAElD,QAAM,cAAc,CAAC,EAAE,YAAsC;AAC3D,QAAI,OAAO;AACT,oBAAc,MAAM,MAAM;AAAA,IAC5B,OAAO;AACL,oBAAc,MAAM,eAAe,KAAK;AAAA,IAC1C;AAAA,EACF;AAEA,MAAI,aAAc,WAAU,aAAa,uBAAuB,EAAE;AAClE,YAAU,UAAU,IAAI,wBAAwB;AAChD,UAAQ,UAAU,IAAI,gCAAgC;AAEtD,MAAI,cAAc;AAChB,kBAAc,UAAU,IAAI,qBAAqB;AACjD,kBAAc,YAAY,YAAY;AACtC,YAAQ,YAAY,aAAa;AAAA,EACnC;AAEA,MAAI,cAAc;AAChB,iBAAa,UAAU,IAAI,qBAAqB;AAChD,YAAQ,YAAY,YAAY;AAAA,EAClC;AAEA,YAAU,YAAY,OAAO;AAE7B,MAAI,aAAa;AACf,gBAAY,EAAE,OAAO,aAAa;AAAA,EACpC;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,MACN;AAAA,IAAA;AAAA,EACF;AAEJ;AAEO,MAAM,qCAAqC;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../source/composite/layout/sticky-columns/index.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport * as layout from '@universityofmaryland/web-styles-library/layout';\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\n\ntype TypeStickyProps = {\n stickyColumn?: HTMLElement | null;\n staticColumn?: HTMLElement | null;\n isStickyLast?: boolean | null;\n topPosition?: string | null;\n};\n\nconst CreateStickyColumnsElement = (props: TypeStickyProps) => {\n const { stickyColumn, staticColumn, isStickyLast, topPosition } = props;\n let stickyColumnElement: HTMLElement | null = null;\n\n const setPosition = ({ value }: { value: string | null }) => {\n if (!stickyColumnElement) return;\n if (value) {\n stickyColumnElement.style.top = value;\n } else {\n stickyColumnElement.style.removeProperty('top');\n }\n };\n\n const createStickyColumn = () => {\n if (!stickyColumn) return null;\n return new ElementBuilder()\n .withClassName('sticky-column')\n .withStyles({\n element: {\n [`@media (${token.media.queries.highDef.min})`]: {\n position: 'sticky',\n top: '32px',\n ...(isStickyLast && { order: 2 }),\n },\n },\n })\n .withChild(stickyColumn)\n .ref((element) => {\n stickyColumnElement = element;\n });\n };\n\n const createStaticColumn = () => {\n if (!staticColumn) return null;\n return new ElementBuilder(staticColumn).withClassName('static-column');\n };\n\n const children = [createStickyColumn(), createStaticColumn()].filter((child) => child !== null);\n\n const wrapperModel = new ElementBuilder()\n .withClassName('sticky-columns-container-wrapper')\n .styled(layout.grid.gap.two)\n .withStyles({\n element: {\n alignItems: 'start',\n gridTemplateColumns: '1fr',\n [`@media (${token.media.queries.highDef.min})`]: {\n gridTemplateColumns: '1fr 1fr',\n },\n },\n })\n .withChildren(...children)\n .build();\n\n const containerModel = new ElementBuilder()\n .withClassName('sticky-columns-container')\n .withStyles({\n element: {\n containerType: 'inline-size',\n },\n })\n .withChild(wrapperModel)\n .build();\n\n if (topPosition) {\n setPosition({ value: topPosition });\n }\n\n return {\n element: containerModel.element,\n styles: containerModel.styles,\n events: {\n setPosition,\n },\n };\n};\n\nexport const createCompositeLayoutStickyColumns = CreateStickyColumnsElement;\n"],"names":[],"mappings":";;;AAWA,MAAM,6BAA6B,CAAC,UAA2B;AAC7D,QAAM,EAAE,cAAc,cAAc,cAAc,gBAAgB;AAClE,MAAI,sBAA0C;AAE9C,QAAM,cAAc,CAAC,EAAE,YAAsC;AAC3D,QAAI,CAAC,oBAAqB;AAC1B,QAAI,OAAO;AACT,0BAAoB,MAAM,MAAM;AAAA,IAClC,OAAO;AACL,0BAAoB,MAAM,eAAe,KAAK;AAAA,IAChD;AAAA,EACF;AAEA,QAAM,qBAAqB,MAAM;AAC/B,QAAI,CAAC,aAAc,QAAO;AAC1B,WAAO,IAAI,eAAA,EACR,cAAc,eAAe,EAC7B,WAAW;AAAA,MACV,SAAS;AAAA,QACP,CAAC,WAAW,MAAM,MAAM,QAAQ,QAAQ,GAAG,GAAG,GAAG;AAAA,UAC/C,UAAU;AAAA,UACV,KAAK;AAAA,UACL,GAAI,gBAAgB,EAAE,OAAO,EAAA;AAAA,QAAE;AAAA,MACjC;AAAA,IACF,CACD,EACA,UAAU,YAAY,EACtB,IAAI,CAAC,YAAY;AAChB,4BAAsB;AAAA,IACxB,CAAC;AAAA,EACL;AAEA,QAAM,qBAAqB,MAAM;AAC/B,QAAI,CAAC,aAAc,QAAO;AAC1B,WAAO,IAAI,eAAe,YAAY,EAAE,cAAc,eAAe;AAAA,EACvE;AAEA,QAAM,WAAW,CAAC,mBAAA,GAAsB,mBAAA,CAAoB,EAAE,OAAO,CAAC,UAAU,UAAU,IAAI;AAE9F,QAAM,eAAe,IAAI,iBACtB,cAAc,kCAAkC,EAChD,OAAO,OAAO,KAAK,IAAI,GAAG,EAC1B,WAAW;AAAA,IACV,SAAS;AAAA,MACP,YAAY;AAAA,MACZ,qBAAqB;AAAA,MACrB,CAAC,WAAW,MAAM,MAAM,QAAQ,QAAQ,GAAG,GAAG,GAAG;AAAA,QAC/C,qBAAqB;AAAA,MAAA;AAAA,IACvB;AAAA,EACF,CACD,EACA,aAAa,GAAG,QAAQ,EACxB,MAAA;AAEH,QAAM,iBAAiB,IAAI,eAAA,EACxB,cAAc,0BAA0B,EACxC,WAAW;AAAA,IACV,SAAS;AAAA,MACP,eAAe;AAAA,IAAA;AAAA,EACjB,CACD,EACA,UAAU,YAAY,EACtB,MAAA;AAEH,MAAI,aAAa;AACf,gBAAY,EAAE,OAAO,aAAa;AAAA,EACpC;AAEA,SAAO;AAAA,IACL,SAAS,eAAe;AAAA,IACxB,QAAQ,eAAe;AAAA,IACvB,QAAQ;AAAA,MACN;AAAA,IAAA;AAAA,EACF;AAEJ;AAEO,MAAM,qCAAqC;"}
@@ -12,7 +12,7 @@ import "@universityofmaryland/web-icons-library/files";
12
12
  import "@universityofmaryland/web-icons-library/brand";
13
13
  import "@universityofmaryland/web-icons-library/arrows";
14
14
  import "@universityofmaryland/web-utilities-library/performance";
15
- import "../../../atomic/animations/brand/chevron-scroll.js";
15
+ import "@universityofmaryland/web-utilities-library/styles";
16
16
  import "../../../atomic/animations/brand/card-stack.js";
17
17
  import { createImageBackground } from "../../../atomic/assets/image/background.js";
18
18
  import "@universityofmaryland/web-styles-library";
@@ -21,10 +21,10 @@ import "@universityofmaryland/web-icons-library/location";
21
21
  import "@universityofmaryland/web-icons-library/calendar";
22
22
  import "@universityofmaryland/web-utilities-library/theme";
23
23
  import "../../../atomic/layout/block/stacked.js";
24
- import "../../../atomic/layout/overlay/modal.js";
25
24
  import "../../../atomic/layout/person/columns.js";
26
25
  import "@universityofmaryland/web-icons-library/social";
27
- import "../../../atomic/text-lockup/date.js";
26
+ import "@universityofmaryland/web-utilities-library/string";
27
+ import "@universityofmaryland/web-utilities-library/animation";
28
28
  import "../../../atomic/text-lockup/small.js";
29
29
  const CreateGifElement = ({ image }) => {
30
30
  const container = document.createElement("div");
@@ -4,10 +4,12 @@ export type TypeMediaInlineRequirements = {
4
4
  isThemeDark?: boolean;
5
5
  };
6
6
  export declare const createCompositeMediaInlineCaption: (props: TypeMediaInlineRequirements) => {
7
- element: HTMLDivElement;
8
7
  events: {
9
- load: () => void;
8
+ load: () => null | undefined;
10
9
  };
10
+ element: HTMLElement;
11
11
  styles: string;
12
+ update?: (props: Partial<import('../../../../builder/dist/index.d.ts').BuilderOptions>) => void;
13
+ destroy?: () => void;
12
14
  };
13
15
  //# sourceMappingURL=caption.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"caption.d.ts","sourceRoot":"","sources":["../../../../source/composite/media/inline/caption.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,2BAA2B,GAAG;IACxC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAqHF,eAAO,MAAM,iCAAiC,UAxFP,2BAA2B;;;;;;CAwFK,CAAC"}
1
+ {"version":3,"file":"caption.d.ts","sourceRoot":"","sources":["../../../../source/composite/media/inline/caption.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,2BAA2B,GAAG;IACxC,KAAK,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AA8GF,eAAO,MAAM,iCAAiC,UA5GP,2BAA2B;;;;;;;;CA4GK,CAAC"}