@universityofmaryland/web-components-library 1.14.10 → 1.14.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{_event-BzvNLqqf.js → _event-zkKU3M5w.js} +3 -3
- package/dist/{_event-BzvNLqqf.js.map → _event-zkKU3M5w.js.map} +1 -1
- package/dist/api/pathway/image.d.ts.map +1 -1
- package/dist/cdn.js +53 -53
- package/dist/cdn.js.map +1 -1
- package/dist/{chevron-scroll-OMtKW5S9.js → chevron-scroll-BZtdKUuJ.js} +3 -3
- package/dist/{chevron-scroll-OMtKW5S9.js.map → chevron-scroll-BZtdKUuJ.js.map} +1 -1
- package/dist/components/accordion.js +1 -1
- package/dist/components/actions.js +1 -1
- package/dist/components/alert.js +1 -1
- package/dist/components/brand.js +1 -1
- package/dist/components/card.js +1 -1
- package/dist/components/carousel.js +1 -1
- package/dist/components/feed.js +1 -1
- package/dist/components/footer.js +1 -1
- package/dist/components/hero.js +1 -1
- package/dist/components/layout.js +1 -1
- package/dist/components/media.js +1 -1
- package/dist/components/navigation.js +1 -1
- package/dist/components/pathway.js +1 -1
- package/dist/components/person.js +1 -1
- package/dist/components/quote.js +1 -1
- package/dist/components/slider.js +1 -1
- package/dist/components/social.js +1 -1
- package/dist/components/stat.js +1 -1
- package/dist/components/tab.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/content.js +1 -1
- package/dist/{display-wE0il7rr.js → display-BAWPSZWk.js} +3 -3
- package/dist/{display-wE0il7rr.js.map → display-BAWPSZWk.js.map} +1 -1
- package/dist/{display-DECqmVEZ.js → display-DvhD-oDO.js} +3 -3
- package/dist/{display-DECqmVEZ.js.map → display-DvhD-oDO.js.map} +1 -1
- package/dist/{display-D2GEPqCW.js → display-HZowWri1.js} +3 -3
- package/dist/{display-D2GEPqCW.js.map → display-HZowWri1.js.map} +1 -1
- package/dist/{display-BCa3axfI.js → display-yOrx8Qu7.js} +3 -3
- package/dist/{display-BCa3axfI.js.map → display-yOrx8Qu7.js.map} +1 -1
- package/dist/{event-lockup-DQgwp3gO.js → event-lockup-DJPiglgR.js} +3 -3
- package/dist/{event-lockup-DQgwp3gO.js.map → event-lockup-DJPiglgR.js.map} +1 -1
- package/dist/{feed-BSntlEBA.js → feed-D5nqCXw5.js} +3 -3
- package/dist/{feed-BSntlEBA.js.map → feed-D5nqCXw5.js.map} +1 -1
- package/dist/feed.js +1 -1
- package/dist/{gif-DFmy3K6d.js → gif-DcCErswK.js} +3 -3
- package/dist/{gif-DFmy3K6d.js.map → gif-DcCErswK.js.map} +1 -1
- package/dist/{hero-DJY4qxON.js → hero-Bn4rdy_N.js} +3 -3
- package/dist/{hero-DJY4qxON.js.map → hero-Bn4rdy_N.js.map} +1 -1
- package/dist/{highlight-DHa9w3Pn.js → highlight-C3vD7SBd.js} +44 -41
- package/dist/highlight-C3vD7SBd.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/interactive.js +1 -1
- package/dist/{item-CbhwHIpH.js → item-DwMV1mFy.js} +3 -3
- package/dist/{item-CbhwHIpH.js.map → item-DwMV1mFy.js.map} +1 -1
- package/dist/{list-CWGH3XBG.js → list-Dwa6U7aH.js} +3 -3
- package/dist/{list-CWGH3XBG.js.map → list-Dwa6U7aH.js.map} +1 -1
- package/dist/{loader-xwmpwCXk.js → loader-8wYd7fUZ.js} +23 -23
- package/dist/{loader-xwmpwCXk.js.map → loader-8wYd7fUZ.js.map} +1 -1
- package/dist/{minimal-DxGUDvv6.js → minimal-DPc0ZoRw.js} +3 -3
- package/dist/{minimal-DxGUDvv6.js.map → minimal-DPc0ZoRw.js.map} +1 -1
- package/dist/model/attributes/checks.d.ts.map +1 -1
- package/dist/{options-BvmHmwsE.js → options-CZuC7PDp.js} +3 -3
- package/dist/{options-BvmHmwsE.js.map → options-CZuC7PDp.js.map} +1 -1
- package/dist/shared/{model-4-WQm2Le.js → model-CHS3WnCo.js} +112 -118
- package/dist/shared/model-CHS3WnCo.js.map +1 -0
- package/dist/shared/{utilities-B_sPVa-m.js → utilities-CZHe-tKs.js} +2 -2
- package/dist/shared/{utilities-B_sPVa-m.js.map → utilities-CZHe-tKs.js.map} +1 -1
- package/dist/{sharing-jgM675YU.js → sharing--wGjj16l.js} +3 -3
- package/dist/{sharing-jgM675YU.js.map → sharing--wGjj16l.js.map} +1 -1
- package/dist/{site-DtjJCbAC.js → site-CpSb21QB.js} +3 -3
- package/dist/{site-DtjJCbAC.js.map → site-CpSb21QB.js.map} +1 -1
- package/dist/{sticky-OTUETMNA.js → sticky-CMFVqgPc.js} +3 -3
- package/dist/{sticky-OTUETMNA.js.map → sticky-CMFVqgPc.js.map} +1 -1
- package/dist/{sticky-columns-BZWi9zSi.js → sticky-columns-DlAAdaT4.js} +3 -3
- package/dist/{sticky-columns-BZWi9zSi.js.map → sticky-columns-DlAAdaT4.js.map} +1 -1
- package/dist/structural.js +1 -1
- package/dist/{video-n1zTWSI8.js → video-Cm_iBOTt.js} +4 -4
- package/dist/{video-n1zTWSI8.js.map → video-Cm_iBOTt.js.map} +1 -1
- package/dist/{wide-CoHOWBGB.js → wide-omTQQ6Wr.js} +3 -3
- package/dist/{wide-CoHOWBGB.js.map → wide-omTQQ6Wr.js.map} +1 -1
- package/package.json +1 -1
- package/dist/highlight-DHa9w3Pn.js.map +0 -1
- package/dist/shared/model-4-WQm2Le.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video-n1zTWSI8.js","sources":["../source/api/card/_model.ts","../source/api/card/article.ts","../source/api/card/event.ts","../source/api/card/icon.ts","../source/api/card/overlay.ts","../source/api/card/standard.ts","../source/api/card/video.ts"],"sourcesContent":["import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Model, Register, Slots } from 'model';\nimport { Markup } from 'utilities';\n\nconst { card } = Composite;\n\ninterface CardData {\n image: HTMLImageElement | null;\n eyebrow: HTMLElement | null;\n headline: HTMLElement | null;\n text: HTMLElement | null;\n date: HTMLElement | null;\n actions: HTMLElement | null;\n isTransparent: boolean;\n isThemeDark: boolean;\n isAligned?: boolean;\n isBordered?: boolean;\n}\n\ninterface CardConfig {\n tagName: string;\n}\n\nconst createCardComponent = ({ tagName }: CardConfig) => {\n const slots = {\n headline: {\n required: true,\n ...Slots.element.allowed.subHeadline,\n },\n body: Slots.element.allowed.text,\n };\n\n const createComponentData = (element: HTMLElement): CardData => ({\n image: Markup.validate.ImageSlot({\n element,\n ImageSlot: Slots.name.assets.image,\n }),\n eyebrow: Slots.eyebrow.default({ element }),\n headline: Slots.headline.default({ element }),\n text: Slots.text.default({ element }),\n date: Slots.date.default({ element }),\n actions: Slots.actions.default({ element }),\n isTransparent: Attributes.isVisual.transparent({ element }),\n isThemeDark: Attributes.isTheme.dark({ element }),\n });\n\n const createComponent = (element: HTMLElement) => {\n const isAligned = Attributes.isVisual.aligned({ element });\n const hasBorder = Attributes.isVisual.bordered({ element });\n const isDisplayList = Attributes.isDisplay.list({ element });\n const cardData = createComponentData(element);\n\n if (isDisplayList) {\n return card.list({\n ...cardData,\n isAligned,\n });\n }\n\n return card.block({\n ...cardData,\n isAligned,\n hasBorder,\n });\n };\n\n return () => {\n Register.registerWebComponent({\n name: tagName,\n element: Model.createCustomElement({\n tagName,\n slots,\n createComponent,\n }),\n });\n };\n};\n\nexport default createCardComponent;\n","import CardModel from './_model';\nimport type { ComponentRegistration } from '../../_types';\n\n// Tag name for the article card component\nconst tagName = 'umd-element-article';\n\n/**\n * Article Card\n *\n * A specialized card component optimized for displaying article and news content.\n * Inherits all features from the standard card with article-specific semantics.\n *\n * ## Custom Element\n * `<umd-element-article>`\n *\n * ## Slots\n * - `headline` - Article title (required, accepts: h2-h6, p)\n * - `text` - Article excerpt or summary (accepts: p)\n * - `eyebrow` - Category or section label\n * - `image` - Article featured image\n * - `actions` - Read more links or sharing options\n * - `date` - Publication date\n *\n * ## Attributes\n * - `data-theme` - Theme styling options:\n * - `dark` - Dark theme styling\n * - `light` - Light theme styling\n * - `data-display` - Display mode options:\n * - `list` - List display format\n * - `data-visual` - Visual display options:\n * - `transparent` - Transparent background\n * - `aligned` - Aligned content layout\n * - `bordered` - Add border styling\n *\n *\n * @example\n * ```html\n * <!-- Basic article card -->\n * <umd-element-article>\n * <p slot=\"eyebrow\">Faculty Research</p>\n * <h3 slot=\"headline\">Professor Wins Nobel Prize in Physics</h3>\n * <p slot=\"text\">Groundbreaking work in quantum computing recognized.</p>\n * <p slot=\"date\">December 10, 2023</p>\n * </umd-element-article>\n * ```\n *\n * @example\n * ```html\n * <!-- Article with image and actions -->\n * <umd-element-article>\n * <img slot=\"image\" src=\"research-lab.jpg\" alt=\"Research laboratory\">\n * <p slot=\"eyebrow\">Science & Technology</p>\n * <h2 slot=\"headline\">New Climate Research Center Opens</h2>\n * <p slot=\"text\">\n * The facility will advance understanding of climate change impacts\n * and develop sustainable solutions.\n * </p>\n * <p slot=\"date\">November 15, 2023</p>\n * <div slot=\"actions\">\n * <a href=\"/full-article\">Read Full Article</a>\n * <a href=\"/share\">Share</a>\n * </div>\n * </umd-element-article>\n * ```\n *\n * @example\n * ```html\n * <!-- List layout article -->\n * <umd-element-article data-display=\"list\" data-theme=\"light\">\n * <h4 slot=\"headline\">Campus Sustainability Initiative</h4>\n * <p slot=\"text\">New programs reduce carbon footprint by 30%.</p>\n * <p slot=\"date\">October 5, 2023</p>\n * </umd-element-article>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = CardModel({ tagName });\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register } from 'model';\nimport { extractEventData } from '../_event';\nimport { toUMDElement } from 'utilities/markup/validate';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\nconst tagName = 'umd-element-event';\n\nconst slots: SlotConfiguration = {\n headline: {\n ...Slots.element.allowed.headline,\n required: true,\n },\n text: Slots.element.allowed.text,\n 'date-start-iso': Slots.element.allowed.time,\n 'date-end-iso': Slots.element.allowed.time,\n location: Slots.element.allowed.text,\n image: Slots.element.allowed.imageLink,\n eyebrow: Slots.element.allowed.eyebrow,\n actions: Slots.element.allowed.actions,\n};\n\n/**\n * Creates an event card component with date, time, and location information\n * @param element - The host HTML element\n * @returns Configured event card component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const eventComponents = extractEventData(element);\n\n // Start date is missing - required field\n if (!eventComponents) {\n return { element: document.createElement('div'), styles: '' };\n }\n\n // Feature layout: large date sign, eyebrow ribbon\n\n if (Attributes.isDisplay.feature({ element })) {\n const featureEvents = extractEventData(element, {\n isLargeSize: true,\n isDateSignDark: false,\n });\n\n return Composite.card.block({\n actions: Slots.actions.default({ element }),\n dateSign: toUMDElement(featureEvents?.dateSign),\n eventMeta: toUMDElement(featureEvents?.eventMeta),\n eyebrow: Slots.eyebrow.default({ element }),\n hasEyebrowRibbon: true,\n headline: Slots.headline.default({ element }),\n image: Slots.assets.image({ element }) as HTMLImageElement,\n isThemeDark: Attributes.isTheme.dark({ element }),\n isTransparent: Attributes.isVisual.transparent({ element }),\n text: Slots.text.default({ element }),\n });\n }\n\n // Promo layout: overlay style with forced dark theme for meta\n\n if (Attributes.isDisplay.promo({ element })) {\n const promoEvents = extractEventData(element, {\n isThemeDark: true, // Force dark theme for meta in overlay\n isDateSignDark: false,\n });\n\n return Composite.card.overlay.image({\n actions: Slots.actions.default({ element }),\n backgroundImage: Slots.assets.image({ element }) as HTMLImageElement,\n dateSign: toUMDElement(promoEvents?.dateSign),\n eventMeta: toUMDElement(promoEvents?.eventMeta),\n headline: Slots.headline.default({ element }),\n isThemeDark: Attributes.isTheme.dark({ element }),\n text: Slots.text.default({ element }),\n });\n }\n\n // List layout: large date sign, uses element's theme\n\n if (Attributes.isDisplay.list({ element })) {\n const listEvents = extractEventData(element, {\n isLargeSize: true,\n });\n\n return Composite.card.list({\n actions: Slots.actions.default({ element }),\n dateSign: toUMDElement(listEvents?.dateSign),\n eventMeta: toUMDElement(listEvents?.eventMeta),\n headline: Slots.headline.default({ element }),\n image: Slots.assets.image({ element }) as HTMLImageElement,\n isThemeDark: Attributes.isTheme.dark({ element }),\n text: Slots.text.default({ element }),\n });\n }\n\n // Default: block layout with standard configuration\n\n const { eventMeta } = eventComponents;\n return Composite.card.block({\n actions: Slots.actions.default({ element }),\n eventMeta: toUMDElement(eventMeta) as any,\n headline: Slots.headline.default({ element }),\n image: Slots.assets.image({ element }) as HTMLImageElement,\n isThemeDark: Attributes.isTheme.dark({ element }),\n isTransparent: Attributes.isVisual.transparent({ element }),\n text: Slots.text.default({ element }),\n });\n};\n\n/**\n * Event Card\n *\n * A specialized card for displaying event information with date, time, and location.\n * Supports multiple display formats including feature, promo, and list layouts.\n *\n * ## Custom Element\n * `<umd-element-event>`\n *\n * ## Slots\n * - `headline` - Event title (required, accepts: h2-h6, p)\n * - `text` - Event description (accepts: p)\n * - `date-start-iso` - Event start date/time (required, time element)\n * - `date-end-iso` - Event end date/time (optional, time element)\n * - `location` - Event location\n * - `image` - Event image\n * - `eyebrow` - Category or type label\n * - `actions` - Registration or info links\n *\n * ## Attributes\n * - `data-display` - Display layout options:\n * - `feature` - Featured event layout with prominent date\n * - `promo` - Promotional layout with image overlay\n * - `list` - Compact list layout\n * - `data-visual-time` - Time display options:\n * - `true` - Show time in event details\n * - `data-theme` - Theme styling options:\n * - `dark` - Dark theme styling\n * - `data-visual-transparent` - Visual display options:\n * - `true` - Transparent background\n *\n * @example\n * ```html\n * <!-- Basic event card -->\n * <umd-element-event>\n * <h3 slot=\"headline\">Annual Research Symposium</h3>\n * <p slot=\"text\">Join us for presentations from leading researchers.</p>\n * <time slot=\"date-start-iso\" datetime=\"2024-03-15T09:00:00\">March 15, 2024 at 9:00 AM</time>\n * <time slot=\"date-end-iso\" datetime=\"2024-03-15T17:00:00\">March 15, 2024 at 5:00 PM</time>\n * <p slot=\"location\">Stamp Student Union</p>\n * </umd-element-event>\n * ```\n *\n * @example\n * ```html\n * <!-- Featured event with image -->\n * <umd-element-event data-display=\"feature\" data-feature=\"visual-time\">\n * <img slot=\"image\" src=\"symposium.jpg\" alt=\"Research symposium\">\n * <p slot=\"eyebrow\">Featured Event</p>\n * <h2 slot=\"headline\">Maryland Day 2024</h2>\n * <p slot=\"text\">Experience the university through hands-on activities and demonstrations.</p>\n * <time slot=\"date-start-iso\" datetime=\"2024-04-27T10:00:00\">April 27, 2024</time>\n * <p slot=\"location\">Campus-wide</p>\n * <div slot=\"actions\">\n * <a href=\"/register\">Register Now</a>\n * </div>\n * </umd-element-event>\n * ```\n *\n * @example\n * ```html\n * <!-- Promo event with overlay -->\n * <umd-element-event data-display=\"promo\">\n * <img slot=\"image\" src=\"concert.jpg\" alt=\"Concert venue\">\n * <h3 slot=\"headline\">Spring Concert Series</h3>\n * <p slot=\"text\">Featuring the UMD Symphony Orchestra</p>\n * <time slot=\"date-start-iso\" datetime=\"2024-05-10T19:30:00\">May 10, 2024 at 7:30 PM</time>\n * <p slot=\"location\">Clarice Smith Performing Arts Center</p>\n * </umd-element-event>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\n// Tag name for the icon card component\nconst tagName = 'umd-element-card-icon';\n\n// Slot configuration for the icon card component\nconst slots: SlotConfiguration = {\n headline: {\n ...Slots.element.allowed.headline,\n required: true,\n },\n text: Slots.element.allowed.text,\n image: Slots.element.allowed.image,\n};\n\n/**\n * Creates an icon card component with overlay styling\n * @param element - The host HTML element\n * @returns Configured icon card component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) =>\n Composite.card.overlay.icon({\n image: Markup.validate.ImageSlot({\n element,\n ImageSlot: Slots.name.assets.image,\n }),\n headline: Slots.headline.default({ element }),\n text: Slots.text.default({ element }),\n isThemeDark: Attributes.isTheme.dark({ element }),\n });\n\n/**\n * Icon Card\n *\n * A card component with an icon overlay design, perfect for highlighting\n * services, features, or categories with visual emphasis.\n *\n * ## Custom Element\n * `<umd-element-card-icon>`\n *\n * ## Slots\n * - `headline` - Card title (required, accepts: h2-h6, p)\n * - `text` - Card description (optional, accepts: p)\n * - `image` - Icon or image (required)\n *\n * ## Attributes\n * - `data-theme` - Theme styling options:\n * - `dark` - Dark theme styling\n *\n * @example\n * ```html\n * <!-- Basic icon card -->\n * <umd-element-card-icon>\n * <img slot=\"image\" src=\"/icons/research.svg\" alt=\"Research icon\">\n * <h3 slot=\"headline\">Research Excellence</h3>\n * <p slot=\"text\">Cutting-edge research across disciplines</p>\n * </umd-element-card-icon>\n * ```\n *\n * @example\n * ```html\n * <!-- Dark theme icon card -->\n * <umd-element-card-icon data-theme=\"dark\">\n * <img slot=\"image\" src=\"/icons/education.svg\" alt=\"Education icon\">\n * <h3 slot=\"headline\">Academic Programs</h3>\n * <p slot=\"text\">Over 200 degree programs to choose from</p>\n * </umd-element-card-icon>\n * ```\n *\n * @example\n * ```html\n * <!-- Service highlight cards -->\n * <div class=\"services-grid\">\n * <umd-element-card-icon>\n * <img slot=\"image\" src=\"/icons/library.svg\" alt=\"Library\">\n * <h4 slot=\"headline\">Libraries</h4>\n * <p slot=\"text\">Access to millions of resources</p>\n * </umd-element-card-icon>\n * <umd-element-card-icon>\n * <img slot=\"image\" src=\"/icons/support.svg\" alt=\"Support\">\n * <h4 slot=\"headline\">Student Support</h4>\n * <p slot=\"text\">Comprehensive academic assistance</p>\n * </umd-element-card-icon>\n * </div>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\nconst { SlotWithDefaultStyling } = Markup.create;\n\n// Tag name for the overlay card component\nconst tagName = 'umd-element-card-overlay';\n\n// Slot configuration for the overlay card component\nconst slots: SlotConfiguration = {\n headline: {\n ...Slots.element.allowed.headline,\n required: true,\n },\n text: Slots.element.allowed.text,\n eyebrow: Slots.element.allowed.eyebrow,\n image: Slots.element.allowed.image,\n actions: Slots.element.allowed.actions,\n date: Slots.element.allowed.time,\n 'cta-icon': {\n allowedElements: ['a'],\n },\n};\n\n/**\n * Extracts overlay content from element slots\n * @internal\n */\nconst MakeOverlayContent = ({ element }: { element: HTMLElement }) => ({\n eyebrow: Slots.eyebrow.default({ element }),\n headline: Slots.headline.default({ element }),\n text: Slots.text.default({ element }),\n date: Slots.date.default({ element }),\n actions: Slots.actions.default({ element }),\n ctaIcon: SlotWithDefaultStyling({ element, slotRef: Slots.name.CTA_ICON }),\n isQuote: Attributes.isVisual.quote({ element }),\n isThemeDark: Attributes.isTheme.dark({ element }),\n isThemeLight: Attributes.isTheme.light({ element }),\n});\n\n/**\n * Creates an overlay card component with image or color background\n * @param element - The host HTML element\n * @returns Configured overlay card component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n if (Attributes.isLayout.image({ element })) {\n const ImageOverlay = Composite.card.overlay.image({\n ...MakeOverlayContent({ element }),\n backgroundImage: Slots.assets.image({ element }) as HTMLImageElement,\n });\n\n if (ImageOverlay) {\n return ImageOverlay;\n }\n }\n\n return Composite.card.overlay.color({ ...MakeOverlayContent({ element }) });\n};\n\n/**\n * Overlay Card\n *\n * A dramatic card component with overlay styling, supporting both image\n * and color backgrounds. Perfect for hero sections and featured content.\n *\n * ## Custom Element\n * `<umd-element-card-overlay>`\n *\n * ## Slots\n * - `headline` - Card title (required, accepts: h2-h6, p)\n * - `text` - Card content (optional, accepts: p)\n * - `eyebrow` - Small text above headline\n * - `image` - Background image (required for layout-image)\n * - `actions` - Action buttons or links\n * - `date` - Date information\n * - `cta-icon` - Call-to-action icon\n *\n * ## Attributes\n * - `data-layout` - Layout options:\n * - `image` - Use image as background\n * - `data-visual` - Visual display options:\n * - `quote` - Quote styling\n * - `data-theme` - Theme styling options:\n * - `dark` - Dark overlay theme\n * - `light` - Light overlay theme\n *\n * @example\n * ```html\n * <!-- Image overlay card -->\n * <umd-element-card-overlay data-layout=\"image\">\n * <img slot=\"image\" src=\"campus-hero.jpg\" alt=\"Campus view\">\n * <p slot=\"eyebrow\">Welcome</p>\n * <h2 slot=\"headline\">Discover Maryland</h2>\n * <p slot=\"text\">Join a community of innovators and leaders</p>\n * <div slot=\"actions\">\n * <a href=\"/apply\">Apply Now</a>\n * </div>\n * </umd-element-card-overlay>\n * ```\n *\n * @example\n * ```html\n * <!-- Color overlay with quote -->\n * <umd-element-card-overlay data-visual=\"quote\" data-theme=\"dark\">\n * <h3 slot=\"headline\">\"The best investment in our future is education.\"</h3>\n * <p slot=\"text\">- President Darryll J. Pines</p>\n * </umd-element-card-overlay>\n * ```\n *\n * @example\n * ```html\n * <!-- Feature card with CTA icon -->\n * <umd-element-card-overlay data-layout=\"image\" data-theme=\"light\">\n * <img slot=\"image\" src=\"research-bg.jpg\" alt=\"Research lab\">\n * <p slot=\"eyebrow\">Innovation</p>\n * <h2 slot=\"headline\">Breakthrough Research</h2>\n * <p slot=\"text\">Solving tomorrow's challenges today</p>\n * <span slot=\"cta-icon\">→</span>\n * <div slot=\"actions\">\n * <a href=\"/research\">Explore Research</a>\n * </div>\n * </umd-element-card-overlay>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n afterConnect: Lifecycle.hooks.loadOnConnect,\n});\n\nexport default registration;\n","import CardModel from './_model';\n\n/**\n * Standard Card\n *\n * A versatile card component for displaying content with optional images, actions, and themes.\n * Supports multiple display modes including block, list, and transparent variations.\n *\n * ## Custom Element\n * `<umd-element-card>`\n *\n * ## Slots\n * - `headline` - Card title (required, accepts: h2-h6, p)\n * - `text` - Card content (accepts: p)\n * - `eyebrow` - Small text above headline\n * - `image` - Card image\n * - `actions` - Action buttons or links\n * - `date` - Date information\n *\n * ## Attributes\n * - `data-theme` - Theme styling options:\n * - `dark` - Dark theme styling\n * - `light` - Light theme styling\n * - `data-visual-transparent` - Visual display options:\n * - `true` - Transparent background\n * - `data-visual-image-aligned` - Visual display options:\n * - `true` - Aligned content layout\n * - `data-visual-bordered` - Visual display options:\n * - `true` - Add border styling\n * - `data-display` - Display options:\n * - `list` - List display format\n *\n * @example\n * ```html\n * <!-- Basic card -->\n * <umd-element-card>\n * <h3 slot=\"headline\">Research Breakthrough</h3>\n * <p slot=\"text\">Scientists discover new method for sustainable energy.</p>\n * </umd-element-card>\n * ```\n *\n * @example\n * ```html\n * <!-- Card with image and actions -->\n * <umd-element-card>\n * <img slot=\"image\" src=\"campus.jpg\" alt=\"Campus view\">\n * <p slot=\"eyebrow\">Campus News</p>\n * <h3 slot=\"headline\">New Student Center Opens</h3>\n * <p slot=\"text\">State-of-the-art facility welcomes students.</p>\n * <div slot=\"actions\">\n * <a href=\"/read-more\">Read More</a>\n * </div>\n * </umd-element-card>\n * ```\n *\n * @example\n * ```html\n * <!-- List layout with dark theme -->\n * <umd-element-card data-theme=\"dark\" data-display=\"list\">\n * <h4 slot=\"headline\">Quick Links</h4>\n * <p slot=\"text\">Access important resources and tools.</p>\n * </umd-element-card>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nexport default CardModel({ tagName: 'umd-element-card' });\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\nconst tagName = 'umd-element-card-video';\n\nconst slots: SlotConfiguration = {\n video: {\n ...Slots.element.allowed.video,\n required: true,\n },\n};\n\n/**\n * Creates an overlay card component with image or color background\n * @param element - The host HTML element\n * @returns Configured overlay card component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const video = Slots.assets.video({ element }) as HTMLVideoElement;\n const isTypeShort = Attributes.isDisplay.short({ element });\n const isAutoplay = Attributes.isVisual.play({ element });\n\n if (!video) {\n console.error('Video slot is required for umd-element-card-video');\n return { element: document.createElement('div'), styles: '' };\n }\n\n if (isTypeShort) {\n return Composite.card.video.short({\n video,\n });\n }\n\n return Composite.card.video.block({\n video,\n isAutoplay,\n });\n};\n\n/**\n * Video Card\n *\n * A card component for displaying video content with configurable display formats\n * and autoplay behavior. Supports both short-form (9:16) and block (1:1) aspect ratios.\n *\n * ## Custom Element\n * `<umd-element-card-video>`\n *\n * ## Slots\n * - `video` - Video element (required, accepts: video element)\n *\n * ## Attributes\n * - `data-display` - Display format:\n * - `short` - 9:16 aspect ratio (vertical video format) with hover/focus controls\n * - Default - 1:1 aspect ratio (square format) with optional autoplay\n * - `data-visual-play` - Autoplay behavior (only for default display):\n * - `true` - Video autoplays when 25% visible in viewport\n * - Default - No autoplay behavior\n *\n * ## Visual Behavior\n * ### Short Display (data-display=\"short\")\n * - Maintains 9:16 aspect ratio (vertical video format)\n * - Auto-plays (muted) on hover or focus\n * - Auto-pauses when user moves away\n * - Shows video controls with restricted features (no download, fullscreen, etc.)\n * - Video covers entire card area with object-fit: cover\n *\n * ### Default Display\n * - Maintains 1:1 aspect ratio (square format)\n * - Optional autoplay when visible in viewport (data-visual-play=\"true\")\n * - No visible controls\n * - Video loops continuously when playing\n *\n * @example\n * ```html\n * <!-- Basic video card (square format) -->\n * <umd-element-card-video>\n * <video slot=\"video\" src=\"campus-tour.mp4\" poster=\"tour-thumb.jpg\">\n * <source src=\"campus-tour.mp4\" type=\"video/mp4\">\n * </video>\n * </umd-element-card-video>\n * ```\n *\n * @example\n * ```html\n * <!-- Short-form video card with hover controls -->\n * <umd-element-card-video data-display=\"short\">\n * <video slot=\"video\" poster=\"preview.jpg\">\n * <source src=\"student-life.webm\" type=\"video/webm\">\n * <source src=\"student-life.mp4\" type=\"video/mp4\">\n * Your browser does not support the video tag.\n * </video>\n * </umd-element-card-video>\n * ```\n *\n * @example\n * ```html\n * <!-- Video card with autoplay when visible -->\n * <umd-element-card-video data-visual-play=\"true\">\n * <video slot=\"video\" poster=\"athletics.jpg\">\n * <source src=\"athletics-highlight.mp4\" type=\"video/mp4\">\n * <track kind=\"captions\" src=\"captions.vtt\" srclang=\"en\" label=\"English\">\n * </video>\n * </umd-element-card-video>\n * ```\n *\n * @category Components\n * @since 1.12.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n});\n\nexport default registration;\n"],"names":["card","Composite","createCardComponent","tagName","slots","Slots","createComponentData","element","Markup.validate.ImageSlot","Attributes.isVisual","Attributes.isTheme","createComponent","isAligned","hasBorder","isDisplayList","Attributes.isDisplay","cardData","Register.registerWebComponent","Model.createCustomElement","model_default","registration","CardModel","article_default","eventComponents","extractEventData","featureEvents","toUMDElement","promoEvents","listEvents","eventMeta","Register.webComponent","event_default","icon_default","SlotWithDefaultStyling","Markup.create","MakeOverlayContent","Attributes.isLayout","ImageOverlay","Lifecycle.hooks","overlay_default","standard_default","video","isTypeShort","isAutoplay","video_default"],"mappings":";;;;;AAIA,MAAM,EAAE,MAAAA,MAASC,GAmBXC,IAAsB,CAAC,EAAE,SAAAC,QAA0B;AACvD,QAAMC,IAAQ;AAAA,IACZ,UAAU;AAAA,MACR,UAAU;AAAA,MACV,GAAGC,EAAM,QAAQ,QAAQ;AAAA,IAAA;AAAA,IAE3B,MAAMA,EAAM,QAAQ,QAAQ;AAAA,EAAA,GAGxBC,IAAsB,CAACC,OAAoC;AAAA,IAC/D,OAAOC,EAA0B;AAAA,MAC/B,SAAAD;AAAA,MACA,WAAWF,EAAM,KAAK,OAAO;AAAA,IAAA,CAC9B;AAAA,IACD,SAASA,EAAM,QAAQ,QAAQ,EAAE,SAAAE,GAAS;AAAA,IAC1C,UAAUF,EAAM,SAAS,QAAQ,EAAE,SAAAE,GAAS;AAAA,IAC5C,MAAMF,EAAM,KAAK,QAAQ,EAAE,SAAAE,GAAS;AAAA,IACpC,MAAMF,EAAM,KAAK,QAAQ,EAAE,SAAAE,GAAS;AAAA,IACpC,SAASF,EAAM,QAAQ,QAAQ,EAAE,SAAAE,GAAS;AAAA,IAC1C,eAAeE,EAAoB,YAAY,EAAE,SAAAF,GAAS;AAAA,IAC1D,aAAaG,EAAmB,KAAK,EAAE,SAAAH,GAAS;AAAA,EAAA,IAG5CI,IAAkB,CAACJ,MAAyB;AAChD,UAAMK,IAAYH,EAAoB,QAAQ,EAAE,SAAAF,GAAS,GACnDM,IAAYJ,EAAoB,SAAS,EAAE,SAAAF,GAAS,GACpDO,IAAgBC,EAAqB,KAAK,EAAE,SAAAR,GAAS,GACrDS,IAAWV,EAAoBC,CAAO;AAE5C,WAAIO,IACKd,EAAK,KAAK;AAAA,MACf,GAAGgB;AAAA,MACH,WAAAJ;AAAA,IAAA,CACD,IAGIZ,EAAK,MAAM;AAAA,MAChB,GAAGgB;AAAA,MACH,WAAAJ;AAAA,MACA,WAAAC;AAAA,IAAA,CACD;AAAA,EACH;AAEA,SAAO,MAAM;AACXI,IAAAA,EAA8B;AAAA,MAC5B,MAAMd;AAAA,MACN,SAASe,EAA0B;AAAA,QACjC,SAAAf;AAAA,QACA,OAAAC;AAAA,QACA,iBAAAO;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EACH;AACF;AAEA,IAAOQ,IAAQjB;AC1Ef,MAAMC,IAAU,uBA0EViB,IAAsCC,EAAU,EAAA,SAAElB,GAAS;AAEjE,IAAOmB,IAAQF;ACtEf,MAAMjB,IAAU,qBAEVC,IAA2B;AAAA,EAC/B,UAAU;AAAA,IACR,GAAGC,EAAM,QAAQ,QAAQ;AAAA,IACzB,UAAU;AAAA,EAAA;AAAA,EAEZ,MAAMA,EAAM,QAAQ,QAAQ;AAAA,EAC5B,kBAAkBA,EAAM,QAAQ,QAAQ;AAAA,EACxC,gBAAgBA,EAAM,QAAQ,QAAQ;AAAA,EACtC,UAAUA,EAAM,QAAQ,QAAQ;AAAA,EAChC,OAAOA,EAAM,QAAQ,QAAQ;AAAA,EAC7B,SAASA,EAAM,QAAQ,QAAQ;AAAA,EAC/B,SAASA,EAAM,QAAQ,QAAQ;AACjC,GAQMM,IAA2C,CAACJ,MAAY;AAC5D,QAAMgB,IAAkBC,EAAiBjB,CAAO;AAGhD,MAAI,CAACgB;AACH,WAAO,EAAE,SAAS,SAAS,cAAc,KAAK,GAAG,QAAQ,GAAA;AAK3D,MAAIR,EAAqB,QAAQ,EAAE,SAAAR,EAAA,CAAS,GAAG;AAC7C,UAAMkB,IAAgBD,EAAiBjB,GAAS;AAAA,MAC9C,aAAa;AAAA,MACb,gBAAgB;AAAA,IAAA,CACjB;AAED,WAAON,EAAU,KAAK,MAAM;AAAA,MAC1B,SAASI,EAAM,QAAQ,QAAQ,EAAE,SAAAE,GAAS;AAAA,MAC1C,UAAUmB,EAAaD,GAAe,QAAQ;AAAA,MAC9C,WAAWC,EAAaD,GAAe,SAAS;AAAA,MAChD,SAASpB,EAAM,QAAQ,QAAQ,EAAE,SAAAE,GAAS;AAAA,MAC1C,kBAAkB;AAAA,MAClB,UAAUF,EAAM,SAAS,QAAQ,EAAE,SAAAE,GAAS;AAAA,MAC5C,OAAOF,EAAM,OAAO,MAAM,EAAE,SAAAE,GAAS;AAAA,MACrC,aAAaG,EAAmB,KAAK,EAAE,SAAAH,GAAS;AAAA,MAChD,eAAeE,EAAoB,YAAY,EAAE,SAAAF,GAAS;AAAA,MAC1D,MAAMF,EAAM,KAAK,QAAQ,EAAE,SAAAE,GAAS;AAAA,IAAA,CACrC;AAAA,EACH;AAIA,MAAIQ,EAAqB,MAAM,EAAE,SAAAR,EAAA,CAAS,GAAG;AAC3C,UAAMoB,IAAcH,EAAiBjB,GAAS;AAAA,MAC5C,aAAa;AAAA;AAAA,MACb,gBAAgB;AAAA,IAAA,CACjB;AAED,WAAON,EAAU,KAAK,QAAQ,MAAM;AAAA,MAClC,SAASI,EAAM,QAAQ,QAAQ,EAAE,SAAAE,GAAS;AAAA,MAC1C,iBAAiBF,EAAM,OAAO,MAAM,EAAE,SAAAE,GAAS;AAAA,MAC/C,UAAUmB,EAAaC,GAAa,QAAQ;AAAA,MAC5C,WAAWD,EAAaC,GAAa,SAAS;AAAA,MAC9C,UAAUtB,EAAM,SAAS,QAAQ,EAAE,SAAAE,GAAS;AAAA,MAC5C,aAAaG,EAAmB,KAAK,EAAE,SAAAH,GAAS;AAAA,MAChD,MAAMF,EAAM,KAAK,QAAQ,EAAE,SAAAE,GAAS;AAAA,IAAA,CACrC;AAAA,EACH;AAIA,MAAIQ,EAAqB,KAAK,EAAE,SAAAR,EAAA,CAAS,GAAG;AAC1C,UAAMqB,IAAaJ,EAAiBjB,GAAS;AAAA,MAC3C,aAAa;AAAA,IAAA,CACd;AAED,WAAON,EAAU,KAAK,KAAK;AAAA,MACzB,SAASI,EAAM,QAAQ,QAAQ,EAAE,SAAAE,GAAS;AAAA,MAC1C,UAAUmB,EAAaE,GAAY,QAAQ;AAAA,MAC3C,WAAWF,EAAaE,GAAY,SAAS;AAAA,MAC7C,UAAUvB,EAAM,SAAS,QAAQ,EAAE,SAAAE,GAAS;AAAA,MAC5C,OAAOF,EAAM,OAAO,MAAM,EAAE,SAAAE,GAAS;AAAA,MACrC,aAAaG,EAAmB,KAAK,EAAE,SAAAH,GAAS;AAAA,MAChD,MAAMF,EAAM,KAAK,QAAQ,EAAE,SAAAE,GAAS;AAAA,IAAA,CACrC;AAAA,EACH;AAIA,QAAM,EAAE,WAAAsB,MAAcN;AACtB,SAAOtB,EAAU,KAAK,MAAM;AAAA,IAC1B,SAASI,EAAM,QAAQ,QAAQ,EAAE,SAAAE,GAAS;AAAA,IAC1C,WAAWmB,EAAaG,CAAS;AAAA,IACjC,UAAUxB,EAAM,SAAS,QAAQ,EAAE,SAAAE,GAAS;AAAA,IAC5C,OAAOF,EAAM,OAAO,MAAM,EAAE,SAAAE,GAAS;AAAA,IACrC,aAAaG,EAAmB,KAAK,EAAE,SAAAH,GAAS;AAAA,IAChD,eAAeE,EAAoB,YAAY,EAAE,SAAAF,GAAS;AAAA,IAC1D,MAAMF,EAAM,KAAK,QAAQ,EAAE,SAAAE,GAAS;AAAA,EAAA,CACrC;AACH,GA4EMa,IAAsCU,EAAsB;AAAA,EAAA,SAChE3B;AAAAA,EAAA,OACAC;AAAAA,EAAA,iBACAO;AACF,CAAC;AAED,IAAOoB,IAAQX;ACvLf,MAAMjB,IAAU,yBAGVC,IAA2B;AAAA,EAC/B,UAAU;AAAA,IACR,GAAGC,EAAM,QAAQ,QAAQ;AAAA,IACzB,UAAU;AAAA,EAAA;AAAA,EAEZ,MAAMA,EAAM,QAAQ,QAAQ;AAAA,EAC5B,OAAOA,EAAM,QAAQ,QAAQ;AAC/B,GAQMM,IAA2C,CAACJ,MAChDN,EAAU,KAAK,QAAQ,KAAK;AAAA,EAC1B,OAAOO,EAA0B;AAAA,IAC/B,SAAAD;AAAA,IACA,WAAWF,EAAM,KAAK,OAAO;AAAA,EAAA,CAC9B;AAAA,EACD,UAAUA,EAAM,SAAS,QAAQ,EAAE,SAAAE,GAAS;AAAA,EAC5C,MAAMF,EAAM,KAAK,QAAQ,EAAE,SAAAE,GAAS;AAAA,EACpC,aAAaG,EAAmB,KAAK,EAAE,SAAAH,GAAS;AAClD,CAAC,GA4DGa,IAAsCU,EAAsB;AAAA,EAAA,SAChE3B;AAAAA,EAAA,OACAC;AAAAA,EAAA,iBACAO;AACF,CAAC;AAED,IAAOqB,IAAQZ;AC9Ff,MAAM,EAAE,wBAAAa,EAAA,IAA2BC,GAG7B/B,IAAU,4BAGVC,IAA2B;AAAA,EAC/B,UAAU;AAAA,IACR,GAAGC,EAAM,QAAQ,QAAQ;AAAA,IACzB,UAAU;AAAA,EAAA;AAAA,EAEZ,MAAMA,EAAM,QAAQ,QAAQ;AAAA,EAC5B,SAASA,EAAM,QAAQ,QAAQ;AAAA,EAC/B,OAAOA,EAAM,QAAQ,QAAQ;AAAA,EAC7B,SAASA,EAAM,QAAQ,QAAQ;AAAA,EAC/B,MAAMA,EAAM,QAAQ,QAAQ;AAAA,EAC5B,YAAY;AAAA,IACV,iBAAiB,CAAC,GAAG;AAAA,EAAA;AAEzB,GAMM8B,IAAqB,CAAC,EAAE,SAAA5B,SAAyC;AAAA,EACrE,SAASF,EAAM,QAAQ,QAAQ,EAAE,SAAAE,GAAS;AAAA,EAC1C,UAAUF,EAAM,SAAS,QAAQ,EAAE,SAAAE,GAAS;AAAA,EAC5C,MAAMF,EAAM,KAAK,QAAQ,EAAE,SAAAE,GAAS;AAAA,EACpC,MAAMF,EAAM,KAAK,QAAQ,EAAE,SAAAE,GAAS;AAAA,EACpC,SAASF,EAAM,QAAQ,QAAQ,EAAE,SAAAE,GAAS;AAAA,EAC1C,SAAS0B,EAAuB,EAAE,SAAA1B,GAAS,SAASF,EAAM,KAAK,UAAU;AAAA,EACzE,SAASI,EAAoB,MAAM,EAAE,SAAAF,GAAS;AAAA,EAC9C,aAAaG,EAAmB,KAAK,EAAE,SAAAH,GAAS;AAAA,EAChD,cAAcG,EAAmB,MAAM,EAAE,SAAAH,GAAS;AACpD,IAQMI,IAA2C,CAACJ,MAAY;AAC5D,MAAI6B,EAAoB,MAAM,EAAE,SAAA7B,EAAA,CAAS,GAAG;AAC1C,UAAM8B,IAAepC,EAAU,KAAK,QAAQ,MAAM;AAAA,MAChD,GAAGkC,EAAmB,EAAE,SAAA5B,GAAS;AAAA,MACjC,iBAAiBF,EAAM,OAAO,MAAM,EAAE,SAAAE,GAAS;AAAA,IAAA,CAChD;AAED,QAAI8B;AACF,aAAOA;AAAA,EAEX;AAEA,SAAOpC,EAAU,KAAK,QAAQ,MAAM,EAAE,GAAGkC,EAAmB,EAAE,SAAA5B,EAAA,CAAS,GAAG;AAC5E,GAsEMa,IAAsCU,EAAsB;AAAA,EAAA,SAChE3B;AAAAA,EAAA,OACAC;AAAAA,EAAA,iBACAO;AAAAA,EACA,cAAc2B,EAAgB;AAChC,CAAC;AAED,IAAOC,KAAQnB,GC3ERoB,KAAQnB,EAAU,EAAE,SAAS,oBAAoB;AC3DxD,MAAMlB,IAAU,0BAEVC,IAA2B;AAAA,EAC/B,OAAO;AAAA,IACL,GAAGC,EAAM,QAAQ,QAAQ;AAAA,IACzB,UAAU;AAAA,EAAA;AAEd,GAQMM,IAA2C,CAACJ,MAAY;AAC5D,QAAMkC,IAAQpC,EAAM,OAAO,MAAM,EAAE,SAAAE,GAAS,GACtCmC,IAAc3B,EAAqB,MAAM,EAAE,SAAAR,GAAS,GACpDoC,IAAalC,EAAoB,KAAK,EAAE,SAAAF,GAAS;AAEvD,SAAKkC,IAKDC,IACKzC,EAAU,KAAK,MAAM,MAAM;AAAA,IAChC,OAAAwC;AAAA,EAAA,CACD,IAGIxC,EAAU,KAAK,MAAM,MAAM;AAAA,IAChC,OAAAwC;AAAA,IACA,YAAAE;AAAA,EAAA,CACD,KAbC,QAAQ,MAAM,mDAAmD,GAC1D,EAAE,SAAS,SAAS,cAAc,KAAK,GAAG,QAAQ,GAAA;AAa7D,GAwEMvB,IAAsCU,EAAsB;AAAA,EAChE,SAAA3B;AAAA,EACA,OAAAC;AAAA,EACA,iBAAAO;AACF,CAAC;AAED,IAAOiC,KAAQxB;"}
|
|
1
|
+
{"version":3,"file":"video-Cm_iBOTt.js","sources":["../source/api/card/_model.ts","../source/api/card/article.ts","../source/api/card/event.ts","../source/api/card/icon.ts","../source/api/card/overlay.ts","../source/api/card/standard.ts","../source/api/card/video.ts"],"sourcesContent":["import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Model, Register, Slots } from 'model';\nimport { Markup } from 'utilities';\n\nconst { card } = Composite;\n\ninterface CardData {\n image: HTMLImageElement | null;\n eyebrow: HTMLElement | null;\n headline: HTMLElement | null;\n text: HTMLElement | null;\n date: HTMLElement | null;\n actions: HTMLElement | null;\n isTransparent: boolean;\n isThemeDark: boolean;\n isAligned?: boolean;\n isBordered?: boolean;\n}\n\ninterface CardConfig {\n tagName: string;\n}\n\nconst createCardComponent = ({ tagName }: CardConfig) => {\n const slots = {\n headline: {\n required: true,\n ...Slots.element.allowed.subHeadline,\n },\n body: Slots.element.allowed.text,\n };\n\n const createComponentData = (element: HTMLElement): CardData => ({\n image: Markup.validate.ImageSlot({\n element,\n ImageSlot: Slots.name.assets.image,\n }),\n eyebrow: Slots.eyebrow.default({ element }),\n headline: Slots.headline.default({ element }),\n text: Slots.text.default({ element }),\n date: Slots.date.default({ element }),\n actions: Slots.actions.default({ element }),\n isTransparent: Attributes.isVisual.transparent({ element }),\n isThemeDark: Attributes.isTheme.dark({ element }),\n });\n\n const createComponent = (element: HTMLElement) => {\n const isAligned = Attributes.isVisual.aligned({ element });\n const hasBorder = Attributes.isVisual.bordered({ element });\n const isDisplayList = Attributes.isDisplay.list({ element });\n const cardData = createComponentData(element);\n\n if (isDisplayList) {\n return card.list({\n ...cardData,\n isAligned,\n });\n }\n\n return card.block({\n ...cardData,\n isAligned,\n hasBorder,\n });\n };\n\n return () => {\n Register.registerWebComponent({\n name: tagName,\n element: Model.createCustomElement({\n tagName,\n slots,\n createComponent,\n }),\n });\n };\n};\n\nexport default createCardComponent;\n","import CardModel from './_model';\nimport type { ComponentRegistration } from '../../_types';\n\n// Tag name for the article card component\nconst tagName = 'umd-element-article';\n\n/**\n * Article Card\n *\n * A specialized card component optimized for displaying article and news content.\n * Inherits all features from the standard card with article-specific semantics.\n *\n * ## Custom Element\n * `<umd-element-article>`\n *\n * ## Slots\n * - `headline` - Article title (required, accepts: h2-h6, p)\n * - `text` - Article excerpt or summary (accepts: p)\n * - `eyebrow` - Category or section label\n * - `image` - Article featured image\n * - `actions` - Read more links or sharing options\n * - `date` - Publication date\n *\n * ## Attributes\n * - `data-theme` - Theme styling options:\n * - `dark` - Dark theme styling\n * - `light` - Light theme styling\n * - `data-display` - Display mode options:\n * - `list` - List display format\n * - `data-visual` - Visual display options:\n * - `transparent` - Transparent background\n * - `aligned` - Aligned content layout\n * - `bordered` - Add border styling\n *\n *\n * @example\n * ```html\n * <!-- Basic article card -->\n * <umd-element-article>\n * <p slot=\"eyebrow\">Faculty Research</p>\n * <h3 slot=\"headline\">Professor Wins Nobel Prize in Physics</h3>\n * <p slot=\"text\">Groundbreaking work in quantum computing recognized.</p>\n * <p slot=\"date\">December 10, 2023</p>\n * </umd-element-article>\n * ```\n *\n * @example\n * ```html\n * <!-- Article with image and actions -->\n * <umd-element-article>\n * <img slot=\"image\" src=\"research-lab.jpg\" alt=\"Research laboratory\">\n * <p slot=\"eyebrow\">Science & Technology</p>\n * <h2 slot=\"headline\">New Climate Research Center Opens</h2>\n * <p slot=\"text\">\n * The facility will advance understanding of climate change impacts\n * and develop sustainable solutions.\n * </p>\n * <p slot=\"date\">November 15, 2023</p>\n * <div slot=\"actions\">\n * <a href=\"/full-article\">Read Full Article</a>\n * <a href=\"/share\">Share</a>\n * </div>\n * </umd-element-article>\n * ```\n *\n * @example\n * ```html\n * <!-- List layout article -->\n * <umd-element-article data-display=\"list\" data-theme=\"light\">\n * <h4 slot=\"headline\">Campus Sustainability Initiative</h4>\n * <p slot=\"text\">New programs reduce carbon footprint by 30%.</p>\n * <p slot=\"date\">October 5, 2023</p>\n * </umd-element-article>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = CardModel({ tagName });\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register } from 'model';\nimport { extractEventData } from '../_event';\nimport { toUMDElement } from 'utilities/markup/validate';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\nconst tagName = 'umd-element-event';\n\nconst slots: SlotConfiguration = {\n headline: {\n ...Slots.element.allowed.headline,\n required: true,\n },\n text: Slots.element.allowed.text,\n 'date-start-iso': Slots.element.allowed.time,\n 'date-end-iso': Slots.element.allowed.time,\n location: Slots.element.allowed.text,\n image: Slots.element.allowed.imageLink,\n eyebrow: Slots.element.allowed.eyebrow,\n actions: Slots.element.allowed.actions,\n};\n\n/**\n * Creates an event card component with date, time, and location information\n * @param element - The host HTML element\n * @returns Configured event card component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const eventComponents = extractEventData(element);\n\n // Start date is missing - required field\n if (!eventComponents) {\n return { element: document.createElement('div'), styles: '' };\n }\n\n // Feature layout: large date sign, eyebrow ribbon\n\n if (Attributes.isDisplay.feature({ element })) {\n const featureEvents = extractEventData(element, {\n isLargeSize: true,\n isDateSignDark: false,\n });\n\n return Composite.card.block({\n actions: Slots.actions.default({ element }),\n dateSign: toUMDElement(featureEvents?.dateSign),\n eventMeta: toUMDElement(featureEvents?.eventMeta),\n eyebrow: Slots.eyebrow.default({ element }),\n hasEyebrowRibbon: true,\n headline: Slots.headline.default({ element }),\n image: Slots.assets.image({ element }) as HTMLImageElement,\n isThemeDark: Attributes.isTheme.dark({ element }),\n isTransparent: Attributes.isVisual.transparent({ element }),\n text: Slots.text.default({ element }),\n });\n }\n\n // Promo layout: overlay style with forced dark theme for meta\n\n if (Attributes.isDisplay.promo({ element })) {\n const promoEvents = extractEventData(element, {\n isThemeDark: true, // Force dark theme for meta in overlay\n isDateSignDark: false,\n });\n\n return Composite.card.overlay.image({\n actions: Slots.actions.default({ element }),\n backgroundImage: Slots.assets.image({ element }) as HTMLImageElement,\n dateSign: toUMDElement(promoEvents?.dateSign),\n eventMeta: toUMDElement(promoEvents?.eventMeta),\n headline: Slots.headline.default({ element }),\n isThemeDark: Attributes.isTheme.dark({ element }),\n text: Slots.text.default({ element }),\n });\n }\n\n // List layout: large date sign, uses element's theme\n\n if (Attributes.isDisplay.list({ element })) {\n const listEvents = extractEventData(element, {\n isLargeSize: true,\n });\n\n return Composite.card.list({\n actions: Slots.actions.default({ element }),\n dateSign: toUMDElement(listEvents?.dateSign),\n eventMeta: toUMDElement(listEvents?.eventMeta),\n headline: Slots.headline.default({ element }),\n image: Slots.assets.image({ element }) as HTMLImageElement,\n isThemeDark: Attributes.isTheme.dark({ element }),\n text: Slots.text.default({ element }),\n });\n }\n\n // Default: block layout with standard configuration\n\n const { eventMeta } = eventComponents;\n return Composite.card.block({\n actions: Slots.actions.default({ element }),\n eventMeta: toUMDElement(eventMeta) as any,\n headline: Slots.headline.default({ element }),\n image: Slots.assets.image({ element }) as HTMLImageElement,\n isThemeDark: Attributes.isTheme.dark({ element }),\n isTransparent: Attributes.isVisual.transparent({ element }),\n text: Slots.text.default({ element }),\n });\n};\n\n/**\n * Event Card\n *\n * A specialized card for displaying event information with date, time, and location.\n * Supports multiple display formats including feature, promo, and list layouts.\n *\n * ## Custom Element\n * `<umd-element-event>`\n *\n * ## Slots\n * - `headline` - Event title (required, accepts: h2-h6, p)\n * - `text` - Event description (accepts: p)\n * - `date-start-iso` - Event start date/time (required, time element)\n * - `date-end-iso` - Event end date/time (optional, time element)\n * - `location` - Event location\n * - `image` - Event image\n * - `eyebrow` - Category or type label\n * - `actions` - Registration or info links\n *\n * ## Attributes\n * - `data-display` - Display layout options:\n * - `feature` - Featured event layout with prominent date\n * - `promo` - Promotional layout with image overlay\n * - `list` - Compact list layout\n * - `data-visual-time` - Time display options:\n * - `true` - Show time in event details\n * - `data-theme` - Theme styling options:\n * - `dark` - Dark theme styling\n * - `data-visual-transparent` - Visual display options:\n * - `true` - Transparent background\n *\n * @example\n * ```html\n * <!-- Basic event card -->\n * <umd-element-event>\n * <h3 slot=\"headline\">Annual Research Symposium</h3>\n * <p slot=\"text\">Join us for presentations from leading researchers.</p>\n * <time slot=\"date-start-iso\" datetime=\"2024-03-15T09:00:00\">March 15, 2024 at 9:00 AM</time>\n * <time slot=\"date-end-iso\" datetime=\"2024-03-15T17:00:00\">March 15, 2024 at 5:00 PM</time>\n * <p slot=\"location\">Stamp Student Union</p>\n * </umd-element-event>\n * ```\n *\n * @example\n * ```html\n * <!-- Featured event with image -->\n * <umd-element-event data-display=\"feature\" data-feature=\"visual-time\">\n * <img slot=\"image\" src=\"symposium.jpg\" alt=\"Research symposium\">\n * <p slot=\"eyebrow\">Featured Event</p>\n * <h2 slot=\"headline\">Maryland Day 2024</h2>\n * <p slot=\"text\">Experience the university through hands-on activities and demonstrations.</p>\n * <time slot=\"date-start-iso\" datetime=\"2024-04-27T10:00:00\">April 27, 2024</time>\n * <p slot=\"location\">Campus-wide</p>\n * <div slot=\"actions\">\n * <a href=\"/register\">Register Now</a>\n * </div>\n * </umd-element-event>\n * ```\n *\n * @example\n * ```html\n * <!-- Promo event with overlay -->\n * <umd-element-event data-display=\"promo\">\n * <img slot=\"image\" src=\"concert.jpg\" alt=\"Concert venue\">\n * <h3 slot=\"headline\">Spring Concert Series</h3>\n * <p slot=\"text\">Featuring the UMD Symphony Orchestra</p>\n * <time slot=\"date-start-iso\" datetime=\"2024-05-10T19:30:00\">May 10, 2024 at 7:30 PM</time>\n * <p slot=\"location\">Clarice Smith Performing Arts Center</p>\n * </umd-element-event>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\n// Tag name for the icon card component\nconst tagName = 'umd-element-card-icon';\n\n// Slot configuration for the icon card component\nconst slots: SlotConfiguration = {\n headline: {\n ...Slots.element.allowed.headline,\n required: true,\n },\n text: Slots.element.allowed.text,\n image: Slots.element.allowed.image,\n};\n\n/**\n * Creates an icon card component with overlay styling\n * @param element - The host HTML element\n * @returns Configured icon card component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) =>\n Composite.card.overlay.icon({\n image: Markup.validate.ImageSlot({\n element,\n ImageSlot: Slots.name.assets.image,\n }),\n headline: Slots.headline.default({ element }),\n text: Slots.text.default({ element }),\n isThemeDark: Attributes.isTheme.dark({ element }),\n });\n\n/**\n * Icon Card\n *\n * A card component with an icon overlay design, perfect for highlighting\n * services, features, or categories with visual emphasis.\n *\n * ## Custom Element\n * `<umd-element-card-icon>`\n *\n * ## Slots\n * - `headline` - Card title (required, accepts: h2-h6, p)\n * - `text` - Card description (optional, accepts: p)\n * - `image` - Icon or image (required)\n *\n * ## Attributes\n * - `data-theme` - Theme styling options:\n * - `dark` - Dark theme styling\n *\n * @example\n * ```html\n * <!-- Basic icon card -->\n * <umd-element-card-icon>\n * <img slot=\"image\" src=\"/icons/research.svg\" alt=\"Research icon\">\n * <h3 slot=\"headline\">Research Excellence</h3>\n * <p slot=\"text\">Cutting-edge research across disciplines</p>\n * </umd-element-card-icon>\n * ```\n *\n * @example\n * ```html\n * <!-- Dark theme icon card -->\n * <umd-element-card-icon data-theme=\"dark\">\n * <img slot=\"image\" src=\"/icons/education.svg\" alt=\"Education icon\">\n * <h3 slot=\"headline\">Academic Programs</h3>\n * <p slot=\"text\">Over 200 degree programs to choose from</p>\n * </umd-element-card-icon>\n * ```\n *\n * @example\n * ```html\n * <!-- Service highlight cards -->\n * <div class=\"services-grid\">\n * <umd-element-card-icon>\n * <img slot=\"image\" src=\"/icons/library.svg\" alt=\"Library\">\n * <h4 slot=\"headline\">Libraries</h4>\n * <p slot=\"text\">Access to millions of resources</p>\n * </umd-element-card-icon>\n * <umd-element-card-icon>\n * <img slot=\"image\" src=\"/icons/support.svg\" alt=\"Support\">\n * <h4 slot=\"headline\">Student Support</h4>\n * <p slot=\"text\">Comprehensive academic assistance</p>\n * </umd-element-card-icon>\n * </div>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\nconst { SlotWithDefaultStyling } = Markup.create;\n\n// Tag name for the overlay card component\nconst tagName = 'umd-element-card-overlay';\n\n// Slot configuration for the overlay card component\nconst slots: SlotConfiguration = {\n headline: {\n ...Slots.element.allowed.headline,\n required: true,\n },\n text: Slots.element.allowed.text,\n eyebrow: Slots.element.allowed.eyebrow,\n image: Slots.element.allowed.image,\n actions: Slots.element.allowed.actions,\n date: Slots.element.allowed.time,\n 'cta-icon': {\n allowedElements: ['a'],\n },\n};\n\n/**\n * Extracts overlay content from element slots\n * @internal\n */\nconst MakeOverlayContent = ({ element }: { element: HTMLElement }) => ({\n eyebrow: Slots.eyebrow.default({ element }),\n headline: Slots.headline.default({ element }),\n text: Slots.text.default({ element }),\n date: Slots.date.default({ element }),\n actions: Slots.actions.default({ element }),\n ctaIcon: SlotWithDefaultStyling({ element, slotRef: Slots.name.CTA_ICON }),\n isQuote: Attributes.isVisual.quote({ element }),\n isThemeDark: Attributes.isTheme.dark({ element }),\n isThemeLight: Attributes.isTheme.light({ element }),\n});\n\n/**\n * Creates an overlay card component with image or color background\n * @param element - The host HTML element\n * @returns Configured overlay card component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n if (Attributes.isLayout.image({ element })) {\n const ImageOverlay = Composite.card.overlay.image({\n ...MakeOverlayContent({ element }),\n backgroundImage: Slots.assets.image({ element }) as HTMLImageElement,\n });\n\n if (ImageOverlay) {\n return ImageOverlay;\n }\n }\n\n return Composite.card.overlay.color({ ...MakeOverlayContent({ element }) });\n};\n\n/**\n * Overlay Card\n *\n * A dramatic card component with overlay styling, supporting both image\n * and color backgrounds. Perfect for hero sections and featured content.\n *\n * ## Custom Element\n * `<umd-element-card-overlay>`\n *\n * ## Slots\n * - `headline` - Card title (required, accepts: h2-h6, p)\n * - `text` - Card content (optional, accepts: p)\n * - `eyebrow` - Small text above headline\n * - `image` - Background image (required for layout-image)\n * - `actions` - Action buttons or links\n * - `date` - Date information\n * - `cta-icon` - Call-to-action icon\n *\n * ## Attributes\n * - `data-layout` - Layout options:\n * - `image` - Use image as background\n * - `data-visual` - Visual display options:\n * - `quote` - Quote styling\n * - `data-theme` - Theme styling options:\n * - `dark` - Dark overlay theme\n * - `light` - Light overlay theme\n *\n * @example\n * ```html\n * <!-- Image overlay card -->\n * <umd-element-card-overlay data-layout=\"image\">\n * <img slot=\"image\" src=\"campus-hero.jpg\" alt=\"Campus view\">\n * <p slot=\"eyebrow\">Welcome</p>\n * <h2 slot=\"headline\">Discover Maryland</h2>\n * <p slot=\"text\">Join a community of innovators and leaders</p>\n * <div slot=\"actions\">\n * <a href=\"/apply\">Apply Now</a>\n * </div>\n * </umd-element-card-overlay>\n * ```\n *\n * @example\n * ```html\n * <!-- Color overlay with quote -->\n * <umd-element-card-overlay data-visual=\"quote\" data-theme=\"dark\">\n * <h3 slot=\"headline\">\"The best investment in our future is education.\"</h3>\n * <p slot=\"text\">- President Darryll J. Pines</p>\n * </umd-element-card-overlay>\n * ```\n *\n * @example\n * ```html\n * <!-- Feature card with CTA icon -->\n * <umd-element-card-overlay data-layout=\"image\" data-theme=\"light\">\n * <img slot=\"image\" src=\"research-bg.jpg\" alt=\"Research lab\">\n * <p slot=\"eyebrow\">Innovation</p>\n * <h2 slot=\"headline\">Breakthrough Research</h2>\n * <p slot=\"text\">Solving tomorrow's challenges today</p>\n * <span slot=\"cta-icon\">→</span>\n * <div slot=\"actions\">\n * <a href=\"/research\">Explore Research</a>\n * </div>\n * </umd-element-card-overlay>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n afterConnect: Lifecycle.hooks.loadOnConnect,\n});\n\nexport default registration;\n","import CardModel from './_model';\n\n/**\n * Standard Card\n *\n * A versatile card component for displaying content with optional images, actions, and themes.\n * Supports multiple display modes including block, list, and transparent variations.\n *\n * ## Custom Element\n * `<umd-element-card>`\n *\n * ## Slots\n * - `headline` - Card title (required, accepts: h2-h6, p)\n * - `text` - Card content (accepts: p)\n * - `eyebrow` - Small text above headline\n * - `image` - Card image\n * - `actions` - Action buttons or links\n * - `date` - Date information\n *\n * ## Attributes\n * - `data-theme` - Theme styling options:\n * - `dark` - Dark theme styling\n * - `light` - Light theme styling\n * - `data-visual-transparent` - Visual display options:\n * - `true` - Transparent background\n * - `data-visual-image-aligned` - Visual display options:\n * - `true` - Aligned content layout\n * - `data-visual-bordered` - Visual display options:\n * - `true` - Add border styling\n * - `data-display` - Display options:\n * - `list` - List display format\n *\n * @example\n * ```html\n * <!-- Basic card -->\n * <umd-element-card>\n * <h3 slot=\"headline\">Research Breakthrough</h3>\n * <p slot=\"text\">Scientists discover new method for sustainable energy.</p>\n * </umd-element-card>\n * ```\n *\n * @example\n * ```html\n * <!-- Card with image and actions -->\n * <umd-element-card>\n * <img slot=\"image\" src=\"campus.jpg\" alt=\"Campus view\">\n * <p slot=\"eyebrow\">Campus News</p>\n * <h3 slot=\"headline\">New Student Center Opens</h3>\n * <p slot=\"text\">State-of-the-art facility welcomes students.</p>\n * <div slot=\"actions\">\n * <a href=\"/read-more\">Read More</a>\n * </div>\n * </umd-element-card>\n * ```\n *\n * @example\n * ```html\n * <!-- List layout with dark theme -->\n * <umd-element-card data-theme=\"dark\" data-display=\"list\">\n * <h4 slot=\"headline\">Quick Links</h4>\n * <p slot=\"text\">Access important resources and tools.</p>\n * </umd-element-card>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nexport default CardModel({ tagName: 'umd-element-card' });\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\nconst tagName = 'umd-element-card-video';\n\nconst slots: SlotConfiguration = {\n video: {\n ...Slots.element.allowed.video,\n required: true,\n },\n};\n\n/**\n * Creates an overlay card component with image or color background\n * @param element - The host HTML element\n * @returns Configured overlay card component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const video = Slots.assets.video({ element }) as HTMLVideoElement;\n const isTypeShort = Attributes.isDisplay.short({ element });\n const isAutoplay = Attributes.isVisual.play({ element });\n\n if (!video) {\n console.error('Video slot is required for umd-element-card-video');\n return { element: document.createElement('div'), styles: '' };\n }\n\n if (isTypeShort) {\n return Composite.card.video.short({\n video,\n });\n }\n\n return Composite.card.video.block({\n video,\n isAutoplay,\n });\n};\n\n/**\n * Video Card\n *\n * A card component for displaying video content with configurable display formats\n * and autoplay behavior. Supports both short-form (9:16) and block (1:1) aspect ratios.\n *\n * ## Custom Element\n * `<umd-element-card-video>`\n *\n * ## Slots\n * - `video` - Video element (required, accepts: video element)\n *\n * ## Attributes\n * - `data-display` - Display format:\n * - `short` - 9:16 aspect ratio (vertical video format) with hover/focus controls\n * - Default - 1:1 aspect ratio (square format) with optional autoplay\n * - `data-visual-play` - Autoplay behavior (only for default display):\n * - `true` - Video autoplays when 25% visible in viewport\n * - Default - No autoplay behavior\n *\n * ## Visual Behavior\n * ### Short Display (data-display=\"short\")\n * - Maintains 9:16 aspect ratio (vertical video format)\n * - Auto-plays (muted) on hover or focus\n * - Auto-pauses when user moves away\n * - Shows video controls with restricted features (no download, fullscreen, etc.)\n * - Video covers entire card area with object-fit: cover\n *\n * ### Default Display\n * - Maintains 1:1 aspect ratio (square format)\n * - Optional autoplay when visible in viewport (data-visual-play=\"true\")\n * - No visible controls\n * - Video loops continuously when playing\n *\n * @example\n * ```html\n * <!-- Basic video card (square format) -->\n * <umd-element-card-video>\n * <video slot=\"video\" src=\"campus-tour.mp4\" poster=\"tour-thumb.jpg\">\n * <source src=\"campus-tour.mp4\" type=\"video/mp4\">\n * </video>\n * </umd-element-card-video>\n * ```\n *\n * @example\n * ```html\n * <!-- Short-form video card with hover controls -->\n * <umd-element-card-video data-display=\"short\">\n * <video slot=\"video\" poster=\"preview.jpg\">\n * <source src=\"student-life.webm\" type=\"video/webm\">\n * <source src=\"student-life.mp4\" type=\"video/mp4\">\n * Your browser does not support the video tag.\n * </video>\n * </umd-element-card-video>\n * ```\n *\n * @example\n * ```html\n * <!-- Video card with autoplay when visible -->\n * <umd-element-card-video data-visual-play=\"true\">\n * <video slot=\"video\" poster=\"athletics.jpg\">\n * <source src=\"athletics-highlight.mp4\" type=\"video/mp4\">\n * <track kind=\"captions\" src=\"captions.vtt\" srclang=\"en\" label=\"English\">\n * </video>\n * </umd-element-card-video>\n * ```\n *\n * @category Components\n * @since 1.12.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n});\n\nexport default registration;\n"],"names":["card","Composite","createCardComponent","tagName","slots","Slots","createComponentData","element","Markup.validate.ImageSlot","Attributes.isVisual","Attributes.isTheme","createComponent","isAligned","hasBorder","isDisplayList","Attributes.isDisplay","cardData","Register.registerWebComponent","Model.createCustomElement","model_default","registration","CardModel","article_default","eventComponents","extractEventData","featureEvents","toUMDElement","promoEvents","listEvents","eventMeta","Register.webComponent","event_default","icon_default","SlotWithDefaultStyling","Markup.create","MakeOverlayContent","Attributes.isLayout","ImageOverlay","Lifecycle.hooks","overlay_default","standard_default","video","isTypeShort","isAutoplay","video_default"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Composite as i } from "@universityofmaryland/web-elements-library";
|
|
2
|
-
import { h as c, a as f, s as o, k as w } from "./shared/model-
|
|
3
|
-
import { w as u, h as p, N as y, v as b } from "./shared/utilities-
|
|
2
|
+
import { h as c, a as f, s as o, k as w } from "./shared/model-CHS3WnCo.js";
|
|
3
|
+
import { w as u, h as p, N as y, v as b } from "./shared/utilities-CZHe-tKs.js";
|
|
4
4
|
import "@universityofmaryland/web-styles-library";
|
|
5
5
|
const x = "umd-element-carousel", R = {
|
|
6
6
|
blocks: {
|
|
@@ -217,4 +217,4 @@ export {
|
|
|
217
217
|
St as t,
|
|
218
218
|
Ct as w
|
|
219
219
|
};
|
|
220
|
-
//# sourceMappingURL=wide-
|
|
220
|
+
//# sourceMappingURL=wide-omTQQ6Wr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wide-CoHOWBGB.js","sources":["../source/api/carousel/base.ts","../source/api/carousel/cards.ts","../source/api/carousel/image/single.ts","../source/api/carousel/image/multiple.ts","../source/api/carousel/thumbnail.ts","../source/api/carousel/wide.ts"],"sourcesContent":["import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\n// Tag name for the base carousel component\nconst tagName = 'umd-element-carousel';\n\n// Slot configuration for the base carousel component\nconst slots: SlotConfiguration = {\n blocks: {\n required: true,\n },\n};\n\n// Attribute handlers for the base carousel component\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.resize(),\n);\n\n/**\n * Creates a base carousel component\n * @param element - The host HTML element\n * @returns Configured carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const shadow = element.shadowRoot as ShadowRoot;\n const isThemeDark = Attributes.isTheme.dark({\n element,\n });\n const attributeLeftButton = element.getAttribute('left-button');\n const attributeRightButton = element.getAttribute('right-button');\n const attributeMobileHint = element.getAttribute('mobile-hint');\n const attributeHint = element.getAttribute('hint');\n const tabletSize = element.getAttribute('tablet-size');\n const desktopSize = element.getAttribute('desktop-size');\n const tabletCount = element.getAttribute('tablet-count');\n const desktopCount = element.getAttribute('desktop-count');\n const maxCount = element.getAttribute('max-count');\n const gridGap = element.getAttribute('grid-gap-pixels');\n const slide = element.querySelector(\n `[slot=\"${Slots.name.BLOCKS}\"]`,\n ) as HTMLElement;\n const blocks = Array.from(\n slide.querySelectorAll(':scope > *'),\n ) as HTMLElement[];\n let hasLeftButton = true;\n let hasRightButton = true;\n let mobileHint = true;\n let hint = true;\n\n if (attributeLeftButton === 'false') hasLeftButton = false;\n if (attributeRightButton === 'false') hasRightButton = false;\n if (attributeMobileHint === 'false') mobileHint = false;\n if (attributeHint === 'false') hint = false;\n\n const createCardShadowRef = () => {\n const slot = Markup.create.Node.slot({ type: Slots.name.BLOCKS });\n shadow.appendChild(slot);\n };\n\n createCardShadowRef();\n\n const shadowRef = shadow.querySelector(\n `[name=\"${Slots.name.BLOCKS}\"]`,\n ) as HTMLElement;\n\n return Composite.carousel.macro({\n slide,\n shadowRef,\n blocks,\n isThemeDark,\n hasLeftButton,\n hasRightButton,\n mobileHint,\n hint,\n tabletSize: tabletSize ? parseInt(tabletSize) : undefined,\n desktopSize: desktopSize ? parseInt(desktopSize) : undefined,\n tabletCount: tabletCount ? parseInt(tabletCount) : undefined,\n desktopCount: desktopCount ? parseInt(desktopCount) : undefined,\n maxCount: maxCount ? parseInt(maxCount) : undefined,\n gridGap,\n });\n};\n\n/**\n * Base Carousel\n *\n * A versatile carousel component for displaying scrollable content blocks with navigation controls.\n *\n * ## Custom Element\n * `<umd-element-carousel>`\n *\n * ## Slots\n * - `blocks` - Container for carousel items (required, accepts: any element)\n *\n * ## Attributes\n * - `left-button` - Left navigation button visibility:\n * - `true` - Show left navigation button (default)\n * - `false` - Hide left navigation button\n * - `right-button` - Right navigation button visibility:\n * - `true` - Show right navigation button (default)\n * - `false` - Hide right navigation button\n * - `mobile-hint` - Mobile swipe hint visibility:\n * - `true` - Show mobile swipe hint (default)\n * - `false` - Hide mobile swipe hint\n * - `hint` - Navigation hint visibility:\n * - `true` - Show navigation hint (default)\n * - `false` - Hide navigation hint\n * - `data-theme` - Visual theme:\n * - `light` - Light theme (default)\n * - `dark` - Dark theme\n * - `tablet-size` - Number of visible items on tablet\n * - `desktop-size` - Number of visible items on desktop\n * - `tablet-count` - Total item count for tablet view\n * - `desktop-count` - Total item count for desktop view\n * - `max-count` - Maximum number of items to display\n * - `grid-gap-pixels` - Gap between items in pixels\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel>\n * <div slot=\"blocks\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * </div>\n * </umd-element-carousel>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n afterConnect: Lifecycle.hooks.loadOnConnect,\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\n// Tag name for the cards carousel component\nconst tagName = 'umd-element-carousel-cards';\n\n// Slot configuration for the cards carousel component\nconst slots: SlotConfiguration = {\n cards: {\n required: true,\n },\n headline: Slots.element.allowed.headline,\n text: Slots.element.allowed.text,\n actions: Slots.element.allowed.actions,\n};\n\n// Attribute handlers for the cards carousel component\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.resize(),\n);\n\n/**\n * Creates a cards carousel component\n * @param element - The host HTML element\n * @returns Configured cards carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const shadow = element.shadowRoot as ShadowRoot;\n const slide = element.querySelector(\n `[slot=\"${Slots.name.CARDS}\"]`,\n ) as HTMLElement;\n const cards = Array.from(\n slide.querySelectorAll(':scope > *'),\n ) as HTMLElement[];\n\n const createCardShadowRef = () => {\n const slot = Markup.create.Node.slot({ type: Slots.name.CARDS });\n shadow.appendChild(slot);\n };\n\n createCardShadowRef();\n\n const shadowRef = shadow.querySelector(\n `[name=\"${Slots.name.CARDS}\"]`,\n ) as HTMLElement;\n\n return Composite.carousel.cards({\n slide,\n shadowRef,\n cards,\n headline: Slots.headline.default({ element }),\n text: Slots.text.default({ element }),\n actions: Slots.actions.default({ element }),\n });\n};\n\n/**\n * Cards Carousel\n *\n * A carousel component specifically designed for displaying card components.\n *\n * ## Custom Element\n * `<umd-element-carousel-cards>`\n *\n * ## Slots\n * - `cards` - Container for card components (required, accepts: card elements)\n * - `headline` - Carousel headline (optional, accepts: heading elements)\n * - `text` - Carousel description (optional, accepts: text elements)\n * - `actions` - Carousel action buttons/links (optional, accepts: links or buttons)\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel-cards>\n * <div slot=\"cards\">\n * <umd-element-card>\n * <h3 slot=\"headline\">Card 1</h3>\n * <p slot=\"text\">Card content</p>\n * </umd-element-card>\n * <umd-element-card>\n * <h3 slot=\"headline\">Card 2</h3>\n * <p slot=\"text\">Card content</p>\n * </umd-element-card>\n * </div>\n * </umd-element-carousel-cards>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n afterConnect: Lifecycle.hooks.loadOnConnect,\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../../_types';\n\nconst { ImageHasAlt } = Markup.validate;\n\n// Tag name for the single image carousel component\nconst tagName = 'umd-element-carousel-image';\n\n// Slot configuration for the single image carousel component\nconst slots: SlotConfiguration = {\n images: {\n required: true,\n allowedElements: ['img', 'div'],\n },\n headlines: {\n allowedElements: ['div'],\n },\n texts: {\n allowedElements: ['div'],\n },\n};\n\n// Attribute handlers for the single image carousel component\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.SetEventReize(),\n);\n\n/**\n * Creates a single image carousel component\n * @param element - The host HTML element\n * @returns Configured single image carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const slottedImages = Array.from(\n element.querySelectorAll(`[slot=\"${Slots.name.IMAGES}\"] > *`),\n ) as HTMLImageElement[];\n const slottedHeadlines = Array.from(\n element.querySelectorAll(`[slot=\"${Slots.name.HEADLINES}\"] > *`),\n );\n const slottedTexts = Array.from(\n element.querySelectorAll(`[slot=\"${Slots.name.TEXTS}\"] > *`),\n );\n\n const headlines = slottedHeadlines.map((headline) =>\n headline.cloneNode(true),\n ) as HTMLElement[];\n\n const texts = slottedTexts.map((text) =>\n text.cloneNode(true),\n ) as HTMLElement[];\n\n const images = slottedImages\n .map((image) => {\n if (image.nodeName === 'IMG') {\n if (ImageHasAlt({ image })) return image.cloneNode(true);\n }\n return null;\n })\n .filter((image) => image !== null) as HTMLImageElement[];\n\n return Composite.carousel.image({\n images,\n headlines,\n texts,\n isThemeDark: Attributes.isTheme.dark({ element }),\n isFullScreenOption: Attributes.includesFeature.fullScreenOption({\n element,\n }),\n });\n};\n\n/**\n * Single Image Carousel\n *\n * A carousel component for displaying images with optional captions and headlines.\n *\n * ## Custom Element\n * `<umd-element-carousel-image>`\n *\n * ## Slots\n * - `images` - Container for images (required, accepts: img elements with alt text)\n * - `headlines` - Container for image headlines (optional, accepts: heading elements)\n * - `texts` - Container for image descriptions (optional, accepts: text elements)\n *\n * ## Attributes\n * - `data-theme` - Visual theme:\n * - `light` - Light theme (default)\n * - `dark` - Dark theme\n * - `data-feature` - Additional features:\n * - `fullscreen` - Enable fullscreen viewing option\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel-image>\n * <div slot=\"images\">\n * <img src=\"photo1.jpg\" alt=\"Campus view\">\n * <img src=\"photo2.jpg\" alt=\"Student center\">\n * <img src=\"photo3.jpg\" alt=\"Library entrance\">\n * </div>\n * </umd-element-carousel-image>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../../_types';\n\nconst { ImageHasAlt } = Markup.validate;\n\n// Tag name for the multiple image carousel component\nconst tagName = 'umd-element-carousel-multiple-image';\n\n// Slot configuration for the multiple image carousel component\nconst slots: SlotConfiguration = {\n images: {\n required: true,\n allowedElements: ['div', 'img'],\n },\n};\n\n// Attribute handlers for the multiple image carousel component\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.SetEventReize(),\n);\n\n/**\n * Creates a multiple image carousel component\n * @param element - The host HTML element\n * @returns Configured multiple image carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const slottedImages = Array.from(\n element.querySelectorAll(`[slot=\"${Slots.name.IMAGES}\"] > *`),\n ) as HTMLImageElement[];\n\n const images = slottedImages\n .map((image) => {\n if (image.nodeName === 'IMG') {\n if (ImageHasAlt({ image })) return image.cloneNode(true);\n }\n return null;\n })\n .filter((image) => image !== null) as HTMLImageElement[];\n\n return Composite.carousel.images({\n images,\n isThemeDark: Attributes.isTheme.dark({ element }),\n isFullScreenOption: Attributes.includesFeature.fullScreenOption({\n element,\n }),\n });\n};\n\n/**\n * Multiple Image Carousel\n *\n * A carousel component for displaying multiple images in a gallery format.\n *\n * ## Custom Element\n * `<umd-element-carousel-multiple-image>`\n *\n * ## Slots\n * - `images` - Container for images (required, accepts: img elements with alt text)\n *\n * ## Attributes\n * - `data-theme` - Visual theme:\n * - `light` - Light theme (default)\n * - `dark` - Dark theme\n * - `data-feature` - Additional features:\n * - `fullscreen` - Enable fullscreen viewing option\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel-multiple-image>\n * <div slot=\"images\">\n * <img src=\"gallery1.jpg\" alt=\"Gallery image 1\">\n * <img src=\"gallery2.jpg\" alt=\"Gallery image 2\">\n * <img src=\"gallery3.jpg\" alt=\"Gallery image 3\">\n * <img src=\"gallery4.jpg\" alt=\"Gallery image 4\">\n * </div>\n * </umd-element-carousel-multiple-image>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\n// Tag name for the thumbnail carousel component\nconst tagName = 'umd-element-carousel-thumbnail';\n\n// Slot configuration for the thumbnail carousel component\nconst slots: SlotConfiguration = {\n blocks: {\n required: true,\n },\n};\n\n// Attribute handlers for the thumbnail carousel component\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.resize(),\n);\n\n/**\n * Creates a thumbnail carousel component\n * @param element - The host HTML element\n * @returns Configured thumbnail carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const slottedBlocks = Array.from(\n element.querySelectorAll(`[slot=\"${Slots.name.BLOCKS}\"] > *`),\n ) as HTMLElement[];\n\n const blocks = slottedBlocks.map((block) =>\n block.cloneNode(true),\n ) as HTMLElement[];\n\n return Composite.carousel.thumbnail({\n blocks,\n isThemeDark: Attributes.isTheme.dark({ element }),\n });\n};\n\n/**\n * Thumbnail Carousel\n *\n * A carousel component with thumbnail navigation for browsing through content.\n *\n * ## Custom Element\n * `<umd-element-carousel-thumbnail>`\n *\n * ## Slots\n * - `blocks` - Container for carousel items with thumbnails (required, accepts: elements with data-thumbnail attribute)\n *\n * ## Attributes\n * - `data-theme` - Visual theme:\n * - `light` - Light theme (default)\n * - `dark` - Dark theme\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel-thumbnail>\n * <div slot=\"blocks\">\n * <div data-thumbnail=\"thumb1.jpg\">\n * <img src=\"image1.jpg\" alt=\"Image 1\">\n * <p>Caption for image 1</p>\n * </div>\n * <div data-thumbnail=\"thumb2.jpg\">\n * <img src=\"image2.jpg\" alt=\"Image 2\">\n * <p>Caption for image 2</p>\n * </div>\n * </div>\n * </umd-element-carousel-thumbnail>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n afterConnect: Lifecycle.hooks.loadOnConnect,\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\nconst { ImageHasAlt } = Markup.validate;\n\nconst tagName = 'umd-element-carousel-image-wide';\n\nconst slots: SlotConfiguration = {\n slides: {\n required: true,\n allowedElements: ['figure', 'div'],\n },\n};\n\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.resize(),\n);\n\n/**\n * Creates a wide carousel component\n * @param element - The host HTML element\n * @returns Configured wide carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const title = element.getAttribute('title');\n const animationTime = element.getAttribute('animation-time');\n const mobileBreakpoint = element.getAttribute('mobile-breakpoint');\n\n const slottedSlides = Array.from(\n element.querySelectorAll(`[slot=\"slides\"] > *`),\n ) as HTMLElement[];\n\n const slides = slottedSlides\n .map((slide) => {\n const image = slide.querySelector('img');\n const headline = slide.querySelector('[data-headline]');\n const text = slide.querySelector('[data-text]');\n\n if (image && !ImageHasAlt({ image })) {\n console.warn('Carousel slide image missing alt text:', image);\n return null;\n }\n\n return {\n image: image ? (image.cloneNode(true) as HTMLImageElement) : null,\n headline: headline\n ? (headline.cloneNode(true) as HTMLElement)\n : undefined,\n text: text ? (text.cloneNode(true) as HTMLElement) : undefined,\n };\n })\n .filter((slide) => slide && slide.image) as Array<{\n image: HTMLImageElement;\n headline?: HTMLElement;\n text?: HTMLElement;\n }>;\n\n return Composite.carousel.wide({\n slides,\n title: title || undefined,\n isThemeDark: Attributes.isTheme.dark({ element }),\n animationTime: animationTime ? parseInt(animationTime) : undefined,\n mobileBreakpoint: mobileBreakpoint ? parseInt(mobileBreakpoint) : undefined,\n });\n};\n\n/**\n * Wide Carousel\n *\n * A full-width carousel component with slide previews, optimized for showcasing\n * featured content with optional text overlays.\n *\n * ## Custom Element\n * `<umd-element-carousel-wide>`\n *\n * ## Slots\n * - `slides` - Container for carousel slides (required, accepts: figure or div elements)\n * - Each slide should contain:\n * - An `img` element with alt text (required)\n * - An element with `data-headline` attribute for headlines (optional)\n * - An element with `data-text` attribute for descriptions (optional)\n *\n * ## Attributes\n * - `title` - Accessible title for the carousel (default: \"Animated Image Carousel\")\n * - `data-theme` - Visual theme:\n * - `light` - Light theme (default)\n * - `dark` - Dark theme\n * - `animation-time` - Animation duration in milliseconds (default: 500)\n * - `mobile-breakpoint` - Breakpoint for mobile behavior in pixels (default: 650)\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel-wide title=\"Featured Stories\">\n * <div slot=\"slides\">\n * <figure>\n * <img src=\"hero1.jpg\" alt=\"Research breakthrough\">\n * <div data-headline>\n * <h2>Major Research Discovery</h2>\n * </div>\n * <div data-text>\n * <p>Scientists make groundbreaking discovery in quantum computing.</p>\n * </div>\n * </figure>\n * <figure>\n * <img src=\"hero2.jpg\" alt=\"Campus expansion\">\n * <div data-headline>\n * <h2>New Science Center Opens</h2>\n * </div>\n * <div data-text>\n * <p>State-of-the-art facility enhances research capabilities.</p>\n * </div>\n * </figure>\n * </div>\n * </umd-element-carousel-wide>\n * ```\n *\n * @category Components\n * @since 1.13.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n afterConnect: Lifecycle.hooks.loadOnConnect,\n});\n\nexport default registration;\n"],"names":["tagName","slots","attributes","Attributes.handler","element","createComponent","shadow","isThemeDark","Attributes.isTheme","attributeLeftButton","attributeRightButton","attributeMobileHint","attributeHint","tabletSize","desktopSize","tabletCount","desktopCount","maxCount","gridGap","slide","Slots","blocks","hasLeftButton","hasRightButton","mobileHint","hint","slot","Markup.create.Node","shadowRef","Composite","registration","Register.webComponent","Lifecycle.hooks","base_default","cards","cards_default","ImageHasAlt","Markup.validate","slottedImages","slottedHeadlines","slottedTexts","headlines","headline","texts","text","images","image","Attributes.includesFeature","single_default","multiple_default","block","thumbnail_default","title","animationTime","mobileBreakpoint","slides","wide_default"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wide-omTQQ6Wr.js","sources":["../source/api/carousel/base.ts","../source/api/carousel/cards.ts","../source/api/carousel/image/single.ts","../source/api/carousel/image/multiple.ts","../source/api/carousel/thumbnail.ts","../source/api/carousel/wide.ts"],"sourcesContent":["import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\n// Tag name for the base carousel component\nconst tagName = 'umd-element-carousel';\n\n// Slot configuration for the base carousel component\nconst slots: SlotConfiguration = {\n blocks: {\n required: true,\n },\n};\n\n// Attribute handlers for the base carousel component\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.resize(),\n);\n\n/**\n * Creates a base carousel component\n * @param element - The host HTML element\n * @returns Configured carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const shadow = element.shadowRoot as ShadowRoot;\n const isThemeDark = Attributes.isTheme.dark({\n element,\n });\n const attributeLeftButton = element.getAttribute('left-button');\n const attributeRightButton = element.getAttribute('right-button');\n const attributeMobileHint = element.getAttribute('mobile-hint');\n const attributeHint = element.getAttribute('hint');\n const tabletSize = element.getAttribute('tablet-size');\n const desktopSize = element.getAttribute('desktop-size');\n const tabletCount = element.getAttribute('tablet-count');\n const desktopCount = element.getAttribute('desktop-count');\n const maxCount = element.getAttribute('max-count');\n const gridGap = element.getAttribute('grid-gap-pixels');\n const slide = element.querySelector(\n `[slot=\"${Slots.name.BLOCKS}\"]`,\n ) as HTMLElement;\n const blocks = Array.from(\n slide.querySelectorAll(':scope > *'),\n ) as HTMLElement[];\n let hasLeftButton = true;\n let hasRightButton = true;\n let mobileHint = true;\n let hint = true;\n\n if (attributeLeftButton === 'false') hasLeftButton = false;\n if (attributeRightButton === 'false') hasRightButton = false;\n if (attributeMobileHint === 'false') mobileHint = false;\n if (attributeHint === 'false') hint = false;\n\n const createCardShadowRef = () => {\n const slot = Markup.create.Node.slot({ type: Slots.name.BLOCKS });\n shadow.appendChild(slot);\n };\n\n createCardShadowRef();\n\n const shadowRef = shadow.querySelector(\n `[name=\"${Slots.name.BLOCKS}\"]`,\n ) as HTMLElement;\n\n return Composite.carousel.macro({\n slide,\n shadowRef,\n blocks,\n isThemeDark,\n hasLeftButton,\n hasRightButton,\n mobileHint,\n hint,\n tabletSize: tabletSize ? parseInt(tabletSize) : undefined,\n desktopSize: desktopSize ? parseInt(desktopSize) : undefined,\n tabletCount: tabletCount ? parseInt(tabletCount) : undefined,\n desktopCount: desktopCount ? parseInt(desktopCount) : undefined,\n maxCount: maxCount ? parseInt(maxCount) : undefined,\n gridGap,\n });\n};\n\n/**\n * Base Carousel\n *\n * A versatile carousel component for displaying scrollable content blocks with navigation controls.\n *\n * ## Custom Element\n * `<umd-element-carousel>`\n *\n * ## Slots\n * - `blocks` - Container for carousel items (required, accepts: any element)\n *\n * ## Attributes\n * - `left-button` - Left navigation button visibility:\n * - `true` - Show left navigation button (default)\n * - `false` - Hide left navigation button\n * - `right-button` - Right navigation button visibility:\n * - `true` - Show right navigation button (default)\n * - `false` - Hide right navigation button\n * - `mobile-hint` - Mobile swipe hint visibility:\n * - `true` - Show mobile swipe hint (default)\n * - `false` - Hide mobile swipe hint\n * - `hint` - Navigation hint visibility:\n * - `true` - Show navigation hint (default)\n * - `false` - Hide navigation hint\n * - `data-theme` - Visual theme:\n * - `light` - Light theme (default)\n * - `dark` - Dark theme\n * - `tablet-size` - Number of visible items on tablet\n * - `desktop-size` - Number of visible items on desktop\n * - `tablet-count` - Total item count for tablet view\n * - `desktop-count` - Total item count for desktop view\n * - `max-count` - Maximum number of items to display\n * - `grid-gap-pixels` - Gap between items in pixels\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel>\n * <div slot=\"blocks\">\n * <div>Item 1</div>\n * <div>Item 2</div>\n * <div>Item 3</div>\n * </div>\n * </umd-element-carousel>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n afterConnect: Lifecycle.hooks.loadOnConnect,\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\n// Tag name for the cards carousel component\nconst tagName = 'umd-element-carousel-cards';\n\n// Slot configuration for the cards carousel component\nconst slots: SlotConfiguration = {\n cards: {\n required: true,\n },\n headline: Slots.element.allowed.headline,\n text: Slots.element.allowed.text,\n actions: Slots.element.allowed.actions,\n};\n\n// Attribute handlers for the cards carousel component\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.resize(),\n);\n\n/**\n * Creates a cards carousel component\n * @param element - The host HTML element\n * @returns Configured cards carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const shadow = element.shadowRoot as ShadowRoot;\n const slide = element.querySelector(\n `[slot=\"${Slots.name.CARDS}\"]`,\n ) as HTMLElement;\n const cards = Array.from(\n slide.querySelectorAll(':scope > *'),\n ) as HTMLElement[];\n\n const createCardShadowRef = () => {\n const slot = Markup.create.Node.slot({ type: Slots.name.CARDS });\n shadow.appendChild(slot);\n };\n\n createCardShadowRef();\n\n const shadowRef = shadow.querySelector(\n `[name=\"${Slots.name.CARDS}\"]`,\n ) as HTMLElement;\n\n return Composite.carousel.cards({\n slide,\n shadowRef,\n cards,\n headline: Slots.headline.default({ element }),\n text: Slots.text.default({ element }),\n actions: Slots.actions.default({ element }),\n });\n};\n\n/**\n * Cards Carousel\n *\n * A carousel component specifically designed for displaying card components.\n *\n * ## Custom Element\n * `<umd-element-carousel-cards>`\n *\n * ## Slots\n * - `cards` - Container for card components (required, accepts: card elements)\n * - `headline` - Carousel headline (optional, accepts: heading elements)\n * - `text` - Carousel description (optional, accepts: text elements)\n * - `actions` - Carousel action buttons/links (optional, accepts: links or buttons)\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel-cards>\n * <div slot=\"cards\">\n * <umd-element-card>\n * <h3 slot=\"headline\">Card 1</h3>\n * <p slot=\"text\">Card content</p>\n * </umd-element-card>\n * <umd-element-card>\n * <h3 slot=\"headline\">Card 2</h3>\n * <p slot=\"text\">Card content</p>\n * </umd-element-card>\n * </div>\n * </umd-element-carousel-cards>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n afterConnect: Lifecycle.hooks.loadOnConnect,\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../../_types';\n\nconst { ImageHasAlt } = Markup.validate;\n\n// Tag name for the single image carousel component\nconst tagName = 'umd-element-carousel-image';\n\n// Slot configuration for the single image carousel component\nconst slots: SlotConfiguration = {\n images: {\n required: true,\n allowedElements: ['img', 'div'],\n },\n headlines: {\n allowedElements: ['div'],\n },\n texts: {\n allowedElements: ['div'],\n },\n};\n\n// Attribute handlers for the single image carousel component\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.SetEventReize(),\n);\n\n/**\n * Creates a single image carousel component\n * @param element - The host HTML element\n * @returns Configured single image carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const slottedImages = Array.from(\n element.querySelectorAll(`[slot=\"${Slots.name.IMAGES}\"] > *`),\n ) as HTMLImageElement[];\n const slottedHeadlines = Array.from(\n element.querySelectorAll(`[slot=\"${Slots.name.HEADLINES}\"] > *`),\n );\n const slottedTexts = Array.from(\n element.querySelectorAll(`[slot=\"${Slots.name.TEXTS}\"] > *`),\n );\n\n const headlines = slottedHeadlines.map((headline) =>\n headline.cloneNode(true),\n ) as HTMLElement[];\n\n const texts = slottedTexts.map((text) =>\n text.cloneNode(true),\n ) as HTMLElement[];\n\n const images = slottedImages\n .map((image) => {\n if (image.nodeName === 'IMG') {\n if (ImageHasAlt({ image })) return image.cloneNode(true);\n }\n return null;\n })\n .filter((image) => image !== null) as HTMLImageElement[];\n\n return Composite.carousel.image({\n images,\n headlines,\n texts,\n isThemeDark: Attributes.isTheme.dark({ element }),\n isFullScreenOption: Attributes.includesFeature.fullScreenOption({\n element,\n }),\n });\n};\n\n/**\n * Single Image Carousel\n *\n * A carousel component for displaying images with optional captions and headlines.\n *\n * ## Custom Element\n * `<umd-element-carousel-image>`\n *\n * ## Slots\n * - `images` - Container for images (required, accepts: img elements with alt text)\n * - `headlines` - Container for image headlines (optional, accepts: heading elements)\n * - `texts` - Container for image descriptions (optional, accepts: text elements)\n *\n * ## Attributes\n * - `data-theme` - Visual theme:\n * - `light` - Light theme (default)\n * - `dark` - Dark theme\n * - `data-feature` - Additional features:\n * - `fullscreen` - Enable fullscreen viewing option\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel-image>\n * <div slot=\"images\">\n * <img src=\"photo1.jpg\" alt=\"Campus view\">\n * <img src=\"photo2.jpg\" alt=\"Student center\">\n * <img src=\"photo3.jpg\" alt=\"Library entrance\">\n * </div>\n * </umd-element-carousel-image>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../../_types';\n\nconst { ImageHasAlt } = Markup.validate;\n\n// Tag name for the multiple image carousel component\nconst tagName = 'umd-element-carousel-multiple-image';\n\n// Slot configuration for the multiple image carousel component\nconst slots: SlotConfiguration = {\n images: {\n required: true,\n allowedElements: ['div', 'img'],\n },\n};\n\n// Attribute handlers for the multiple image carousel component\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.SetEventReize(),\n);\n\n/**\n * Creates a multiple image carousel component\n * @param element - The host HTML element\n * @returns Configured multiple image carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const slottedImages = Array.from(\n element.querySelectorAll(`[slot=\"${Slots.name.IMAGES}\"] > *`),\n ) as HTMLImageElement[];\n\n const images = slottedImages\n .map((image) => {\n if (image.nodeName === 'IMG') {\n if (ImageHasAlt({ image })) return image.cloneNode(true);\n }\n return null;\n })\n .filter((image) => image !== null) as HTMLImageElement[];\n\n return Composite.carousel.images({\n images,\n isThemeDark: Attributes.isTheme.dark({ element }),\n isFullScreenOption: Attributes.includesFeature.fullScreenOption({\n element,\n }),\n });\n};\n\n/**\n * Multiple Image Carousel\n *\n * A carousel component for displaying multiple images in a gallery format.\n *\n * ## Custom Element\n * `<umd-element-carousel-multiple-image>`\n *\n * ## Slots\n * - `images` - Container for images (required, accepts: img elements with alt text)\n *\n * ## Attributes\n * - `data-theme` - Visual theme:\n * - `light` - Light theme (default)\n * - `dark` - Dark theme\n * - `data-feature` - Additional features:\n * - `fullscreen` - Enable fullscreen viewing option\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel-multiple-image>\n * <div slot=\"images\">\n * <img src=\"gallery1.jpg\" alt=\"Gallery image 1\">\n * <img src=\"gallery2.jpg\" alt=\"Gallery image 2\">\n * <img src=\"gallery3.jpg\" alt=\"Gallery image 3\">\n * <img src=\"gallery4.jpg\" alt=\"Gallery image 4\">\n * </div>\n * </umd-element-carousel-multiple-image>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\n// Tag name for the thumbnail carousel component\nconst tagName = 'umd-element-carousel-thumbnail';\n\n// Slot configuration for the thumbnail carousel component\nconst slots: SlotConfiguration = {\n blocks: {\n required: true,\n },\n};\n\n// Attribute handlers for the thumbnail carousel component\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.resize(),\n);\n\n/**\n * Creates a thumbnail carousel component\n * @param element - The host HTML element\n * @returns Configured thumbnail carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const slottedBlocks = Array.from(\n element.querySelectorAll(`[slot=\"${Slots.name.BLOCKS}\"] > *`),\n ) as HTMLElement[];\n\n const blocks = slottedBlocks.map((block) =>\n block.cloneNode(true),\n ) as HTMLElement[];\n\n return Composite.carousel.thumbnail({\n blocks,\n isThemeDark: Attributes.isTheme.dark({ element }),\n });\n};\n\n/**\n * Thumbnail Carousel\n *\n * A carousel component with thumbnail navigation for browsing through content.\n *\n * ## Custom Element\n * `<umd-element-carousel-thumbnail>`\n *\n * ## Slots\n * - `blocks` - Container for carousel items with thumbnails (required, accepts: elements with data-thumbnail attribute)\n *\n * ## Attributes\n * - `data-theme` - Visual theme:\n * - `light` - Light theme (default)\n * - `dark` - Dark theme\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel-thumbnail>\n * <div slot=\"blocks\">\n * <div data-thumbnail=\"thumb1.jpg\">\n * <img src=\"image1.jpg\" alt=\"Image 1\">\n * <p>Caption for image 1</p>\n * </div>\n * <div data-thumbnail=\"thumb2.jpg\">\n * <img src=\"image2.jpg\" alt=\"Image 2\">\n * <p>Caption for image 2</p>\n * </div>\n * </div>\n * </umd-element-carousel-thumbnail>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n afterConnect: Lifecycle.hooks.loadOnConnect,\n});\n\nexport default registration;\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport { Markup } from 'utilities';\nimport type {\n CreateComponentFunction,\n ComponentRegistration,\n SlotConfiguration,\n} from '../../_types';\n\nconst { ImageHasAlt } = Markup.validate;\n\nconst tagName = 'umd-element-carousel-image-wide';\n\nconst slots: SlotConfiguration = {\n slides: {\n required: true,\n allowedElements: ['figure', 'div'],\n },\n};\n\nconst attributes = Attributes.handler.common.resize((element) =>\n element.events?.resize(),\n);\n\n/**\n * Creates a wide carousel component\n * @param element - The host HTML element\n * @returns Configured wide carousel component\n * @internal\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const title = element.getAttribute('title');\n const animationTime = element.getAttribute('animation-time');\n const mobileBreakpoint = element.getAttribute('mobile-breakpoint');\n\n const slottedSlides = Array.from(\n element.querySelectorAll(`[slot=\"slides\"] > *`),\n ) as HTMLElement[];\n\n const slides = slottedSlides\n .map((slide) => {\n const image = slide.querySelector('img');\n const headline = slide.querySelector('[data-headline]');\n const text = slide.querySelector('[data-text]');\n\n if (image && !ImageHasAlt({ image })) {\n console.warn('Carousel slide image missing alt text:', image);\n return null;\n }\n\n return {\n image: image ? (image.cloneNode(true) as HTMLImageElement) : null,\n headline: headline\n ? (headline.cloneNode(true) as HTMLElement)\n : undefined,\n text: text ? (text.cloneNode(true) as HTMLElement) : undefined,\n };\n })\n .filter((slide) => slide && slide.image) as Array<{\n image: HTMLImageElement;\n headline?: HTMLElement;\n text?: HTMLElement;\n }>;\n\n return Composite.carousel.wide({\n slides,\n title: title || undefined,\n isThemeDark: Attributes.isTheme.dark({ element }),\n animationTime: animationTime ? parseInt(animationTime) : undefined,\n mobileBreakpoint: mobileBreakpoint ? parseInt(mobileBreakpoint) : undefined,\n });\n};\n\n/**\n * Wide Carousel\n *\n * A full-width carousel component with slide previews, optimized for showcasing\n * featured content with optional text overlays.\n *\n * ## Custom Element\n * `<umd-element-carousel-wide>`\n *\n * ## Slots\n * - `slides` - Container for carousel slides (required, accepts: figure or div elements)\n * - Each slide should contain:\n * - An `img` element with alt text (required)\n * - An element with `data-headline` attribute for headlines (optional)\n * - An element with `data-text` attribute for descriptions (optional)\n *\n * ## Attributes\n * - `title` - Accessible title for the carousel (default: \"Animated Image Carousel\")\n * - `data-theme` - Visual theme:\n * - `light` - Light theme (default)\n * - `dark` - Dark theme\n * - `animation-time` - Animation duration in milliseconds (default: 500)\n * - `mobile-breakpoint` - Breakpoint for mobile behavior in pixels (default: 650)\n *\n * ## Observed Attributes\n * - `resize` - Triggers carousel size recalculation\n *\n * @example\n * ```html\n * <umd-element-carousel-wide title=\"Featured Stories\">\n * <div slot=\"slides\">\n * <figure>\n * <img src=\"hero1.jpg\" alt=\"Research breakthrough\">\n * <div data-headline>\n * <h2>Major Research Discovery</h2>\n * </div>\n * <div data-text>\n * <p>Scientists make groundbreaking discovery in quantum computing.</p>\n * </div>\n * </figure>\n * <figure>\n * <img src=\"hero2.jpg\" alt=\"Campus expansion\">\n * <div data-headline>\n * <h2>New Science Center Opens</h2>\n * </div>\n * <div data-text>\n * <p>State-of-the-art facility enhances research capabilities.</p>\n * </div>\n * </figure>\n * </div>\n * </umd-element-carousel-wide>\n * ```\n *\n * @category Components\n * @since 1.13.0\n */\nconst registration: ComponentRegistration = Register.webComponent({\n tagName,\n slots,\n createComponent,\n attributes: [attributes],\n afterConnect: Lifecycle.hooks.loadOnConnect,\n});\n\nexport default registration;\n"],"names":["tagName","slots","attributes","Attributes.handler","element","createComponent","shadow","isThemeDark","Attributes.isTheme","attributeLeftButton","attributeRightButton","attributeMobileHint","attributeHint","tabletSize","desktopSize","tabletCount","desktopCount","maxCount","gridGap","slide","Slots","blocks","hasLeftButton","hasRightButton","mobileHint","hint","slot","Markup.create.Node","shadowRef","Composite","registration","Register.webComponent","Lifecycle.hooks","base_default","cards","cards_default","ImageHasAlt","Markup.validate","slottedImages","slottedHeadlines","slottedTexts","headlines","headline","texts","text","images","image","Attributes.includesFeature","single_default","multiple_default","block","thumbnail_default","title","animationTime","mobileBreakpoint","slides","wide_default"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"highlight-DHa9w3Pn.js","sources":["../source/api/pathway/image.ts","../source/api/pathway/highlight.ts"],"sourcesContent":["import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register, Lifecycle } from 'model';\nimport { extractEventData } from '../_event';\nimport { toElementVisual } from 'utilities/markup/validate';\nimport { CreateComponentFunction } from '../../_types';\n\n/**\n * Tag name for the pathway web component\n */\nconst tagName = 'umd-element-pathway';\n\n/**\n * Creates a pathway component with the provided configuration\n */\nconst createComponent: CreateComponentFunction = (element) => {\n const isImageScaledDeprecated =\n element.getAttribute('image-scaled') === 'false' ? false : undefined;\n\n const isImageScaled =\n isImageScaledDeprecated ?? Attributes.isLayout.imageScaled({ element });\n const isImagePositionLeft = Attributes.isLayout.imagePositionLeft({\n element,\n });\n const isThemeDark = Attributes.isTheme.dark({ element });\n const isThemeLight = Attributes.isTheme.light({ element });\n const isThemeMaryland = Attributes.isTheme.maryland({ element });\n const isDisplayHero = Attributes.isDisplay.hero({ element });\n const isDisplayOverlay = Attributes.isDisplay.overlay({ element });\n const isDisplaySticky = Attributes.isDisplay.sticky({ element });\n const includesAnimation = Attributes.includesFeature.animation({ element });\n\n const featureEvents = extractEventData(element, {\n isLargeSize: true,\n isDateSignDark: false,\n });\n\n if (isDisplayHero) {\n return Composite.pathway.hero({\n actions: Slots.actions.default({ element }),\n eyebrow: Slots.eyebrow.default({ element }),\n headline: Slots.headline.default({ element }),\n image: Slots.assets.image({ element }) as HTMLImageElement,\n includesAnimation,\n isImagePositionLeft,\n text: Slots.text.default({ element }),\n video: Slots.assets.video({ element }) as HTMLVideoElement,\n });\n }\n\n if (isDisplayOverlay) {\n return Composite.pathway.overlay({\n actions: Slots.actions.default({ element }),\n dateSign: toElementVisual(featureEvents?.dateSign),\n eventDetails: toElementVisual(featureEvents?.eventMeta),\n eyebrow: Slots.eyebrow.default({ element }),\n headline: Slots.headline.default({ element }),\n image: Slots.assets.image({ element }) as HTMLImageElement,\n includesAnimation,\n isImagePositionLeft,\n isImageScaled,\n isThemeDark,\n isThemeLight,\n isThemeMaryland,\n stats: Slots.text.stats({ element }),\n text: Slots.text.default({ element }),\n video: Slots.assets.video({ element }) as HTMLVideoElement,\n });\n }\n\n if (isDisplaySticky) {\n return Composite.pathway.sticky({\n actions: Slots.actions.default({ element }),\n dateSign: toElementVisual(featureEvents?.dateSign),\n eventDetails: toElementVisual(featureEvents?.eventMeta),\n eyebrow: Slots.eyebrow.default({ element }),\n headline: Slots.headline.default({ element }),\n image: Slots.assets.image({ element }) as HTMLImageElement,\n isImagePositionLeft,\n isImageScaled,\n isThemeDark: Attributes.isTheme.dark({ element }),\n stats: Slots.text.stats({ element }),\n text: Slots.text.default({ element }),\n video: Slots.assets.video({ element }) as HTMLVideoElement,\n });\n }\n\n return Composite.pathway.standard({\n actions: Slots.actions.default({ element }),\n dateSign: toElementVisual(featureEvents?.dateSign),\n eventDetails: toElementVisual(featureEvents?.eventMeta),\n eyebrow: Slots.eyebrow.default({ element }),\n headline: Slots.headline.default({ element }),\n image: Slots.assets.image({ element }) as HTMLImageElement,\n includesAnimation,\n isImagePositionLeft,\n isImageScaled,\n isThemeDark,\n isThemeMaryland,\n stats: Slots.text.stats({ element }),\n text: Slots.text.default({ element }),\n video: Slots.assets.video({ element }) as HTMLVideoElement,\n });\n};\n\n/**\n * Pathway\n *\n * A versatile component for creating visual pathways that guide users to take action.\n * Supports multiple display types including standard, hero, overlay, and sticky layouts.\n * Can include images, videos, event information, statistics, and rich text content.\n *\n * ## Custom Element\n * `<umd-element-pathway>`\n *\n * ## Slots\n * - `eyebrow` - Small text above headline (optional, accepts: text elements)\n * - `headline` - Main heading (optional, accepts: heading elements)\n * - `text` - Descriptive body text (optional, accepts: text elements)\n * - `actions` - Call-to-action links or buttons (optional, accepts: a, button)\n * - `image` - Featured image (optional, accepts: img)\n * - `video` - Video content (optional, accepts: video, iframe)\n * - `stats` - Statistical information or metrics (optional, accepts: any elements)\n * - `date-start-iso` - Event start date in ISO format (optional, accepts: time)\n * - `date-end-iso` - Event end date in ISO format (optional, accepts: time)\n * - `location` - Event location information (optional, accepts: text elements)\n *\n * ## Attributes\n * - `data-display` - Display variant (deprecated, use specific pathway components):\n * - `hero` - Large hero display\n * - `overlay` - Text overlaid on image\n * - `sticky` - Sticky positioned elements\n * - Default - Standard layout\n * - `data-theme` - Color theme options:\n * - `dark` - Dark background with light text\n * - `light` - Light background with dark text\n * - `maryland` - University brand colors\n * - `data-animation` - Enable scroll-triggered animations:\n * - `true` - Enables entrance animations\n * - `data-layout-image-position` - Image placement:\n * - `left` - Image on the left side\n * - Default - Image on the right side\n * - `data-layout-image-scaled` - Image scaling behavior:\n * - `false` - Disable image scaling\n * - Default - Enable responsive scaling\n * - `data-visual-time` - Show time in event details:\n * - `false` - Hide time display\n * - Default - Show time if available\n *\n * @example\n * ```html\n * <!-- Basic pathway -->\n * <umd-element-pathway>\n * <span slot=\"eyebrow\">Discover</span>\n * <h2 slot=\"headline\">Your Path to Success</h2>\n * <p slot=\"text\">Explore programs designed to help you achieve your goals.</p>\n * <img slot=\"image\" src=\"pathway.jpg\" alt=\"Student success\" />\n * <a slot=\"actions\" href=\"/programs\">Explore Programs</a>\n * </umd-element-pathway>\n * ```\n *\n * @example\n * ```html\n * <!-- Event pathway with details -->\n * <umd-element-pathway data-theme=\"maryland\" data-visual-time=\"true\">\n * <h2 slot=\"headline\">Open House</h2>\n * <p slot=\"text\">Visit campus and discover what makes UMD special.</p>\n * <time slot=\"date-start-iso\" datetime=\"2024-04-15T10:00:00\">April 15, 2024 10:00 AM</time>\n * <time slot=\"date-end-iso\" datetime=\"2024-04-15T16:00:00\">April 15, 2024 4:00 PM</time>\n * <span slot=\"location\">McKeldin Mall</span>\n * <img slot=\"image\" src=\"open-house.jpg\" alt=\"Campus open house\" />\n * <a slot=\"actions\" href=\"/register\">Register Now</a>\n * </umd-element-pathway>\n * ```\n *\n * @example\n * ```html\n * <!-- Hero pathway with video and stats -->\n * <umd-element-pathway data-display=\"hero\" data-theme=\"dark\" data-animation=\"true\">\n * <span slot=\"eyebrow\">Research Excellence</span>\n * <h1 slot=\"headline\">Pushing Boundaries</h1>\n * <p slot=\"text\">Our researchers are tackling the world's biggest challenges.</p>\n * <iframe slot=\"video\" src=\"https://youtube.com/embed/...\" title=\"Research video\"></iframe>\n * <div slot=\"stats\">\n * <div class=\"stat\">\n * <span class=\"number\">$500M</span>\n * <span class=\"label\">Research Funding</span>\n * </div>\n * <div class=\"stat\">\n * <span class=\"number\">2,000+</span>\n * <span class=\"label\">Active Projects</span>\n * </div>\n * </div>\n * <div slot=\"actions\">\n * <a href=\"/research\">Explore Research</a>\n * <a href=\"/partnerships\">Partner With Us</a>\n * </div>\n * </umd-element-pathway>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nexport default Register.webComponent({\n tagName,\n createComponent,\n afterConnect: Lifecycle.hooks.loadAnimation,\n});\n","import { Composite } from '@universityofmaryland/web-elements-library';\nimport { Attributes, Slots, Register } from 'model';\nimport { Markup } from 'utilities';\nimport { CreateComponentFunction } from '../../_types';\n\nconst { SlotWithDefaultStyling } = Markup.create;\n\n/**\n * Tag name for the pathway highlight web component\n */\nconst tagName = 'umd-element-pathway-highlight';\n\n/**\n * Creates a pathway highlight component with the provided configuration\n */\nconst createComponent: CreateComponentFunction = (element) =>\n Composite.pathway.highlight({\n actions: Slots.actions.default({ element }),\n eyebrow: Slots.eyebrow.default({ element }),\n headline: Slots.headline.default({ element }),\n text: Slots.text.default({ element }),\n quote: SlotWithDefaultStyling({\n element,\n slotRef: Slots.name.HIGHLIGHT,\n }),\n attribution: SlotWithDefaultStyling({\n element,\n slotRef: Slots.name.HIGHLIGHT_ATTRIBUTION,\n }),\n isThemeDark: Attributes.isTheme.dark({ element }),\n });\n\n/**\n * Pathway Highlight\n *\n * A pathway component that emphasizes a featured quote or testimonial alongside\n * standard pathway content. Combines narrative elements with highlighted user voices\n * to create compelling calls-to-action.\n *\n * ## Custom Element\n * `<umd-element-pathway-highlight>`\n *\n * ## Slots\n * - `eyebrow` - Small text above headline (optional, accepts: text elements)\n * - `headline` - Main heading (optional, accepts: heading elements)\n * - `text` - Descriptive body text (optional, accepts: text elements)\n * - `actions` - Call-to-action links or buttons (optional, accepts: a, button)\n * - `highlight` - Featured quote or testimonial text (optional, accepts: text elements)\n * - `highlight-attribution` - Attribution for the quote (optional, accepts: text elements)\n *\n * ## Attributes\n * - `data-theme` - Color theme of the component:\n * - `dark` - Dark background with light text\n *\n * @example\n * ```html\n * <!-- Basic pathway with highlight -->\n * <umd-element-pathway-highlight>\n * <span slot=\"eyebrow\">Student Success</span>\n * <h2 slot=\"headline\">Transform Your Future</h2>\n * <p slot=\"text\">Join thousands of students who have found their path at UMD.</p>\n * <blockquote slot=\"highlight\">\n * \"The opportunities here changed my life. I found mentors, research\n * experiences, and a community that supported my dreams.\"\n * </blockquote>\n * <cite slot=\"highlight-attribution\">Sarah Chen, Class of 2023</cite>\n * <a slot=\"actions\" href=\"/apply\">Start Your Journey</a>\n * </umd-element-pathway-highlight>\n * ```\n *\n * @example\n * ```html\n * <!-- Dark theme with multiple actions -->\n * <umd-element-pathway-highlight data-theme=\"dark\">\n * <h2 slot=\"headline\">Alumni Impact</h2>\n * <p slot=\"text\">Our graduates go on to lead in every field imaginable.</p>\n * <p slot=\"highlight\">\n * \"My UMD education gave me the foundation to launch a company that's\n * now helping millions of people worldwide.\"\n * </p>\n * <span slot=\"highlight-attribution\">Dr. James Wilson, '08, CEO of TechCorp</span>\n * <div slot=\"actions\">\n * <a href=\"/alumni-stories\">Read More Stories</a>\n * <a href=\"/give\">Support Students</a>\n * </div>\n * </umd-element-pathway-highlight>\n * ```\n *\n * @category Components\n * @since 1.0.0\n */\nexport default Register.webComponent({\n tagName,\n createComponent,\n});\n"],"names":["tagName","createComponent","element","isImageScaled","isImagePositionLeft","Attributes.isLayout","isThemeDark","Attributes.isTheme","isThemeLight","isThemeMaryland","isDisplayHero","Attributes.isDisplay","isDisplayOverlay","isDisplaySticky","includesAnimation","Attributes.includesFeature","featureEvents","extractEventData","Composite","Slots","toElementVisual","image_default","Register.webComponent","Lifecycle.hooks","SlotWithDefaultStyling","Markup.create","highlight_default"],"mappings":"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"}
|