@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":"image.js","sources":["../../../../source/composite/carousel/elements/image.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport { debounce } from '@universityofmaryland/web-utilities-library/performance';\nimport { getResponsiveImageSize } from '@universityofmaryland/web-utilities-library/media';\nimport { setupSwipeDetection } from '@universityofmaryland/web-utilities-library/events';\nimport { arrow_right as iconArrowRight } from '@universityofmaryland/web-icons-library/arrows';\n\ntype TypeCarouselImageProps = {\n slides: HTMLElement[];\n callback?: (index: number) => void;\n maxHeight?: number;\n};\n\nconst ANIMATION_DURATION = 500;\nconst ATTRIBUTE_ACTIVE_SLIDE = 'data-active-slide';\n\nconst ELEMENT_CAROUSEL_DECLARATION = 'carousel-image-slider-container';\nconst ELEMENT_CAROUSEL_CONTAINER = 'carousel-image-slider';\nconst ELEMENT_CAROUSEL_SLIDE = 'carousel-image-slide';\nconst ELEMENT_CAROUSEL_SLIDER_BUTTON = 'carousel-slider-button';\n\nconst OVERWRITE_ACTIVE_SLIDE = `.${ELEMENT_CAROUSEL_SLIDE}[${ATTRIBUTE_ACTIVE_SLIDE}]`;\n\n// prettier-ignore\nconst SliderButtons = `\n .${ELEMENT_CAROUSEL_SLIDER_BUTTON} {\n background-color: ${token.color.white};\n display: flex;\n justify-content: center;\n align-items: center;\n height: 40px;\n width: 40px;\n position: absolute;\n top: 50%;\n z-index: 99;\n }\n\n .${ELEMENT_CAROUSEL_SLIDER_BUTTON}:first-of-type {\n left: ${token.spacing.sm};\n }\n\n .${ELEMENT_CAROUSEL_SLIDER_BUTTON}:first-of-type svg {\n transform: rotate(180deg);\n }\n\n .${ELEMENT_CAROUSEL_SLIDER_BUTTON}:last-of-type {\n right: ${token.spacing.sm};\n }\n\n .${ELEMENT_CAROUSEL_SLIDER_BUTTON} svg {\n fill: ${token.color.black};\n width: 16px;\n }\n`\n\n// prettier-ignore\nconst SlideStyles = `\n .${ELEMENT_CAROUSEL_SLIDE} {\n height: 100%;\n width: 100%;\n position: absolute;\n left: 100%;\n display: none;\n transition: transform ${ANIMATION_DURATION}ms ease-in-out;\n }\n\n ${OVERWRITE_ACTIVE_SLIDE} {\n z-index: 99;\n left: 0;\n display: block;\n transform: translateX(0);\n }\n`\n\n// prettier-ignore\nconst SliderStyles = `\n .${ELEMENT_CAROUSEL_CONTAINER} {\n position: relative;\n }\n`\n\n// prettier-ignore\nconst STYLES_CAROUSEL_IMAGE_ELEMENT = `\n .${ELEMENT_CAROUSEL_DECLARATION} {\n overflow: hidden;\n }\n\n ${SliderStyles}\n ${SlideStyles}\n ${SliderButtons}\n`;\n\nconst CreateButton = ({\n EventSlide,\n isRight = true,\n}: {\n EventSlide: ({ forward }: { forward?: boolean }) => void;\n isRight?: boolean;\n}) => {\n const button = document.createElement('button');\n button.setAttribute('type', 'button');\n button.classList.add(ELEMENT_CAROUSEL_SLIDER_BUTTON);\n button.innerHTML = iconArrowRight;\n\n if (!isRight) {\n button.setAttribute('aria-label', 'Previous');\n } else {\n button.setAttribute('aria-label', 'Next');\n }\n\n button.addEventListener('click', (event) => {\n event.stopPropagation();\n if (isRight) EventSlide({});\n if (!isRight) EventSlide({ forward: false });\n button.disabled = true;\n\n setTimeout(() => {\n button.disabled = false;\n }, ANIMATION_DURATION + 100);\n });\n\n return button;\n};\n\nconst SetCarouselSize = ({\n slider,\n activeSlide,\n transition = false,\n maxHeight,\n}: {\n slider: HTMLElement;\n activeSlide: HTMLElement;\n transition?: boolean;\n maxHeight?: number;\n}) => {\n const windowHeight = window.innerHeight - 48;\n const children = Array.from(activeSlide.children) as HTMLDivElement[];\n const buttons = Array.from(\n slider.querySelectorAll(`.${ELEMENT_CAROUSEL_SLIDER_BUTTON}`),\n ) as HTMLButtonElement[];\n const img = activeSlide.querySelector('img') as HTMLImageElement;\n const maxWindowHeight = maxHeight\n ? maxHeight > windowHeight\n ? windowHeight\n : maxHeight\n : windowHeight;\n const imageSize = getResponsiveImageSize({\n image: img,\n parentNode: slider,\n maxWindowHeight,\n });\n const imageContainer = children.find((child) =>\n child.contains(img),\n ) as HTMLElement;\n let size = imageSize;\n\n imageContainer.style.height = `${imageSize}px`;\n\n if (children.length > 1) {\n size = children.reduce((acc, currentElement) => {\n return currentElement.offsetHeight + acc;\n }, 0);\n }\n\n buttons.forEach((button) => (button.style.top = `${imageSize / 2}px`));\n\n if (transition) {\n slider.style.transition = `height ${ANIMATION_DURATION}ms ease-in-out`;\n } else {\n slider.style.transition = `none`;\n }\n slider.style.height = `${size}px`;\n};\n\nconst SlideActiveSlide = ({\n slide,\n isRight = true,\n}: {\n slide: HTMLElement;\n isRight: boolean;\n}) => {\n const transformDirection = isRight ? 'translateX(-100%)' : 'translateX(100%)';\n slide.style.transform = `${transformDirection}`;\n\n setTimeout(() => {\n slide.removeAttribute(ATTRIBUTE_ACTIVE_SLIDE);\n }, ANIMATION_DURATION);\n\n setTimeout(() => {\n slide.style.transform = 'none';\n }, ANIMATION_DURATION + 100);\n};\n\nconst SlideUpcomingSlide = ({\n slide,\n isRight = true,\n}: {\n slide: HTMLElement;\n isRight: boolean;\n}) => {\n const amount = '90';\n const transformDirection = isRight\n ? `translateX(-${amount}%)`\n : `translateX(${amount}%)`;\n const startingPosition = isRight ? `${amount}%` : `-${amount}%`;\n\n slide.style.zIndex = '9';\n slide.style.transition = `transform ${ANIMATION_DURATION}ms ease-in-out`;\n slide.style.display = 'block';\n slide.style.left = `${startingPosition}`;\n\n setTimeout(() => {\n slide.style.transform = `${transformDirection}`;\n }, 1);\n\n setTimeout(() => {\n slide.style.transition = 'none';\n slide.style.left = '0';\n slide.style.transform = 'none';\n slide.setAttribute(ATTRIBUTE_ACTIVE_SLIDE, '');\n }, ANIMATION_DURATION);\n\n setTimeout(() => {\n slide.removeAttribute('style');\n }, ANIMATION_DURATION + 100);\n};\n\nexport const createCompositeCarouselImage = (props: TypeCarouselImageProps) =>\n (() => {\n const { slides, callback, maxHeight } = props;\n const container = document.createElement('div');\n const slider = document.createElement('div');\n let activeIndex = 0;\n let styles = STYLES_CAROUSEL_IMAGE_ELEMENT;\n\n const EventSlide = ({ forward = true }: { forward?: boolean }) => {\n SlideActiveSlide({ slide: slides[activeIndex], isRight: forward });\n\n if (forward) {\n activeIndex = activeIndex + 1;\n if (activeIndex >= slides.length) activeIndex = 0;\n } else {\n activeIndex = activeIndex - 1;\n if (activeIndex < 0) activeIndex = slides.length - 1;\n }\n\n SlideUpcomingSlide({ slide: slides[activeIndex], isRight: forward });\n SetCarouselSize({\n slider,\n activeSlide: slides[activeIndex],\n transition: true,\n maxHeight,\n });\n if (callback) callback(activeIndex);\n };\n\n const EventMoveTo = (index: number) => {\n SlideActiveSlide({ slide: slides[activeIndex], isRight: true });\n activeIndex = index;\n SlideUpcomingSlide({ slide: slides[activeIndex], isRight: true });\n SetCarouselSize({\n slider,\n activeSlide: slides[activeIndex],\n transition: true,\n maxHeight,\n });\n if (callback) callback(activeIndex);\n };\n\n const EventSlideLeft = () => EventSlide({ forward: false });\n const EventSlideRight = () => EventSlide({ forward: true });\n\n const EventSwipe = () => {\n const swipes = (isrightswipe: Boolean) => {\n if (!isrightswipe) {\n EventSlide({ forward: true });\n } else {\n EventSlide({ forward: false });\n }\n };\n\n setupSwipeDetection({\n container: slider,\n callback: swipes,\n });\n };\n\n const EventResize = () => {\n SetCarouselSize({ slider, activeSlide: slides[activeIndex], maxHeight });\n };\n\n const Load = () => {\n const setSize = () => {\n const activeSlide = slides[activeIndex];\n SetCarouselSize({ slider, activeSlide, maxHeight });\n activeSlide.setAttribute(ATTRIBUTE_ACTIVE_SLIDE, '');\n };\n setTimeout(setSize, 100);\n setTimeout(setSize, 300);\n };\n\n slider.classList.add(ELEMENT_CAROUSEL_CONTAINER);\n slides.forEach((slide) => slide.classList.add(ELEMENT_CAROUSEL_SLIDE));\n slider.append(...slides);\n slider.appendChild(CreateButton({ EventSlide, isRight: false }));\n slider.appendChild(\n CreateButton({\n EventSlide,\n isRight: true,\n }),\n );\n\n container.classList.add(ELEMENT_CAROUSEL_DECLARATION);\n container.appendChild(slider);\n\n window.addEventListener('resize', debounce(EventResize, 10));\n EventSwipe();\n\n return {\n element: container,\n styles,\n events: {\n Load,\n EventMoveTo,\n EventResize,\n EventSlideLeft,\n EventSlideRight,\n },\n };\n })();\n"],"names":["iconArrowRight"],"mappings":"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"}
1
+ {"version":3,"file":"image.js","sources":["../../../../source/composite/carousel/elements/image.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 { getResponsiveImageSize } from '@universityofmaryland/web-utilities-library/media';\nimport { setupSwipeDetection } from '@universityofmaryland/web-utilities-library/events';\nimport { createCarouselNavButton, buttonColorsOnGray } from './nav-button';\n\ntype TypeCarouselImageProps = {\n slides: HTMLElement[];\n callback?: (index: number) => void;\n maxHeight?: number;\n isThemeDark?: boolean;\n includeButtonWrapper?: boolean;\n};\n\ntype CarouselImageModel = {\n element: HTMLElement;\n styles: string;\n buttons: { prev: { element: HTMLElement; styles: string }; next: { element: HTMLElement; styles: string } };\n events: {\n Load: () => void;\n EventMoveTo: (index: number) => void;\n EventResize: () => void;\n EventSlideLeft: () => void;\n EventSlideRight: () => void;\n };\n};\n\nconst ANIMATION_DURATION = 500;\nconst ATTRIBUTE_ACTIVE_SLIDE = 'data-active-slide';\nconst BUTTON_CLASS_NEXT = 'carousel-slider-button--next';\nconst BUTTON_CLASS_PREV = 'carousel-slider-button--prev';\n\nconst CreateButton = ({\n EventSlide,\n isRight = true,\n isThemeDark,\n}: {\n EventSlide: ({ forward }: { forward?: boolean }) => void;\n isRight?: boolean;\n isThemeDark?: boolean;\n}) => {\n const buttonClassName = isRight ? BUTTON_CLASS_NEXT : BUTTON_CLASS_PREV;\n const buttonDirection = isRight ? 'next' : 'prev';\n\n return createCarouselNavButton({\n className: buttonClassName,\n direction: buttonDirection,\n })\n .withStyles({\n element: {\n position: 'relative',\n top: 'auto',\n left: 'auto',\n right: 'auto',\n zIndex: 99,\n ...buttonColorsOnGray(isThemeDark),\n [`@media (${token.media.queries.desktop.min})`]: {\n position: 'absolute',\n top: '50%',\n left: 0,\n right: 'auto',\n ...(isRight && {\n left: 'auto',\n right: 0,\n }),\n },\n },\n })\n .on('click', (event) => {\n const button = event.currentTarget as HTMLButtonElement;\n event.stopPropagation();\n if (isRight) {\n EventSlide({});\n } else {\n EventSlide({ forward: false });\n }\n button.disabled = true;\n setTimeout(() => {\n button.disabled = false;\n }, ANIMATION_DURATION + 100);\n })\n .build();\n};\n\nconst CreateSlide = ({ slide }: { slide: HTMLElement }) => {\n return new ElementBuilder(slide)\n .withClassName('carousel-image-slide')\n .withStyles({\n element: {\n height: '100%',\n width: '100%',\n position: 'absolute',\n left: '100%',\n display: 'none',\n transition: `transform ${ANIMATION_DURATION}ms ease-in-out`,\n\n '&[data-active-slide]': {\n zIndex: 99,\n left: 0,\n display: 'block',\n transform: 'translateX(0)',\n },\n },\n })\n .build();\n};\n\nconst SetCarouselSize = ({\n slider,\n activeSlide,\n maxHeight,\n}: {\n slider: HTMLElement;\n activeSlide: HTMLElement;\n maxHeight?: number;\n}) => {\n const windowHeight = window.innerHeight - 48;\n const children = Array.from(activeSlide.children) as HTMLDivElement[];\n const sliderContainer = slider.parentElement;\n const sliderWrapper = sliderContainer && sliderContainer.parentElement;\n const buttonRoot = sliderWrapper || sliderContainer;\n const buttons = buttonRoot\n ? (Array.from(buttonRoot.querySelectorAll(`.${BUTTON_CLASS_PREV}, .${BUTTON_CLASS_NEXT}`)) as HTMLButtonElement[])\n : [];\n const img = activeSlide.querySelector('img') as HTMLImageElement;\n const maxWindowHeight = Math.min(maxHeight || windowHeight, windowHeight);\n const imageSize = getResponsiveImageSize({\n image: img,\n parentNode: slider,\n maxWindowHeight,\n });\n const imageContainer = children.find((child) => child.contains(img)) as HTMLElement;\n const isMobile = window.matchMedia(`(${token.media.queries.tablet.max})`).matches;\n let size = imageSize;\n\n imageContainer.style.height = `${imageSize}px`;\n\n if (isMobile) {\n buttons.forEach((button) => { button.style.top = ''; });\n } else {\n buttons.forEach((button) => {\n button.style.top = `${imageSize / 2 - button.offsetHeight / 2}px`;\n });\n }\n\n if (children.length > 1) {\n size = children.reduce((accumulator, currentElement) => {\n return currentElement.offsetHeight + accumulator;\n }, 0);\n }\n\n slider.style.height = `${size}px`;\n};\n\nconst SlideActiveSlide = ({\n slide,\n isRight = true,\n}: {\n slide: HTMLElement;\n isRight: boolean;\n}) => {\n const transformDirection = isRight ? '-100%' : '100%';\n\n slide.style.transform = `translateX(${transformDirection})`;\n\n setTimeout(() => {\n slide.removeAttribute(ATTRIBUTE_ACTIVE_SLIDE);\n }, ANIMATION_DURATION);\n\n setTimeout(() => {\n slide.style.transform = 'none';\n }, ANIMATION_DURATION + 100);\n};\n\nconst SlideUpcomingSlide = ({\n slide,\n isRight = true,\n}: {\n slide: HTMLElement;\n isRight: boolean;\n}) => {\n const amount = '90';\n const translate = isRight ? `translateX(-${amount}%)` : `translateX(${amount}%)`;\n const startingPosition = isRight ? `${amount}%` : `-${amount}%`;\n\n slide.style.zIndex = '9';\n slide.style.transition = `transform ${ANIMATION_DURATION}ms ease-in-out`;\n slide.style.display = 'block';\n slide.style.left = `${startingPosition}`;\n\n setTimeout(() => {\n slide.style.transform = translate;\n }, 1);\n\n setTimeout(() => {\n slide.style.transition = 'none';\n slide.style.left = '0';\n slide.style.transform = 'none';\n slide.setAttribute(ATTRIBUTE_ACTIVE_SLIDE, '');\n }, ANIMATION_DURATION);\n\n setTimeout(() => {\n slide.removeAttribute('style');\n }, ANIMATION_DURATION + 100);\n};\n\nexport const createCompositeCarouselImage = (props: TypeCarouselImageProps) =>\n (() => {\n const { slides, callback, maxHeight, isThemeDark, includeButtonWrapper = true } = props;\n let activeIndex = 0;\n let sliderElement: HTMLElement | null = null;\n\n const EventSlide = ({ forward = true }: { forward?: boolean }) => {\n SlideActiveSlide({ slide: slides[activeIndex], isRight: forward });\n\n if (forward) {\n activeIndex = activeIndex + 1;\n if (activeIndex >= slides.length) {\n activeIndex = 0;\n }\n } else {\n activeIndex = activeIndex - 1;\n if (activeIndex < 0) {\n activeIndex = slides.length - 1;\n }\n }\n\n SlideUpcomingSlide({ slide: slides[activeIndex], isRight: forward });\n if (sliderElement) {\n SetCarouselSize({\n slider: sliderElement,\n activeSlide: slides[activeIndex],\n maxHeight,\n });\n }\n if (callback) {\n callback(activeIndex);\n }\n };\n\n const EventMoveTo = (index: number) => {\n SlideActiveSlide({ slide: slides[activeIndex], isRight: true });\n activeIndex = index;\n SlideUpcomingSlide({ slide: slides[activeIndex], isRight: true });\n if (sliderElement) {\n SetCarouselSize({\n slider: sliderElement,\n activeSlide: slides[activeIndex],\n maxHeight,\n });\n }\n if (callback) {\n callback(activeIndex);\n }\n };\n\n const EventSlideLeft = () => EventSlide({ forward: false });\n const EventSlideRight = () => EventSlide({ forward: true });\n\n const EventSwipe = () => {\n const swipes = (isRightSwipe: boolean) => {\n if (!isRightSwipe) {\n EventSlide({ forward: true });\n } else {\n EventSlide({ forward: false });\n }\n };\n if (sliderElement) {\n setupSwipeDetection({ container: sliderElement, callback: swipes });\n }\n };\n\n const EventResize = () => {\n if (!sliderElement || sliderElement.offsetWidth === 0) {\n return;\n }\n\n SetCarouselSize({\n slider: sliderElement,\n activeSlide: slides[activeIndex],\n maxHeight,\n });\n };\n\n const Load = () => {\n const setSize = () => {\n if (!sliderElement) return;\n const activeSlide = slides[activeIndex];\n SetCarouselSize({ slider: sliderElement, activeSlide, maxHeight });\n activeSlide.setAttribute(ATTRIBUTE_ACTIVE_SLIDE, '');\n };\n setTimeout(setSize, 100);\n setTimeout(setSize, 300);\n };\n\n const prevButtonModel = CreateButton({ EventSlide, isRight: false, isThemeDark });\n const nextButtonModel = CreateButton({ EventSlide, isRight: true, isThemeDark });\n const slidesElements = slides.map((slide) => CreateSlide({ slide: slide }));\n const sliderModel = new ElementBuilder()\n .withClassName('carousel-image-slider')\n .withStyles({\n element: {\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n },\n })\n .ref((element) => {\n sliderElement = element;\n })\n .withChildren(...slidesElements)\n .build();\n\n const containerBuilder = new ElementBuilder()\n .withClassName('carousel-image-slider-container')\n .withStyles({\n element: {\n position: 'relative',\n width: '100%',\n ...(includeButtonWrapper && {\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'center',\n [`@media (${token.media.queries.desktop.min})`]: {\n display: 'block',\n },\n }),\n },\n })\n .withChild(sliderModel);\n\n if (includeButtonWrapper) {\n const buttonWrapperModel = new ElementBuilder()\n .withClassName('carousel-image-slider-buttons')\n .withStyles({\n element: {\n display: 'flex',\n justifyContent: 'center',\n gap: token.spacing.min,\n width: '100%',\n marginTop: token.spacing.md,\n marginBottom: token.spacing.md,\n [`@media (${token.media.queries.desktop.min})`]: {\n width: 'auto',\n marginTop: 0,\n marginBottom: 0,\n },\n },\n })\n .withChildren(prevButtonModel, nextButtonModel)\n .build();\n containerBuilder.withChild(buttonWrapperModel);\n }\n\n const containerModel = containerBuilder\n .withEvents({\n Load,\n EventMoveTo,\n EventResize,\n EventSlideLeft,\n EventSlideRight,\n })\n .build();\n\n window.addEventListener('resize', debounce(EventResize, 10));\n EventSwipe();\n\n return {\n element: containerModel.element,\n styles: containerModel.styles,\n buttons: { prev: prevButtonModel, next: nextButtonModel },\n events: containerModel.events,\n } as CarouselImageModel;\n })();\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
- export { createCompositeCarouselBlocks as blocks } from './blocks';
1
+ export { createCompositeCarouselBlocks as blocks } from './equal-width-items';
2
+ export { buttonColorsOnGray, buttonColorsOnWhite, buttonColorsOnBlack } from './nav-button';
2
3
  export { createCompositeCarouselFullScreen as fullScreen } from './full-screen';
3
4
  export { createCompositeCarouselOverlay as overlay } from './overlay';
4
5
  export { createCompositeCarouselImage as image } from './image';
6
+ export { createCarouselIndicatorWrapper as indicatorWrapper } from './indicator-wrapper';
7
+ export { createCarouselNavButton as navButton } from './nav-button';
5
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../source/composite/carousel/elements/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,iCAAiC,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,8BAA8B,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,4BAA4B,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../source/composite/carousel/elements/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,iCAAiC,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,8BAA8B,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,4BAA4B,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,8BAA8B,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,uBAAuB,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,13 @@
1
+ type TypeIndicatorWrapperProps = {
2
+ count: number;
3
+ isThemeDark?: boolean;
4
+ isBackground?: boolean;
5
+ callback?: (index: number) => void;
6
+ };
7
+ export declare const createCarouselIndicatorWrapper: ({ count, isThemeDark, isBackground, callback, }: TypeIndicatorWrapperProps) => {
8
+ element: HTMLElement;
9
+ styles: string;
10
+ position: (index: number) => void;
11
+ };
12
+ export {};
13
+ //# sourceMappingURL=indicator-wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicator-wrapper.d.ts","sourceRoot":"","sources":["../../../../source/composite/carousel/elements/indicator-wrapper.ts"],"names":[],"mappings":"AAIA,KAAK,yBAAyB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,iDAK5C,yBAAyB;;;;CAmC3B,CAAC"}
@@ -0,0 +1,67 @@
1
+ import * as token from "@universityofmaryland/web-token-library";
2
+ import { ElementBuilder } from "@universityofmaryland/web-builder-library";
3
+ import "@universityofmaryland/web-styles-library/element";
4
+ import "@universityofmaryland/web-styles-library/layout";
5
+ import "@universityofmaryland/web-styles-library/animation";
6
+ import "@universityofmaryland/web-styles-library/typography";
7
+ import "@universityofmaryland/web-utilities-library/media";
8
+ import "@universityofmaryland/web-utilities-library/dom";
9
+ import "@universityofmaryland/web-icons-library/controls";
10
+ import "@universityofmaryland/web-icons-library/communication";
11
+ import "@universityofmaryland/web-icons-library/files";
12
+ import "@universityofmaryland/web-icons-library/brand";
13
+ import "@universityofmaryland/web-icons-library/arrows";
14
+ import { createAnimationIndicator } from "../../../atomic/animations/actions/indicator.js";
15
+ import "@universityofmaryland/web-utilities-library/styles";
16
+ import "../../../atomic/animations/brand/card-stack.js";
17
+ import "@universityofmaryland/web-styles-library";
18
+ import "@universityofmaryland/web-utilities-library/accessibility";
19
+ import "@universityofmaryland/web-utilities-library/performance";
20
+ import "@universityofmaryland/web-icons-library/location";
21
+ import "@universityofmaryland/web-icons-library/calendar";
22
+ import "@universityofmaryland/web-utilities-library/theme";
23
+ import "../../../atomic/layout/block/stacked.js";
24
+ import "../../../atomic/layout/person/columns.js";
25
+ import "@universityofmaryland/web-icons-library/social";
26
+ import "@universityofmaryland/web-utilities-library/string";
27
+ import "@universityofmaryland/web-utilities-library/animation";
28
+ import "../../../atomic/text-lockup/small.js";
29
+ const createCarouselIndicatorWrapper = ({
30
+ count,
31
+ isThemeDark,
32
+ isBackground = true,
33
+ callback
34
+ }) => {
35
+ const overlayColor = isBackground && !isThemeDark ? token.color.gray.lightest : void 0;
36
+ const indicator = createAnimationIndicator({
37
+ count,
38
+ isThemeDark,
39
+ callback: callback || (() => {
40
+ }),
41
+ ...overlayColor && { overlayColor }
42
+ });
43
+ const model = new ElementBuilder().withClassName("carousel-indicator-wrapper").withStyles({
44
+ element: {
45
+ display: "flex",
46
+ justifyContent: "center",
47
+ width: "100%",
48
+ padding: `0 ${token.spacing.md}`,
49
+ ...isBackground && {
50
+ backgroundColor: token.color.gray.lightest,
51
+ ...isThemeDark && { backgroundColor: token.color.black }
52
+ },
53
+ [`@media (${token.media.queries.tablet.min})`]: {
54
+ padding: `0 ${token.spacing.lg}`
55
+ }
56
+ }
57
+ }).withChild(indicator).build();
58
+ return {
59
+ element: model.element,
60
+ styles: model.styles,
61
+ position: indicator.position
62
+ };
63
+ };
64
+ export {
65
+ createCarouselIndicatorWrapper
66
+ };
67
+ //# sourceMappingURL=indicator-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicator-wrapper.js","sources":["../../../../source/composite/carousel/elements/indicator-wrapper.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { animations } from 'atomic';\n\ntype TypeIndicatorWrapperProps = {\n count: number;\n isThemeDark?: boolean;\n isBackground?: boolean;\n callback?: (index: number) => void;\n};\n\nexport const createCarouselIndicatorWrapper = ({\n count,\n isThemeDark,\n isBackground = true,\n callback,\n}: TypeIndicatorWrapperProps) => {\n const overlayColor = isBackground && !isThemeDark ? token.color.gray.lightest : undefined;\n\n const indicator = animations.actions.indicator({\n count,\n isThemeDark,\n callback: callback || (() => {}),\n ...(overlayColor && { overlayColor }),\n });\n\n const model = new ElementBuilder()\n .withClassName('carousel-indicator-wrapper')\n .withStyles({\n element: {\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n padding: `0 ${token.spacing.md}`,\n ...(isBackground && {\n backgroundColor: token.color.gray.lightest,\n ...(isThemeDark && { backgroundColor: token.color.black }),\n }),\n [`@media (${token.media.queries.tablet.min})`]: {\n padding: `0 ${token.spacing.lg}`,\n },\n },\n })\n .withChild(indicator)\n .build();\n\n return {\n element: model.element,\n styles: model.styles,\n position: indicator.position,\n };\n};\n"],"names":["animations.actions.indicator"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWO,MAAM,iCAAiC,CAAC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AACF,MAAiC;AAC/B,QAAM,eAAe,gBAAgB,CAAC,cAAc,MAAM,MAAM,KAAK,WAAW;AAEhF,QAAM,YAAYA,yBAA6B;AAAA,IAC7C;AAAA,IACA;AAAA,IACA,UAAU,aAAa,MAAM;AAAA,IAAC;AAAA,IAC9B,GAAI,gBAAgB,EAAE,aAAA;AAAA,EAAa,CACpC;AAED,QAAM,QAAQ,IAAI,eAAA,EACf,cAAc,4BAA4B,EAC1C,WAAW;AAAA,IACV,SAAS;AAAA,MACP,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,SAAS,KAAK,MAAM,QAAQ,EAAE;AAAA,MAC9B,GAAI,gBAAgB;AAAA,QAClB,iBAAiB,MAAM,MAAM,KAAK;AAAA,QAClC,GAAI,eAAe,EAAE,iBAAiB,MAAM,MAAM,MAAA;AAAA,MAAM;AAAA,MAE1D,CAAC,WAAW,MAAM,MAAM,QAAQ,OAAO,GAAG,GAAG,GAAG;AAAA,QAC9C,SAAS,KAAK,MAAM,QAAQ,EAAE;AAAA,MAAA;AAAA,IAChC;AAAA,EACF,CACD,EACA,UAAU,SAAS,EACnB,MAAA;AAEH,SAAO;AAAA,IACL,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM;AAAA,IACd,UAAU,UAAU;AAAA,EAAA;AAExB;"}
@@ -0,0 +1,82 @@
1
+ import { ElementBuilder } from '../../../../builder/dist/index.d.ts';
2
+ type TypeCarouselNavButtonProps = {
3
+ className: string;
4
+ direction: 'prev' | 'next';
5
+ label?: string;
6
+ };
7
+ type TypeButtonHelpers = {
8
+ GetButtons: {
9
+ prev: () => HTMLButtonElement;
10
+ next: () => HTMLButtonElement;
11
+ };
12
+ GetElements: {
13
+ blocks: () => HTMLElement[];
14
+ };
15
+ GetViewOptions: {
16
+ shouldShowLeftButton: () => boolean;
17
+ shouldShowRightButton: () => boolean;
18
+ showCount: () => number;
19
+ };
20
+ };
21
+ export declare const createCarouselNavButton: ({ className, direction, label, }: TypeCarouselNavButtonProps) => ElementBuilder<HTMLElement>;
22
+ export declare const ButtonVisibility: (props: TypeButtonHelpers) => void;
23
+ export declare const CreateButton: ({ EventMoveForward, EventMoveBackward, isRight, isVerticalCenter, outsetOffset, backgroundColor, }: {
24
+ EventMoveForward: () => void;
25
+ EventMoveBackward: () => void;
26
+ isRight?: boolean;
27
+ isVerticalCenter?: boolean;
28
+ outsetOffset?: string;
29
+ backgroundColor?: string;
30
+ }) => import('../../../../builder/dist/index.d.ts').ElementModel<HTMLElement>;
31
+ export declare const buttonColorsOnGray: (isThemeDark?: boolean) => {
32
+ backgroundColor: "#FFFFFF" | "#E21833";
33
+ '& svg': {
34
+ fill: "#000000";
35
+ } | {
36
+ fill: "#FFFFFF";
37
+ };
38
+ '&:hover': {
39
+ backgroundColor: "#242424";
40
+ '& svg': {
41
+ fill: "#FFFFFF";
42
+ };
43
+ } | {
44
+ backgroundColor: "#FFFFFF";
45
+ '& svg': {
46
+ fill: "#000000";
47
+ };
48
+ };
49
+ };
50
+ export declare const buttonColorsOnWhite: (isThemeDark?: boolean) => {
51
+ backgroundColor: "#E21833" | "#FAFAFA";
52
+ '& svg': {
53
+ fill: "#000000";
54
+ } | {
55
+ fill: "#FFFFFF";
56
+ };
57
+ '&:hover': {
58
+ backgroundColor: "#242424";
59
+ '& svg': {
60
+ fill: "#FFFFFF";
61
+ };
62
+ } | {
63
+ backgroundColor: "#FFFFFF";
64
+ '& svg': {
65
+ fill: "#000000";
66
+ };
67
+ };
68
+ };
69
+ export declare const buttonColorsOnBlack: () => {
70
+ backgroundColor: "#E21833";
71
+ '& svg': {
72
+ fill: "#FFFFFF";
73
+ };
74
+ '&:hover': {
75
+ backgroundColor: "#FFFFFF";
76
+ '& svg': {
77
+ fill: "#000000";
78
+ };
79
+ };
80
+ };
81
+ export {};
82
+ //# sourceMappingURL=nav-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-button.d.ts","sourceRoot":"","sources":["../../../../source/composite/carousel/elements/nav-button.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAG3E,KAAK,0BAA0B,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,iBAAiB,CAAC;QAC9B,IAAI,EAAE,MAAM,iBAAiB,CAAC;KAC/B,CAAC;IACF,WAAW,EAAE;QACX,MAAM,EAAE,MAAM,WAAW,EAAE,CAAC;KAC7B,CAAC;IACF,cAAc,EAAE;QACd,oBAAoB,EAAE,MAAM,OAAO,CAAC;QACpC,qBAAqB,EAAE,MAAM,OAAO,CAAC;QACrC,SAAS,EAAE,MAAM,MAAM,CAAC;KACzB,CAAC;CACH,CAAC;AAIF,eAAO,MAAM,uBAAuB,GAAI,kCAIrC,0BAA0B,gCA2B5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,iBAAiB,SA6BxD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,oGAO1B;IACD,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,kFA0DA,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,cAAc,OAAO;;;;;;;;;;;;;;;;;;CAetD,CAAC;AAEH,eAAO,MAAM,mBAAmB,GAAI,cAAc,OAAO;;;;;;;;;;;;;;;;;;CAevD,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;CAO9B,CAAC"}
@@ -0,0 +1,164 @@
1
+ import * as token from "@universityofmaryland/web-token-library";
2
+ import { ElementBuilder } from "@universityofmaryland/web-builder-library";
3
+ import { arrow_right } from "@universityofmaryland/web-icons-library/arrows";
4
+ const BUTTON_DISABLE_DURATION = 750;
5
+ const createCarouselNavButton = ({
6
+ className,
7
+ direction,
8
+ label
9
+ }) => {
10
+ const isPrev = direction === "prev";
11
+ const defaultLabel = isPrev ? "Previous" : "Next";
12
+ const ariaLabel = label || defaultLabel;
13
+ return new ElementBuilder("button").withClassName(className).withAttribute("type", "button").withAria({ label: ariaLabel }).withHTML(arrow_right).withStyles({
14
+ element: {
15
+ display: "flex",
16
+ alignItems: "center",
17
+ justifyContent: "center",
18
+ cursor: "pointer",
19
+ width: token.spacing["2xl"],
20
+ height: token.spacing["2xl"],
21
+ transition: "background-color 0.3s",
22
+ "& svg": {
23
+ width: token.spacing.sm,
24
+ height: token.spacing.sm,
25
+ transition: "fill 0.3s",
26
+ ...isPrev && { transform: "rotate(180deg)" }
27
+ }
28
+ }
29
+ });
30
+ };
31
+ const ButtonVisibility = (props) => {
32
+ const { GetElements, GetButtons, GetViewOptions } = props;
33
+ const previousButton = GetButtons.prev();
34
+ const nextButton = GetButtons.next();
35
+ const buttons = [nextButton, previousButton];
36
+ const shouldShowLeftButton = GetViewOptions.shouldShowLeftButton();
37
+ const shouldShowRightButton = GetViewOptions.shouldShowRightButton();
38
+ const showCount = GetViewOptions.showCount();
39
+ const cardsTotal = GetElements.blocks().length;
40
+ const shouldHideLeftButton = showCount > 1 && !shouldShowLeftButton;
41
+ const shouldHideRightButton = showCount > 1 && !shouldShowRightButton;
42
+ if (cardsTotal === showCount) {
43
+ buttons.forEach((button) => button.style.display = "none");
44
+ return;
45
+ }
46
+ if (shouldHideLeftButton) {
47
+ previousButton.style.display = "none";
48
+ } else {
49
+ previousButton.style.display = "flex";
50
+ }
51
+ if (shouldHideRightButton) {
52
+ nextButton.style.display = "none";
53
+ } else {
54
+ nextButton.style.display = "flex";
55
+ }
56
+ };
57
+ const CreateButton = ({
58
+ EventMoveForward,
59
+ EventMoveBackward,
60
+ isRight = true,
61
+ isVerticalCenter = false,
62
+ outsetOffset,
63
+ backgroundColor
64
+ }) => {
65
+ const buttonDirection = isRight ? "animation-carousel-block-button-next" : "animation-carousel-block-button-previous";
66
+ return createCarouselNavButton({
67
+ className: buttonDirection,
68
+ direction: isRight ? "next" : "prev"
69
+ }).withClassName("animation-carousel-block-button").withStyles({
70
+ element: {
71
+ ...buttonColorsOnWhite(),
72
+ ...backgroundColor === token.color.red && buttonColorsOnBlack(),
73
+ ...backgroundColor === token.color.white && buttonColorsOnGray(),
74
+ "& svg": {
75
+ fill: backgroundColor === token.color.red ? token.color.white : token.color.black,
76
+ width: "20px",
77
+ height: "20px"
78
+ },
79
+ padding: `10px ${token.spacing.xs}`,
80
+ position: "relative",
81
+ top: "auto",
82
+ left: "auto",
83
+ right: "auto",
84
+ transform: "none",
85
+ zIndex: 9999,
86
+ display: "none",
87
+ "&:disabled": { opacity: 0.5 },
88
+ [`@media (${token.media.queries.desktop.min})`]: {
89
+ position: "absolute",
90
+ ...isVerticalCenter && {
91
+ top: "50%",
92
+ transform: "translateY(-50%)",
93
+ left: 0,
94
+ ...outsetOffset && { left: `-${outsetOffset}` },
95
+ ...isRight && {
96
+ left: "auto",
97
+ right: 0,
98
+ ...outsetOffset && { right: `-${outsetOffset}` }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ }).on("click", (event) => {
104
+ const button = event.currentTarget;
105
+ if (isRight) {
106
+ EventMoveForward();
107
+ } else {
108
+ EventMoveBackward();
109
+ }
110
+ button.disabled = true;
111
+ setTimeout(() => {
112
+ button.disabled = false;
113
+ }, BUTTON_DISABLE_DURATION);
114
+ }).build();
115
+ };
116
+ const buttonColorsOnGray = (isThemeDark) => ({
117
+ backgroundColor: token.color.white,
118
+ "& svg": { fill: token.color.black },
119
+ "&:hover": {
120
+ backgroundColor: token.color.gray.darker,
121
+ "& svg": { fill: token.color.white }
122
+ },
123
+ ...isThemeDark && {
124
+ backgroundColor: token.color.red,
125
+ "& svg": { fill: token.color.white },
126
+ "&:hover": {
127
+ backgroundColor: token.color.white,
128
+ "& svg": { fill: token.color.black }
129
+ }
130
+ }
131
+ });
132
+ const buttonColorsOnWhite = (isThemeDark) => ({
133
+ backgroundColor: token.color.gray.lightest,
134
+ "& svg": { fill: token.color.black },
135
+ "&:hover": {
136
+ backgroundColor: token.color.gray.darker,
137
+ "& svg": { fill: token.color.white }
138
+ },
139
+ ...isThemeDark && {
140
+ backgroundColor: token.color.red,
141
+ "& svg": { fill: token.color.white },
142
+ "&:hover": {
143
+ backgroundColor: token.color.white,
144
+ "& svg": { fill: token.color.black }
145
+ }
146
+ }
147
+ });
148
+ const buttonColorsOnBlack = () => ({
149
+ backgroundColor: token.color.red,
150
+ "& svg": { fill: token.color.white },
151
+ "&:hover": {
152
+ backgroundColor: token.color.white,
153
+ "& svg": { fill: token.color.black }
154
+ }
155
+ });
156
+ export {
157
+ ButtonVisibility,
158
+ CreateButton,
159
+ buttonColorsOnBlack,
160
+ buttonColorsOnGray,
161
+ buttonColorsOnWhite,
162
+ createCarouselNavButton
163
+ };
164
+ //# sourceMappingURL=nav-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-button.js","sources":["../../../../source/composite/carousel/elements/nav-button.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-token-library';\nimport { ElementBuilder } from '@universityofmaryland/web-builder-library';\nimport { arrow_right as iconArrowRight } from '@universityofmaryland/web-icons-library/arrows';\n\ntype TypeCarouselNavButtonProps = {\n className: string;\n direction: 'prev' | 'next';\n label?: string;\n};\n\ntype TypeButtonHelpers = {\n GetButtons: {\n prev: () => HTMLButtonElement;\n next: () => HTMLButtonElement;\n };\n GetElements: {\n blocks: () => HTMLElement[];\n };\n GetViewOptions: {\n shouldShowLeftButton: () => boolean;\n shouldShowRightButton: () => boolean;\n showCount: () => number;\n };\n};\n\nconst BUTTON_DISABLE_DURATION = 750;\n\nexport const createCarouselNavButton = ({\n className,\n direction,\n label,\n}: TypeCarouselNavButtonProps) => {\n const isPrev = direction === 'prev';\n const defaultLabel = isPrev ? 'Previous' : 'Next';\n const ariaLabel = label || defaultLabel;\n\n return new ElementBuilder('button')\n .withClassName(className)\n .withAttribute('type', 'button')\n .withAria({ label: ariaLabel })\n .withHTML(iconArrowRight)\n .withStyles({\n element: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n width: token.spacing['2xl'],\n height: token.spacing['2xl'],\n transition: 'background-color 0.3s',\n '& svg': {\n width: token.spacing.sm,\n height: token.spacing.sm,\n transition: 'fill 0.3s',\n ...(isPrev && { transform: 'rotate(180deg)' }),\n },\n },\n });\n};\n\nexport const ButtonVisibility = (props: TypeButtonHelpers) => {\n const { GetElements, GetButtons, GetViewOptions } = props;\n const previousButton = GetButtons.prev();\n const nextButton = GetButtons.next();\n const buttons = [nextButton, previousButton];\n\n const shouldShowLeftButton = GetViewOptions.shouldShowLeftButton();\n const shouldShowRightButton = GetViewOptions.shouldShowRightButton();\n const showCount = GetViewOptions.showCount();\n const cardsTotal = GetElements.blocks().length;\n const shouldHideLeftButton = showCount > 1 && !shouldShowLeftButton;\n const shouldHideRightButton = showCount > 1 && !shouldShowRightButton;\n\n if (cardsTotal === showCount) {\n buttons.forEach((button) => (button.style.display = 'none'));\n return;\n }\n\n if (shouldHideLeftButton) {\n previousButton.style.display = 'none';\n } else {\n previousButton.style.display = 'flex';\n }\n\n if (shouldHideRightButton) {\n nextButton.style.display = 'none';\n } else {\n nextButton.style.display = 'flex';\n }\n};\n\nexport const CreateButton = ({\n EventMoveForward,\n EventMoveBackward,\n isRight = true,\n isVerticalCenter = false,\n outsetOffset,\n backgroundColor,\n}: {\n EventMoveForward: () => void;\n EventMoveBackward: () => void;\n isRight?: boolean;\n isVerticalCenter?: boolean;\n outsetOffset?: string;\n backgroundColor?: string;\n}) => {\n const buttonDirection = isRight\n ? 'animation-carousel-block-button-next'\n : 'animation-carousel-block-button-previous';\n\n return createCarouselNavButton({\n className: buttonDirection,\n direction: isRight ? 'next' : 'prev',\n })\n .withClassName('animation-carousel-block-button')\n .withStyles({\n element: {\n ...buttonColorsOnWhite(),\n ...(backgroundColor === token.color.red && buttonColorsOnBlack()),\n ...(backgroundColor === token.color.white && buttonColorsOnGray()),\n '& svg': {\n fill: backgroundColor === token.color.red ? token.color.white : token.color.black,\n width: '20px',\n height: '20px',\n },\n padding: `10px ${token.spacing.xs}`,\n position: 'relative',\n top: 'auto',\n left: 'auto',\n right: 'auto',\n transform: 'none',\n zIndex: 9999,\n display: 'none',\n '&:disabled': { opacity: 0.5 },\n [`@media (${token.media.queries.desktop.min})`]: {\n position: 'absolute',\n ...(isVerticalCenter && {\n top: '50%',\n transform: 'translateY(-50%)',\n left: 0,\n ...(outsetOffset && { left: `-${outsetOffset}` }),\n ...(isRight && {\n left: 'auto',\n right: 0,\n ...(outsetOffset && { right: `-${outsetOffset}` }),\n }),\n }),\n },\n },\n })\n .on('click', (event) => {\n const button = event.currentTarget as HTMLButtonElement;\n if (isRight) {\n EventMoveForward();\n } else {\n EventMoveBackward();\n }\n button.disabled = true;\n setTimeout(() => {\n button.disabled = false;\n }, BUTTON_DISABLE_DURATION);\n })\n .build();\n};\n\nexport const buttonColorsOnGray = (isThemeDark?: boolean) => ({\n backgroundColor: token.color.white,\n '& svg': { fill: token.color.black },\n '&:hover': {\n backgroundColor: token.color.gray.darker,\n '& svg': { fill: token.color.white },\n },\n ...(isThemeDark && {\n backgroundColor: token.color.red,\n '& svg': { fill: token.color.white },\n '&:hover': {\n backgroundColor: token.color.white,\n '& svg': { fill: token.color.black },\n },\n }),\n});\n\nexport const buttonColorsOnWhite = (isThemeDark?: boolean) => ({\n backgroundColor: token.color.gray.lightest,\n '& svg': { fill: token.color.black },\n '&:hover': {\n backgroundColor: token.color.gray.darker,\n '& svg': { fill: token.color.white },\n },\n ...(isThemeDark && {\n backgroundColor: token.color.red,\n '& svg': { fill: token.color.white },\n '&:hover': {\n backgroundColor: token.color.white,\n '& svg': { fill: token.color.black },\n },\n }),\n});\n\nexport const buttonColorsOnBlack = () => ({\n backgroundColor: token.color.red,\n '& svg': { fill: token.color.white },\n '&:hover': {\n backgroundColor: token.color.white,\n '& svg': { fill: token.color.black },\n },\n});\n"],"names":["iconArrowRight"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- export declare const createCompositeCarouselOverlay: ({ images }: {
1
+ export declare const createCompositeCarouselOverlay: ({ images, isToggleCaption, }: {
2
2
  images: HTMLImageElement[];
3
+ isToggleCaption?: boolean;
3
4
  }) => {
4
- element: HTMLDivElement;
5
+ element: HTMLElement;
5
6
  styles: string;
6
7
  events: {
7
8
  setFullScreen: (index: number) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../../source/composite/carousel/elements/overlay.ts"],"names":[],"mappings":"AA4CA,eAAO,MAAM,8BAA8B,GAAI,YAAY;IAAE,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAAE;;;;+BAIvD,MAAM;;CAoDlC,CAAC"}
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../../source/composite/carousel/elements/overlay.ts"],"names":[],"mappings":"AAgDA,eAAO,MAAM,8BAA8B,GAAI,8BAG5C;IACD,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;;;;+BAIiC,MAAM;;CA4DlC,CAAC"}
@@ -1,78 +1,108 @@
1
1
  import * as token from "@universityofmaryland/web-token-library";
2
- import "./blocks.js";
2
+ import { ElementBuilder } from "@universityofmaryland/web-builder-library";
3
+ import { combineStyles } from "@universityofmaryland/web-utilities-library/styles";
4
+ import "@universityofmaryland/web-utilities-library/performance";
5
+ import "@universityofmaryland/web-utilities-library/events";
6
+ import "@universityofmaryland/web-icons-library/arrows";
7
+ import "@universityofmaryland/web-styles-library/typography";
8
+ import "@universityofmaryland/web-icons-library/controls";
3
9
  import { createCompositeCarouselFullScreen } from "./full-screen.js";
4
- import { createCompositeCarouselImage } from "./image.js";
5
- import { layoutImage } from "../../../layout/image.js";
6
- import "@universityofmaryland/web-builder-library";
7
10
  import "@universityofmaryland/web-styles-library";
8
- const ELEMENT_CAROUSEL_OVERLAY_COINTAINER = "carousel-overlay-container";
9
- const OverlayImageContainerStyles = `
10
- .${ELEMENT_CAROUSEL_OVERLAY_COINTAINER} {
11
- display: flex;
12
- justify-content: center;
13
- align-items: center;
14
- background-color: ${token.color.gray.dark};
15
- }
16
-
17
- .${ELEMENT_CAROUSEL_OVERLAY_COINTAINER} img {
18
- object-fit: contain;
19
- max-height: 100%;
20
- }
21
- `;
22
- const STYLES_CAROUSEL_OVERLAY_ELEMENT = `
23
- ${layoutImage.Styles}
24
- ${OverlayImageContainerStyles}
25
- `;
26
- const CreateOverlaySlide = ({ images }) => images.map((image) => {
27
- const slide = document.createElement("div");
28
- const imageContainer = document.createElement("div");
29
- const imageBlock = layoutImage.CreateElement({
30
- image,
31
- showCaption: true
32
- });
33
- imageContainer.classList.add(ELEMENT_CAROUSEL_OVERLAY_COINTAINER);
34
- imageContainer.appendChild(imageBlock);
35
- slide.appendChild(imageContainer);
36
- return slide;
11
+ import { createLayoutImageContainer } from "../../../layout/image.js";
12
+ import { createCompositeCarouselImage } from "./image.js";
13
+ import "@universityofmaryland/web-styles-library/element";
14
+ import "@universityofmaryland/web-styles-library/layout";
15
+ import "@universityofmaryland/web-styles-library/animation";
16
+ import "@universityofmaryland/web-utilities-library/media";
17
+ import "@universityofmaryland/web-utilities-library/dom";
18
+ import "@universityofmaryland/web-icons-library/communication";
19
+ import "@universityofmaryland/web-icons-library/files";
20
+ import "@universityofmaryland/web-icons-library/brand";
21
+ import "../../../atomic/animations/brand/card-stack.js";
22
+ import "@universityofmaryland/web-utilities-library/accessibility";
23
+ import "@universityofmaryland/web-icons-library/location";
24
+ import "@universityofmaryland/web-icons-library/calendar";
25
+ import "@universityofmaryland/web-utilities-library/theme";
26
+ import "../../../atomic/layout/block/stacked.js";
27
+ import "../../../atomic/layout/person/columns.js";
28
+ import "@universityofmaryland/web-icons-library/social";
29
+ import "@universityofmaryland/web-utilities-library/string";
30
+ import "@universityofmaryland/web-utilities-library/animation";
31
+ import "../../../atomic/text-lockup/small.js";
32
+ const CreateOverlaySlide = ({
33
+ images,
34
+ isToggleCaption
35
+ }) => images.map((image) => {
36
+ const imageBlock = createLayoutImageContainer({ image, showCaption: true, isToggleCaption });
37
+ const imageContainerModel = new ElementBuilder().withClassName("carousel-overlay-container").withStyles({
38
+ element: {
39
+ position: "absolute",
40
+ top: 0,
41
+ left: 0,
42
+ right: 0,
43
+ bottom: 0,
44
+ backgroundColor: token.color.gray.dark,
45
+ "& > *": {
46
+ width: "100%",
47
+ height: "100%",
48
+ display: "flex",
49
+ justifyContent: "center",
50
+ alignItems: "center"
51
+ },
52
+ "& img": {
53
+ objectFit: "contain",
54
+ maxHeight: "100%",
55
+ maxWidth: "100%"
56
+ }
57
+ }
58
+ }).withChild(imageBlock).build();
59
+ return imageContainerModel;
37
60
  });
38
- const createCompositeCarouselOverlay = ({ images }) => (() => {
39
- let styles = STYLES_CAROUSEL_OVERLAY_ELEMENT;
61
+ const createCompositeCarouselOverlay = ({
62
+ images,
63
+ isToggleCaption = true
64
+ }) => (() => {
40
65
  const setFullScreen = (index) => {
41
66
  let canMove = true;
42
- const checkKeyEvents = (event) => {
43
- if (!canMove) return;
44
- canMove = false;
45
- if (event.key == "ArrowLeft") overlayCarousel.events.EventSlideLeft();
46
- if (event.key == "ArrowRight") overlayCarousel.events.EventSlideRight();
47
- setTimeout(() => {
48
- canMove = true;
49
- }, 700);
50
- };
51
67
  overlayCarousel.events.EventMoveTo(index);
52
68
  setTimeout(() => fixedFullScreen.events.show(), 100);
53
69
  setTimeout(() => {
54
70
  overlayCarousel.events.EventResize();
55
71
  }, 100);
56
- isFullScreenEvents = window.addEventListener("keyup", checkKeyEvents);
72
+ window.addEventListener(
73
+ "keyup",
74
+ (event) => {
75
+ if (!canMove) return;
76
+ canMove = false;
77
+ if (event.key === "ArrowLeft") {
78
+ overlayCarousel.events.EventSlideLeft();
79
+ } else if (event.key === "ArrowRight") {
80
+ overlayCarousel.events.EventSlideRight();
81
+ }
82
+ setTimeout(() => {
83
+ canMove = true;
84
+ }, 700);
85
+ }
86
+ );
57
87
  };
58
- const overlaySlides = CreateOverlaySlide({ images });
88
+ const overlaySlideModels = CreateOverlaySlide({ images, isToggleCaption });
89
+ const overlaySlides = overlaySlideModels.map((model) => model.element);
90
+ const firstSlide = overlaySlideModels[0];
91
+ const slideStyles = firstSlide ? firstSlide.styles : "";
59
92
  const overlayCarousel = createCompositeCarouselImage({
60
93
  slides: overlaySlides,
61
94
  maxHeight: window.innerHeight / 10 * 8
62
95
  });
63
- styles += overlayCarousel.styles;
64
96
  const fixedFullScreen = createCompositeCarouselFullScreen({
65
- content: overlayCarousel.element,
66
- callback: () => {
67
- if (isFullScreenEvents)
68
- window.removeEventListener("keyup", isFullScreenEvents);
69
- }
97
+ content: overlayCarousel.element
70
98
  });
71
- styles += fixedFullScreen.styles;
72
- let isFullScreenEvents = null;
73
99
  return {
74
100
  element: fixedFullScreen.element,
75
- styles,
101
+ styles: combineStyles(
102
+ slideStyles,
103
+ overlayCarousel.styles,
104
+ fixedFullScreen.styles
105
+ ),
76
106
  events: {
77
107
  setFullScreen
78
108
  }