{"version":3,"file":"static/chunks/2525.1bbd43e1dbcd283f.js","mappings":"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","sources":["webpack://_N_E/../design-system/src/components/primitives/component-header/component-header.tsx","webpack://_N_E/../design-system/src/utils/document.ts","webpack://_N_E/../design-system/src/components/primitives/cta-link/cta-link.tsx","webpack://_N_E/../design-system/src/components/primitives/link/link.tsx","webpack://_N_E/../design-system/src/utils/external.ts","webpack://_N_E/../design-system/src/sites/home/keyword-scroll-list/keyword-scroll-list.tsx","webpack://_N_E/./src/contentful/components/blocks/keyword-scroll-list.contentful.tsx","webpack://_N_E/./src/contentful/lib/create-contentful-component.tsx","webpack://_N_E/./src/hooks/use-data-layer.ts","webpack://_N_E/../design-system/src/components/primitives/component-header/component-header.scss?77bc","webpack://_N_E/../design-system/src/components/primitives/cta-link/cta-link.scss?ddf4","webpack://_N_E/../design-system/src/sites/home/keyword-scroll-list/keyword-scroll-list.scss?30d3","webpack://_N_E/../../node_modules/clsx/dist/clsx.mjs","webpack://_N_E/"],"sourcesContent":["import \"./component-header.scss\";\n\nimport { ReactNode } from \"react\";\nimport cn from \"clsx\";\nimport { Alignment, EditAttributes, Position } from \"design-system/types/types\";\nimport { CtaLink } from \"design-system/components/primitives/cta-link/cta-link\";\n\nexport type BorderPosition = Exclude;\n\nexport interface ComponentHeaderProps {\n align?: Alignment;\n description?: ReactNode;\n isSmall?: boolean;\n link?: string;\n linkText?: string;\n ariaLabel?: string;\n title?: string;\n className?: string;\n anchored?: boolean;\n borderPosition?: BorderPosition;\n HeadingLevel?: \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n titleId?: string;\n\n editAttributes?: {\n title?: EditAttributes;\n description?: EditAttributes;\n linkText?: EditAttributes;\n };\n}\n\n/**\n * Header for various components\n *\n * ## See it in use on...\n * - The [big style grid list component](/story/content-components-blocks-grid-lists-big-style--with-media-and-header)\n *\n * - **`id: P-009-000-00`**\n */\nexport function ComponentHeader({\n align,\n className,\n description,\n isSmall = true,\n link,\n linkText,\n ariaLabel,\n title,\n anchored,\n borderPosition = \"top\",\n HeadingLevel = \"h2\",\n titleId,\n editAttributes,\n}: ComponentHeaderProps) {\n if (!title) return null;\n\n const ctaLink = link ? (\n \n {linkText}\n \n ) : null;\n\n return (\n \n \n
\n
\n \n {title}\n \n\n {description && (\n \n {description}\n \n )}\n
\n\n {ctaLink &&\n (isSmall ? (\n ctaLink\n ) : (\n
{ctaLink}
\n ))}\n
\n \n \n );\n}\n","const DOC_EXTENSIONS = [\n \".pdf\",\n \".doc\",\n \".docx\",\n \".xls\",\n \".xlsx\",\n \".ppt\",\n \".pptx\",\n];\n\n/**\n * A link is a document if its pathname ends with a document extension.\n */\nexport function isDocumentLink(link: string): boolean {\n if (!link) return false;\n\n let pathname: string;\n\n try {\n const url = new URL(link);\n pathname = url.pathname;\n } catch (e) {\n pathname = link;\n }\n\n return DOC_EXTENSIONS.some((extension) => pathname.endsWith(extension));\n}\n","import \"./cta-link.scss\";\n\nimport { MouseEvent, ReactNode, forwardRef } from \"react\";\nimport cn from \"clsx\";\nimport { Icon, IconName } from \"design-system/components/icons/icon\";\nimport { EditAttributes } from \"design-system/types/types\";\nimport { Link } from \"../link/link\";\nimport { isDocumentLink } from \"design-system/utils/document\";\nimport { isExternalLink } from \"design-system/utils/external\";\nimport { DataLayerEvent, useDataLayer } from \"frontend/hooks/use-data-layer\";\n\nexport type CtaLinkType = \"primary-button\" | \"secondary-button\" | \"link\";\n\nexport interface CtaLinkProps {\n children?: ReactNode;\n href?: string;\n onClick?: (e: MouseEvent) => void;\n dataLayer?: DataLayerEvent;\n type?: CtaLinkType;\n className?: string;\n isSmall?: boolean;\n isNested?: boolean;\n icon?: IconName;\n hideIcon?: boolean;\n \"aria-label\"?: string;\n id?: string;\n \"aria-selected\"?: boolean;\n \"aria-describedby\"?: string;\n tabIndex?: number;\n editAttributes?: EditAttributes;\n}\n\n/**\n * Simple link with icon used in various components\n *\n * - **`id: P-010-000-09`**\n */\nexport const CtaLink = forwardRef<\n HTMLAnchorElement & HTMLButtonElement,\n CtaLinkProps\n>(\n (\n {\n children,\n className,\n href,\n onClick,\n dataLayer,\n type = \"link\",\n isSmall,\n isNested,\n icon,\n hideIcon,\n \"aria-label\": ariaLabel,\n \"aria-selected\": ariaSelected,\n \"aria-describedby\": ariaDescribedBy,\n id,\n tabIndex,\n editAttributes,\n },\n ref,\n ) => {\n let isExternal: boolean | undefined;\n\n if (href) {\n isExternal = isExternalLink(href);\n }\n\n // Initialize icon if not provided\n if (!icon && href) {\n icon = isDocumentLink(href) ? \"download\" : \"arrow\";\n }\n\n const { pushDataLayer } = useDataLayer();\n\n const ctaClassNames = cn(\n \"hbs-cta-link\",\n isSmall && \"hbs-cta-link--small\",\n `hbs-cta-link--${type}`,\n isNested ? \"hbs-cta-link--nested\" : \"\",\n className,\n );\n\n const iconClassNames = cn(\n \"hbs-cta-link__icon\",\n `hbs-cta-link__icon--${icon?.toLowerCase() || \"\"}`,\n isExternal && \"hbs-cta-link__icon--external\",\n );\n\n // Split string into first words & last word to make sure icon doesn't wrap on its own\n let lastWord;\n let firstWords;\n if (typeof children === \"string\") {\n const words = children.trim().split(\" \");\n lastWord = words.pop();\n firstWords = words.join(\" \");\n }\n\n const withoutSplitWords = (\n \n {children}\n {!hideIcon && icon && }\n \n );\n\n const commonProps = {\n className: ctaClassNames,\n ref,\n id,\n \"aria-selected\": ariaSelected,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-label\": ariaLabel,\n tabIndex,\n };\n\n if (onClick) {\n if (dataLayer) {\n window.addEventListener(\"click\", () => {\n pushDataLayer(dataLayer);\n });\n }\n\n return (\n \n );\n }\n\n if (\n typeof children !== \"string\" ||\n type === \"primary-button\" ||\n type === \"secondary-button\"\n ) {\n let handleOnClick = undefined;\n if (dataLayer) {\n handleOnClick = () => {\n if (dataLayer.event_data) {\n // eslint-disable-next-line camelcase\n dataLayer.event_data.program_action = dataLayer.event_data\n .program_action\n ? dataLayer.event_data.program_action\n : \"program cta click\";\n pushDataLayer(dataLayer);\n }\n };\n }\n return (\n \n {withoutSplitWords}\n \n );\n }\n\n const withSplitWords = (\n \n {firstWords}{\" \"}\n \n {lastWord}\n {!hideIcon && icon && }\n \n \n );\n\n if (isNested) {\n return (\n \n {withSplitWords}\n \n );\n }\n\n return (\n \n {withSplitWords}\n \n );\n },\n);\n","import { EditAttributes } from \"design-system/types/types\";\nimport { AnchorHTMLAttributes, forwardRef } from \"react\";\n\nexport interface LinkProps extends AnchorHTMLAttributes {\n editAttributes?: EditAttributes;\n}\n\nexport const Link = forwardRef(\n (\n { href, target, children, className, rel, editAttributes, ...props },\n ref,\n ) => {\n if (!target) target = \"_blank\";\n\n if (href?.startsWith(\"/\") || href?.includes(\".hbs.edu\")) {\n if (href.includes(\"webassets.hbs.edu\")) target = \"_blank\";\n else target = \"_self\";\n }\n\n return (\n // eslint-disable-next-line react/forbid-elements\n \n {children}\n \n );\n },\n);\n","/**\n * A link is external if host does not contain hbs.edu.\n */\nexport function isExternalLink(href: string): boolean {\n if (!href) {\n return false;\n }\n\n try {\n const url = new URL(href);\n return !url.host.endsWith(\"hbs.edu\");\n } catch (error) {\n return false;\n }\n}\n","import \"./keyword-scroll-list.scss\";\n\nimport { useEffect, useState, CSSProperties, useRef } from \"react\";\nimport cn from \"clsx\";\nimport {\n ComponentHeader,\n ComponentHeaderProps,\n} from \"design-system/components/primitives/component-header/component-header\";\n\nimport { EditAttributes } from \"design-system/types/types\";\n\nexport interface KeywordProps {\n label?: string;\n\n editAttributes?: EditAttributes;\n}\n\nexport interface ElementScroll {\n top: number;\n bottom: number;\n}\n\nexport interface KeywordScrollListProps {\n keywords: Array;\n headerContent?: ComponentHeaderProps;\n}\n\n/**\n * This component is only intended to be used on the homepage.\n *\n * ## See it in use on...\n * - The [homepage](/story/example-pages-homepage--homepage)\n */\n\nexport function KeywordScrollList({\n keywords,\n headerContent,\n}: KeywordScrollListProps) {\n const ref = useRef(null);\n const [elementScroll] = useState({ top: 0, bottom: 0 });\n\n // Sort keywords once on component initialization\n const [sortedKeywords, setSortedKeywords] = useState>([]);\n\n useEffect(() => {\n setSortedKeywords([...keywords].sort(() => Math.random() - 0.5));\n }, [keywords]); // This ensures that sorting happens only once when the component mounts or when keywords prop changes\n\n const numWordsOnRow =\n Math.floor(sortedKeywords.length / 3) <= 3\n ? Math.floor(sortedKeywords.length / 3)\n : 3;\n\n let sliceIndex = 0;\n\n const [row1, row2, row3] = Array.from({ length: 3 }).reduce<\n [Array, Array, Array]\n >(\n (rows, _, index) => {\n const slicedKeywords = sortedKeywords.slice(\n sliceIndex,\n sliceIndex + numWordsOnRow,\n );\n\n // If keywords are shorter than approximate number of characters needed to\n // fill the space, add more keywords\n while (\n slicedKeywords.map((keyword) => keyword.label).join().length < 50\n ) {\n sliceIndex = (sliceIndex + 1) % sortedKeywords.length;\n const nextKeyword = sortedKeywords[sliceIndex];\n\n if (nextKeyword) {\n slicedKeywords.push(nextKeyword);\n } else {\n break;\n }\n }\n\n rows[index] = slicedKeywords;\n\n sliceIndex = (sliceIndex + numWordsOnRow) % sortedKeywords.length;\n\n return rows;\n },\n [[], [], []],\n );\n\n const [scrollPercentage, setScrollPercentage] = useState(0);\n const [windowWidth, setWindowWidth] = useState(0);\n\n function updateVariables() {\n if (ref.current) {\n const elBoundingBox = ref.current.getBoundingClientRect();\n const elHeight = elBoundingBox.height;\n const windowHeight = window.innerHeight;\n const elTop = elBoundingBox.top;\n const speedControl = 0.65;\n\n if (elTop - windowHeight <= 0 && elTop + elHeight > 0) {\n setScrollPercentage(\n (1 - (elTop + elHeight) / (elHeight + windowHeight)) * speedControl,\n );\n setWindowWidth(window.innerWidth);\n }\n }\n }\n\n useEffect(() => {\n const prefersReducedMotion = window.matchMedia(\n \"(prefers-reduced-motion: reduce)\",\n );\n if (prefersReducedMotion?.matches === true) {\n return;\n }\n updateVariables();\n\n function onScroll() {\n updateVariables();\n }\n\n window.addEventListener(\"scroll\", onScroll);\n return () => window.removeEventListener(\"scroll\", onScroll);\n }, [elementScroll.bottom, elementScroll.top]);\n\n const wrapperClass = cn(\n \"hbs-global-align-full\",\n \"hbs-component--keyword-scroll-list\",\n );\n\n return (\n \n {headerContent && }\n\n
\n {[row1, row2, row3].map((row, index) => (\n

\n {row.map((keyword, i) => (\n \n {keyword.label}\n \n ))}\n

\n ))}\n
\n\n \n On scroll animation of three rows of HBS Programs and Initiatives.\n \n \n );\n}\n","import { KeywordScrollListEntry } from \"frontend/contentful/schema/blocks\";\nimport {\n KeywordScrollList,\n type KeywordProps,\n} from \"design-system/sites/home/keyword-scroll-list/keyword-scroll-list\";\nimport { createContentfulComponent } from \"frontend/contentful/lib/create-contentful-component\";\nimport { useContentful } from \"frontend/hooks/use-contentful\";\n\nexport const ContentfulKeywordScrollList =\n createContentfulComponent(\n ({ entry, createEditAttributes }) => {\n const { getEntries } = useContentful();\n\n let keywords: Array = [];\n\n if (entry.fields?.textKeywords) {\n keywords = entry.fields.textKeywords.map((label) => ({\n label,\n editAttributes: createEditAttributes({\n entry,\n fieldId: \"textKeywords\",\n }),\n }));\n }\n\n const keywordEntries = getEntries(entry.fields.linkKeywords);\n\n if (keywordEntries) {\n keywords = keywordEntries.map((link) => ({\n label: link.fields.text,\n editAttributes: createEditAttributes({\n entry: link,\n fieldId: \"title\",\n }),\n }));\n }\n\n return ;\n },\n );\n","import { ContentfulEntry, EntryRef } from \"frontend/contentful/schema/sys\";\nimport { useContentful } from \"frontend/hooks/use-contentful\";\nimport { ComponentType, ReactNode } from \"react\";\nimport { CreateEditAttributesFn } from \"./edit-attributes-factory\";\n\nexport interface ContentfulComponentProps<\n E extends ContentfulEntry,\n O = Record,\n> {\n entry: E;\n options: O | undefined;\n createEditAttributes: CreateEditAttributesFn;\n}\n\nexport type ContentfulComponent = (\n props: ContentfulComponentProps,\n) => ReactNode;\nexport interface ContentfulComponentRenderProps<\n E extends ContentfulEntry,\n O = void,\n> {\n entry?: EntryRef;\n options?: O;\n}\nexport type ContentfulFactoryComponent<\n E extends ContentfulEntry,\n O = void,\n> = ComponentType>;\n\nexport function createContentfulComponent(\n Component: ContentfulComponent,\n) {\n const ContentfulComponent: ContentfulFactoryComponent = ({\n entry: ref,\n options,\n }) => {\n const { getEntry, createEditAttributes } = useContentful();\n\n const entry = getEntry(ref);\n\n if (!entry?.fields || !entry?.metadata || !entry?.sys.id) return null;\n\n return (\n \n );\n };\n\n return ContentfulComponent;\n}\n","type DataLayerEventType =\n | \"search_results\"\n | \"search_result_click\"\n | \"no_search_results\"\n | \"video\"\n | \"program_finder_comparison\"\n | \"program_finder_result_click\"\n | \"no_program_finder_results\"\n | \"program_finder_results\"\n | \"page_load\"\n | \"program_page_navigation\"\n | \"bento_box_search_results\";\n\nexport interface DataLayerEvent {\n event: DataLayerEventType;\n event_data: DataLayerEventData;\n}\n\nexport interface PageProperties {\n story_id?: string;\n program_acronym?: string;\n pub_date?: string;\n story_type?: string;\n parent_topic?: string;\n child_topic?: string;\n related_topics?: string;\n related_faculty?: string;\n authors?: string;\n related_industry?: string;\n related_geo?: string;\n}\n\nexport interface DataLayerEventData

{\n profile_code?: string;\n program_page?: P;\n article_blog?: P;\n participant_story?: P;\n video_title?: string | number;\n video_duration?: number;\n video_milestone?: number;\n video_type?: string;\n program_name?: string;\n program_action?: string;\n compared_programs?: string;\n facet_filter_category?: string;\n facet_filter_value?: string;\n facet_filter_full?: string;\n facet_filter_depth?: number;\n search_term?: string;\n search_results_count?: number;\n search_type?: string;\n search_type_ahead?: boolean;\n search_numresults?: number;\n search_result_title?: string;\n search_result_page_url?: string;\n search_result_url?: string;\n search_result_position?: number;\n search_result_page?: number;\n search_result_tab?: string;\n top_search?: boolean;\n top_search_title?: string;\n top_search_url?: string;\n top_search_position?: number;\n in_page_navigation_item?: string;\n bento_box_category?: string;\n bento_box_numresults?: string;\n bento_box_category_clicked?: string;\n}\n\nexport type PushDataLayerFn = (data: DataLayerEvent) => void;\n\nexport function useDataLayer() {\n return {\n pushDataLayer: (data: DataLayerEvent) => {\n window.dataLayer.push(data);\n },\n };\n}\n","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t