{"version":3,"file":"static/chunks/2722.9595675dc5d24204.js","mappings":"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","sources":["webpack://_N_E/./src/contentful/lib/create-contentful-component.tsx","webpack://_N_E/../design-system/src/sites/home/keyword-scroll-list/keyword-scroll-list.scss?cbe5","webpack://_N_E/./src/hooks/use-data-layer.ts","webpack://_N_E/../design-system/src/components/primitives/component-header/component-header.tsx","webpack://_N_E/../design-system/src/components/primitives/component-header/component-header.scss?e7c4","webpack://_N_E/../design-system/src/components/primitives/link/link.tsx","webpack://_N_E/../design-system/src/utils/external.ts","webpack://_N_E/../../node_modules/clsx/dist/clsx.mjs","webpack://_N_E/../design-system/src/components/primitives/cta-link/cta-link.scss?4e0c","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/sites/home/keyword-scroll-list/keyword-scroll-list.tsx","webpack://_N_E/./src/contentful/components/blocks/keyword-scroll-list.contentful.tsx"],"sourcesContent":["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","// extracted by mini-css-extract-plugin","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 | \"info_box_item_click\";\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 search_result_category?: 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 explore_search?: boolean;\n explore_search_category?: string;\n explore_search_info_box?: string;\n explore_search_info_box_clicked?: string;\n infobox_name?: string;\n infobox_category?: string;\n infobox_item_type?: string;\n infobox_item_url?: string;\n infobox_item_link_text?: 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","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","// extracted by mini-css-extract-plugin","import { EditAttributes } from \"design-system/types/types\";\nimport { DataLayerEvent } from \"frontend/hooks/use-data-layer\";\nimport { AnchorHTMLAttributes, forwardRef, MouseEventHandler } from \"react\";\n\nexport interface DataOptions {\n parentTitle?: string;\n programName?: string;\n imageTitle?: string;\n searchTerm?: string;\n position?: number;\n searchCategory?: string;\n}\n\nexport interface LinkProps extends AnchorHTMLAttributes {\n editAttributes?: EditAttributes;\n dataLayer?: DataLayerEvent;\n dataParentTitle?: string;\n onClick?: MouseEventHandler;\n}\n\nexport const Link = forwardRef(\n (\n {\n href,\n target,\n children,\n className,\n rel,\n onClick,\n editAttributes,\n dataLayer,\n ...props\n },\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 const handleOnClick: MouseEventHandler = (event) => {\n /* eslint-disable camelcase */\n if (\n dataLayer?.event_data.explore_search &&\n !dataLayer.event_data.explore_search_info_box_clicked\n ) {\n const title = typeof children === \"string\" ? children.trim() : \"\";\n dataLayer.event_data.explore_search_info_box_clicked = title;\n }\n /* eslint-enable camelcase */\n if (onClick) {\n // pushDataLayer gets called at the parent layer to prevent double firing\n onClick(event);\n }\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","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 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 const title = typeof children === \"string\" ? children.trim() : \"\";\n if (\n dataLayer?.event_data &&\n dataLayer.event.includes(\"program_finder\")\n ) {\n /* eslint-disable camelcase */\n dataLayer.event_data.program_action = dataLayer.event_data\n .program_action\n ? dataLayer.event_data.program_action\n : \"program cta click\";\n dataLayer.event_data.program_name = ariaLabel;\n }\n if (dataLayer.event_data.explore_search) {\n dataLayer.event_data.explore_search_info_box_clicked = title;\n }\n if (dataLayer.event === \"info_box_item_click\") {\n dataLayer.event_data.infobox_item_link_text = title;\n dataLayer.event_data.infobox_item_url = href;\n }\n /* eslint-enable camelcase */\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 \"./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"],"names":["createContentfulComponent","Component","entry","ref","options","getEntry","createEditAttributes","useContentful","fields","metadata","sys","id","useDataLayer","pushDataLayer","window","dataLayer","push","data","ComponentHeader","align","className","description","isSmall","link","linkText","ariaLabel","title","anchored","borderPosition","HeadingLevel","titleId","editAttributes","ctaLink","CtaLink","href","div","cn","span","Link","forwardRef","target","children","rel","onClick","props","startsWith","includes","a","handleOnClick","event_data","explore_search","explore_search_info_box_clicked","trim","event","isExternalLink","URL","host","endsWith","error","DOC_EXTENSIONS","isExternal","lastWord","firstWords","type","isNested","icon","hideIcon","ariaSelected","ariaDescribedBy","tabIndex","isDocumentLink","pathname","e","some","extension","ctaClassNames","iconClassNames","toLowerCase","words","split","pop","join","withoutSplitWords","Icon","name","commonProps","addEventListener","button","undefined","program_action","program_name","infobox_item_link_text","infobox_item_url","withSplitWords","aria-describedby","aria-label","KeywordScrollList","keywords","headerContent","useRef","elementScroll","useState","top","bottom","sortedKeywords","setSortedKeywords","useEffect","sort","Math","random","numWordsOnRow","floor","length","sliceIndex","row1","row2","row3","Array","from","reduce","rows","_","index","slicedKeywords","slice","map","keyword","label","nextKeyword","scrollPercentage","setScrollPercentage","windowWidth","setWindowWidth","updateVariables","current","elBoundingBox","getBoundingClientRect","elHeight","height","windowHeight","innerHeight","elTop","speedControl","innerWidth","prefersReducedMotion","matchMedia","matches","onScroll","removeEventListener","wrapperClass","data-chromatic","data-region","style","aria-hidden","row","p","i","ContentfulKeywordScrollList","getEntries","textKeywords","fieldId","keywordEntries","linkKeywords","text"],"sourceRoot":"","ignoreList":[7]}