{"version":3,"sources":["webpack:///./src/components/FooterInfo/FooterInfo.tsx","webpack:///./src/components/FooterLinkList/FooterLinkList.tsx","webpack:///./src/components/FooterSoMe/FooterSoMe.tsx","webpack:///./src/modules/Footer/Footer.tsx","webpack:///./src/modules/Footer/index.ts","webpack:///./src/utils/gtag.ts","webpack:///./src/utils/dom.ts","webpack:///./src/utils/image-utils.ts","webpack:///./src/components/Contact/Contact.tsx","webpack:///./src/components/Accordion/Accordion.tsx"],"names":["FooterInfo","_ref","info","infoLinks","React","className","styles","footerInfo","Paragraph","marginBottom","tag","address","infoLinksWrapper","map","link","Link","Object","assign","key","href","internalLink","label","displayName","defaultProps","FooterLinkList","lists","getEventMeta","event","eventData","footerLinkList","list","index","concat","header","listWrapper","listHeader","size","weight","linksWrapper","links","linkItem","eventMeta","FooterSoMe","soMe","heading","text","image","cx","footerSoMe","footerLogoText","logoContainer","Image","contain","soMeContainer","Heading","level","soMeBlock","linkedIn","soMeItem","Icon","display","iconSrc","height","width","facebook","youtube","Footer","_React$Component","_classCallCheck","_callSuper","arguments","_inherits","_createClass","value","_this$props","this","props","linkLists","contact","MediaQuery","defaultMatches","query","matches","footer","top","Contact","phoneNumber","linkList","mobileFooter","Accordion","items","component","_defineProperty","ONLY_SERVER","global","trackEvent","eventLabel","window","gtmEvent","site_section","dataLayer","push","truncateString","string","length","substring","Error","DIMENSION_NAMES","aspectRatios","mobile","desktop","defaultBreakpoints","hd","breakpoints","xs","sm","md","lg","generateSizes","imageBreaks","undefined","maxWidth","queries","reduce","acc","breakpoint","breakpointSize","renderPhone","phoneContainer","phoneIcon","listItem","Button","secondary","darkBg","expandIcon","isActive","angleUp","angleDown","_this","_len","args","Array","_key","time","activeKey","setState","child","Panel","forceRender","accordion","state","Collapse","onChange","handleChange","getItems"],"mappings":"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","file":"static/scripts/41-c107befe13a1b6f036ba.js","sourcesContent":["import * as React from 'react'\nimport styles from './footerInfo-style.css'\nimport type { LinkViewModel } from '../../view-models/LinkViewModel'\nimport Link from '../Link/Link'\nimport Paragraph from '../Paragraph/Paragraph'\ntype Props = {\n infoLinks?: Array\n info?: string\n}\n\nfunction FooterInfo({ info, infoLinks }: Props) {\n return (\n
\n {info && (\n \n {info}\n \n )}\n\n
\n {infoLinks &&\n infoLinks.map((link) => (\n \n {link.label}\n \n ))}\n
\n
\n )\n}\n\nFooterInfo.displayName = 'FooterInfo'\nFooterInfo.defaultProps = {}\nexport default FooterInfo","import * as React from 'react'\nimport styles from './footerLinkList-style.css'\nimport type { FooterLinkListViewModel } from '../../view-models/FooterLinkListViewModel'\nimport Paragraph from '../Paragraph/Paragraph'\nimport Link from '../Link/Link'\nimport type { LinkViewModel } from '../../view-models/LinkViewModel'\ntype Props = {\n lists?: Array\n heading?: string\n}\n\nfunction FooterLinkList({ lists }: Props) {\n function getEventMeta(link: LinkViewModel) {\n return {\n event: 'footer-click',\n eventData: link.label,\n }\n }\n\n return (\n
\n {lists &&\n lists.map((list, index) =>\n list ? (\n
\n \n {list.header}\n \n
    \n {list.links.map((link) =>\n link ? (\n
  • \n \n {link.label}\n \n
  • \n ) : null,\n )}\n
\n
\n ) : null,\n )}\n
\n )\n}\n\nFooterLinkList.displayName = 'FooterLinkList'\nFooterLinkList.defaultProps = {}\nexport default FooterLinkList","import * as React from 'react'\nimport styles from './footerSoMe-style.css'\nimport type { LinkViewModel } from '../../view-models/LinkViewModel'\nimport Image from '../Image/Image'\nimport Heading from '../Heading/Heading'\nimport type { ImageViewModel } from '../../view-models/ImageViewModel'\nimport Link from '../Link/Link'\nimport Icon from '../Icon/Icon'\nimport { linkedIn, youtube, facebook } from '../../icons'\nimport cx from 'classnames'\ntype Props = {\n soMe?: {\n facebook?: LinkViewModel\n linkedIn?: LinkViewModel\n youtube?: LinkViewModel\n }\n heading?: string\n image?: ImageViewModel\n // @deprecated\n text?: string\n // @internal\n className?: string\n}\n\nfunction FooterSoMe({ soMe, text, heading, image, className }: Props) {\n function getEventMeta(link: LinkViewModel) {\n if (!link) return {}\n return {\n event: 'footer-click',\n eventData: link.label || link.href,\n }\n }\n\n return (\n
\n
\n {image && (\n
\n \n
\n )}\n
\n {heading && (\n \n {heading}\n \n )}\n {soMe && (\n
    \n {soMe.linkedIn && (\n
  • \n \n \n \n
  • \n )}\n {soMe.facebook && (\n
  • \n \n \n \n
  • \n )}\n {soMe.youtube && (\n
  • \n \n \n \n
  • \n )}\n
\n )}\n
\n
\n
\n )\n}\n\nFooterSoMe.displayName = 'FooterSoMe'\nFooterSoMe.defaultProps = {}\nexport default FooterSoMe","import cx from 'classnames'\nimport * as React from 'react'\n\nimport Accordion from '../../components/Accordion/Accordion'\nimport Contact from '../../components/Contact/Contact'\nimport FooterInfo from '../../components/FooterInfo/FooterInfo'\nimport FooterLinkList from '../../components/FooterLinkList/FooterLinkList'\nimport FooterSoMe from '../../components/FooterSoMe/FooterSoMe'\nimport MediaQuery from '../../components/MediaQuery/MediaQuery'\nimport type { FooterLinkListViewModel } from '../../view-models/FooterLinkListViewModel'\nimport type { ImageViewModel } from '../../view-models/ImageViewModel'\nimport type { LinkViewModel } from '../../view-models/LinkViewModel'\nimport styles from './footer-style.css'\n\ntype Props = {\n heading?: string\n text?: string\n image?: ImageViewModel\n soMe?: {\n facebook?: LinkViewModel\n linkedIn?: LinkViewModel\n youtube?: LinkViewModel\n }\n contact?: {\n phoneNumber?: string\n text?: string\n linkList?: Array\n header?: string\n }\n infoLinks?: Array\n info?: string\n linkLists: {\n links: Array\n header?: string\n }\n}\ntype State = {}\n\nclass Footer extends React.Component {\n static displayName = 'Footer'\n static defaultProps = {}\n\n render() {\n const { heading, text, image, infoLinks, info, linkLists, contact, soMe } = this.props\n\n return (\n \n {(matches) =>\n matches ? (\n
\n
\n \n {contact && (\n \n )}\n
\n \n {linkLists && }\n
\n ) : (\n
\n \n {contact && (\n
\n \n ),\n },\n ]}\n />\n
\n )}\n \n
\n ,\n },\n ]}\n />\n
\n
\n )\n }\n
\n )\n }\n}\n\nexport default Footer","export { default } from './Footer'\n\n/**\n * Should the component only render server side?\n * You can set this to true if the component is a pure static component.\n */\nexport const ONLY_SERVER = false","global.dataLayer = global.dataLayer || []\nexport type GtagEvent = {\n event?: string\n eventData?: string\n eventLabel?: string\n}\n\n/**\n * Track an event\n * Supply a callback, that gets triggered after the event is tracked\n */\nexport function trackEvent({ event, eventData, eventLabel }: GtagEvent) {\n if (typeof window === 'undefined') return\n const eventName = event ? `${window.site_section || 'pensam'}-${event}` : ''\n const gtmEvent = {\n event: eventName,\n 'event-data': eventData || '',\n 'event-label': eventLabel || '',\n }\n\n if (global.dataLayer && gtmEvent.event) {\n global.dataLayer.push(gtmEvent)\n } //\n // if (\n // process.env.NODE_ENV === 'development' &&\n // global.dataLayer &&\n // gtmEvent.event\n // ) {\n // console.log('dataLayer', global.dataLayer)\n // }\n}\n","export function scrollOffset(element, offset = 0, alignment = 'top') {\n const body = document.body\n const html = document.documentElement\n const elemRect = element.getBoundingClientRect()\n const clientHeight = html.clientHeight\n const documentHeight = Math.max(\n body.scrollHeight,\n body.offsetHeight,\n html.clientHeight,\n html.scrollHeight,\n html.offsetHeight,\n )\n let scrollPosition\n\n if (alignment === 'bottom') {\n scrollPosition = elemRect.bottom - clientHeight\n } else if (alignment === 'middle') {\n scrollPosition = elemRect.bottom - clientHeight / 2 - elemRect.height / 2\n } else {\n // top and default\n scrollPosition = elemRect.top\n }\n\n const maxScrollPosition = documentHeight - clientHeight\n return Math.min(scrollPosition + offset + window.pageYOffset, maxScrollPosition)\n}\n\n/**\n * Return true if child is contained in parent\n * @param parent {HTMLElement}\n * @param child {HTMLElement}\n * @returns {boolean}\n */\nexport function isDescendant(parent, child) {\n if (!child || !child.parentNode) return false\n let node = child.parentNode\n\n while (node != null) {\n if (node === parent) {\n return true\n }\n\n node = node.parentNode\n }\n\n return false\n}\nlet matchesFn\n\n/**\n * Find the closest element that matches the selector\n * @param el {HTMLElement}\n * @param selector {string}\n * @returns {HTMLElement}\n */\nexport function closest(el, selector) {\n if (!matchesFn) {\n // find vendor prefix\n ;[\n 'matches',\n 'webkitMatchesSelector',\n 'mozMatchesSelector',\n 'msMatchesSelector',\n 'oMatchesSelector',\n ].some((fn) => {\n if (typeof document.body[fn] === 'function') {\n matchesFn = fn\n return true\n }\n\n return false\n })\n }\n\n // traverse parents\n let parent\n let element = el\n\n while (element !== null) {\n parent = element.parentElement\n\n if (parent !== null && parent[matchesFn](selector)) {\n return parent\n }\n\n element = parent\n }\n\n return null\n}\n\n/**\n * Get the previous sibling DOM node to an element\n * @param node {HTMLElement}\n * @returns {HTMLElement}\n */\nexport function previousSibling(node) {\n if (!node) return null\n let element = node\n\n do {\n element = element.previousSibling\n if (!isIgnorable(element)) return element\n } while (element)\n\n return null\n}\n\n/**\n * Get the next sibling DOM node to an element\n * @param node {HTMLElement}\n * @returns {HTMLElement}\n */\nexport function nextSibling(node) {\n if (!node) return null\n let element = node\n\n do {\n element = element.nextSibling\n if (element && !isIgnorable(element)) return element\n } while (element)\n\n return null\n}\n\n/**\n * Ignore commment and text nodes.\n * @param node\n * @returns {*}\n */\nfunction isIgnorable(node) {\n if (!node) return null\n return node.nodeType === 8 || (node.nodeType === 3 && isAllWs(node))\n}\n\n/**\n * Ignore all whitespace nodes\n * @param node\n * @returns {*}\n */\nfunction isAllWs(node) {\n if (!node) return null\n // Use ECMA-262 Edition 3 String and RegExp features\n return !/[^\\t\\n\\r ]/.test(node.textContent)\n}\n\nexport function getNodePath(node) {\n if (!node) return null\n let currentNode = node\n let path\n\n while (currentNode.parentNode) {\n const tag = currentNode.tagName.toLowerCase()\n const classes = currentNode.getAttribute('class')\n const className = classes ? `.${classes.trim().split(' ').join('.')}` : ''\n\n if (path) {\n path = `${tag}${className} > ${path}`\n } else {\n path = `${tag}${className}`\n }\n\n // Move up in the tree\n currentNode = currentNode.parentNode\n }\n\n return path\n}\nexport function insertAfter(newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling)\n}\nexport function truncateString(string, length) {\n if (string.length > length) {\n if (typeof string === 'string' && typeof length === 'number') {\n return string.substring(0, length) + '\\u2026'\n } else {\n throw new Error('Function truncateString take args @string, @number')\n }\n } else return string\n}\nexport default {\n closest,\n isDescendant,\n previousSibling,\n nextSibling,\n scrollOffset,\n getNodePath,\n insertAfter,\n truncateString,\n}","export type ImageRatio = 'original' | 'dim16_9' | 'dim3_2'\nexport const DIMENSION_NAMES = ['xs', 'sm', 'md', 'lg', 'hd']\nexport const aspectRatios = {\n mobile: 10 / 23,\n desktop: 10 / 27,\n}\n\n/** Max image width at a given breakpoint. */\nexport type ImageBreakpoints = {\n xs?: string\n sm?: string\n md?: string\n lg?: string\n hd?: string\n}\nexport const IMAGE_WIDTHS = [150, 300, 560, 660, 750, 880, 1024, 1350, 1440, 1720, 1920, 2048, 2700]\nexport type ImageSizes = {\n breakpoints?: ImageBreakpoints\n maxWidth: string | number\n}\n// If image breaks are undefined, make sure the width tops out 100 viewport width\nconst defaultBreakpoints = {\n hd: '100vw',\n}\nconst breakpoints = {\n xs: 0,\n sm: 48,\n // 48*16 = 768px\n md: 64,\n // 64*16 = 1024px\n lg: 75,\n // 75*16 = 1200px\n hd: 90, // 88*16 = 1408px\n}\n\n/**\n * Converts a string number with a known unit type, to a unitless number in px size\n **/\nexport function sizeToNumber(size: string | number): number {\n if (!size) return 0\n if (typeof size === 'number') return size\n if (size.endsWith('px')) return parseInt(size.substr(0, size.length - 2), 10)\n if (size.endsWith('em')) return parseInt(size.substr(0, size.length - 2), 10) * 16\n if (size.endsWith('vw')) return (parseInt(size.substr(0, size.length - 2), 10) * 1440) / 100\n if (size.endsWith('rem')) return parseInt(size.substr(0, size.length - 3), 10) * 16\n return parseInt(size, 10)\n}\n\n/**\n * Generate the actual ratio for the the known Image ratios\n **/\nexport function calculateRatio(width: number = 16, height: number = 9, aspect: number) {\n return Math.min(aspect, height === 0 ? 1 : height / width === 0 ? 1 : width) // switch (aspect) {\n // case 'dim3_2':\n // return 2 / 3\n // case 'dim16_9':\n // return 9 / 16\n // default:\n // return height / width\n // }\n}\n\n/**\n * Generate sizes for images, while respecting Breakpoints\n **/\nexport function generateSizes(\n imageBreaks: ImageBreakpoints = defaultBreakpoints,\n maxWidth: string | number = '1440px',\n) {\n const queries = DIMENSION_NAMES.reduce((acc, breakpoint, index) => {\n // If the breakpoint is 0, or undefined, take the next dimension\n const maxWidth = breakpoints[breakpoint] || breakpoints[DIMENSION_NAMES[index + 1]]\n const breakpointSize = imageBreaks[breakpoint]\n\n if (breakpointSize) {\n return `${acc}(max-width: ${maxWidth}em) ${breakpointSize}, `\n }\n\n return acc\n }, '')\n return queries + (typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth)\n}","import * as React from 'react'\nimport styles from './contact-style.css'\nimport type { LinkViewModel } from '../../view-models/LinkViewModel'\nimport Heading from '../Heading/Heading'\nimport Icon from '../Icon/Icon'\nimport { phoneIcon } from '../../icons'\nimport cx from 'classnames'\nimport Button from '../Button/Button'\ntype Props = {\n phoneNumber?: string\n linkList?: Array\n // @deprecated\n text?: string\n // @internal\n className?: string\n}\nexport const renderPhone = (phoneNumber: any, className?: string) => {\n if (!phoneNumber) return null\n return (\n
\n \n \n {phoneNumber}\n \n
\n )\n}\n\nfunction Contact({ phoneNumber, linkList, text, className }: Props) {\n return (\n
\n {renderPhone(phoneNumber)}\n
    \n {linkList &&\n linkList.map((link) => (\n
  • \n
  • \n ))}\n
\n
\n )\n}\n\nContact.displayName = 'Contact'\nContact.defaultProps = {}\nexport default Contact","import cx from 'classnames'\nimport Collapse, { Panel } from 'rc-collapse'\nimport * as React from 'react'\n\nimport { angleDown, angleUp } from '../../icons'\nimport type { AccordionItemViewModel } from '../../view-models/AccordionItemViewModel'\nimport Icon from '../Icon/Icon'\nimport styles from './accordion-style.css'\ntype Props = {\n items: Array\n accordion?: boolean\n className?: string\n}\ntype State = {\n time: number\n activeKey: Array\n}\n\nconst expandIcon = ({ isActive }) => {\n return (\n
\n \n
\n )\n}\n\nclass Accordion extends React.Component {\n static displayName = 'Accordion'\n static defaultProps = {}\n state = {\n time: 4,\n activeKey: [],\n }\n\n handleChange = (activeKey: Array) => {\n this.setState({\n activeKey,\n })\n }\n\n getItems(): Array | null | undefined {\n const { items } = this.props\n if (!items) return null\n\n return items.map((child, index) => (\n \n {child.component}\n \n ))\n }\n\n render() {\n const { accordion, className } = this.props\n const activeKey = this.state.activeKey\n\n return (\n
\n \n {this.getItems()}\n \n
\n )\n }\n}\n\nexport default Accordion"],"sourceRoot":""}