@universityofmaryland/web-elements-library 1.5.0 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # University of Maryland Web Elements Library
2
2
 
3
- [![Elements Version](https://img.shields.io/badge/Elements-v1.5.0-blue)](https://www.npmjs.com/package/@universityofmaryland/web-elements-library)
3
+ [![Elements Version](https://img.shields.io/badge/Elements-v1.5.2-blue)](https://www.npmjs.com/package/@universityofmaryland/web-elements-library)
4
4
 
5
5
  Foundational UI building blocks for the UMD Design System, providing atomic elements that combine to create complex, accessible, and brand-compliant University of Maryland digital experiences.
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"standard.d.ts","sourceRoot":"","sources":["../../../../source/composite/carousel/image/standard.ts"],"names":[],"mappings":"AAcA,KAAK,cAAc,GAAG;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAMF,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;CAC9B,CAAC;AAYF,KAAK,8BAA8B,GAAG,gBAAgB,GACpD,cAAc,GAAG;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;yBA0KY,OAAO,8BAA8B;;;;;;;AAArD,wBAuKO"}
1
+ {"version":3,"file":"standard.d.ts","sourceRoot":"","sources":["../../../../source/composite/carousel/image/standard.ts"],"names":[],"mappings":"AAcA,KAAK,cAAc,GAAG;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAMF,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;CAC9B,CAAC;AAYF,KAAK,8BAA8B,GAAG,gBAAgB,GACpD,cAAc,GAAG;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;yBAqLY,OAAO,8BAA8B;;;;;;;AAArD,wBAuKO"}
@@ -50,6 +50,7 @@ const ELEMENT_CAROUSEL_SLIDER_BUTTON = "carousel-slider-button";
50
50
  const ELEMENT_CAROUSEL_INDICATOR_WRAPPER = "carousel-indicator-wrapper";
51
51
  const ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER = "carousel-overlay-image-container";
52
52
  const OVERWRITE_THEME_DARK_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK}`;
53
+ const OVERWRITE_THEME_DARK_RICH_TEXT = `${OVERWRITE_THEME_DARK_CONTAINER} .${ELEMENT_SLIDE_RICH_TEXT}`;
53
54
  const OVERWRITE_THEME_DARK_TEXT_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_TEXT_CONTAINER}`;
54
55
  const OVERWRITE_THEME_DARK_IMAGE_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_IMAGE_CONTAINER}`;
55
56
  const OVERWRITE_THEME_DARK_INDICATOR = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER}`;
@@ -76,6 +77,16 @@ const OverwriteThemeDark = `
76
77
  ${OVERWRITE_THEME_DARK_BUTTON} > svg {
77
78
  fill: ${Styles.token.color.white};
78
79
  }
80
+
81
+ ${OVERWRITE_THEME_DARK_RICH_TEXT} {
82
+ color: ${Styles.token.color.white};
83
+ }
84
+
85
+ ${styles.jssToCSS({
86
+ styleObj: {
87
+ [`${OVERWRITE_THEME_DARK_RICH_TEXT}`]: Styles.element.text.rich.advancedDark
88
+ }
89
+ })}
79
90
  `;
80
91
  const IndicatorContainerStyles = `
81
92
  .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER} {
@@ -1 +1 @@
1
- {"version":3,"file":"standard.js","sources":["../../../../source/composite/carousel/image/standard.ts"],"sourcesContent":["import {\n element,\n token,\n typography,\n} from '@universityofmaryland/web-styles-library';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\nimport { animations, buttons } from 'atomic';\nimport { Image as LayoutImage } from 'layout';\nimport * as carouselElements from '../elements';\n\ntype TypeImage = {\n image: HTMLImageElement;\n};\n\ntype TypeFullScreen = {\n isFullScreenOption?: boolean;\n};\n\ntype TypesetFullScreen = {\n setFullScreen: (arg: number) => void;\n};\n\ntype TypeSlideContent = {\n images: HTMLImageElement[];\n headlines?: HTMLElement[] | null;\n texts?: HTMLElement[] | null;\n};\n\ntype TypeImageContainerProps = TypeImage &\n TypeFullScreen &\n TypesetFullScreen & {\n index: number;\n };\n\ntype TypeCarouselSlideProps = TypeSlideContent &\n TypesetFullScreen &\n TypeFullScreen;\n\ntype TypeCarouselImageStandardProps = TypeSlideContent &\n TypeFullScreen & {\n isThemeDark?: boolean;\n };\n\nconst MEDIUM = 500;\n\nconst ATTRIBUTE_REFERENCE = 'data-reference';\nconst ATTRIBUTE_THEME = 'data-theme';\nconst THEME_DARK = 'dark';\n\nconst IS_THEME_DARK = `[${ATTRIBUTE_THEME}=\"${THEME_DARK}\"]`;\n\nconst ELEMENT_NAME = 'umd-carousel-image-standard';\nconst ELEMENT_CAROUSEL_IMAGE_DECLARATION =\n 'carousel-image-standard-declaration';\nconst ELEMENT_CAROUSEL_IMAGE_CONTAINER = 'carousel-image-standard-container';\n\nconst ELEMENT_SLIDE = 'carousel-image-standard-slide';\nconst ELEMENT_SLIDE_IMAGE_CONTAINER = 'carousel-image-standard-slide-image';\nconst ELEMENT_SLIDE_IMAGE_WRAPPER = 'carousel-image-standard-slide-wrapper';\nconst ELEMENT_SLIDE_TEXT_CONTAINER = 'carousel-image-standard-slide-text';\nconst ELEMENT_SLIDE_HEADLINE = 'carousel-image-standard-slide-headline';\nconst ELEMENT_SLIDE_RICH_TEXT = 'carousel-image-standard-slide-rich-text';\nconst ELEMENT_CAROUSEL_SLIDER_BUTTON = 'carousel-slider-button';\n\nconst ELEMENT_CAROUSEL_INDICATOR_WRAPPER = 'carousel-indicator-wrapper';\nconst ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER =\n 'carousel-overlay-image-container';\n\nconst OVERWRITE_THEME_DARK_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK}`;\nconst OVERWRITE_THEME_DARK_TEXT_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_TEXT_CONTAINER}`;\nconst OVERWRITE_THEME_DARK_IMAGE_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_IMAGE_CONTAINER}`;\nconst OVERWRITE_THEME_DARK_INDICATOR = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER}`;\nconst OVERWRITE_THEME_DARK_BUTTON = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_CAROUSEL_SLIDER_BUTTON}`;\n\n// prettier-ignore\nconst OverwriteThemeDark = `\n ${OVERWRITE_THEME_DARK_CONTAINER},\n ${OVERWRITE_THEME_DARK_TEXT_CONTAINER},\n ${OVERWRITE_THEME_DARK_INDICATOR} {\n background-color: ${token.color.black};\n }\n\n ${OVERWRITE_THEME_DARK_IMAGE_CONTAINER} {\n background-color: ${token.color.gray.dark};\n }\n\n ${OVERWRITE_THEME_DARK_TEXT_CONTAINER} * {\n color: ${token.color.white};\n }\n\n ${OVERWRITE_THEME_DARK_BUTTON} {\n background-color: ${token.color.black};\n }\n\n ${OVERWRITE_THEME_DARK_BUTTON} > svg {\n fill: ${token.color.white};\n }\n`;\n\n// prettier-ignore\nconst IndicatorContainerStyles = `\n .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER} {\n padding: ${token.spacing.md};\n background-color: ${token.color.gray.lightest};\n display: flex;\n justify-content: center;\n }\n \n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER} {\n padding: ${token.spacing.lg};\n }\n }\n`;\n\n// prettier-ignore\nconst OverlayImageContainerStyles = `\n .${ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER} {\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ${token.color.gray.dark};\n }\n\n .${ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER} img {\n object-fit: contain;\n max-height: 100%;\n }\n`;\n\n// prettier-ignore\nconst TextContainerStyles = `\n .${ELEMENT_SLIDE_TEXT_CONTAINER} {\n padding: ${token.spacing.md};\n padding-bottom: 0;\n background-color: ${token.color.gray.lightest};\n }\n\n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${ELEMENT_SLIDE_TEXT_CONTAINER} {\n padding: ${token.spacing.lg};\n padding-bottom: 0;\n }\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_SLIDE_HEADLINE}`]: typography.sans.large,\n },\n })}\n\n .${ELEMENT_SLIDE_RICH_TEXT} {\n margin-top: ${token.spacing.min};\n color: ${token.color.gray.dark}\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_SLIDE_RICH_TEXT}`]: element.text.rich.advanced,\n },\n })}\n`\n\n// prettier-ignore\nconst ImageContainerStyles = `\n .${ELEMENT_SLIDE_IMAGE_CONTAINER} {\n position: relative;\n background-color: ${token.color.black};\n }\n\n .${ELEMENT_SLIDE_IMAGE_WRAPPER} {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .${ELEMENT_SLIDE_IMAGE_WRAPPER} > * {\n height: 100%;\n }\n\n .${ELEMENT_SLIDE_IMAGE_CONTAINER} img {\n object-fit: contain;\n max-height: 100%;\n }\n`\n\n// prettier-ignore\nconst STYLES_CAROUSEL_IMAGE_STANDARD_ELEMENT = `\n .${ELEMENT_CAROUSEL_IMAGE_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n }\n\n .${ELEMENT_CAROUSEL_IMAGE_CONTAINER} {\n overflow: hidden;\n background-color: ${token.color.gray.lightest};\n }\n\n ${LayoutImage.Styles}\n ${ImageContainerStyles}\n ${TextContainerStyles}\n ${OverlayImageContainerStyles}\n ${IndicatorContainerStyles}\n ${OverwriteThemeDark}\n`;\n\nexport default (props: TypeCarouselImageStandardProps) =>\n (() => {\n const { images, isThemeDark, isFullScreenOption } = props;\n const elementDeclaration = document.createElement('div');\n const elementContainer = document.createElement('div');\n const elementIndicator = document.createElement('div');\n const overlayCarousel = carouselElements.overlay({\n images,\n });\n let styles = STYLES_CAROUSEL_IMAGE_STANDARD_ELEMENT;\n\n styles += overlayCarousel.styles;\n\n const CreateTextContainer = ({\n headlines,\n texts,\n reference,\n }: {\n headlines?: HTMLElement[] | null;\n texts?: HTMLElement[] | null;\n reference: string | null;\n }) => {\n const textContainer = document.createElement('div');\n\n const headline = headlines?.find(\n (headline) => headline.getAttribute(ATTRIBUTE_REFERENCE) === reference,\n );\n const richText = texts?.find(\n (text) => text.getAttribute(ATTRIBUTE_REFERENCE) === reference,\n );\n\n textContainer.classList.add(ELEMENT_SLIDE_TEXT_CONTAINER);\n\n if (headline || richText) {\n if (headline) {\n headline.classList.add(ELEMENT_SLIDE_HEADLINE);\n textContainer.appendChild(headline);\n }\n\n if (richText) {\n richText.classList.add(ELEMENT_SLIDE_RICH_TEXT);\n textContainer.appendChild(richText);\n }\n\n return textContainer;\n }\n\n return null;\n };\n\n const CreateImageContainer = ({\n image,\n isFullScreenOption,\n setFullScreen,\n index,\n }: TypeImageContainerProps) => {\n const imageContainer = document.createElement('div');\n const imageWrapper = document.createElement('div');\n const imageBlock = LayoutImage.CreateElement({\n image,\n showCaption: true,\n });\n\n imageContainer.classList.add(ELEMENT_SLIDE_IMAGE_CONTAINER);\n\n imageWrapper.classList.add(ELEMENT_SLIDE_IMAGE_WRAPPER);\n imageWrapper.appendChild(imageBlock);\n\n if (isFullScreenOption) {\n const button = buttons.fullscreen.create({\n callback: setFullScreen,\n index,\n });\n imageBlock.appendChild(button.element);\n\n styles += button.styles;\n }\n\n imageContainer.appendChild(imageWrapper);\n\n return imageContainer;\n };\n\n const CreateSlide = (props: TypeCarouselSlideProps) => {\n const { images, setFullScreen } = props;\n const clonedImages = images.map((image) =>\n image.cloneNode(true),\n ) as HTMLImageElement[];\n\n return clonedImages.map((image, index) => {\n const reference = image.getAttribute(ATTRIBUTE_REFERENCE);\n const slide = document.createElement('div');\n const imageContainer = CreateImageContainer({\n ...props,\n image,\n setFullScreen,\n index,\n });\n const textContainer = CreateTextContainer({ ...props, reference });\n\n slide.classList.add(ELEMENT_SLIDE);\n slide.appendChild(imageContainer);\n if (textContainer) slide.appendChild(textContainer);\n\n return slide;\n });\n };\n\n const slides = CreateSlide({\n ...props,\n setFullScreen: overlayCarousel.events.setFullScreen,\n });\n const carousel = carouselElements.image({\n slides,\n callback: (activeIndex) => {\n indicator.position(activeIndex);\n },\n maxHeight: 500,\n });\n\n styles += carousel.styles;\n\n const indicator = animations.actions.indicator({\n count: images.length || 0,\n callback: carousel.events.EventMoveTo,\n isThemeDark,\n isThemeLight: !isThemeDark,\n });\n\n styles += indicator.styles;\n\n elementIndicator.classList.add(ELEMENT_CAROUSEL_INDICATOR_WRAPPER);\n elementIndicator.appendChild(indicator.element);\n\n elementContainer.classList.add(ELEMENT_CAROUSEL_IMAGE_CONTAINER);\n elementContainer.appendChild(carousel.element);\n elementContainer.appendChild(elementIndicator);\n if (isThemeDark) elementContainer.setAttribute(ATTRIBUTE_THEME, THEME_DARK);\n\n elementDeclaration.classList.add(ELEMENT_CAROUSEL_IMAGE_DECLARATION);\n elementDeclaration.appendChild(elementContainer);\n\n images[images.length - 1].addEventListener('load', carousel.events.Load);\n\n const responseOptions = {\n styles,\n events: {\n SetEventReize: carousel.events.EventResize,\n },\n };\n\n if (isFullScreenOption) {\n const element = document.createElement('div');\n\n element.appendChild(overlayCarousel.element);\n element.appendChild(elementDeclaration);\n\n return {\n element,\n ...responseOptions,\n };\n }\n\n return {\n element: elementDeclaration,\n ...responseOptions,\n };\n })();\n"],"names":["token","jssToCSS","typography","element","LayoutImage","carouselElements.overlay","styles","headline","image","isFullScreenOption","index","buttons.fullscreen","props","images","carouselElements.image","indicator","animations.actions.indicator"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAM,SAAS;AAEf,MAAM,sBAAsB;AAC5B,MAAM,kBAAkB;AACxB,MAAM,aAAa;AAEnB,MAAM,gBAAgB,IAAI,eAAe,KAAK,UAAU;AAExD,MAAM,eAAe;AACrB,MAAM,qCACJ;AACF,MAAM,mCAAmC;AAEzC,MAAM,gBAAgB;AACtB,MAAM,gCAAgC;AACtC,MAAM,8BAA8B;AACpC,MAAM,+BAA+B;AACrC,MAAM,yBAAyB;AAC/B,MAAM,0BAA0B;AAChC,MAAM,iCAAiC;AAEvC,MAAM,qCAAqC;AAC3C,MAAM,4CACJ;AAEF,MAAM,iCAAiC,IAAI,gCAAgC,GAAG,aAAa;AAC3F,MAAM,sCAAsC,IAAI,gCAAgC,GAAG,aAAa,KAAK,4BAA4B;AACjI,MAAM,uCAAuC,IAAI,gCAAgC,GAAG,aAAa,KAAK,6BAA6B;AACnI,MAAM,iCAAiC,IAAI,gCAAgC,GAAG,aAAa,KAAK,kCAAkC;AAClI,MAAM,8BAA8B,IAAI,gCAAgC,GAAG,aAAa,KAAK,8BAA8B;AAG3H,MAAM,qBAAqB;AAAA,IACvB,8BAA8B;AAAA,IAC9B,mCAAmC;AAAA,IACnC,8BAA8B;AAAA,wBACVA,OAAAA,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA,IAGrC,oCAAoC;AAAA,wBAChBA,aAAM,MAAM,KAAK,IAAI;AAAA;AAAA;AAAA,IAGzC,mCAAmC;AAAA,aAC1BA,OAAAA,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA,IAG1B,2BAA2B;AAAA,wBACPA,OAAAA,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA,IAGrC,2BAA2B;AAAA,YACnBA,OAAAA,MAAM,MAAM,KAAK;AAAA;AAAA;AAK7B,MAAM,2BAA2B;AAAA,KAC5B,kCAAkC;AAAA,eACxBA,OAAAA,MAAM,QAAQ,EAAE;AAAA,wBACPA,aAAM,MAAM,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,eAKlC,YAAY,gBAAgB,MAAM;AAAA,OAC1C,kCAAkC;AAAA,iBACxBA,OAAAA,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA;AAMjC,MAAM,8BAA8B;AAAA,KAC/B,yCAAyC;AAAA;AAAA;AAAA;AAAA,wBAItBA,aAAM,MAAM,KAAK,IAAI;AAAA;AAAA;AAAA,KAGxC,yCAAyC;AAAA;AAAA;AAAA;AAAA;AAO9C,MAAM,sBAAsB;AAAA,KACvB,4BAA4B;AAAA,eAClBA,OAAAA,MAAM,QAAQ,EAAE;AAAA;AAAA,wBAEPA,aAAM,MAAM,KAAK,QAAQ;AAAA;AAAA;AAAA,eAGlC,YAAY,gBAAgB,MAAM;AAAA,OAC1C,4BAA4B;AAAA,iBAClBA,OAAAA,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,IAK7BC,gBAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,sBAAsB,EAAE,GAAGC,OAAAA,WAAW,KAAK;AAAA,EAAA;AAEpD,CAAC,CAAC;AAAA;AAAA,KAEC,uBAAuB;AAAA,kBACVF,OAAAA,MAAM,QAAQ,GAAG;AAAA,aACtBA,OAAAA,MAAM,MAAM,KAAK,IAAI;AAAA;AAAA;AAAA,IAG9BC,gBAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,uBAAuB,EAAE,GAAGE,OAAAA,QAAQ,KAAK,KAAK;AAAA,EAAA;AAEvD,CAAC,CAAC;AAAA;AAIJ,MAAM,uBAAuB;AAAA,KACxB,6BAA6B;AAAA;AAAA,wBAEVH,OAAAA,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA,KAGpC,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAY3B,2BAA2B;AAAA;AAAA;AAAA;AAAA,KAI3B,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAOlC,MAAM,yCAAyC;AAAA,KAC1C,kCAAkC;AAAA,iBACtB,YAAY;AAAA;AAAA;AAAA,KAGxB,gCAAgC;AAAA;AAAA,wBAEbA,aAAM,MAAM,KAAK,QAAQ;AAAA;AAAA;AAAA,IAG7CI,MAAY,MAAM;AAAA,IAClB,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,2BAA2B;AAAA,IAC3B,wBAAwB;AAAA,IACxB,kBAAkB;AAAA;AAGtB,MAAA,WAAe,CAAC,WACb,MAAM;AACL,QAAM,EAAE,QAAQ,aAAa,mBAAA,IAAuB;AACpD,QAAM,qBAAqB,SAAS,cAAc,KAAK;AACvD,QAAM,mBAAmB,SAAS,cAAc,KAAK;AACrD,QAAM,mBAAmB,SAAS,cAAc,KAAK;AACrD,QAAM,kBAAkBC,QAAyB;AAAA,IAC/C;AAAA,EAAA,CACD;AACD,MAAIC,UAAS;AAEb,EAAAA,WAAU,gBAAgB;AAE1B,QAAM,sBAAsB,CAAC;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,EAAA,MAKI;AACJ,UAAM,gBAAgB,SAAS,cAAc,KAAK;AAElD,UAAM,WAAW,WAAW;AAAA,MAC1B,CAACC,cAAaA,UAAS,aAAa,mBAAmB,MAAM;AAAA,IAAA;AAE/D,UAAM,WAAW,OAAO;AAAA,MACtB,CAAC,SAAS,KAAK,aAAa,mBAAmB,MAAM;AAAA,IAAA;AAGvD,kBAAc,UAAU,IAAI,4BAA4B;AAExD,QAAI,YAAY,UAAU;AACxB,UAAI,UAAU;AACZ,iBAAS,UAAU,IAAI,sBAAsB;AAC7C,sBAAc,YAAY,QAAQ;AAAA,MACpC;AAEA,UAAI,UAAU;AACZ,iBAAS,UAAU,IAAI,uBAAuB;AAC9C,sBAAc,YAAY,QAAQ;AAAA,MACpC;AAEA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,uBAAuB,CAAC;AAAA,IAAA,OAC5BC;AAAAA,IACA,oBAAAC;AAAAA,IACA;AAAA,IAAA,OACAC;AAAAA,EAAA,MAC6B;AAC7B,UAAM,iBAAiB,SAAS,cAAc,KAAK;AACnD,UAAM,eAAe,SAAS,cAAc,KAAK;AACjD,UAAM,aAAaN,MAAY,cAAc;AAAA,MAAA,OAC3CI;AAAAA,MACA,aAAa;AAAA,IAAA,CACd;AAED,mBAAe,UAAU,IAAI,6BAA6B;AAE1D,iBAAa,UAAU,IAAI,2BAA2B;AACtD,iBAAa,YAAY,UAAU;AAEnC,QAAIC,qBAAoB;AACtB,YAAM,SAASE,WAAmB,OAAO;AAAA,QACvC,UAAU;AAAA,QAAA,OACVD;AAAAA,MAAA,CACD;AACD,iBAAW,YAAY,OAAO,OAAO;AAErC,MAAAJ,WAAU,OAAO;AAAA,IACnB;AAEA,mBAAe,YAAY,YAAY;AAEvC,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,CAACM,WAAkC;AACrD,UAAM,EAAE,QAAAC,SAAQ,cAAA,IAAkBD;AAClC,UAAM,eAAeC,QAAO;AAAA,MAAI,CAACL,WAC/BA,OAAM,UAAU,IAAI;AAAA,IAAA;AAGtB,WAAO,aAAa,IAAI,CAACA,QAAO,UAAU;AACxC,YAAM,YAAYA,OAAM,aAAa,mBAAmB;AACxD,YAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,YAAM,iBAAiB,qBAAqB;AAAA,QAC1C,GAAGI;AAAAA,QACH,OAAAJ;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AACD,YAAM,gBAAgB,oBAAoB,EAAE,GAAGI,QAAO,WAAW;AAEjE,YAAM,UAAU,IAAI,aAAa;AACjC,YAAM,YAAY,cAAc;AAChC,UAAI,cAAe,OAAM,YAAY,aAAa;AAElD,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,QAAM,SAAS,YAAY;AAAA,IACzB,GAAG;AAAA,IACH,eAAe,gBAAgB,OAAO;AAAA,EAAA,CACvC;AACD,QAAM,WAAWE,QAAuB;AAAA,IACtC;AAAA,IACA,UAAU,CAAC,gBAAgB;AACzBC,kBAAU,SAAS,WAAW;AAAA,IAChC;AAAA,IACA,WAAW;AAAA,EAAA,CACZ;AAED,EAAAT,WAAU,SAAS;AAEnB,QAAMS,cAAYC,UAA6B;AAAA,IAC7C,OAAO,OAAO,UAAU;AAAA,IACxB,UAAU,SAAS,OAAO;AAAA,IAC1B;AAAA,IACA,cAAc,CAAC;AAAA,EAAA,CAChB;AAED,EAAAV,WAAUS,YAAU;AAEpB,mBAAiB,UAAU,IAAI,kCAAkC;AACjE,mBAAiB,YAAYA,YAAU,OAAO;AAE9C,mBAAiB,UAAU,IAAI,gCAAgC;AAC/D,mBAAiB,YAAY,SAAS,OAAO;AAC7C,mBAAiB,YAAY,gBAAgB;AAC7C,MAAI,YAAa,kBAAiB,aAAa,iBAAiB,UAAU;AAE1E,qBAAmB,UAAU,IAAI,kCAAkC;AACnE,qBAAmB,YAAY,gBAAgB;AAE/C,SAAO,OAAO,SAAS,CAAC,EAAE,iBAAiB,QAAQ,SAAS,OAAO,IAAI;AAEvE,QAAM,kBAAkB;AAAA,IACtB,QAAAT;AAAA,IACA,QAAQ;AAAA,MACN,eAAe,SAAS,OAAO;AAAA,IAAA;AAAA,EACjC;AAGF,MAAI,oBAAoB;AACtB,UAAMH,WAAU,SAAS,cAAc,KAAK;AAE5CA,aAAQ,YAAY,gBAAgB,OAAO;AAC3CA,aAAQ,YAAY,kBAAkB;AAEtC,WAAO;AAAA,MACL,SAAAA;AAAAA,MACA,GAAG;AAAA,IAAA;AAAA,EAEP;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,GAAG;AAAA,EAAA;AAEP,GAAA;;"}
1
+ {"version":3,"file":"standard.js","sources":["../../../../source/composite/carousel/image/standard.ts"],"sourcesContent":["import {\n element,\n token,\n typography,\n} from '@universityofmaryland/web-styles-library';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\nimport { animations, buttons } from 'atomic';\nimport { Image as LayoutImage } from 'layout';\nimport * as carouselElements from '../elements';\n\ntype TypeImage = {\n image: HTMLImageElement;\n};\n\ntype TypeFullScreen = {\n isFullScreenOption?: boolean;\n};\n\ntype TypesetFullScreen = {\n setFullScreen: (arg: number) => void;\n};\n\ntype TypeSlideContent = {\n images: HTMLImageElement[];\n headlines?: HTMLElement[] | null;\n texts?: HTMLElement[] | null;\n};\n\ntype TypeImageContainerProps = TypeImage &\n TypeFullScreen &\n TypesetFullScreen & {\n index: number;\n };\n\ntype TypeCarouselSlideProps = TypeSlideContent &\n TypesetFullScreen &\n TypeFullScreen;\n\ntype TypeCarouselImageStandardProps = TypeSlideContent &\n TypeFullScreen & {\n isThemeDark?: boolean;\n };\n\nconst MEDIUM = 500;\n\nconst ATTRIBUTE_REFERENCE = 'data-reference';\nconst ATTRIBUTE_THEME = 'data-theme';\nconst THEME_DARK = 'dark';\n\nconst IS_THEME_DARK = `[${ATTRIBUTE_THEME}=\"${THEME_DARK}\"]`;\n\nconst ELEMENT_NAME = 'umd-carousel-image-standard';\nconst ELEMENT_CAROUSEL_IMAGE_DECLARATION =\n 'carousel-image-standard-declaration';\nconst ELEMENT_CAROUSEL_IMAGE_CONTAINER = 'carousel-image-standard-container';\n\nconst ELEMENT_SLIDE = 'carousel-image-standard-slide';\nconst ELEMENT_SLIDE_IMAGE_CONTAINER = 'carousel-image-standard-slide-image';\nconst ELEMENT_SLIDE_IMAGE_WRAPPER = 'carousel-image-standard-slide-wrapper';\nconst ELEMENT_SLIDE_TEXT_CONTAINER = 'carousel-image-standard-slide-text';\nconst ELEMENT_SLIDE_HEADLINE = 'carousel-image-standard-slide-headline';\nconst ELEMENT_SLIDE_RICH_TEXT = 'carousel-image-standard-slide-rich-text';\nconst ELEMENT_CAROUSEL_SLIDER_BUTTON = 'carousel-slider-button';\n\nconst ELEMENT_CAROUSEL_INDICATOR_WRAPPER = 'carousel-indicator-wrapper';\nconst ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER =\n 'carousel-overlay-image-container';\n\nconst OVERWRITE_THEME_DARK_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK}`;\nconst OVERWRITE_THEME_DARK_RICH_TEXT = `${OVERWRITE_THEME_DARK_CONTAINER} .${ELEMENT_SLIDE_RICH_TEXT}`;\nconst OVERWRITE_THEME_DARK_TEXT_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_TEXT_CONTAINER}`;\nconst OVERWRITE_THEME_DARK_IMAGE_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_IMAGE_CONTAINER}`;\nconst OVERWRITE_THEME_DARK_INDICATOR = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER}`;\nconst OVERWRITE_THEME_DARK_BUTTON = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_CAROUSEL_SLIDER_BUTTON}`;\n\n// prettier-ignore\nconst OverwriteThemeDark = `\n ${OVERWRITE_THEME_DARK_CONTAINER},\n ${OVERWRITE_THEME_DARK_TEXT_CONTAINER},\n ${OVERWRITE_THEME_DARK_INDICATOR} {\n background-color: ${token.color.black};\n }\n\n ${OVERWRITE_THEME_DARK_IMAGE_CONTAINER} {\n background-color: ${token.color.gray.dark};\n }\n\n ${OVERWRITE_THEME_DARK_TEXT_CONTAINER} * {\n color: ${token.color.white};\n }\n\n ${OVERWRITE_THEME_DARK_BUTTON} {\n background-color: ${token.color.black};\n }\n\n ${OVERWRITE_THEME_DARK_BUTTON} > svg {\n fill: ${token.color.white};\n }\n\n ${OVERWRITE_THEME_DARK_RICH_TEXT} {\n color: ${token.color.white};\n }\n\n ${jssToCSS({\n styleObj: {\n [`${OVERWRITE_THEME_DARK_RICH_TEXT}`]: element.text.rich.advancedDark,\n },\n })}\n`;\n\n// prettier-ignore\nconst IndicatorContainerStyles = `\n .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER} {\n padding: ${token.spacing.md};\n background-color: ${token.color.gray.lightest};\n display: flex;\n justify-content: center;\n }\n \n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER} {\n padding: ${token.spacing.lg};\n }\n }\n`;\n\n// prettier-ignore\nconst OverlayImageContainerStyles = `\n .${ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER} {\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ${token.color.gray.dark};\n }\n\n .${ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER} img {\n object-fit: contain;\n max-height: 100%;\n }\n`;\n\n// prettier-ignore\nconst TextContainerStyles = `\n .${ELEMENT_SLIDE_TEXT_CONTAINER} {\n padding: ${token.spacing.md};\n padding-bottom: 0;\n background-color: ${token.color.gray.lightest};\n }\n\n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${ELEMENT_SLIDE_TEXT_CONTAINER} {\n padding: ${token.spacing.lg};\n padding-bottom: 0;\n }\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_SLIDE_HEADLINE}`]: typography.sans.large,\n },\n })}\n\n .${ELEMENT_SLIDE_RICH_TEXT} {\n margin-top: ${token.spacing.min};\n color: ${token.color.gray.dark}\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_SLIDE_RICH_TEXT}`]: element.text.rich.advanced,\n },\n })}\n`\n\n// prettier-ignore\nconst ImageContainerStyles = `\n .${ELEMENT_SLIDE_IMAGE_CONTAINER} {\n position: relative;\n background-color: ${token.color.black};\n }\n\n .${ELEMENT_SLIDE_IMAGE_WRAPPER} {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .${ELEMENT_SLIDE_IMAGE_WRAPPER} > * {\n height: 100%;\n }\n\n .${ELEMENT_SLIDE_IMAGE_CONTAINER} img {\n object-fit: contain;\n max-height: 100%;\n }\n`\n\n// prettier-ignore\nconst STYLES_CAROUSEL_IMAGE_STANDARD_ELEMENT = `\n .${ELEMENT_CAROUSEL_IMAGE_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n }\n\n .${ELEMENT_CAROUSEL_IMAGE_CONTAINER} {\n overflow: hidden;\n background-color: ${token.color.gray.lightest};\n }\n\n ${LayoutImage.Styles}\n ${ImageContainerStyles}\n ${TextContainerStyles}\n ${OverlayImageContainerStyles}\n ${IndicatorContainerStyles}\n ${OverwriteThemeDark}\n`;\n\nexport default (props: TypeCarouselImageStandardProps) =>\n (() => {\n const { images, isThemeDark, isFullScreenOption } = props;\n const elementDeclaration = document.createElement('div');\n const elementContainer = document.createElement('div');\n const elementIndicator = document.createElement('div');\n const overlayCarousel = carouselElements.overlay({\n images,\n });\n let styles = STYLES_CAROUSEL_IMAGE_STANDARD_ELEMENT;\n\n styles += overlayCarousel.styles;\n\n const CreateTextContainer = ({\n headlines,\n texts,\n reference,\n }: {\n headlines?: HTMLElement[] | null;\n texts?: HTMLElement[] | null;\n reference: string | null;\n }) => {\n const textContainer = document.createElement('div');\n\n const headline = headlines?.find(\n (headline) => headline.getAttribute(ATTRIBUTE_REFERENCE) === reference,\n );\n const richText = texts?.find(\n (text) => text.getAttribute(ATTRIBUTE_REFERENCE) === reference,\n );\n\n textContainer.classList.add(ELEMENT_SLIDE_TEXT_CONTAINER);\n\n if (headline || richText) {\n if (headline) {\n headline.classList.add(ELEMENT_SLIDE_HEADLINE);\n textContainer.appendChild(headline);\n }\n\n if (richText) {\n richText.classList.add(ELEMENT_SLIDE_RICH_TEXT);\n textContainer.appendChild(richText);\n }\n\n return textContainer;\n }\n\n return null;\n };\n\n const CreateImageContainer = ({\n image,\n isFullScreenOption,\n setFullScreen,\n index,\n }: TypeImageContainerProps) => {\n const imageContainer = document.createElement('div');\n const imageWrapper = document.createElement('div');\n const imageBlock = LayoutImage.CreateElement({\n image,\n showCaption: true,\n });\n\n imageContainer.classList.add(ELEMENT_SLIDE_IMAGE_CONTAINER);\n\n imageWrapper.classList.add(ELEMENT_SLIDE_IMAGE_WRAPPER);\n imageWrapper.appendChild(imageBlock);\n\n if (isFullScreenOption) {\n const button = buttons.fullscreen.create({\n callback: setFullScreen,\n index,\n });\n imageBlock.appendChild(button.element);\n\n styles += button.styles;\n }\n\n imageContainer.appendChild(imageWrapper);\n\n return imageContainer;\n };\n\n const CreateSlide = (props: TypeCarouselSlideProps) => {\n const { images, setFullScreen } = props;\n const clonedImages = images.map((image) =>\n image.cloneNode(true),\n ) as HTMLImageElement[];\n\n return clonedImages.map((image, index) => {\n const reference = image.getAttribute(ATTRIBUTE_REFERENCE);\n const slide = document.createElement('div');\n const imageContainer = CreateImageContainer({\n ...props,\n image,\n setFullScreen,\n index,\n });\n const textContainer = CreateTextContainer({ ...props, reference });\n\n slide.classList.add(ELEMENT_SLIDE);\n slide.appendChild(imageContainer);\n if (textContainer) slide.appendChild(textContainer);\n\n return slide;\n });\n };\n\n const slides = CreateSlide({\n ...props,\n setFullScreen: overlayCarousel.events.setFullScreen,\n });\n const carousel = carouselElements.image({\n slides,\n callback: (activeIndex) => {\n indicator.position(activeIndex);\n },\n maxHeight: 500,\n });\n\n styles += carousel.styles;\n\n const indicator = animations.actions.indicator({\n count: images.length || 0,\n callback: carousel.events.EventMoveTo,\n isThemeDark,\n isThemeLight: !isThemeDark,\n });\n\n styles += indicator.styles;\n\n elementIndicator.classList.add(ELEMENT_CAROUSEL_INDICATOR_WRAPPER);\n elementIndicator.appendChild(indicator.element);\n\n elementContainer.classList.add(ELEMENT_CAROUSEL_IMAGE_CONTAINER);\n elementContainer.appendChild(carousel.element);\n elementContainer.appendChild(elementIndicator);\n if (isThemeDark) elementContainer.setAttribute(ATTRIBUTE_THEME, THEME_DARK);\n\n elementDeclaration.classList.add(ELEMENT_CAROUSEL_IMAGE_DECLARATION);\n elementDeclaration.appendChild(elementContainer);\n\n images[images.length - 1].addEventListener('load', carousel.events.Load);\n\n const responseOptions = {\n styles,\n events: {\n SetEventReize: carousel.events.EventResize,\n },\n };\n\n if (isFullScreenOption) {\n const element = document.createElement('div');\n\n element.appendChild(overlayCarousel.element);\n element.appendChild(elementDeclaration);\n\n return {\n element,\n ...responseOptions,\n };\n }\n\n return {\n element: elementDeclaration,\n ...responseOptions,\n };\n })();\n"],"names":["token","jssToCSS","element","typography","LayoutImage","carouselElements.overlay","styles","headline","image","isFullScreenOption","index","buttons.fullscreen","props","images","carouselElements.image","indicator","animations.actions.indicator"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { token, typography, element } from "@universityofmaryland/web-styles-library";
1
+ import { token, element, typography } from "@universityofmaryland/web-styles-library";
2
2
  import { jssToCSS } from "@universityofmaryland/web-utilities-library/styles";
3
3
  import "@universityofmaryland/web-styles-library/token";
4
4
  import "@universityofmaryland/web-styles-library/element";
@@ -49,6 +49,7 @@ const ELEMENT_CAROUSEL_SLIDER_BUTTON = "carousel-slider-button";
49
49
  const ELEMENT_CAROUSEL_INDICATOR_WRAPPER = "carousel-indicator-wrapper";
50
50
  const ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER = "carousel-overlay-image-container";
51
51
  const OVERWRITE_THEME_DARK_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK}`;
52
+ const OVERWRITE_THEME_DARK_RICH_TEXT = `${OVERWRITE_THEME_DARK_CONTAINER} .${ELEMENT_SLIDE_RICH_TEXT}`;
52
53
  const OVERWRITE_THEME_DARK_TEXT_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_TEXT_CONTAINER}`;
53
54
  const OVERWRITE_THEME_DARK_IMAGE_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_IMAGE_CONTAINER}`;
54
55
  const OVERWRITE_THEME_DARK_INDICATOR = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER}`;
@@ -75,6 +76,16 @@ const OverwriteThemeDark = `
75
76
  ${OVERWRITE_THEME_DARK_BUTTON} > svg {
76
77
  fill: ${token.color.white};
77
78
  }
79
+
80
+ ${OVERWRITE_THEME_DARK_RICH_TEXT} {
81
+ color: ${token.color.white};
82
+ }
83
+
84
+ ${jssToCSS({
85
+ styleObj: {
86
+ [`${OVERWRITE_THEME_DARK_RICH_TEXT}`]: element.text.rich.advancedDark
87
+ }
88
+ })}
78
89
  `;
79
90
  const IndicatorContainerStyles = `
80
91
  .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER} {
@@ -1 +1 @@
1
- {"version":3,"file":"standard.mjs","sources":["../../../../source/composite/carousel/image/standard.ts"],"sourcesContent":["import {\n element,\n token,\n typography,\n} from '@universityofmaryland/web-styles-library';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\nimport { animations, buttons } from 'atomic';\nimport { Image as LayoutImage } from 'layout';\nimport * as carouselElements from '../elements';\n\ntype TypeImage = {\n image: HTMLImageElement;\n};\n\ntype TypeFullScreen = {\n isFullScreenOption?: boolean;\n};\n\ntype TypesetFullScreen = {\n setFullScreen: (arg: number) => void;\n};\n\ntype TypeSlideContent = {\n images: HTMLImageElement[];\n headlines?: HTMLElement[] | null;\n texts?: HTMLElement[] | null;\n};\n\ntype TypeImageContainerProps = TypeImage &\n TypeFullScreen &\n TypesetFullScreen & {\n index: number;\n };\n\ntype TypeCarouselSlideProps = TypeSlideContent &\n TypesetFullScreen &\n TypeFullScreen;\n\ntype TypeCarouselImageStandardProps = TypeSlideContent &\n TypeFullScreen & {\n isThemeDark?: boolean;\n };\n\nconst MEDIUM = 500;\n\nconst ATTRIBUTE_REFERENCE = 'data-reference';\nconst ATTRIBUTE_THEME = 'data-theme';\nconst THEME_DARK = 'dark';\n\nconst IS_THEME_DARK = `[${ATTRIBUTE_THEME}=\"${THEME_DARK}\"]`;\n\nconst ELEMENT_NAME = 'umd-carousel-image-standard';\nconst ELEMENT_CAROUSEL_IMAGE_DECLARATION =\n 'carousel-image-standard-declaration';\nconst ELEMENT_CAROUSEL_IMAGE_CONTAINER = 'carousel-image-standard-container';\n\nconst ELEMENT_SLIDE = 'carousel-image-standard-slide';\nconst ELEMENT_SLIDE_IMAGE_CONTAINER = 'carousel-image-standard-slide-image';\nconst ELEMENT_SLIDE_IMAGE_WRAPPER = 'carousel-image-standard-slide-wrapper';\nconst ELEMENT_SLIDE_TEXT_CONTAINER = 'carousel-image-standard-slide-text';\nconst ELEMENT_SLIDE_HEADLINE = 'carousel-image-standard-slide-headline';\nconst ELEMENT_SLIDE_RICH_TEXT = 'carousel-image-standard-slide-rich-text';\nconst ELEMENT_CAROUSEL_SLIDER_BUTTON = 'carousel-slider-button';\n\nconst ELEMENT_CAROUSEL_INDICATOR_WRAPPER = 'carousel-indicator-wrapper';\nconst ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER =\n 'carousel-overlay-image-container';\n\nconst OVERWRITE_THEME_DARK_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK}`;\nconst OVERWRITE_THEME_DARK_TEXT_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_TEXT_CONTAINER}`;\nconst OVERWRITE_THEME_DARK_IMAGE_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_IMAGE_CONTAINER}`;\nconst OVERWRITE_THEME_DARK_INDICATOR = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER}`;\nconst OVERWRITE_THEME_DARK_BUTTON = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_CAROUSEL_SLIDER_BUTTON}`;\n\n// prettier-ignore\nconst OverwriteThemeDark = `\n ${OVERWRITE_THEME_DARK_CONTAINER},\n ${OVERWRITE_THEME_DARK_TEXT_CONTAINER},\n ${OVERWRITE_THEME_DARK_INDICATOR} {\n background-color: ${token.color.black};\n }\n\n ${OVERWRITE_THEME_DARK_IMAGE_CONTAINER} {\n background-color: ${token.color.gray.dark};\n }\n\n ${OVERWRITE_THEME_DARK_TEXT_CONTAINER} * {\n color: ${token.color.white};\n }\n\n ${OVERWRITE_THEME_DARK_BUTTON} {\n background-color: ${token.color.black};\n }\n\n ${OVERWRITE_THEME_DARK_BUTTON} > svg {\n fill: ${token.color.white};\n }\n`;\n\n// prettier-ignore\nconst IndicatorContainerStyles = `\n .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER} {\n padding: ${token.spacing.md};\n background-color: ${token.color.gray.lightest};\n display: flex;\n justify-content: center;\n }\n \n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER} {\n padding: ${token.spacing.lg};\n }\n }\n`;\n\n// prettier-ignore\nconst OverlayImageContainerStyles = `\n .${ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER} {\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ${token.color.gray.dark};\n }\n\n .${ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER} img {\n object-fit: contain;\n max-height: 100%;\n }\n`;\n\n// prettier-ignore\nconst TextContainerStyles = `\n .${ELEMENT_SLIDE_TEXT_CONTAINER} {\n padding: ${token.spacing.md};\n padding-bottom: 0;\n background-color: ${token.color.gray.lightest};\n }\n\n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${ELEMENT_SLIDE_TEXT_CONTAINER} {\n padding: ${token.spacing.lg};\n padding-bottom: 0;\n }\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_SLIDE_HEADLINE}`]: typography.sans.large,\n },\n })}\n\n .${ELEMENT_SLIDE_RICH_TEXT} {\n margin-top: ${token.spacing.min};\n color: ${token.color.gray.dark}\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_SLIDE_RICH_TEXT}`]: element.text.rich.advanced,\n },\n })}\n`\n\n// prettier-ignore\nconst ImageContainerStyles = `\n .${ELEMENT_SLIDE_IMAGE_CONTAINER} {\n position: relative;\n background-color: ${token.color.black};\n }\n\n .${ELEMENT_SLIDE_IMAGE_WRAPPER} {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .${ELEMENT_SLIDE_IMAGE_WRAPPER} > * {\n height: 100%;\n }\n\n .${ELEMENT_SLIDE_IMAGE_CONTAINER} img {\n object-fit: contain;\n max-height: 100%;\n }\n`\n\n// prettier-ignore\nconst STYLES_CAROUSEL_IMAGE_STANDARD_ELEMENT = `\n .${ELEMENT_CAROUSEL_IMAGE_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n }\n\n .${ELEMENT_CAROUSEL_IMAGE_CONTAINER} {\n overflow: hidden;\n background-color: ${token.color.gray.lightest};\n }\n\n ${LayoutImage.Styles}\n ${ImageContainerStyles}\n ${TextContainerStyles}\n ${OverlayImageContainerStyles}\n ${IndicatorContainerStyles}\n ${OverwriteThemeDark}\n`;\n\nexport default (props: TypeCarouselImageStandardProps) =>\n (() => {\n const { images, isThemeDark, isFullScreenOption } = props;\n const elementDeclaration = document.createElement('div');\n const elementContainer = document.createElement('div');\n const elementIndicator = document.createElement('div');\n const overlayCarousel = carouselElements.overlay({\n images,\n });\n let styles = STYLES_CAROUSEL_IMAGE_STANDARD_ELEMENT;\n\n styles += overlayCarousel.styles;\n\n const CreateTextContainer = ({\n headlines,\n texts,\n reference,\n }: {\n headlines?: HTMLElement[] | null;\n texts?: HTMLElement[] | null;\n reference: string | null;\n }) => {\n const textContainer = document.createElement('div');\n\n const headline = headlines?.find(\n (headline) => headline.getAttribute(ATTRIBUTE_REFERENCE) === reference,\n );\n const richText = texts?.find(\n (text) => text.getAttribute(ATTRIBUTE_REFERENCE) === reference,\n );\n\n textContainer.classList.add(ELEMENT_SLIDE_TEXT_CONTAINER);\n\n if (headline || richText) {\n if (headline) {\n headline.classList.add(ELEMENT_SLIDE_HEADLINE);\n textContainer.appendChild(headline);\n }\n\n if (richText) {\n richText.classList.add(ELEMENT_SLIDE_RICH_TEXT);\n textContainer.appendChild(richText);\n }\n\n return textContainer;\n }\n\n return null;\n };\n\n const CreateImageContainer = ({\n image,\n isFullScreenOption,\n setFullScreen,\n index,\n }: TypeImageContainerProps) => {\n const imageContainer = document.createElement('div');\n const imageWrapper = document.createElement('div');\n const imageBlock = LayoutImage.CreateElement({\n image,\n showCaption: true,\n });\n\n imageContainer.classList.add(ELEMENT_SLIDE_IMAGE_CONTAINER);\n\n imageWrapper.classList.add(ELEMENT_SLIDE_IMAGE_WRAPPER);\n imageWrapper.appendChild(imageBlock);\n\n if (isFullScreenOption) {\n const button = buttons.fullscreen.create({\n callback: setFullScreen,\n index,\n });\n imageBlock.appendChild(button.element);\n\n styles += button.styles;\n }\n\n imageContainer.appendChild(imageWrapper);\n\n return imageContainer;\n };\n\n const CreateSlide = (props: TypeCarouselSlideProps) => {\n const { images, setFullScreen } = props;\n const clonedImages = images.map((image) =>\n image.cloneNode(true),\n ) as HTMLImageElement[];\n\n return clonedImages.map((image, index) => {\n const reference = image.getAttribute(ATTRIBUTE_REFERENCE);\n const slide = document.createElement('div');\n const imageContainer = CreateImageContainer({\n ...props,\n image,\n setFullScreen,\n index,\n });\n const textContainer = CreateTextContainer({ ...props, reference });\n\n slide.classList.add(ELEMENT_SLIDE);\n slide.appendChild(imageContainer);\n if (textContainer) slide.appendChild(textContainer);\n\n return slide;\n });\n };\n\n const slides = CreateSlide({\n ...props,\n setFullScreen: overlayCarousel.events.setFullScreen,\n });\n const carousel = carouselElements.image({\n slides,\n callback: (activeIndex) => {\n indicator.position(activeIndex);\n },\n maxHeight: 500,\n });\n\n styles += carousel.styles;\n\n const indicator = animations.actions.indicator({\n count: images.length || 0,\n callback: carousel.events.EventMoveTo,\n isThemeDark,\n isThemeLight: !isThemeDark,\n });\n\n styles += indicator.styles;\n\n elementIndicator.classList.add(ELEMENT_CAROUSEL_INDICATOR_WRAPPER);\n elementIndicator.appendChild(indicator.element);\n\n elementContainer.classList.add(ELEMENT_CAROUSEL_IMAGE_CONTAINER);\n elementContainer.appendChild(carousel.element);\n elementContainer.appendChild(elementIndicator);\n if (isThemeDark) elementContainer.setAttribute(ATTRIBUTE_THEME, THEME_DARK);\n\n elementDeclaration.classList.add(ELEMENT_CAROUSEL_IMAGE_DECLARATION);\n elementDeclaration.appendChild(elementContainer);\n\n images[images.length - 1].addEventListener('load', carousel.events.Load);\n\n const responseOptions = {\n styles,\n events: {\n SetEventReize: carousel.events.EventResize,\n },\n };\n\n if (isFullScreenOption) {\n const element = document.createElement('div');\n\n element.appendChild(overlayCarousel.element);\n element.appendChild(elementDeclaration);\n\n return {\n element,\n ...responseOptions,\n };\n }\n\n return {\n element: elementDeclaration,\n ...responseOptions,\n };\n })();\n"],"names":["carouselElements.overlay","headline","image","isFullScreenOption","index","buttons.fullscreen","props","images","carouselElements.image","indicator","animations.actions.indicator","element"],"mappings":"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"}
1
+ {"version":3,"file":"standard.mjs","sources":["../../../../source/composite/carousel/image/standard.ts"],"sourcesContent":["import {\n element,\n token,\n typography,\n} from '@universityofmaryland/web-styles-library';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\nimport { animations, buttons } from 'atomic';\nimport { Image as LayoutImage } from 'layout';\nimport * as carouselElements from '../elements';\n\ntype TypeImage = {\n image: HTMLImageElement;\n};\n\ntype TypeFullScreen = {\n isFullScreenOption?: boolean;\n};\n\ntype TypesetFullScreen = {\n setFullScreen: (arg: number) => void;\n};\n\ntype TypeSlideContent = {\n images: HTMLImageElement[];\n headlines?: HTMLElement[] | null;\n texts?: HTMLElement[] | null;\n};\n\ntype TypeImageContainerProps = TypeImage &\n TypeFullScreen &\n TypesetFullScreen & {\n index: number;\n };\n\ntype TypeCarouselSlideProps = TypeSlideContent &\n TypesetFullScreen &\n TypeFullScreen;\n\ntype TypeCarouselImageStandardProps = TypeSlideContent &\n TypeFullScreen & {\n isThemeDark?: boolean;\n };\n\nconst MEDIUM = 500;\n\nconst ATTRIBUTE_REFERENCE = 'data-reference';\nconst ATTRIBUTE_THEME = 'data-theme';\nconst THEME_DARK = 'dark';\n\nconst IS_THEME_DARK = `[${ATTRIBUTE_THEME}=\"${THEME_DARK}\"]`;\n\nconst ELEMENT_NAME = 'umd-carousel-image-standard';\nconst ELEMENT_CAROUSEL_IMAGE_DECLARATION =\n 'carousel-image-standard-declaration';\nconst ELEMENT_CAROUSEL_IMAGE_CONTAINER = 'carousel-image-standard-container';\n\nconst ELEMENT_SLIDE = 'carousel-image-standard-slide';\nconst ELEMENT_SLIDE_IMAGE_CONTAINER = 'carousel-image-standard-slide-image';\nconst ELEMENT_SLIDE_IMAGE_WRAPPER = 'carousel-image-standard-slide-wrapper';\nconst ELEMENT_SLIDE_TEXT_CONTAINER = 'carousel-image-standard-slide-text';\nconst ELEMENT_SLIDE_HEADLINE = 'carousel-image-standard-slide-headline';\nconst ELEMENT_SLIDE_RICH_TEXT = 'carousel-image-standard-slide-rich-text';\nconst ELEMENT_CAROUSEL_SLIDER_BUTTON = 'carousel-slider-button';\n\nconst ELEMENT_CAROUSEL_INDICATOR_WRAPPER = 'carousel-indicator-wrapper';\nconst ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER =\n 'carousel-overlay-image-container';\n\nconst OVERWRITE_THEME_DARK_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK}`;\nconst OVERWRITE_THEME_DARK_RICH_TEXT = `${OVERWRITE_THEME_DARK_CONTAINER} .${ELEMENT_SLIDE_RICH_TEXT}`;\nconst OVERWRITE_THEME_DARK_TEXT_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_TEXT_CONTAINER}`;\nconst OVERWRITE_THEME_DARK_IMAGE_CONTAINER = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_SLIDE_IMAGE_CONTAINER}`;\nconst OVERWRITE_THEME_DARK_INDICATOR = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER}`;\nconst OVERWRITE_THEME_DARK_BUTTON = `.${ELEMENT_CAROUSEL_IMAGE_CONTAINER}${IS_THEME_DARK} .${ELEMENT_CAROUSEL_SLIDER_BUTTON}`;\n\n// prettier-ignore\nconst OverwriteThemeDark = `\n ${OVERWRITE_THEME_DARK_CONTAINER},\n ${OVERWRITE_THEME_DARK_TEXT_CONTAINER},\n ${OVERWRITE_THEME_DARK_INDICATOR} {\n background-color: ${token.color.black};\n }\n\n ${OVERWRITE_THEME_DARK_IMAGE_CONTAINER} {\n background-color: ${token.color.gray.dark};\n }\n\n ${OVERWRITE_THEME_DARK_TEXT_CONTAINER} * {\n color: ${token.color.white};\n }\n\n ${OVERWRITE_THEME_DARK_BUTTON} {\n background-color: ${token.color.black};\n }\n\n ${OVERWRITE_THEME_DARK_BUTTON} > svg {\n fill: ${token.color.white};\n }\n\n ${OVERWRITE_THEME_DARK_RICH_TEXT} {\n color: ${token.color.white};\n }\n\n ${jssToCSS({\n styleObj: {\n [`${OVERWRITE_THEME_DARK_RICH_TEXT}`]: element.text.rich.advancedDark,\n },\n })}\n`;\n\n// prettier-ignore\nconst IndicatorContainerStyles = `\n .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER} {\n padding: ${token.spacing.md};\n background-color: ${token.color.gray.lightest};\n display: flex;\n justify-content: center;\n }\n \n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${ELEMENT_CAROUSEL_INDICATOR_WRAPPER} {\n padding: ${token.spacing.lg};\n }\n }\n`;\n\n// prettier-ignore\nconst OverlayImageContainerStyles = `\n .${ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER} {\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: ${token.color.gray.dark};\n }\n\n .${ELEMENT_CAROUSEL_OVERLAY_IMAGE_COINTAINER} img {\n object-fit: contain;\n max-height: 100%;\n }\n`;\n\n// prettier-ignore\nconst TextContainerStyles = `\n .${ELEMENT_SLIDE_TEXT_CONTAINER} {\n padding: ${token.spacing.md};\n padding-bottom: 0;\n background-color: ${token.color.gray.lightest};\n }\n\n @container ${ELEMENT_NAME} (min-width: ${MEDIUM}px) {\n .${ELEMENT_SLIDE_TEXT_CONTAINER} {\n padding: ${token.spacing.lg};\n padding-bottom: 0;\n }\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_SLIDE_HEADLINE}`]: typography.sans.large,\n },\n })}\n\n .${ELEMENT_SLIDE_RICH_TEXT} {\n margin-top: ${token.spacing.min};\n color: ${token.color.gray.dark}\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_SLIDE_RICH_TEXT}`]: element.text.rich.advanced,\n },\n })}\n`\n\n// prettier-ignore\nconst ImageContainerStyles = `\n .${ELEMENT_SLIDE_IMAGE_CONTAINER} {\n position: relative;\n background-color: ${token.color.black};\n }\n\n .${ELEMENT_SLIDE_IMAGE_WRAPPER} {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .${ELEMENT_SLIDE_IMAGE_WRAPPER} > * {\n height: 100%;\n }\n\n .${ELEMENT_SLIDE_IMAGE_CONTAINER} img {\n object-fit: contain;\n max-height: 100%;\n }\n`\n\n// prettier-ignore\nconst STYLES_CAROUSEL_IMAGE_STANDARD_ELEMENT = `\n .${ELEMENT_CAROUSEL_IMAGE_DECLARATION} {\n container: ${ELEMENT_NAME} / inline-size;\n }\n\n .${ELEMENT_CAROUSEL_IMAGE_CONTAINER} {\n overflow: hidden;\n background-color: ${token.color.gray.lightest};\n }\n\n ${LayoutImage.Styles}\n ${ImageContainerStyles}\n ${TextContainerStyles}\n ${OverlayImageContainerStyles}\n ${IndicatorContainerStyles}\n ${OverwriteThemeDark}\n`;\n\nexport default (props: TypeCarouselImageStandardProps) =>\n (() => {\n const { images, isThemeDark, isFullScreenOption } = props;\n const elementDeclaration = document.createElement('div');\n const elementContainer = document.createElement('div');\n const elementIndicator = document.createElement('div');\n const overlayCarousel = carouselElements.overlay({\n images,\n });\n let styles = STYLES_CAROUSEL_IMAGE_STANDARD_ELEMENT;\n\n styles += overlayCarousel.styles;\n\n const CreateTextContainer = ({\n headlines,\n texts,\n reference,\n }: {\n headlines?: HTMLElement[] | null;\n texts?: HTMLElement[] | null;\n reference: string | null;\n }) => {\n const textContainer = document.createElement('div');\n\n const headline = headlines?.find(\n (headline) => headline.getAttribute(ATTRIBUTE_REFERENCE) === reference,\n );\n const richText = texts?.find(\n (text) => text.getAttribute(ATTRIBUTE_REFERENCE) === reference,\n );\n\n textContainer.classList.add(ELEMENT_SLIDE_TEXT_CONTAINER);\n\n if (headline || richText) {\n if (headline) {\n headline.classList.add(ELEMENT_SLIDE_HEADLINE);\n textContainer.appendChild(headline);\n }\n\n if (richText) {\n richText.classList.add(ELEMENT_SLIDE_RICH_TEXT);\n textContainer.appendChild(richText);\n }\n\n return textContainer;\n }\n\n return null;\n };\n\n const CreateImageContainer = ({\n image,\n isFullScreenOption,\n setFullScreen,\n index,\n }: TypeImageContainerProps) => {\n const imageContainer = document.createElement('div');\n const imageWrapper = document.createElement('div');\n const imageBlock = LayoutImage.CreateElement({\n image,\n showCaption: true,\n });\n\n imageContainer.classList.add(ELEMENT_SLIDE_IMAGE_CONTAINER);\n\n imageWrapper.classList.add(ELEMENT_SLIDE_IMAGE_WRAPPER);\n imageWrapper.appendChild(imageBlock);\n\n if (isFullScreenOption) {\n const button = buttons.fullscreen.create({\n callback: setFullScreen,\n index,\n });\n imageBlock.appendChild(button.element);\n\n styles += button.styles;\n }\n\n imageContainer.appendChild(imageWrapper);\n\n return imageContainer;\n };\n\n const CreateSlide = (props: TypeCarouselSlideProps) => {\n const { images, setFullScreen } = props;\n const clonedImages = images.map((image) =>\n image.cloneNode(true),\n ) as HTMLImageElement[];\n\n return clonedImages.map((image, index) => {\n const reference = image.getAttribute(ATTRIBUTE_REFERENCE);\n const slide = document.createElement('div');\n const imageContainer = CreateImageContainer({\n ...props,\n image,\n setFullScreen,\n index,\n });\n const textContainer = CreateTextContainer({ ...props, reference });\n\n slide.classList.add(ELEMENT_SLIDE);\n slide.appendChild(imageContainer);\n if (textContainer) slide.appendChild(textContainer);\n\n return slide;\n });\n };\n\n const slides = CreateSlide({\n ...props,\n setFullScreen: overlayCarousel.events.setFullScreen,\n });\n const carousel = carouselElements.image({\n slides,\n callback: (activeIndex) => {\n indicator.position(activeIndex);\n },\n maxHeight: 500,\n });\n\n styles += carousel.styles;\n\n const indicator = animations.actions.indicator({\n count: images.length || 0,\n callback: carousel.events.EventMoveTo,\n isThemeDark,\n isThemeLight: !isThemeDark,\n });\n\n styles += indicator.styles;\n\n elementIndicator.classList.add(ELEMENT_CAROUSEL_INDICATOR_WRAPPER);\n elementIndicator.appendChild(indicator.element);\n\n elementContainer.classList.add(ELEMENT_CAROUSEL_IMAGE_CONTAINER);\n elementContainer.appendChild(carousel.element);\n elementContainer.appendChild(elementIndicator);\n if (isThemeDark) elementContainer.setAttribute(ATTRIBUTE_THEME, THEME_DARK);\n\n elementDeclaration.classList.add(ELEMENT_CAROUSEL_IMAGE_DECLARATION);\n elementDeclaration.appendChild(elementContainer);\n\n images[images.length - 1].addEventListener('load', carousel.events.Load);\n\n const responseOptions = {\n styles,\n events: {\n SetEventReize: carousel.events.EventResize,\n },\n };\n\n if (isFullScreenOption) {\n const element = document.createElement('div');\n\n element.appendChild(overlayCarousel.element);\n element.appendChild(elementDeclaration);\n\n return {\n element,\n ...responseOptions,\n };\n }\n\n return {\n element: elementDeclaration,\n ...responseOptions,\n };\n })();\n"],"names":["carouselElements.overlay","headline","image","isFullScreenOption","index","buttons.fullscreen","props","images","carouselElements.image","indicator","animations.actions.indicator","element"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../source/composite/footer/elements/main-section/index.ts"],"sourcesContent":["import { ElementModel } from 'model';\nimport createRowLogo, { type RowLogoProps } from './row-logo';\nimport createRowLinks, { type RowLinksProps } from './row-links';\nimport { BaseProps } from '../../_types';\nimport { type ElementVisual } from '../../../../_types';\n\nexport interface MainSectionProps\n extends BaseProps,\n RowLinksProps,\n RowLogoProps {\n slotVisualImage: HTMLImageElement | null;\n}\n\nconst createVisualContainer = (\n props: Pick<\n MainSectionProps,\n 'isTypeVisual' | 'isTypeSimple' | 'slotVisualImage'\n >,\n): ElementVisual | undefined => {\n const { isTypeVisual, isTypeSimple, slotVisualImage } = props;\n const isShowVisualImage = isTypeVisual || isTypeSimple;\n\n if (!isShowVisualImage) return;\n\n let altText: string | null = null;\n let imageSrc: string | null = null;\n\n if (slotVisualImage) {\n const source = slotVisualImage.getAttribute('src');\n const alt = slotVisualImage.getAttribute('alt');\n\n if (typeof source === 'string' && source.length > 0) {\n imageSrc = source;\n }\n if (typeof alt === 'string' && alt.length > 0) {\n altText = alt;\n }\n } else if (isTypeVisual) {\n altText = 'The University of Maryland Campus';\n imageSrc = new URL('../../assets/visual-default.jpg', import.meta.url).href;\n }\n\n if (!imageSrc || !altText) return;\n\n const gradientElement = ElementModel.createDiv({\n className: 'umd-footer-background-image-graident',\n elementStyles: {\n element: {\n display: 'block',\n position: 'absolute',\n left: 0,\n top: '2px',\n width: '500vw',\n height: '100px',\n background: `linear-gradient(180deg, rgba(255, 255, 255, 1) 0%, #e4edf9 100%)`,\n },\n },\n });\n\n const imageElement = ElementModel.create({\n element: document.createElement('img'),\n className: 'umd-footer-background-image',\n elementStyles: {\n element: {\n width: '100% !important',\n objectFit: 'cover !important',\n display: 'block !important',\n objectPosition: 'center',\n },\n },\n });\n\n imageElement.element.setAttribute('src', imageSrc);\n imageElement.element.setAttribute('alt', altText);\n\n return ElementModel.createDiv({\n className: 'umd-footer-background-image-container',\n children: [gradientElement, imageElement],\n elementStyles: {\n element: {\n position: 'relative',\n paddingTop: '100px',\n\n [`& img`]: {\n width: '100% !important',\n objectFit: 'cover !important',\n display: 'block !important',\n objectPosition: 'center',\n },\n },\n },\n });\n};\n\nconst createContainer = (\n logoRow: ElementVisual,\n visualContainerElement?: ElementVisual,\n linksRowElement?: ElementVisual,\n): ElementVisual => {\n return ElementModel.createDiv({\n className: 'umd-footer-main-container',\n children: [visualContainerElement, logoRow, linksRowElement].filter(\n Boolean,\n ) as ElementVisual[],\n });\n};\n\nexport default (props: MainSectionProps): ElementVisual => {\n const { isTypeMega, isTypeVisual } = props;\n\n const logoRow = createRowLogo(props);\n const visualContainerElement = createVisualContainer(props);\n const linksRowElement = (isTypeMega || isTypeVisual) && createRowLinks(props);\n\n return createContainer(\n logoRow,\n visualContainerElement,\n linksRowElement || undefined,\n );\n};\n"],"names":["ElementModel.createDiv","ElementModel.create","createRowLogo","createRowLinks"],"mappings":";;;;;AAaA,MAAM,wBAAwB,CAC5B,UAI8B;AAC9B,QAAM,EAAE,cAAc,cAAc,gBAAA,IAAoB;AACxD,QAAM,oBAAoB,gBAAgB;AAE1C,MAAI,CAAC,kBAAmB;AAExB,MAAI,UAAyB;AAC7B,MAAI,WAA0B;AAE9B,MAAI,iBAAiB;AACnB,UAAM,SAAS,gBAAgB,aAAa,KAAK;AACjD,UAAM,MAAM,gBAAgB,aAAa,KAAK;AAE9C,QAAI,OAAO,WAAW,YAAY,OAAO,SAAS,GAAG;AACnD,iBAAW;AAAA,IACb;AACA,QAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,GAAG;AAC7C,gBAAU;AAAA,IACZ;AAAA,EACF,WAAW,cAAc;AACvB,cAAU;AACV,eAAW,IAAA,IAAA,+85IAAA,OAAA,aAAA,cAAA,QAAA,KAAA,EAAA,cAAA,UAAA,EAAA,OAAA,0BAAA,uBAAA,QAAA,YAAA,MAAA,YAAA,uBAAA,OAAA,IAAA,IAAA,mDAAA,SAAA,OAAA,EAAA,IAAA,EAA4D;AAAA,EACzE;AAEA,MAAI,CAAC,YAAY,CAAC,QAAS;AAE3B,QAAM,kBAAkBA,QAAAA,UAAuB;AAAA,IAC7C,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,QACP,SAAS;AAAA,QACT,UAAU;AAAA,QACV,MAAM;AAAA,QACN,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IACd;AAAA,EACF,CACD;AAED,QAAM,eAAeC,QAAAA,OAAoB;AAAA,IACvC,SAAS,SAAS,cAAc,KAAK;AAAA,IACrC,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,QACP,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,QACT,gBAAgB;AAAA,MAAA;AAAA,IAClB;AAAA,EACF,CACD;AAED,eAAa,QAAQ,aAAa,OAAO,QAAQ;AACjD,eAAa,QAAQ,aAAa,OAAO,OAAO;AAEhD,SAAOD,kBAAuB;AAAA,IAC5B,WAAW;AAAA,IACX,UAAU,CAAC,iBAAiB,YAAY;AAAA,IACxC,eAAe;AAAA,MACb,SAAS;AAAA,QACP,UAAU;AAAA,QACV,YAAY;AAAA,QAEZ,CAAC,OAAO,GAAG;AAAA,UACT,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS;AAAA,UACT,gBAAgB;AAAA,QAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CACD;AACH;AAEA,MAAM,kBAAkB,CACtB,SACA,wBACA,oBACkB;AAClB,SAAOA,kBAAuB;AAAA,IAC5B,WAAW;AAAA,IACX,UAAU,CAAC,wBAAwB,SAAS,eAAe,EAAE;AAAA,MAC3D;AAAA,IAAA;AAAA,EACF,CACD;AACH;AAEA,MAAA,aAAe,CAAC,UAA2C;AACzD,QAAM,EAAE,YAAY,aAAA,IAAiB;AAErC,QAAM,UAAUE,MAAc,KAAK;AACnC,QAAM,yBAAyB,sBAAsB,KAAK;AAC1D,QAAM,mBAAmB,cAAc,iBAAiBC,QAAe,KAAK;AAE5E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,EAAA;AAEvB;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../source/composite/footer/elements/main-section/index.ts"],"sourcesContent":["import { ElementModel } from 'model';\nimport createRowLogo, { type RowLogoProps } from './row-logo';\nimport createRowLinks, { type RowLinksProps } from './row-links';\nimport { BaseProps } from '../../_types';\nimport { type ElementVisual } from '../../../../_types';\n\nexport interface MainSectionProps\n extends BaseProps,\n RowLinksProps,\n RowLogoProps {\n slotVisualImage: HTMLImageElement | null;\n}\n\nconst createVisualContainer = (\n props: Pick<\n MainSectionProps,\n 'isTypeVisual' | 'isTypeSimple' | 'slotVisualImage'\n >,\n): ElementVisual | undefined => {\n const { isTypeVisual, isTypeSimple, slotVisualImage } = props;\n const isShowVisualImage = isTypeVisual || isTypeSimple;\n\n if (!isShowVisualImage) return;\n\n let altText: string | null = null;\n let imageSrc: string | null = null;\n\n if (slotVisualImage) {\n const source = slotVisualImage.getAttribute('src');\n const alt = slotVisualImage.getAttribute('alt');\n\n if (typeof source === 'string' && source.length > 0) {\n imageSrc = source;\n }\n if (typeof alt === 'string' && alt.length > 0) {\n altText = alt;\n }\n } else if (isTypeVisual) {\n altText = 'The University of Maryland Campus';\n imageSrc = new URL('../../assets/visual-default.jpg', import.meta.url as any).href;\n }\n\n if (!imageSrc || !altText) return;\n\n const gradientElement = ElementModel.createDiv({\n className: 'umd-footer-background-image-graident',\n elementStyles: {\n element: {\n display: 'block',\n position: 'absolute',\n left: 0,\n top: '2px',\n width: '500vw',\n height: '100px',\n background: `linear-gradient(180deg, rgba(255, 255, 255, 1) 0%, #e4edf9 100%)`,\n },\n },\n });\n\n const imageElement = ElementModel.create({\n element: document.createElement('img'),\n className: 'umd-footer-background-image',\n elementStyles: {\n element: {\n width: '100% !important',\n objectFit: 'cover !important',\n display: 'block !important',\n objectPosition: 'center',\n },\n },\n });\n\n imageElement.element.setAttribute('src', imageSrc);\n imageElement.element.setAttribute('alt', altText);\n\n return ElementModel.createDiv({\n className: 'umd-footer-background-image-container',\n children: [gradientElement, imageElement],\n elementStyles: {\n element: {\n position: 'relative',\n paddingTop: '100px',\n\n [`& img`]: {\n width: '100% !important',\n objectFit: 'cover !important',\n display: 'block !important',\n objectPosition: 'center',\n },\n },\n },\n });\n};\n\nconst createContainer = (\n logoRow: ElementVisual,\n visualContainerElement?: ElementVisual,\n linksRowElement?: ElementVisual,\n): ElementVisual => {\n return ElementModel.createDiv({\n className: 'umd-footer-main-container',\n children: [visualContainerElement, logoRow, linksRowElement].filter(\n Boolean,\n ) as ElementVisual[],\n });\n};\n\nexport default (props: MainSectionProps): ElementVisual => {\n const { isTypeMega, isTypeVisual } = props;\n\n const logoRow = createRowLogo(props);\n const visualContainerElement = createVisualContainer(props);\n const linksRowElement = (isTypeMega || isTypeVisual) && createRowLinks(props);\n\n return createContainer(\n logoRow,\n visualContainerElement,\n linksRowElement || undefined,\n );\n};\n"],"names":["ElementModel.createDiv","ElementModel.create","createRowLogo","createRowLinks"],"mappings":";;;;;AAaA,MAAM,wBAAwB,CAC5B,UAI8B;AAC9B,QAAM,EAAE,cAAc,cAAc,gBAAA,IAAoB;AACxD,QAAM,oBAAoB,gBAAgB;AAE1C,MAAI,CAAC,kBAAmB;AAExB,MAAI,UAAyB;AAC7B,MAAI,WAA0B;AAE9B,MAAI,iBAAiB;AACnB,UAAM,SAAS,gBAAgB,aAAa,KAAK;AACjD,UAAM,MAAM,gBAAgB,aAAa,KAAK;AAE9C,QAAI,OAAO,WAAW,YAAY,OAAO,SAAS,GAAG;AACnD,iBAAW;AAAA,IACb;AACA,QAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,GAAG;AAC7C,gBAAU;AAAA,IACZ;AAAA,EACF,WAAW,cAAc;AACvB,cAAU;AACV,eAAW,IAAA,IAAA,+85IAAA,OAAA,aAAA,cAAA,QAAA,KAAA,EAAA,cAAA,UAAA,EAAA,OAAA,0BAAA,uBAAA,QAAA,YAAA,MAAA,YAAA,uBAAA,OAAA,IAAA,IAAA,mDAAA,SAAA,OAAA,EAAA,IAAA,EAAmE;AAAA,EAChF;AAEA,MAAI,CAAC,YAAY,CAAC,QAAS;AAE3B,QAAM,kBAAkBA,QAAAA,UAAuB;AAAA,IAC7C,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,QACP,SAAS;AAAA,QACT,UAAU;AAAA,QACV,MAAM;AAAA,QACN,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IACd;AAAA,EACF,CACD;AAED,QAAM,eAAeC,QAAAA,OAAoB;AAAA,IACvC,SAAS,SAAS,cAAc,KAAK;AAAA,IACrC,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,QACP,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,QACT,gBAAgB;AAAA,MAAA;AAAA,IAClB;AAAA,EACF,CACD;AAED,eAAa,QAAQ,aAAa,OAAO,QAAQ;AACjD,eAAa,QAAQ,aAAa,OAAO,OAAO;AAEhD,SAAOD,kBAAuB;AAAA,IAC5B,WAAW;AAAA,IACX,UAAU,CAAC,iBAAiB,YAAY;AAAA,IACxC,eAAe;AAAA,MACb,SAAS;AAAA,QACP,UAAU;AAAA,QACV,YAAY;AAAA,QAEZ,CAAC,OAAO,GAAG;AAAA,UACT,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS;AAAA,UACT,gBAAgB;AAAA,QAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CACD;AACH;AAEA,MAAM,kBAAkB,CACtB,SACA,wBACA,oBACkB;AAClB,SAAOA,kBAAuB;AAAA,IAC5B,WAAW;AAAA,IACX,UAAU,CAAC,wBAAwB,SAAS,eAAe,EAAE;AAAA,MAC3D;AAAA,IAAA;AAAA,EACF,CACD;AACH;AAEA,MAAA,aAAe,CAAC,UAA2C;AACzD,QAAM,EAAE,YAAY,aAAA,IAAiB;AAErC,QAAM,UAAUE,MAAc,KAAK;AACnC,QAAM,yBAAyB,sBAAsB,KAAK;AAC1D,QAAM,mBAAmB,cAAc,iBAAiBC,QAAe,KAAK;AAE5E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,EAAA;AAEvB;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../source/composite/footer/elements/main-section/index.ts"],"sourcesContent":["import { ElementModel } from 'model';\nimport createRowLogo, { type RowLogoProps } from './row-logo';\nimport createRowLinks, { type RowLinksProps } from './row-links';\nimport { BaseProps } from '../../_types';\nimport { type ElementVisual } from '../../../../_types';\n\nexport interface MainSectionProps\n extends BaseProps,\n RowLinksProps,\n RowLogoProps {\n slotVisualImage: HTMLImageElement | null;\n}\n\nconst createVisualContainer = (\n props: Pick<\n MainSectionProps,\n 'isTypeVisual' | 'isTypeSimple' | 'slotVisualImage'\n >,\n): ElementVisual | undefined => {\n const { isTypeVisual, isTypeSimple, slotVisualImage } = props;\n const isShowVisualImage = isTypeVisual || isTypeSimple;\n\n if (!isShowVisualImage) return;\n\n let altText: string | null = null;\n let imageSrc: string | null = null;\n\n if (slotVisualImage) {\n const source = slotVisualImage.getAttribute('src');\n const alt = slotVisualImage.getAttribute('alt');\n\n if (typeof source === 'string' && source.length > 0) {\n imageSrc = source;\n }\n if (typeof alt === 'string' && alt.length > 0) {\n altText = alt;\n }\n } else if (isTypeVisual) {\n altText = 'The University of Maryland Campus';\n imageSrc = new URL('../../assets/visual-default.jpg', import.meta.url).href;\n }\n\n if (!imageSrc || !altText) return;\n\n const gradientElement = ElementModel.createDiv({\n className: 'umd-footer-background-image-graident',\n elementStyles: {\n element: {\n display: 'block',\n position: 'absolute',\n left: 0,\n top: '2px',\n width: '500vw',\n height: '100px',\n background: `linear-gradient(180deg, rgba(255, 255, 255, 1) 0%, #e4edf9 100%)`,\n },\n },\n });\n\n const imageElement = ElementModel.create({\n element: document.createElement('img'),\n className: 'umd-footer-background-image',\n elementStyles: {\n element: {\n width: '100% !important',\n objectFit: 'cover !important',\n display: 'block !important',\n objectPosition: 'center',\n },\n },\n });\n\n imageElement.element.setAttribute('src', imageSrc);\n imageElement.element.setAttribute('alt', altText);\n\n return ElementModel.createDiv({\n className: 'umd-footer-background-image-container',\n children: [gradientElement, imageElement],\n elementStyles: {\n element: {\n position: 'relative',\n paddingTop: '100px',\n\n [`& img`]: {\n width: '100% !important',\n objectFit: 'cover !important',\n display: 'block !important',\n objectPosition: 'center',\n },\n },\n },\n });\n};\n\nconst createContainer = (\n logoRow: ElementVisual,\n visualContainerElement?: ElementVisual,\n linksRowElement?: ElementVisual,\n): ElementVisual => {\n return ElementModel.createDiv({\n className: 'umd-footer-main-container',\n children: [visualContainerElement, logoRow, linksRowElement].filter(\n Boolean,\n ) as ElementVisual[],\n });\n};\n\nexport default (props: MainSectionProps): ElementVisual => {\n const { isTypeMega, isTypeVisual } = props;\n\n const logoRow = createRowLogo(props);\n const visualContainerElement = createVisualContainer(props);\n const linksRowElement = (isTypeMega || isTypeVisual) && createRowLinks(props);\n\n return createContainer(\n logoRow,\n visualContainerElement,\n linksRowElement || undefined,\n );\n};\n"],"names":["ElementModel.createDiv","ElementModel.create"],"mappings":";;;AAaA,MAAM,wBAAwB,CAC5B,UAI8B;AAC9B,QAAM,EAAE,cAAc,cAAc,gBAAA,IAAoB;AACxD,QAAM,oBAAoB,gBAAgB;AAE1C,MAAI,CAAC,kBAAmB;AAExB,MAAI,UAAyB;AAC7B,MAAI,WAA0B;AAE9B,MAAI,iBAAiB;AACnB,UAAM,SAAS,gBAAgB,aAAa,KAAK;AACjD,UAAM,MAAM,gBAAgB,aAAa,KAAK;AAE9C,QAAI,OAAO,WAAW,YAAY,OAAO,SAAS,GAAG;AACnD,iBAAW;AAAA,IACb;AACA,QAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,GAAG;AAC7C,gBAAU;AAAA,IACZ;AAAA,EACF,WAAW,cAAc;AACvB,cAAU;AACV,eAAW,IAAA,IAAA,+85IAAA,YAAA,GAAA,EAA4D;AAAA,EACzE;AAEA,MAAI,CAAC,YAAY,CAAC,QAAS;AAE3B,QAAM,kBAAkBA,UAAuB;AAAA,IAC7C,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,QACP,SAAS;AAAA,QACT,UAAU;AAAA,QACV,MAAM;AAAA,QACN,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IACd;AAAA,EACF,CACD;AAED,QAAM,eAAeC,OAAoB;AAAA,IACvC,SAAS,SAAS,cAAc,KAAK;AAAA,IACrC,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,QACP,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,QACT,gBAAgB;AAAA,MAAA;AAAA,IAClB;AAAA,EACF,CACD;AAED,eAAa,QAAQ,aAAa,OAAO,QAAQ;AACjD,eAAa,QAAQ,aAAa,OAAO,OAAO;AAEhD,SAAOD,UAAuB;AAAA,IAC5B,WAAW;AAAA,IACX,UAAU,CAAC,iBAAiB,YAAY;AAAA,IACxC,eAAe;AAAA,MACb,SAAS;AAAA,QACP,UAAU;AAAA,QACV,YAAY;AAAA,QAEZ,CAAC,OAAO,GAAG;AAAA,UACT,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS;AAAA,UACT,gBAAgB;AAAA,QAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CACD;AACH;AAEA,MAAM,kBAAkB,CACtB,SACA,wBACA,oBACkB;AAClB,SAAOA,UAAuB;AAAA,IAC5B,WAAW;AAAA,IACX,UAAU,CAAC,wBAAwB,SAAS,eAAe,EAAE;AAAA,MAC3D;AAAA,IAAA;AAAA,EACF,CACD;AACH;AAEA,MAAA,aAAe,CAAC,UAA2C;AACzD,QAAM,EAAE,YAAY,aAAA,IAAiB;AAErC,QAAM,UAAU,cAAc,KAAK;AACnC,QAAM,yBAAyB,sBAAsB,KAAK;AAC1D,QAAM,mBAAmB,cAAc,iBAAiB,eAAe,KAAK;AAE5E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,EAAA;AAEvB;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../source/composite/footer/elements/main-section/index.ts"],"sourcesContent":["import { ElementModel } from 'model';\nimport createRowLogo, { type RowLogoProps } from './row-logo';\nimport createRowLinks, { type RowLinksProps } from './row-links';\nimport { BaseProps } from '../../_types';\nimport { type ElementVisual } from '../../../../_types';\n\nexport interface MainSectionProps\n extends BaseProps,\n RowLinksProps,\n RowLogoProps {\n slotVisualImage: HTMLImageElement | null;\n}\n\nconst createVisualContainer = (\n props: Pick<\n MainSectionProps,\n 'isTypeVisual' | 'isTypeSimple' | 'slotVisualImage'\n >,\n): ElementVisual | undefined => {\n const { isTypeVisual, isTypeSimple, slotVisualImage } = props;\n const isShowVisualImage = isTypeVisual || isTypeSimple;\n\n if (!isShowVisualImage) return;\n\n let altText: string | null = null;\n let imageSrc: string | null = null;\n\n if (slotVisualImage) {\n const source = slotVisualImage.getAttribute('src');\n const alt = slotVisualImage.getAttribute('alt');\n\n if (typeof source === 'string' && source.length > 0) {\n imageSrc = source;\n }\n if (typeof alt === 'string' && alt.length > 0) {\n altText = alt;\n }\n } else if (isTypeVisual) {\n altText = 'The University of Maryland Campus';\n imageSrc = new URL('../../assets/visual-default.jpg', import.meta.url as any).href;\n }\n\n if (!imageSrc || !altText) return;\n\n const gradientElement = ElementModel.createDiv({\n className: 'umd-footer-background-image-graident',\n elementStyles: {\n element: {\n display: 'block',\n position: 'absolute',\n left: 0,\n top: '2px',\n width: '500vw',\n height: '100px',\n background: `linear-gradient(180deg, rgba(255, 255, 255, 1) 0%, #e4edf9 100%)`,\n },\n },\n });\n\n const imageElement = ElementModel.create({\n element: document.createElement('img'),\n className: 'umd-footer-background-image',\n elementStyles: {\n element: {\n width: '100% !important',\n objectFit: 'cover !important',\n display: 'block !important',\n objectPosition: 'center',\n },\n },\n });\n\n imageElement.element.setAttribute('src', imageSrc);\n imageElement.element.setAttribute('alt', altText);\n\n return ElementModel.createDiv({\n className: 'umd-footer-background-image-container',\n children: [gradientElement, imageElement],\n elementStyles: {\n element: {\n position: 'relative',\n paddingTop: '100px',\n\n [`& img`]: {\n width: '100% !important',\n objectFit: 'cover !important',\n display: 'block !important',\n objectPosition: 'center',\n },\n },\n },\n });\n};\n\nconst createContainer = (\n logoRow: ElementVisual,\n visualContainerElement?: ElementVisual,\n linksRowElement?: ElementVisual,\n): ElementVisual => {\n return ElementModel.createDiv({\n className: 'umd-footer-main-container',\n children: [visualContainerElement, logoRow, linksRowElement].filter(\n Boolean,\n ) as ElementVisual[],\n });\n};\n\nexport default (props: MainSectionProps): ElementVisual => {\n const { isTypeMega, isTypeVisual } = props;\n\n const logoRow = createRowLogo(props);\n const visualContainerElement = createVisualContainer(props);\n const linksRowElement = (isTypeMega || isTypeVisual) && createRowLinks(props);\n\n return createContainer(\n logoRow,\n visualContainerElement,\n linksRowElement || undefined,\n );\n};\n"],"names":["ElementModel.createDiv","ElementModel.create"],"mappings":";;;AAaA,MAAM,wBAAwB,CAC5B,UAI8B;AAC9B,QAAM,EAAE,cAAc,cAAc,gBAAA,IAAoB;AACxD,QAAM,oBAAoB,gBAAgB;AAE1C,MAAI,CAAC,kBAAmB;AAExB,MAAI,UAAyB;AAC7B,MAAI,WAA0B;AAE9B,MAAI,iBAAiB;AACnB,UAAM,SAAS,gBAAgB,aAAa,KAAK;AACjD,UAAM,MAAM,gBAAgB,aAAa,KAAK;AAE9C,QAAI,OAAO,WAAW,YAAY,OAAO,SAAS,GAAG;AACnD,iBAAW;AAAA,IACb;AACA,QAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,GAAG;AAC7C,gBAAU;AAAA,IACZ;AAAA,EACF,WAAW,cAAc;AACvB,cAAU;AACV,eAAW,IAAA,IAAA,+85IAAA,YAAA,GAAA,EAAmE;AAAA,EAChF;AAEA,MAAI,CAAC,YAAY,CAAC,QAAS;AAE3B,QAAM,kBAAkBA,UAAuB;AAAA,IAC7C,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,QACP,SAAS;AAAA,QACT,UAAU;AAAA,QACV,MAAM;AAAA,QACN,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IACd;AAAA,EACF,CACD;AAED,QAAM,eAAeC,OAAoB;AAAA,IACvC,SAAS,SAAS,cAAc,KAAK;AAAA,IACrC,WAAW;AAAA,IACX,eAAe;AAAA,MACb,SAAS;AAAA,QACP,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,QACT,gBAAgB;AAAA,MAAA;AAAA,IAClB;AAAA,EACF,CACD;AAED,eAAa,QAAQ,aAAa,OAAO,QAAQ;AACjD,eAAa,QAAQ,aAAa,OAAO,OAAO;AAEhD,SAAOD,UAAuB;AAAA,IAC5B,WAAW;AAAA,IACX,UAAU,CAAC,iBAAiB,YAAY;AAAA,IACxC,eAAe;AAAA,MACb,SAAS;AAAA,QACP,UAAU;AAAA,QACV,YAAY;AAAA,QAEZ,CAAC,OAAO,GAAG;AAAA,UACT,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS;AAAA,UACT,gBAAgB;AAAA,QAAA;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CACD;AACH;AAEA,MAAM,kBAAkB,CACtB,SACA,wBACA,oBACkB;AAClB,SAAOA,UAAuB;AAAA,IAC5B,WAAW;AAAA,IACX,UAAU,CAAC,wBAAwB,SAAS,eAAe,EAAE;AAAA,MAC3D;AAAA,IAAA;AAAA,EACF,CACD;AACH;AAEA,MAAA,aAAe,CAAC,UAA2C;AACzD,QAAM,EAAE,YAAY,aAAA,IAAiB;AAErC,QAAM,UAAU,cAAc,KAAK;AACnC,QAAM,yBAAyB,sBAAsB,KAAK;AAC1D,QAAM,mBAAmB,cAAc,iBAAiB,eAAe,KAAK;AAE5E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,mBAAmB;AAAA,EAAA;AAEvB;"}
@@ -1 +1 @@
1
- {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../source/composite/navigation/header.ts"],"names":[],"mappings":"AAOA,KAAK,mBAAmB,GAAG;IACzB,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,KAAK,UAAU,GAAG,cAAc,GAC9B,WAAW,GAAG;IACZ,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B,CAAC;AAEJ,KAAK,sBAAsB,GAAG,mBAAmB,GAAG,UAAU,CAAC;;2BA8SxB,sBAAsB;;;mCAOxB;gBAAE,QAAQ,EAAE,OAAO,CAAA;aAAE;;;;;AA8C1D,wBAGE"}
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../source/composite/navigation/header.ts"],"names":[],"mappings":"AAQA,KAAK,mBAAmB,GAAG;IACzB,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC;AAEF,KAAK,UAAU,GAAG,cAAc,GAC9B,WAAW,GAAG;IACZ,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B,CAAC;AAEJ,KAAK,sBAAsB,GAAG,mBAAmB,GAAG,UAAU,CAAC;;2BAgTxB,sBAAsB;;;mCAOxB;gBAAE,QAAQ,EAAE,OAAO,CAAA;aAAE;;;;;AA8C1D,wBAGE"}
@@ -2,6 +2,7 @@
2
2
  const token = require("@universityofmaryland/web-styles-library/token");
3
3
  const typography = require("@universityofmaryland/web-styles-library/typography");
4
4
  const styles = require("@universityofmaryland/web-utilities-library/styles");
5
+ const network = require("@universityofmaryland/web-utilities-library/network");
5
6
  const search = require("@universityofmaryland/web-icons-library/search");
6
7
  const index$1 = require("./elements/menu-button/index.js");
7
8
  const index = require("./elements/item/index.js");
@@ -231,7 +232,9 @@ const CreateCtaLink = ({ ctaUrl, ctaText }) => {
231
232
  if (!ctaUrl || !ctaText) return null;
232
233
  const cta = document.createElement("a");
233
234
  cta.innerHTML = ctaText;
234
- cta.setAttribute("target", "_blank");
235
+ if (network.isExternalUrl(ctaUrl)) {
236
+ cta.setAttribute("target", "_blank");
237
+ }
235
238
  cta.setAttribute("href", ctaUrl);
236
239
  cta.classList.add(ELEMENT_HEADER_MENU_CTA);
237
240
  return cta;
@@ -1 +1 @@
1
- {"version":3,"file":"header.js","sources":["../../../source/composite/navigation/header.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-styles-library/token';\nimport * as typography from '@universityofmaryland/web-styles-library/typography';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\nimport { search as iconSearch } from '@universityofmaryland/web-icons-library/search';\nimport MenuButton from './elements/menu-button';\nimport NavigationItem from './elements/item';\n\ntype TypeLogoRequirments = {\n logo?: HTMLElement | null;\n eventOpen?: () => void;\n};\n\ntype TypeSearchLink = {\n searchUrl: string | null;\n};\n\ntype TypeCtaLink = {\n ctaUrl: string | null;\n ctaText: string | null;\n};\n\ntype TypeNavRow = TypeSearchLink &\n TypeCtaLink & {\n utilityRow?: HTMLElement | null;\n navItems?: HTMLElement[];\n };\n\ntype TypeHeaderRequirements = TypeLogoRequirments & TypeNavRow;\n\nconst ANIMATION_TIME = 500;\n\nconst ATTRIBUTE_STICKY = 'data-sticky';\nconst ATTRIBUTE_CTA = 'data-cta';\n\nconst IS_STICKY = `[${ATTRIBUTE_STICKY}=\"true\"]`;\nconst IS_CTA = `[${ATTRIBUTE_CTA}=\"true\"]`;\n\nconst ELEMENT_HEADER_DECLARATION = 'element-header-declaration';\nconst ELEMENT_HEADER_CONTAINTER = 'element-header-container';\nconst ELEMENT_HEADER_WRAPPER = 'element-header-wrapper';\nconst ELEMENT_HEADER_LOGO_COLUMN = 'element-header-logo-column';\nconst ELEMENT_HEADER_NAVIGATION_COLUMN = 'element-header-navigation-column';\nconst ELEMENT_HEADER_LOGO = 'element-header-logo';\nconst ELEMENT_HEADER_MENU_BUTTON = 'element-header-menu-button';\nconst ELEMENT_HEADER_MENU_CTA = 'element-header-menu-cta';\nconst ELEMENT_HEADER_MENU_SEARCH = 'element-header-menu-search';\nconst ELEMENT_HEADER_NAVIGATION_ROW = 'element-header-navigation-row';\nconst ELEMENT_HEADER_UTILITY_ROW = 'element-header-utility-row';\n\nconst OVERWRITE_STICKY_CONTAINER = `.${ELEMENT_HEADER_CONTAINTER}${IS_STICKY}`;\nconst OVERWRITE_STICKY_LOGO = `${OVERWRITE_STICKY_CONTAINER} .${ELEMENT_HEADER_LOGO}`;\nconst OVERWRITE_CTA_WRAPPER = `.${ELEMENT_HEADER_WRAPPER}${IS_CTA}`;\nconst OVERWRITE_CTA_WRAPPER_NAV_ROW = `${OVERWRITE_CTA_WRAPPER} .${ELEMENT_HEADER_NAVIGATION_ROW}`;\nconst OVERWRITE_CTA_WRAPPER_CTA = `${OVERWRITE_CTA_WRAPPER} .${ELEMENT_HEADER_MENU_CTA}`;\n\nconst OverwriteStickyStyles = `\n ${OVERWRITE_STICKY_CONTAINER} {\n padding: ${token.spacing.xs} 0;\n }\n\n .${ELEMENT_HEADER_WRAPPER} {\n align-items: center;\n }\n\n ${OVERWRITE_STICKY_LOGO} img {\n max-height: 30px;\n }\n`;\n\nconst CtaStyles = `\n .${ELEMENT_HEADER_MENU_CTA} {\n color: ${token.color.white};\n font-weight: ${token.font.weight.bold};\n font-size: ${token.font.size.sm};\n padding: ${token.spacing.xs};\n background-color: ${token.color.red};\n transition: background .5s;\n white-space: nowrap;\n }\n\n .${ELEMENT_HEADER_MENU_CTA}:hover,\n .${ELEMENT_HEADER_MENU_CTA}:focus {\n background-color: ${token.color.redDark};\n }\n\n ${OVERWRITE_CTA_WRAPPER_CTA} {\n margin-top: -${token.spacing.min};\n }\n`;\n\nconst NavigationColumnStyles = `\n @media (max-width: 1240px) {\n .${ELEMENT_HEADER_NAVIGATION_COLUMN} {\n display: none;\n }\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} {\n display: grid;\n grid-auto-flow: column;\n }\n\n ${OVERWRITE_CTA_WRAPPER_NAV_ROW} {\n padding-top: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} > * {\n display: block;\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} > *:not(:first-child) {\n margin-left: ${token.spacing.md};\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} svg {\n width: 24px;\n height: 24px;\n fill: ${token.color.black};\n }\n\n .${ELEMENT_HEADER_UTILITY_ROW} {\n display: flex;\n justify-content: flex-end;\n margin-bottom: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_UTILITY_ROW} ::slotted(*) {\n display: flex;\n justify-content: flex-end;\n gap: ${token.spacing.md};\n }\n`;\n\nconst LogoColumnStyles = `\n .${ELEMENT_HEADER_LOGO_COLUMN} {\n align-items: center;\n display: flex;\n justify-content: flex-start;\n position: relative;\n width: 100%;\n max-width: 400px;\n }\n\n .${ELEMENT_HEADER_MENU_BUTTON} {\n border-right: 1px solid ${token.color.gray.light};\n padding-right: ${token.spacing.min};\n margin-right: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_LOGO} {\n display: grid;\n justify-content: flex-start;\n max-width: 350px;\n }\n\n .${ELEMENT_HEADER_LOGO}:has(img[src*=\".svg\"]) img {\n height: 240px;\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}`]: typography.sans.larger,\n },\n })}\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO} *`]: typography.sans.larger,\n },\n })}\n\n .${ELEMENT_HEADER_LOGO},\n .${ELEMENT_HEADER_LOGO} * {\n line-height: 1.05em;\n width: 100%;\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}[size=\"large\"]`]: typography.sans.extraLarge,\n },\n })}\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}[size=\"large\"] *`]: typography.sans.extraLarge,\n },\n })}\n\n .${ELEMENT_HEADER_LOGO},\n .${ELEMENT_HEADER_LOGO} * {\n font-weight: 700;\n }\n\n .${ELEMENT_HEADER_LOGO} img {\n width: 100%;\n max-height: 48px;\n max-width: 190px;\n }\n\n @media (min-width: ${token.media.breakpoints.tablet.min}) {\n .${ELEMENT_HEADER_LOGO} img {\n max-width: 240px;\n }\n }\n`;\n\nconst WrapperStyles = `\n .${ELEMENT_HEADER_WRAPPER} {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n gap: ${token.spacing.lg};\n z-index: 999;\n }\n`;\n\nconst STYLES_NAVIGATION_HEADER = `\n .${ELEMENT_HEADER_CONTAINTER} {\n background-color: ${token.color.white};\n display: block;\n padding: ${token.spacing.md} 0;\n position: relative;\n transition: padding ${ANIMATION_TIME}ms;\n }\n\n ${WrapperStyles}\n ${LogoColumnStyles}\n ${NavigationColumnStyles}\n ${CtaStyles}\n ${OverwriteStickyStyles}\n ${NavigationItem.Styles}\n ${MenuButton.Styles}\n`;\n\nconst CreateSearchLink = ({ searchUrl }: TypeSearchLink) => {\n if (!searchUrl) return null;\n\n const searchLink = document.createElement('a');\n\n searchLink.href = searchUrl;\n searchLink.ariaLabel = 'Visit the search page';\n searchLink.innerHTML = iconSearch;\n searchLink.classList.add(ELEMENT_HEADER_MENU_SEARCH);\n\n return searchLink;\n};\n\nconst CreateCtaLink = ({ ctaUrl, ctaText }: TypeCtaLink) => {\n if (!ctaUrl || !ctaText) return null;\n\n const cta = document.createElement('a');\n\n cta.innerHTML = ctaText;\n cta.setAttribute('target', '_blank');\n cta.setAttribute('href', ctaUrl);\n cta.classList.add(ELEMENT_HEADER_MENU_CTA);\n\n return cta;\n};\n\nconst CreateNavigationColumn = ({\n utilityRow,\n navItems,\n searchUrl,\n ctaText,\n ctaUrl,\n}: TypeNavRow) => {\n if (!navItems) return;\n\n const navColumnContainer = document.createElement('div');\n const utilityRowContainer = document.createElement('div');\n const navRowContainer = document.createElement('div');\n const searchLink = CreateSearchLink({\n searchUrl,\n });\n const ctaLink = CreateCtaLink({ ctaText, ctaUrl });\n\n if (utilityRow) {\n utilityRowContainer.classList.add(ELEMENT_HEADER_UTILITY_ROW);\n utilityRowContainer.appendChild(utilityRow);\n navColumnContainer.appendChild(utilityRowContainer);\n }\n\n navRowContainer.classList.add(ELEMENT_HEADER_NAVIGATION_ROW);\n\n navItems.forEach((item) => {\n navRowContainer.appendChild(item);\n });\n if (searchLink) navRowContainer.appendChild(searchLink);\n if (ctaLink) navRowContainer.appendChild(ctaLink);\n\n navColumnContainer.classList.add(ELEMENT_HEADER_NAVIGATION_COLUMN);\n navColumnContainer.appendChild(navRowContainer);\n\n return navColumnContainer;\n};\n\nconst CreateLogoColumn = ({ logo, eventOpen }: TypeLogoRequirments) => {\n const container = document.createElement('div');\n\n if (eventOpen) {\n const menuButton = MenuButton.CreateElement({ eventOpen });\n menuButton.classList.add(ELEMENT_HEADER_MENU_BUTTON);\n container.appendChild(menuButton);\n }\n\n if (logo) {\n const childrenText = Array.from(logo.children).reduce((acc, child) => {\n if (child.nodeName === 'IMG') return acc;\n\n if (child.textContent) {\n return acc + child.textContent.length;\n }\n\n return acc;\n }, 0);\n logo.classList.add(ELEMENT_HEADER_LOGO);\n\n if (childrenText < 30) {\n logo.setAttribute('size', 'large');\n }\n\n container.appendChild(logo);\n }\n container.classList.add(ELEMENT_HEADER_LOGO_COLUMN);\n return container;\n};\n\nconst CreateNavigationHeader = (props: TypeHeaderRequirements) => {\n const { ctaUrl, ctaText } = props;\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n const logoColumn = CreateLogoColumn(props);\n const navigationColumn = CreateNavigationColumn(props);\n const eventSticky = ({ isSticky }: { isSticky: boolean }) => {\n const utility = container.querySelector(\n `.${ELEMENT_HEADER_UTILITY_ROW}`,\n ) as HTMLDivElement;\n\n if (isSticky && isElementSticky) return;\n\n if (isSticky) {\n isElementSticky = true;\n container.setAttribute(ATTRIBUTE_STICKY, 'true');\n\n if (utility) {\n utility.style.display = 'none';\n }\n }\n if (!isSticky) {\n isElementSticky = false;\n container.removeAttribute(ATTRIBUTE_STICKY);\n\n if (utility) {\n utility.style.display = 'block';\n }\n }\n };\n let isElementSticky = false;\n\n wrapper.classList.add(ELEMENT_HEADER_WRAPPER);\n wrapper.appendChild(logoColumn);\n\n if (navigationColumn) wrapper.appendChild(navigationColumn);\n if (ctaUrl && ctaText) wrapper.setAttribute(ATTRIBUTE_CTA, 'true');\n\n container.appendChild(wrapper);\n container.classList.add(ELEMENT_HEADER_CONTAINTER);\n\n declaration.classList.add(ELEMENT_HEADER_DECLARATION);\n declaration.appendChild(container);\n\n return {\n element: declaration,\n events: {\n sticky: eventSticky,\n },\n };\n};\n\nexport default {\n CreateElement: CreateNavigationHeader,\n Styles: STYLES_NAVIGATION_HEADER,\n};\n"],"names":["token","jssToCSS","typography","NavigationItem","MenuButton","iconSearch"],"mappings":"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"}
1
+ {"version":3,"file":"header.js","sources":["../../../source/composite/navigation/header.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-styles-library/token';\nimport * as typography from '@universityofmaryland/web-styles-library/typography';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\nimport { isExternalUrl } from '@universityofmaryland/web-utilities-library/network';\nimport { search as iconSearch } from '@universityofmaryland/web-icons-library/search';\nimport MenuButton from './elements/menu-button';\nimport NavigationItem from './elements/item';\n\ntype TypeLogoRequirments = {\n logo?: HTMLElement | null;\n eventOpen?: () => void;\n};\n\ntype TypeSearchLink = {\n searchUrl: string | null;\n};\n\ntype TypeCtaLink = {\n ctaUrl: string | null;\n ctaText: string | null;\n};\n\ntype TypeNavRow = TypeSearchLink &\n TypeCtaLink & {\n utilityRow?: HTMLElement | null;\n navItems?: HTMLElement[];\n };\n\ntype TypeHeaderRequirements = TypeLogoRequirments & TypeNavRow;\n\nconst ANIMATION_TIME = 500;\n\nconst ATTRIBUTE_STICKY = 'data-sticky';\nconst ATTRIBUTE_CTA = 'data-cta';\n\nconst IS_STICKY = `[${ATTRIBUTE_STICKY}=\"true\"]`;\nconst IS_CTA = `[${ATTRIBUTE_CTA}=\"true\"]`;\n\nconst ELEMENT_HEADER_DECLARATION = 'element-header-declaration';\nconst ELEMENT_HEADER_CONTAINTER = 'element-header-container';\nconst ELEMENT_HEADER_WRAPPER = 'element-header-wrapper';\nconst ELEMENT_HEADER_LOGO_COLUMN = 'element-header-logo-column';\nconst ELEMENT_HEADER_NAVIGATION_COLUMN = 'element-header-navigation-column';\nconst ELEMENT_HEADER_LOGO = 'element-header-logo';\nconst ELEMENT_HEADER_MENU_BUTTON = 'element-header-menu-button';\nconst ELEMENT_HEADER_MENU_CTA = 'element-header-menu-cta';\nconst ELEMENT_HEADER_MENU_SEARCH = 'element-header-menu-search';\nconst ELEMENT_HEADER_NAVIGATION_ROW = 'element-header-navigation-row';\nconst ELEMENT_HEADER_UTILITY_ROW = 'element-header-utility-row';\n\nconst OVERWRITE_STICKY_CONTAINER = `.${ELEMENT_HEADER_CONTAINTER}${IS_STICKY}`;\nconst OVERWRITE_STICKY_LOGO = `${OVERWRITE_STICKY_CONTAINER} .${ELEMENT_HEADER_LOGO}`;\nconst OVERWRITE_CTA_WRAPPER = `.${ELEMENT_HEADER_WRAPPER}${IS_CTA}`;\nconst OVERWRITE_CTA_WRAPPER_NAV_ROW = `${OVERWRITE_CTA_WRAPPER} .${ELEMENT_HEADER_NAVIGATION_ROW}`;\nconst OVERWRITE_CTA_WRAPPER_CTA = `${OVERWRITE_CTA_WRAPPER} .${ELEMENT_HEADER_MENU_CTA}`;\n\nconst OverwriteStickyStyles = `\n ${OVERWRITE_STICKY_CONTAINER} {\n padding: ${token.spacing.xs} 0;\n }\n\n .${ELEMENT_HEADER_WRAPPER} {\n align-items: center;\n }\n\n ${OVERWRITE_STICKY_LOGO} img {\n max-height: 30px;\n }\n`;\n\nconst CtaStyles = `\n .${ELEMENT_HEADER_MENU_CTA} {\n color: ${token.color.white};\n font-weight: ${token.font.weight.bold};\n font-size: ${token.font.size.sm};\n padding: ${token.spacing.xs};\n background-color: ${token.color.red};\n transition: background .5s;\n white-space: nowrap;\n }\n\n .${ELEMENT_HEADER_MENU_CTA}:hover,\n .${ELEMENT_HEADER_MENU_CTA}:focus {\n background-color: ${token.color.redDark};\n }\n\n ${OVERWRITE_CTA_WRAPPER_CTA} {\n margin-top: -${token.spacing.min};\n }\n`;\n\nconst NavigationColumnStyles = `\n @media (max-width: 1240px) {\n .${ELEMENT_HEADER_NAVIGATION_COLUMN} {\n display: none;\n }\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} {\n display: grid;\n grid-auto-flow: column;\n }\n\n ${OVERWRITE_CTA_WRAPPER_NAV_ROW} {\n padding-top: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} > * {\n display: block;\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} > *:not(:first-child) {\n margin-left: ${token.spacing.md};\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} svg {\n width: 24px;\n height: 24px;\n fill: ${token.color.black};\n }\n\n .${ELEMENT_HEADER_UTILITY_ROW} {\n display: flex;\n justify-content: flex-end;\n margin-bottom: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_UTILITY_ROW} ::slotted(*) {\n display: flex;\n justify-content: flex-end;\n gap: ${token.spacing.md};\n }\n`;\n\nconst LogoColumnStyles = `\n .${ELEMENT_HEADER_LOGO_COLUMN} {\n align-items: center;\n display: flex;\n justify-content: flex-start;\n position: relative;\n width: 100%;\n max-width: 400px;\n }\n\n .${ELEMENT_HEADER_MENU_BUTTON} {\n border-right: 1px solid ${token.color.gray.light};\n padding-right: ${token.spacing.min};\n margin-right: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_LOGO} {\n display: grid;\n justify-content: flex-start;\n max-width: 350px;\n }\n\n .${ELEMENT_HEADER_LOGO}:has(img[src*=\".svg\"]) img {\n height: 240px;\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}`]: typography.sans.larger,\n },\n })}\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO} *`]: typography.sans.larger,\n },\n })}\n\n .${ELEMENT_HEADER_LOGO},\n .${ELEMENT_HEADER_LOGO} * {\n line-height: 1.05em;\n width: 100%;\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}[size=\"large\"]`]: typography.sans.extraLarge,\n },\n })}\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}[size=\"large\"] *`]: typography.sans.extraLarge,\n },\n })}\n\n .${ELEMENT_HEADER_LOGO},\n .${ELEMENT_HEADER_LOGO} * {\n font-weight: 700;\n }\n\n .${ELEMENT_HEADER_LOGO} img {\n width: 100%;\n max-height: 48px;\n max-width: 190px;\n }\n\n @media (min-width: ${token.media.breakpoints.tablet.min}) {\n .${ELEMENT_HEADER_LOGO} img {\n max-width: 240px;\n }\n }\n`;\n\nconst WrapperStyles = `\n .${ELEMENT_HEADER_WRAPPER} {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n gap: ${token.spacing.lg};\n z-index: 999;\n }\n`;\n\nconst STYLES_NAVIGATION_HEADER = `\n .${ELEMENT_HEADER_CONTAINTER} {\n background-color: ${token.color.white};\n display: block;\n padding: ${token.spacing.md} 0;\n position: relative;\n transition: padding ${ANIMATION_TIME}ms;\n }\n\n ${WrapperStyles}\n ${LogoColumnStyles}\n ${NavigationColumnStyles}\n ${CtaStyles}\n ${OverwriteStickyStyles}\n ${NavigationItem.Styles}\n ${MenuButton.Styles}\n`;\n\nconst CreateSearchLink = ({ searchUrl }: TypeSearchLink) => {\n if (!searchUrl) return null;\n\n const searchLink = document.createElement('a');\n\n searchLink.href = searchUrl;\n searchLink.ariaLabel = 'Visit the search page';\n searchLink.innerHTML = iconSearch;\n searchLink.classList.add(ELEMENT_HEADER_MENU_SEARCH);\n\n return searchLink;\n};\n\nconst CreateCtaLink = ({ ctaUrl, ctaText }: TypeCtaLink) => {\n if (!ctaUrl || !ctaText) return null;\n\n const cta = document.createElement('a');\n\n cta.innerHTML = ctaText;\n if (isExternalUrl(ctaUrl)) {\n cta.setAttribute('target', '_blank');\n }\n cta.setAttribute('href', ctaUrl);\n cta.classList.add(ELEMENT_HEADER_MENU_CTA);\n\n return cta;\n};\n\nconst CreateNavigationColumn = ({\n utilityRow,\n navItems,\n searchUrl,\n ctaText,\n ctaUrl,\n}: TypeNavRow) => {\n if (!navItems) return;\n\n const navColumnContainer = document.createElement('div');\n const utilityRowContainer = document.createElement('div');\n const navRowContainer = document.createElement('div');\n const searchLink = CreateSearchLink({\n searchUrl,\n });\n const ctaLink = CreateCtaLink({ ctaText, ctaUrl });\n\n if (utilityRow) {\n utilityRowContainer.classList.add(ELEMENT_HEADER_UTILITY_ROW);\n utilityRowContainer.appendChild(utilityRow);\n navColumnContainer.appendChild(utilityRowContainer);\n }\n\n navRowContainer.classList.add(ELEMENT_HEADER_NAVIGATION_ROW);\n\n navItems.forEach((item) => {\n navRowContainer.appendChild(item);\n });\n if (searchLink) navRowContainer.appendChild(searchLink);\n if (ctaLink) navRowContainer.appendChild(ctaLink);\n\n navColumnContainer.classList.add(ELEMENT_HEADER_NAVIGATION_COLUMN);\n navColumnContainer.appendChild(navRowContainer);\n\n return navColumnContainer;\n};\n\nconst CreateLogoColumn = ({ logo, eventOpen }: TypeLogoRequirments) => {\n const container = document.createElement('div');\n\n if (eventOpen) {\n const menuButton = MenuButton.CreateElement({ eventOpen });\n menuButton.classList.add(ELEMENT_HEADER_MENU_BUTTON);\n container.appendChild(menuButton);\n }\n\n if (logo) {\n const childrenText = Array.from(logo.children).reduce((acc, child) => {\n if (child.nodeName === 'IMG') return acc;\n\n if (child.textContent) {\n return acc + child.textContent.length;\n }\n\n return acc;\n }, 0);\n logo.classList.add(ELEMENT_HEADER_LOGO);\n\n if (childrenText < 30) {\n logo.setAttribute('size', 'large');\n }\n\n container.appendChild(logo);\n }\n container.classList.add(ELEMENT_HEADER_LOGO_COLUMN);\n return container;\n};\n\nconst CreateNavigationHeader = (props: TypeHeaderRequirements) => {\n const { ctaUrl, ctaText } = props;\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n const logoColumn = CreateLogoColumn(props);\n const navigationColumn = CreateNavigationColumn(props);\n const eventSticky = ({ isSticky }: { isSticky: boolean }) => {\n const utility = container.querySelector(\n `.${ELEMENT_HEADER_UTILITY_ROW}`,\n ) as HTMLDivElement;\n\n if (isSticky && isElementSticky) return;\n\n if (isSticky) {\n isElementSticky = true;\n container.setAttribute(ATTRIBUTE_STICKY, 'true');\n\n if (utility) {\n utility.style.display = 'none';\n }\n }\n if (!isSticky) {\n isElementSticky = false;\n container.removeAttribute(ATTRIBUTE_STICKY);\n\n if (utility) {\n utility.style.display = 'block';\n }\n }\n };\n let isElementSticky = false;\n\n wrapper.classList.add(ELEMENT_HEADER_WRAPPER);\n wrapper.appendChild(logoColumn);\n\n if (navigationColumn) wrapper.appendChild(navigationColumn);\n if (ctaUrl && ctaText) wrapper.setAttribute(ATTRIBUTE_CTA, 'true');\n\n container.appendChild(wrapper);\n container.classList.add(ELEMENT_HEADER_CONTAINTER);\n\n declaration.classList.add(ELEMENT_HEADER_DECLARATION);\n declaration.appendChild(container);\n\n return {\n element: declaration,\n events: {\n sticky: eventSticky,\n },\n };\n};\n\nexport default {\n CreateElement: CreateNavigationHeader,\n Styles: STYLES_NAVIGATION_HEADER,\n};\n"],"names":["token","jssToCSS","typography","NavigationItem","MenuButton","iconSearch","isExternalUrl"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAM,iBAAiB;AAEvB,MAAM,mBAAmB;AACzB,MAAM,gBAAgB;AAEtB,MAAM,YAAY,IAAI,gBAAgB;AACtC,MAAM,SAAS,IAAI,aAAa;AAEhC,MAAM,6BAA6B;AACnC,MAAM,4BAA4B;AAClC,MAAM,yBAAyB;AAC/B,MAAM,6BAA6B;AACnC,MAAM,mCAAmC;AACzC,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,0BAA0B;AAChC,MAAM,6BAA6B;AACnC,MAAM,gCAAgC;AACtC,MAAM,6BAA6B;AAEnC,MAAM,6BAA6B,IAAI,yBAAyB,GAAG,SAAS;AAC5E,MAAM,wBAAwB,GAAG,0BAA0B,KAAK,mBAAmB;AACnF,MAAM,wBAAwB,IAAI,sBAAsB,GAAG,MAAM;AACjE,MAAM,gCAAgC,GAAG,qBAAqB,KAAK,6BAA6B;AAChG,MAAM,4BAA4B,GAAG,qBAAqB,KAAK,uBAAuB;AAEtF,MAAM,wBAAwB;AAAA,IAC1B,0BAA0B;AAAA,eACfA,iBAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,KAG1B,sBAAsB;AAAA;AAAA;AAAA;AAAA,IAIvB,qBAAqB;AAAA;AAAA;AAAA;AAKzB,MAAM,YAAY;AAAA,KACb,uBAAuB;AAAA,aACfA,iBAAM,MAAM,KAAK;AAAA,mBACXA,iBAAM,KAAK,OAAO,IAAI;AAAA,iBACxBA,iBAAM,KAAK,KAAK,EAAE;AAAA,eACpBA,iBAAM,QAAQ,EAAE;AAAA,wBACPA,iBAAM,MAAM,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,KAKlC,uBAAuB;AAAA,KACvB,uBAAuB;AAAA,wBACJA,iBAAM,MAAM,OAAO;AAAA;AAAA;AAAA,IAGvC,yBAAyB;AAAA,mBACVA,iBAAM,QAAQ,GAAG;AAAA;AAAA;AAIpC,MAAM,yBAAyB;AAAA;AAAA,OAExB,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA,KAKlC,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA,IAK9B,6BAA6B;AAAA,mBACdA,iBAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,KAG9B,6BAA6B;AAAA;AAAA;AAAA;AAAA,KAI7B,6BAA6B;AAAA,mBACfA,iBAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,KAG9B,6BAA6B;AAAA;AAAA;AAAA,YAGtBA,iBAAM,MAAM,KAAK;AAAA;AAAA;AAAA,KAGxB,0BAA0B;AAAA;AAAA;AAAA,qBAGVA,iBAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,KAGhC,0BAA0B;AAAA;AAAA;AAAA,WAGpBA,iBAAM,QAAQ,EAAE;AAAA;AAAA;AAI3B,MAAM,mBAAmB;AAAA,KACpB,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAS1B,0BAA0B;AAAA,8BACDA,iBAAM,MAAM,KAAK,KAAK;AAAA,qBAC/BA,iBAAM,QAAQ,GAAG;AAAA,oBAClBA,iBAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,KAG/B,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMnB,mBAAmB;AAAA;AAAA;AAAA;AAAA,IAIpBC,gBAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,mBAAmB,EAAE,GAAGC,sBAAW,KAAK;AAAA,EAAA;AAEjD,CAAC,CAAC;AAAA;AAAA,IAEAD,gBAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,mBAAmB,IAAI,GAAGC,sBAAW,KAAK;AAAA,EAAA;AAEnD,CAAC,CAAC;AAAA;AAAA,KAEC,mBAAmB;AAAA,KACnB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKpBD,gBAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,mBAAmB,gBAAgB,GAAGC,sBAAW,KAAK;AAAA,EAAA;AAE/D,CAAC,CAAC;AAAA;AAAA,IAEAD,gBAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,mBAAmB,kBAAkB,GAAGC,sBAAW,KAAK;AAAA,EAAA;AAEjE,CAAC,CAAC;AAAA;AAAA,KAEC,mBAAmB;AAAA,KACnB,mBAAmB;AAAA;AAAA;AAAA;AAAA,KAInB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAMDF,iBAAM,MAAM,YAAY,OAAO,GAAG;AAAA,OAClD,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAM1B,MAAM,gBAAgB;AAAA,KACjB,sBAAsB;AAAA;AAAA;AAAA;AAAA,WAIhBA,iBAAM,QAAQ,EAAE;AAAA;AAAA;AAAA;AAK3B,MAAM,2BAA2B;AAAA,KAC5B,yBAAyB;AAAA,wBACNA,iBAAM,MAAM,KAAK;AAAA;AAAA,eAE1BA,iBAAM,QAAQ,EAAE;AAAA;AAAA,0BAEL,cAAc;AAAA;AAAA;AAAA,IAGpC,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,SAAS;AAAA,IACT,qBAAqB;AAAA,IACrBG,MAAe,MAAM;AAAA,IACrBC,QAAW,MAAM;AAAA;AAGrB,MAAM,mBAAmB,CAAC,EAAE,gBAAgC;AAC1D,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,aAAa,SAAS,cAAc,GAAG;AAE7C,aAAW,OAAO;AAClB,aAAW,YAAY;AACvB,aAAW,YAAYC,OAAAA;AACvB,aAAW,UAAU,IAAI,0BAA0B;AAEnD,SAAO;AACT;AAEA,MAAM,gBAAgB,CAAC,EAAE,QAAQ,cAA2B;AAC1D,MAAI,CAAC,UAAU,CAAC,QAAS,QAAO;AAEhC,QAAM,MAAM,SAAS,cAAc,GAAG;AAEtC,MAAI,YAAY;AAChB,MAAIC,QAAAA,cAAc,MAAM,GAAG;AACzB,QAAI,aAAa,UAAU,QAAQ;AAAA,EACrC;AACA,MAAI,aAAa,QAAQ,MAAM;AAC/B,MAAI,UAAU,IAAI,uBAAuB;AAEzC,SAAO;AACT;AAEA,MAAM,yBAAyB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAkB;AAChB,MAAI,CAAC,SAAU;AAEf,QAAM,qBAAqB,SAAS,cAAc,KAAK;AACvD,QAAM,sBAAsB,SAAS,cAAc,KAAK;AACxD,QAAM,kBAAkB,SAAS,cAAc,KAAK;AACpD,QAAM,aAAa,iBAAiB;AAAA,IAClC;AAAA,EAAA,CACD;AACD,QAAM,UAAU,cAAc,EAAE,SAAS,QAAQ;AAEjD,MAAI,YAAY;AACd,wBAAoB,UAAU,IAAI,0BAA0B;AAC5D,wBAAoB,YAAY,UAAU;AAC1C,uBAAmB,YAAY,mBAAmB;AAAA,EACpD;AAEA,kBAAgB,UAAU,IAAI,6BAA6B;AAE3D,WAAS,QAAQ,CAAC,SAAS;AACzB,oBAAgB,YAAY,IAAI;AAAA,EAClC,CAAC;AACD,MAAI,WAAY,iBAAgB,YAAY,UAAU;AACtD,MAAI,QAAS,iBAAgB,YAAY,OAAO;AAEhD,qBAAmB,UAAU,IAAI,gCAAgC;AACjE,qBAAmB,YAAY,eAAe;AAE9C,SAAO;AACT;AAEA,MAAM,mBAAmB,CAAC,EAAE,MAAM,gBAAqC;AACrE,QAAM,YAAY,SAAS,cAAc,KAAK;AAE9C,MAAI,WAAW;AACb,UAAM,aAAaF,QAAW,cAAc,EAAE,WAAW;AACzD,eAAW,UAAU,IAAI,0BAA0B;AACnD,cAAU,YAAY,UAAU;AAAA,EAClC;AAEA,MAAI,MAAM;AACR,UAAM,eAAe,MAAM,KAAK,KAAK,QAAQ,EAAE,OAAO,CAAC,KAAK,UAAU;AACpE,UAAI,MAAM,aAAa,MAAO,QAAO;AAErC,UAAI,MAAM,aAAa;AACrB,eAAO,MAAM,MAAM,YAAY;AAAA,MACjC;AAEA,aAAO;AAAA,IACT,GAAG,CAAC;AACJ,SAAK,UAAU,IAAI,mBAAmB;AAEtC,QAAI,eAAe,IAAI;AACrB,WAAK,aAAa,QAAQ,OAAO;AAAA,IACnC;AAEA,cAAU,YAAY,IAAI;AAAA,EAC5B;AACA,YAAU,UAAU,IAAI,0BAA0B;AAClD,SAAO;AACT;AAEA,MAAM,yBAAyB,CAAC,UAAkC;AAChE,QAAM,EAAE,QAAQ,QAAA,IAAY;AAC5B,QAAM,cAAc,SAAS,cAAc,KAAK;AAChD,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,QAAM,aAAa,iBAAiB,KAAK;AACzC,QAAM,mBAAmB,uBAAuB,KAAK;AACrD,QAAM,cAAc,CAAC,EAAE,eAAsC;AAC3D,UAAM,UAAU,UAAU;AAAA,MACxB,IAAI,0BAA0B;AAAA,IAAA;AAGhC,QAAI,YAAY,gBAAiB;AAEjC,QAAI,UAAU;AACZ,wBAAkB;AAClB,gBAAU,aAAa,kBAAkB,MAAM;AAE/C,UAAI,SAAS;AACX,gBAAQ,MAAM,UAAU;AAAA,MAC1B;AAAA,IACF;AACA,QAAI,CAAC,UAAU;AACb,wBAAkB;AAClB,gBAAU,gBAAgB,gBAAgB;AAE1C,UAAI,SAAS;AACX,gBAAQ,MAAM,UAAU;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACA,MAAI,kBAAkB;AAEtB,UAAQ,UAAU,IAAI,sBAAsB;AAC5C,UAAQ,YAAY,UAAU;AAE9B,MAAI,iBAAkB,SAAQ,YAAY,gBAAgB;AAC1D,MAAI,UAAU,QAAS,SAAQ,aAAa,eAAe,MAAM;AAEjE,YAAU,YAAY,OAAO;AAC7B,YAAU,UAAU,IAAI,yBAAyB;AAEjD,cAAY,UAAU,IAAI,0BAA0B;AACpD,cAAY,YAAY,SAAS;AAEjC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,MACN,QAAQ;AAAA,IAAA;AAAA,EACV;AAEJ;AAEA,MAAA,SAAe;AAAA,EACb,eAAe;AAAA,EACf,QAAQ;AACV;;"}
@@ -1,6 +1,7 @@
1
1
  import * as token from "@universityofmaryland/web-styles-library/token";
2
2
  import * as typography from "@universityofmaryland/web-styles-library/typography";
3
3
  import { jssToCSS } from "@universityofmaryland/web-utilities-library/styles";
4
+ import { isExternalUrl } from "@universityofmaryland/web-utilities-library/network";
4
5
  import { search } from "@universityofmaryland/web-icons-library/search";
5
6
  import MenuButton from "./elements/menu-button/index.mjs";
6
7
  import NavigationItem from "./elements/item/index.mjs";
@@ -212,7 +213,9 @@ const CreateCtaLink = ({ ctaUrl, ctaText }) => {
212
213
  if (!ctaUrl || !ctaText) return null;
213
214
  const cta = document.createElement("a");
214
215
  cta.innerHTML = ctaText;
215
- cta.setAttribute("target", "_blank");
216
+ if (isExternalUrl(ctaUrl)) {
217
+ cta.setAttribute("target", "_blank");
218
+ }
216
219
  cta.setAttribute("href", ctaUrl);
217
220
  cta.classList.add(ELEMENT_HEADER_MENU_CTA);
218
221
  return cta;
@@ -1 +1 @@
1
- {"version":3,"file":"header.mjs","sources":["../../../source/composite/navigation/header.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-styles-library/token';\nimport * as typography from '@universityofmaryland/web-styles-library/typography';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\nimport { search as iconSearch } from '@universityofmaryland/web-icons-library/search';\nimport MenuButton from './elements/menu-button';\nimport NavigationItem from './elements/item';\n\ntype TypeLogoRequirments = {\n logo?: HTMLElement | null;\n eventOpen?: () => void;\n};\n\ntype TypeSearchLink = {\n searchUrl: string | null;\n};\n\ntype TypeCtaLink = {\n ctaUrl: string | null;\n ctaText: string | null;\n};\n\ntype TypeNavRow = TypeSearchLink &\n TypeCtaLink & {\n utilityRow?: HTMLElement | null;\n navItems?: HTMLElement[];\n };\n\ntype TypeHeaderRequirements = TypeLogoRequirments & TypeNavRow;\n\nconst ANIMATION_TIME = 500;\n\nconst ATTRIBUTE_STICKY = 'data-sticky';\nconst ATTRIBUTE_CTA = 'data-cta';\n\nconst IS_STICKY = `[${ATTRIBUTE_STICKY}=\"true\"]`;\nconst IS_CTA = `[${ATTRIBUTE_CTA}=\"true\"]`;\n\nconst ELEMENT_HEADER_DECLARATION = 'element-header-declaration';\nconst ELEMENT_HEADER_CONTAINTER = 'element-header-container';\nconst ELEMENT_HEADER_WRAPPER = 'element-header-wrapper';\nconst ELEMENT_HEADER_LOGO_COLUMN = 'element-header-logo-column';\nconst ELEMENT_HEADER_NAVIGATION_COLUMN = 'element-header-navigation-column';\nconst ELEMENT_HEADER_LOGO = 'element-header-logo';\nconst ELEMENT_HEADER_MENU_BUTTON = 'element-header-menu-button';\nconst ELEMENT_HEADER_MENU_CTA = 'element-header-menu-cta';\nconst ELEMENT_HEADER_MENU_SEARCH = 'element-header-menu-search';\nconst ELEMENT_HEADER_NAVIGATION_ROW = 'element-header-navigation-row';\nconst ELEMENT_HEADER_UTILITY_ROW = 'element-header-utility-row';\n\nconst OVERWRITE_STICKY_CONTAINER = `.${ELEMENT_HEADER_CONTAINTER}${IS_STICKY}`;\nconst OVERWRITE_STICKY_LOGO = `${OVERWRITE_STICKY_CONTAINER} .${ELEMENT_HEADER_LOGO}`;\nconst OVERWRITE_CTA_WRAPPER = `.${ELEMENT_HEADER_WRAPPER}${IS_CTA}`;\nconst OVERWRITE_CTA_WRAPPER_NAV_ROW = `${OVERWRITE_CTA_WRAPPER} .${ELEMENT_HEADER_NAVIGATION_ROW}`;\nconst OVERWRITE_CTA_WRAPPER_CTA = `${OVERWRITE_CTA_WRAPPER} .${ELEMENT_HEADER_MENU_CTA}`;\n\nconst OverwriteStickyStyles = `\n ${OVERWRITE_STICKY_CONTAINER} {\n padding: ${token.spacing.xs} 0;\n }\n\n .${ELEMENT_HEADER_WRAPPER} {\n align-items: center;\n }\n\n ${OVERWRITE_STICKY_LOGO} img {\n max-height: 30px;\n }\n`;\n\nconst CtaStyles = `\n .${ELEMENT_HEADER_MENU_CTA} {\n color: ${token.color.white};\n font-weight: ${token.font.weight.bold};\n font-size: ${token.font.size.sm};\n padding: ${token.spacing.xs};\n background-color: ${token.color.red};\n transition: background .5s;\n white-space: nowrap;\n }\n\n .${ELEMENT_HEADER_MENU_CTA}:hover,\n .${ELEMENT_HEADER_MENU_CTA}:focus {\n background-color: ${token.color.redDark};\n }\n\n ${OVERWRITE_CTA_WRAPPER_CTA} {\n margin-top: -${token.spacing.min};\n }\n`;\n\nconst NavigationColumnStyles = `\n @media (max-width: 1240px) {\n .${ELEMENT_HEADER_NAVIGATION_COLUMN} {\n display: none;\n }\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} {\n display: grid;\n grid-auto-flow: column;\n }\n\n ${OVERWRITE_CTA_WRAPPER_NAV_ROW} {\n padding-top: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} > * {\n display: block;\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} > *:not(:first-child) {\n margin-left: ${token.spacing.md};\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} svg {\n width: 24px;\n height: 24px;\n fill: ${token.color.black};\n }\n\n .${ELEMENT_HEADER_UTILITY_ROW} {\n display: flex;\n justify-content: flex-end;\n margin-bottom: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_UTILITY_ROW} ::slotted(*) {\n display: flex;\n justify-content: flex-end;\n gap: ${token.spacing.md};\n }\n`;\n\nconst LogoColumnStyles = `\n .${ELEMENT_HEADER_LOGO_COLUMN} {\n align-items: center;\n display: flex;\n justify-content: flex-start;\n position: relative;\n width: 100%;\n max-width: 400px;\n }\n\n .${ELEMENT_HEADER_MENU_BUTTON} {\n border-right: 1px solid ${token.color.gray.light};\n padding-right: ${token.spacing.min};\n margin-right: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_LOGO} {\n display: grid;\n justify-content: flex-start;\n max-width: 350px;\n }\n\n .${ELEMENT_HEADER_LOGO}:has(img[src*=\".svg\"]) img {\n height: 240px;\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}`]: typography.sans.larger,\n },\n })}\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO} *`]: typography.sans.larger,\n },\n })}\n\n .${ELEMENT_HEADER_LOGO},\n .${ELEMENT_HEADER_LOGO} * {\n line-height: 1.05em;\n width: 100%;\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}[size=\"large\"]`]: typography.sans.extraLarge,\n },\n })}\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}[size=\"large\"] *`]: typography.sans.extraLarge,\n },\n })}\n\n .${ELEMENT_HEADER_LOGO},\n .${ELEMENT_HEADER_LOGO} * {\n font-weight: 700;\n }\n\n .${ELEMENT_HEADER_LOGO} img {\n width: 100%;\n max-height: 48px;\n max-width: 190px;\n }\n\n @media (min-width: ${token.media.breakpoints.tablet.min}) {\n .${ELEMENT_HEADER_LOGO} img {\n max-width: 240px;\n }\n }\n`;\n\nconst WrapperStyles = `\n .${ELEMENT_HEADER_WRAPPER} {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n gap: ${token.spacing.lg};\n z-index: 999;\n }\n`;\n\nconst STYLES_NAVIGATION_HEADER = `\n .${ELEMENT_HEADER_CONTAINTER} {\n background-color: ${token.color.white};\n display: block;\n padding: ${token.spacing.md} 0;\n position: relative;\n transition: padding ${ANIMATION_TIME}ms;\n }\n\n ${WrapperStyles}\n ${LogoColumnStyles}\n ${NavigationColumnStyles}\n ${CtaStyles}\n ${OverwriteStickyStyles}\n ${NavigationItem.Styles}\n ${MenuButton.Styles}\n`;\n\nconst CreateSearchLink = ({ searchUrl }: TypeSearchLink) => {\n if (!searchUrl) return null;\n\n const searchLink = document.createElement('a');\n\n searchLink.href = searchUrl;\n searchLink.ariaLabel = 'Visit the search page';\n searchLink.innerHTML = iconSearch;\n searchLink.classList.add(ELEMENT_HEADER_MENU_SEARCH);\n\n return searchLink;\n};\n\nconst CreateCtaLink = ({ ctaUrl, ctaText }: TypeCtaLink) => {\n if (!ctaUrl || !ctaText) return null;\n\n const cta = document.createElement('a');\n\n cta.innerHTML = ctaText;\n cta.setAttribute('target', '_blank');\n cta.setAttribute('href', ctaUrl);\n cta.classList.add(ELEMENT_HEADER_MENU_CTA);\n\n return cta;\n};\n\nconst CreateNavigationColumn = ({\n utilityRow,\n navItems,\n searchUrl,\n ctaText,\n ctaUrl,\n}: TypeNavRow) => {\n if (!navItems) return;\n\n const navColumnContainer = document.createElement('div');\n const utilityRowContainer = document.createElement('div');\n const navRowContainer = document.createElement('div');\n const searchLink = CreateSearchLink({\n searchUrl,\n });\n const ctaLink = CreateCtaLink({ ctaText, ctaUrl });\n\n if (utilityRow) {\n utilityRowContainer.classList.add(ELEMENT_HEADER_UTILITY_ROW);\n utilityRowContainer.appendChild(utilityRow);\n navColumnContainer.appendChild(utilityRowContainer);\n }\n\n navRowContainer.classList.add(ELEMENT_HEADER_NAVIGATION_ROW);\n\n navItems.forEach((item) => {\n navRowContainer.appendChild(item);\n });\n if (searchLink) navRowContainer.appendChild(searchLink);\n if (ctaLink) navRowContainer.appendChild(ctaLink);\n\n navColumnContainer.classList.add(ELEMENT_HEADER_NAVIGATION_COLUMN);\n navColumnContainer.appendChild(navRowContainer);\n\n return navColumnContainer;\n};\n\nconst CreateLogoColumn = ({ logo, eventOpen }: TypeLogoRequirments) => {\n const container = document.createElement('div');\n\n if (eventOpen) {\n const menuButton = MenuButton.CreateElement({ eventOpen });\n menuButton.classList.add(ELEMENT_HEADER_MENU_BUTTON);\n container.appendChild(menuButton);\n }\n\n if (logo) {\n const childrenText = Array.from(logo.children).reduce((acc, child) => {\n if (child.nodeName === 'IMG') return acc;\n\n if (child.textContent) {\n return acc + child.textContent.length;\n }\n\n return acc;\n }, 0);\n logo.classList.add(ELEMENT_HEADER_LOGO);\n\n if (childrenText < 30) {\n logo.setAttribute('size', 'large');\n }\n\n container.appendChild(logo);\n }\n container.classList.add(ELEMENT_HEADER_LOGO_COLUMN);\n return container;\n};\n\nconst CreateNavigationHeader = (props: TypeHeaderRequirements) => {\n const { ctaUrl, ctaText } = props;\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n const logoColumn = CreateLogoColumn(props);\n const navigationColumn = CreateNavigationColumn(props);\n const eventSticky = ({ isSticky }: { isSticky: boolean }) => {\n const utility = container.querySelector(\n `.${ELEMENT_HEADER_UTILITY_ROW}`,\n ) as HTMLDivElement;\n\n if (isSticky && isElementSticky) return;\n\n if (isSticky) {\n isElementSticky = true;\n container.setAttribute(ATTRIBUTE_STICKY, 'true');\n\n if (utility) {\n utility.style.display = 'none';\n }\n }\n if (!isSticky) {\n isElementSticky = false;\n container.removeAttribute(ATTRIBUTE_STICKY);\n\n if (utility) {\n utility.style.display = 'block';\n }\n }\n };\n let isElementSticky = false;\n\n wrapper.classList.add(ELEMENT_HEADER_WRAPPER);\n wrapper.appendChild(logoColumn);\n\n if (navigationColumn) wrapper.appendChild(navigationColumn);\n if (ctaUrl && ctaText) wrapper.setAttribute(ATTRIBUTE_CTA, 'true');\n\n container.appendChild(wrapper);\n container.classList.add(ELEMENT_HEADER_CONTAINTER);\n\n declaration.classList.add(ELEMENT_HEADER_DECLARATION);\n declaration.appendChild(container);\n\n return {\n element: declaration,\n events: {\n sticky: eventSticky,\n },\n };\n};\n\nexport default {\n CreateElement: CreateNavigationHeader,\n Styles: STYLES_NAVIGATION_HEADER,\n};\n"],"names":["iconSearch"],"mappings":"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"}
1
+ {"version":3,"file":"header.mjs","sources":["../../../source/composite/navigation/header.ts"],"sourcesContent":["import * as token from '@universityofmaryland/web-styles-library/token';\nimport * as typography from '@universityofmaryland/web-styles-library/typography';\nimport { jssToCSS } from '@universityofmaryland/web-utilities-library/styles';\nimport { isExternalUrl } from '@universityofmaryland/web-utilities-library/network';\nimport { search as iconSearch } from '@universityofmaryland/web-icons-library/search';\nimport MenuButton from './elements/menu-button';\nimport NavigationItem from './elements/item';\n\ntype TypeLogoRequirments = {\n logo?: HTMLElement | null;\n eventOpen?: () => void;\n};\n\ntype TypeSearchLink = {\n searchUrl: string | null;\n};\n\ntype TypeCtaLink = {\n ctaUrl: string | null;\n ctaText: string | null;\n};\n\ntype TypeNavRow = TypeSearchLink &\n TypeCtaLink & {\n utilityRow?: HTMLElement | null;\n navItems?: HTMLElement[];\n };\n\ntype TypeHeaderRequirements = TypeLogoRequirments & TypeNavRow;\n\nconst ANIMATION_TIME = 500;\n\nconst ATTRIBUTE_STICKY = 'data-sticky';\nconst ATTRIBUTE_CTA = 'data-cta';\n\nconst IS_STICKY = `[${ATTRIBUTE_STICKY}=\"true\"]`;\nconst IS_CTA = `[${ATTRIBUTE_CTA}=\"true\"]`;\n\nconst ELEMENT_HEADER_DECLARATION = 'element-header-declaration';\nconst ELEMENT_HEADER_CONTAINTER = 'element-header-container';\nconst ELEMENT_HEADER_WRAPPER = 'element-header-wrapper';\nconst ELEMENT_HEADER_LOGO_COLUMN = 'element-header-logo-column';\nconst ELEMENT_HEADER_NAVIGATION_COLUMN = 'element-header-navigation-column';\nconst ELEMENT_HEADER_LOGO = 'element-header-logo';\nconst ELEMENT_HEADER_MENU_BUTTON = 'element-header-menu-button';\nconst ELEMENT_HEADER_MENU_CTA = 'element-header-menu-cta';\nconst ELEMENT_HEADER_MENU_SEARCH = 'element-header-menu-search';\nconst ELEMENT_HEADER_NAVIGATION_ROW = 'element-header-navigation-row';\nconst ELEMENT_HEADER_UTILITY_ROW = 'element-header-utility-row';\n\nconst OVERWRITE_STICKY_CONTAINER = `.${ELEMENT_HEADER_CONTAINTER}${IS_STICKY}`;\nconst OVERWRITE_STICKY_LOGO = `${OVERWRITE_STICKY_CONTAINER} .${ELEMENT_HEADER_LOGO}`;\nconst OVERWRITE_CTA_WRAPPER = `.${ELEMENT_HEADER_WRAPPER}${IS_CTA}`;\nconst OVERWRITE_CTA_WRAPPER_NAV_ROW = `${OVERWRITE_CTA_WRAPPER} .${ELEMENT_HEADER_NAVIGATION_ROW}`;\nconst OVERWRITE_CTA_WRAPPER_CTA = `${OVERWRITE_CTA_WRAPPER} .${ELEMENT_HEADER_MENU_CTA}`;\n\nconst OverwriteStickyStyles = `\n ${OVERWRITE_STICKY_CONTAINER} {\n padding: ${token.spacing.xs} 0;\n }\n\n .${ELEMENT_HEADER_WRAPPER} {\n align-items: center;\n }\n\n ${OVERWRITE_STICKY_LOGO} img {\n max-height: 30px;\n }\n`;\n\nconst CtaStyles = `\n .${ELEMENT_HEADER_MENU_CTA} {\n color: ${token.color.white};\n font-weight: ${token.font.weight.bold};\n font-size: ${token.font.size.sm};\n padding: ${token.spacing.xs};\n background-color: ${token.color.red};\n transition: background .5s;\n white-space: nowrap;\n }\n\n .${ELEMENT_HEADER_MENU_CTA}:hover,\n .${ELEMENT_HEADER_MENU_CTA}:focus {\n background-color: ${token.color.redDark};\n }\n\n ${OVERWRITE_CTA_WRAPPER_CTA} {\n margin-top: -${token.spacing.min};\n }\n`;\n\nconst NavigationColumnStyles = `\n @media (max-width: 1240px) {\n .${ELEMENT_HEADER_NAVIGATION_COLUMN} {\n display: none;\n }\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} {\n display: grid;\n grid-auto-flow: column;\n }\n\n ${OVERWRITE_CTA_WRAPPER_NAV_ROW} {\n padding-top: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} > * {\n display: block;\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} > *:not(:first-child) {\n margin-left: ${token.spacing.md};\n }\n\n .${ELEMENT_HEADER_NAVIGATION_ROW} svg {\n width: 24px;\n height: 24px;\n fill: ${token.color.black};\n }\n\n .${ELEMENT_HEADER_UTILITY_ROW} {\n display: flex;\n justify-content: flex-end;\n margin-bottom: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_UTILITY_ROW} ::slotted(*) {\n display: flex;\n justify-content: flex-end;\n gap: ${token.spacing.md};\n }\n`;\n\nconst LogoColumnStyles = `\n .${ELEMENT_HEADER_LOGO_COLUMN} {\n align-items: center;\n display: flex;\n justify-content: flex-start;\n position: relative;\n width: 100%;\n max-width: 400px;\n }\n\n .${ELEMENT_HEADER_MENU_BUTTON} {\n border-right: 1px solid ${token.color.gray.light};\n padding-right: ${token.spacing.min};\n margin-right: ${token.spacing.sm};\n }\n\n .${ELEMENT_HEADER_LOGO} {\n display: grid;\n justify-content: flex-start;\n max-width: 350px;\n }\n\n .${ELEMENT_HEADER_LOGO}:has(img[src*=\".svg\"]) img {\n height: 240px;\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}`]: typography.sans.larger,\n },\n })}\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO} *`]: typography.sans.larger,\n },\n })}\n\n .${ELEMENT_HEADER_LOGO},\n .${ELEMENT_HEADER_LOGO} * {\n line-height: 1.05em;\n width: 100%;\n }\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}[size=\"large\"]`]: typography.sans.extraLarge,\n },\n })}\n\n ${jssToCSS({\n styleObj: {\n [`.${ELEMENT_HEADER_LOGO}[size=\"large\"] *`]: typography.sans.extraLarge,\n },\n })}\n\n .${ELEMENT_HEADER_LOGO},\n .${ELEMENT_HEADER_LOGO} * {\n font-weight: 700;\n }\n\n .${ELEMENT_HEADER_LOGO} img {\n width: 100%;\n max-height: 48px;\n max-width: 190px;\n }\n\n @media (min-width: ${token.media.breakpoints.tablet.min}) {\n .${ELEMENT_HEADER_LOGO} img {\n max-width: 240px;\n }\n }\n`;\n\nconst WrapperStyles = `\n .${ELEMENT_HEADER_WRAPPER} {\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n gap: ${token.spacing.lg};\n z-index: 999;\n }\n`;\n\nconst STYLES_NAVIGATION_HEADER = `\n .${ELEMENT_HEADER_CONTAINTER} {\n background-color: ${token.color.white};\n display: block;\n padding: ${token.spacing.md} 0;\n position: relative;\n transition: padding ${ANIMATION_TIME}ms;\n }\n\n ${WrapperStyles}\n ${LogoColumnStyles}\n ${NavigationColumnStyles}\n ${CtaStyles}\n ${OverwriteStickyStyles}\n ${NavigationItem.Styles}\n ${MenuButton.Styles}\n`;\n\nconst CreateSearchLink = ({ searchUrl }: TypeSearchLink) => {\n if (!searchUrl) return null;\n\n const searchLink = document.createElement('a');\n\n searchLink.href = searchUrl;\n searchLink.ariaLabel = 'Visit the search page';\n searchLink.innerHTML = iconSearch;\n searchLink.classList.add(ELEMENT_HEADER_MENU_SEARCH);\n\n return searchLink;\n};\n\nconst CreateCtaLink = ({ ctaUrl, ctaText }: TypeCtaLink) => {\n if (!ctaUrl || !ctaText) return null;\n\n const cta = document.createElement('a');\n\n cta.innerHTML = ctaText;\n if (isExternalUrl(ctaUrl)) {\n cta.setAttribute('target', '_blank');\n }\n cta.setAttribute('href', ctaUrl);\n cta.classList.add(ELEMENT_HEADER_MENU_CTA);\n\n return cta;\n};\n\nconst CreateNavigationColumn = ({\n utilityRow,\n navItems,\n searchUrl,\n ctaText,\n ctaUrl,\n}: TypeNavRow) => {\n if (!navItems) return;\n\n const navColumnContainer = document.createElement('div');\n const utilityRowContainer = document.createElement('div');\n const navRowContainer = document.createElement('div');\n const searchLink = CreateSearchLink({\n searchUrl,\n });\n const ctaLink = CreateCtaLink({ ctaText, ctaUrl });\n\n if (utilityRow) {\n utilityRowContainer.classList.add(ELEMENT_HEADER_UTILITY_ROW);\n utilityRowContainer.appendChild(utilityRow);\n navColumnContainer.appendChild(utilityRowContainer);\n }\n\n navRowContainer.classList.add(ELEMENT_HEADER_NAVIGATION_ROW);\n\n navItems.forEach((item) => {\n navRowContainer.appendChild(item);\n });\n if (searchLink) navRowContainer.appendChild(searchLink);\n if (ctaLink) navRowContainer.appendChild(ctaLink);\n\n navColumnContainer.classList.add(ELEMENT_HEADER_NAVIGATION_COLUMN);\n navColumnContainer.appendChild(navRowContainer);\n\n return navColumnContainer;\n};\n\nconst CreateLogoColumn = ({ logo, eventOpen }: TypeLogoRequirments) => {\n const container = document.createElement('div');\n\n if (eventOpen) {\n const menuButton = MenuButton.CreateElement({ eventOpen });\n menuButton.classList.add(ELEMENT_HEADER_MENU_BUTTON);\n container.appendChild(menuButton);\n }\n\n if (logo) {\n const childrenText = Array.from(logo.children).reduce((acc, child) => {\n if (child.nodeName === 'IMG') return acc;\n\n if (child.textContent) {\n return acc + child.textContent.length;\n }\n\n return acc;\n }, 0);\n logo.classList.add(ELEMENT_HEADER_LOGO);\n\n if (childrenText < 30) {\n logo.setAttribute('size', 'large');\n }\n\n container.appendChild(logo);\n }\n container.classList.add(ELEMENT_HEADER_LOGO_COLUMN);\n return container;\n};\n\nconst CreateNavigationHeader = (props: TypeHeaderRequirements) => {\n const { ctaUrl, ctaText } = props;\n const declaration = document.createElement('div');\n const container = document.createElement('div');\n const wrapper = document.createElement('div');\n const logoColumn = CreateLogoColumn(props);\n const navigationColumn = CreateNavigationColumn(props);\n const eventSticky = ({ isSticky }: { isSticky: boolean }) => {\n const utility = container.querySelector(\n `.${ELEMENT_HEADER_UTILITY_ROW}`,\n ) as HTMLDivElement;\n\n if (isSticky && isElementSticky) return;\n\n if (isSticky) {\n isElementSticky = true;\n container.setAttribute(ATTRIBUTE_STICKY, 'true');\n\n if (utility) {\n utility.style.display = 'none';\n }\n }\n if (!isSticky) {\n isElementSticky = false;\n container.removeAttribute(ATTRIBUTE_STICKY);\n\n if (utility) {\n utility.style.display = 'block';\n }\n }\n };\n let isElementSticky = false;\n\n wrapper.classList.add(ELEMENT_HEADER_WRAPPER);\n wrapper.appendChild(logoColumn);\n\n if (navigationColumn) wrapper.appendChild(navigationColumn);\n if (ctaUrl && ctaText) wrapper.setAttribute(ATTRIBUTE_CTA, 'true');\n\n container.appendChild(wrapper);\n container.classList.add(ELEMENT_HEADER_CONTAINTER);\n\n declaration.classList.add(ELEMENT_HEADER_DECLARATION);\n declaration.appendChild(container);\n\n return {\n element: declaration,\n events: {\n sticky: eventSticky,\n },\n };\n};\n\nexport default {\n CreateElement: CreateNavigationHeader,\n Styles: STYLES_NAVIGATION_HEADER,\n};\n"],"names":["iconSearch"],"mappings":";;;;;;;AA8BA,MAAM,iBAAiB;AAEvB,MAAM,mBAAmB;AACzB,MAAM,gBAAgB;AAEtB,MAAM,YAAY,IAAI,gBAAgB;AACtC,MAAM,SAAS,IAAI,aAAa;AAEhC,MAAM,6BAA6B;AACnC,MAAM,4BAA4B;AAClC,MAAM,yBAAyB;AAC/B,MAAM,6BAA6B;AACnC,MAAM,mCAAmC;AACzC,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,0BAA0B;AAChC,MAAM,6BAA6B;AACnC,MAAM,gCAAgC;AACtC,MAAM,6BAA6B;AAEnC,MAAM,6BAA6B,IAAI,yBAAyB,GAAG,SAAS;AAC5E,MAAM,wBAAwB,GAAG,0BAA0B,KAAK,mBAAmB;AACnF,MAAM,wBAAwB,IAAI,sBAAsB,GAAG,MAAM;AACjE,MAAM,gCAAgC,GAAG,qBAAqB,KAAK,6BAA6B;AAChG,MAAM,4BAA4B,GAAG,qBAAqB,KAAK,uBAAuB;AAEtF,MAAM,wBAAwB;AAAA,IAC1B,0BAA0B;AAAA,eACf,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,KAG1B,sBAAsB;AAAA;AAAA;AAAA;AAAA,IAIvB,qBAAqB;AAAA;AAAA;AAAA;AAKzB,MAAM,YAAY;AAAA,KACb,uBAAuB;AAAA,aACf,MAAM,MAAM,KAAK;AAAA,mBACX,MAAM,KAAK,OAAO,IAAI;AAAA,iBACxB,MAAM,KAAK,KAAK,EAAE;AAAA,eACpB,MAAM,QAAQ,EAAE;AAAA,wBACP,MAAM,MAAM,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,KAKlC,uBAAuB;AAAA,KACvB,uBAAuB;AAAA,wBACJ,MAAM,MAAM,OAAO;AAAA;AAAA;AAAA,IAGvC,yBAAyB;AAAA,mBACV,MAAM,QAAQ,GAAG;AAAA;AAAA;AAIpC,MAAM,yBAAyB;AAAA;AAAA,OAExB,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA,KAKlC,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA,IAK9B,6BAA6B;AAAA,mBACd,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,KAG9B,6BAA6B;AAAA;AAAA;AAAA;AAAA,KAI7B,6BAA6B;AAAA,mBACf,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,KAG9B,6BAA6B;AAAA;AAAA;AAAA,YAGtB,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA,KAGxB,0BAA0B;AAAA;AAAA;AAAA,qBAGV,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,KAGhC,0BAA0B;AAAA;AAAA;AAAA,WAGpB,MAAM,QAAQ,EAAE;AAAA;AAAA;AAI3B,MAAM,mBAAmB;AAAA,KACpB,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAS1B,0BAA0B;AAAA,8BACD,MAAM,MAAM,KAAK,KAAK;AAAA,qBAC/B,MAAM,QAAQ,GAAG;AAAA,oBAClB,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA,KAG/B,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMnB,mBAAmB;AAAA;AAAA;AAAA;AAAA,IAIpB,SAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,mBAAmB,EAAE,GAAG,WAAW,KAAK;AAAA,EAAA;AAEjD,CAAC,CAAC;AAAA;AAAA,IAEA,SAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,mBAAmB,IAAI,GAAG,WAAW,KAAK;AAAA,EAAA;AAEnD,CAAC,CAAC;AAAA;AAAA,KAEC,mBAAmB;AAAA,KACnB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKpB,SAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,mBAAmB,gBAAgB,GAAG,WAAW,KAAK;AAAA,EAAA;AAE/D,CAAC,CAAC;AAAA;AAAA,IAEA,SAAS;AAAA,EACT,UAAU;AAAA,IACR,CAAC,IAAI,mBAAmB,kBAAkB,GAAG,WAAW,KAAK;AAAA,EAAA;AAEjE,CAAC,CAAC;AAAA;AAAA,KAEC,mBAAmB;AAAA,KACnB,mBAAmB;AAAA;AAAA;AAAA;AAAA,KAInB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAMD,MAAM,MAAM,YAAY,OAAO,GAAG;AAAA,OAClD,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAM1B,MAAM,gBAAgB;AAAA,KACjB,sBAAsB;AAAA;AAAA;AAAA;AAAA,WAIhB,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA;AAK3B,MAAM,2BAA2B;AAAA,KAC5B,yBAAyB;AAAA,wBACN,MAAM,MAAM,KAAK;AAAA;AAAA,eAE1B,MAAM,QAAQ,EAAE;AAAA;AAAA,0BAEL,cAAc;AAAA;AAAA;AAAA,IAGpC,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,SAAS;AAAA,IACT,qBAAqB;AAAA,IACrB,eAAe,MAAM;AAAA,IACrB,WAAW,MAAM;AAAA;AAGrB,MAAM,mBAAmB,CAAC,EAAE,gBAAgC;AAC1D,MAAI,CAAC,UAAW,QAAO;AAEvB,QAAM,aAAa,SAAS,cAAc,GAAG;AAE7C,aAAW,OAAO;AAClB,aAAW,YAAY;AACvB,aAAW,YAAYA;AACvB,aAAW,UAAU,IAAI,0BAA0B;AAEnD,SAAO;AACT;AAEA,MAAM,gBAAgB,CAAC,EAAE,QAAQ,cAA2B;AAC1D,MAAI,CAAC,UAAU,CAAC,QAAS,QAAO;AAEhC,QAAM,MAAM,SAAS,cAAc,GAAG;AAEtC,MAAI,YAAY;AAChB,MAAI,cAAc,MAAM,GAAG;AACzB,QAAI,aAAa,UAAU,QAAQ;AAAA,EACrC;AACA,MAAI,aAAa,QAAQ,MAAM;AAC/B,MAAI,UAAU,IAAI,uBAAuB;AAEzC,SAAO;AACT;AAEA,MAAM,yBAAyB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAkB;AAChB,MAAI,CAAC,SAAU;AAEf,QAAM,qBAAqB,SAAS,cAAc,KAAK;AACvD,QAAM,sBAAsB,SAAS,cAAc,KAAK;AACxD,QAAM,kBAAkB,SAAS,cAAc,KAAK;AACpD,QAAM,aAAa,iBAAiB;AAAA,IAClC;AAAA,EAAA,CACD;AACD,QAAM,UAAU,cAAc,EAAE,SAAS,QAAQ;AAEjD,MAAI,YAAY;AACd,wBAAoB,UAAU,IAAI,0BAA0B;AAC5D,wBAAoB,YAAY,UAAU;AAC1C,uBAAmB,YAAY,mBAAmB;AAAA,EACpD;AAEA,kBAAgB,UAAU,IAAI,6BAA6B;AAE3D,WAAS,QAAQ,CAAC,SAAS;AACzB,oBAAgB,YAAY,IAAI;AAAA,EAClC,CAAC;AACD,MAAI,WAAY,iBAAgB,YAAY,UAAU;AACtD,MAAI,QAAS,iBAAgB,YAAY,OAAO;AAEhD,qBAAmB,UAAU,IAAI,gCAAgC;AACjE,qBAAmB,YAAY,eAAe;AAE9C,SAAO;AACT;AAEA,MAAM,mBAAmB,CAAC,EAAE,MAAM,gBAAqC;AACrE,QAAM,YAAY,SAAS,cAAc,KAAK;AAE9C,MAAI,WAAW;AACb,UAAM,aAAa,WAAW,cAAc,EAAE,WAAW;AACzD,eAAW,UAAU,IAAI,0BAA0B;AACnD,cAAU,YAAY,UAAU;AAAA,EAClC;AAEA,MAAI,MAAM;AACR,UAAM,eAAe,MAAM,KAAK,KAAK,QAAQ,EAAE,OAAO,CAAC,KAAK,UAAU;AACpE,UAAI,MAAM,aAAa,MAAO,QAAO;AAErC,UAAI,MAAM,aAAa;AACrB,eAAO,MAAM,MAAM,YAAY;AAAA,MACjC;AAEA,aAAO;AAAA,IACT,GAAG,CAAC;AACJ,SAAK,UAAU,IAAI,mBAAmB;AAEtC,QAAI,eAAe,IAAI;AACrB,WAAK,aAAa,QAAQ,OAAO;AAAA,IACnC;AAEA,cAAU,YAAY,IAAI;AAAA,EAC5B;AACA,YAAU,UAAU,IAAI,0BAA0B;AAClD,SAAO;AACT;AAEA,MAAM,yBAAyB,CAAC,UAAkC;AAChE,QAAM,EAAE,QAAQ,QAAA,IAAY;AAC5B,QAAM,cAAc,SAAS,cAAc,KAAK;AAChD,QAAM,YAAY,SAAS,cAAc,KAAK;AAC9C,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,QAAM,aAAa,iBAAiB,KAAK;AACzC,QAAM,mBAAmB,uBAAuB,KAAK;AACrD,QAAM,cAAc,CAAC,EAAE,eAAsC;AAC3D,UAAM,UAAU,UAAU;AAAA,MACxB,IAAI,0BAA0B;AAAA,IAAA;AAGhC,QAAI,YAAY,gBAAiB;AAEjC,QAAI,UAAU;AACZ,wBAAkB;AAClB,gBAAU,aAAa,kBAAkB,MAAM;AAE/C,UAAI,SAAS;AACX,gBAAQ,MAAM,UAAU;AAAA,MAC1B;AAAA,IACF;AACA,QAAI,CAAC,UAAU;AACb,wBAAkB;AAClB,gBAAU,gBAAgB,gBAAgB;AAE1C,UAAI,SAAS;AACX,gBAAQ,MAAM,UAAU;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACA,MAAI,kBAAkB;AAEtB,UAAQ,UAAU,IAAI,sBAAsB;AAC5C,UAAQ,YAAY,UAAU;AAE9B,MAAI,iBAAkB,SAAQ,YAAY,gBAAgB;AAC1D,MAAI,UAAU,QAAS,SAAQ,aAAa,eAAe,MAAM;AAEjE,YAAU,YAAY,OAAO;AAC7B,YAAU,UAAU,IAAI,yBAAyB;AAEjD,cAAY,UAAU,IAAI,0BAA0B;AACpD,cAAY,YAAY,SAAS;AAEjC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,MACN,QAAQ;AAAA,IAAA;AAAA,EACV;AAEJ;AAEA,MAAA,SAAe;AAAA,EACb,eAAe;AAAA,EACf,QAAQ;AACV;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@universityofmaryland/web-elements-library",
3
- "version": "1.5.0",
3
+ "version": "1.5.2",
4
4
  "description": "UMD Web Elements",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",