{"version":3,"file":"static/js/773.0ac03623.chunk.js","mappings":"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","sources":["components/article/ArticleHeader/ArticleHeader.js","components/article/ArticleTextBlock/ArticleTextBlock.js","utilities/htmlTableParser.js","components/common/CellRenderer/CellRenderer.js","components/common/DynamicTable/DynamicTable.js","assets/plus.svg","assets/minus.svg","components/common/FaqsList/FaqsList.js","components/common/NumberCallouts/NumberCallouts.js","components/common/Resource/DatasetCard.js","components/common/Resource/ResourceCardHeading.js","components/common/Resource/ResourceHero.js","components/common/Resource/ResourceJumbo.js","components/common/Resource/ResourceSmall.js","webpack://wddse-spa/./src/components/common/Resource/ResourceSmallCarousel.scss?b23d","components/common/Resource/ResourceSmallCarousel.js","components/icons/CarouselArrow.js","components/pages/ArticlePage/useFetchArticle.js","components/article/ArticleResources/ArticleResources.js","components/article/ArticleMedia/ArticleMedia.js","components/common/ImageText/ImageText.js","components/article/ArticleQuote/ArticleQuote.js","components/article/ArticleKeyFindings/ArticleKeyFindings.js","components/article/ArticleCitationsList/ArticleCitation.js","components/article/ArticleCitationsList/ArticleCitationsList.js","components/article/ArticleDictionary/ArticleDictionary.js","webpack://wddse-spa/./src/components/article/ArticleDataStoryCarousel/ArticleDataStoryCarousel.scss?63da","components/article/ArticleDataStoryCarousel/ArticleDataStoryCarousel.js","components/article/ArticleSection/ArticleSection.js","components/pages/ArticlePage/DataResourcePage.js","components/article/ArticleImageRightHeader/ArticleImageRightHeader.js","components/pages/ArticlePage/StoryPage.js","components/icons/CaretDownIcon.js","components/icons/CaretUpIcon.js","assets/fontawesome/regular/magnifying-glass.svg","components/article/ArticleSearchBox/stateUpdaters.js","webpack://wddse-spa/./src/components/article/ArticleSearchBox/ArticleSearchBox.scss?092e","components/article/ArticleSearchBox/ArticleSearchBox.js","utilities/typeheadUtilities.js","components/pages/ArticlePage/DataDictionaryPage.js","components/pages/ArticlePage/ArticlePageContainer.js"],"sourcesContent":["\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport Text from '../../common/Text/Text'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\n\nimport './ArticleHeader.scss'\n\nconst ArticleHeader = ({\n header,\n leftColOffset\n}) => (\n <div className='ArticleHeader'>\n <ComponentShell leftColOffset={leftColOffset}>\n <Text typeFace='02 H2/Black/L' className='ArticleHeader__text'>{header}</Text>\n </ComponentShell>\n </div>\n)\n\nArticleHeader.propTypes = {\n header: PropTypes.string.isRequired,\n leftColOffset: PropTypes.number\n}\n\nArticleHeader.defaultProps = {\n leftColOffset: 0\n}\n\nexport default ArticleHeader\n","\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport Container from 'react-bootstrap/Container'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport Text from '../../common/Text/Text'\nimport RichTextField from '../../common/RichTextField/RichTextField'\nimport { removeEmptyHtmlElement } from '../../../utilities/displayUtilities'\n\nimport './ArticleTextBlock.scss'\n\nconst ArticleTextBlock = ({\n text,\n footnotes,\n subtitle = '',\n leftColOffset\n}) => (\n <div className='ArticleTextBlock'>\n <Container>\n <Row>\n <Col lg={{ offset: leftColOffset }}>\n {subtitle && subtitle.trim().length > 0 &&\n <Text typeFace='05 H5/Black/Regular/L' className='ArticleTextBlock__subtitle'>{subtitle}</Text>}\n <RichTextField className='ArticleTextBlock__body' content={removeEmptyHtmlElement(text, 'p')} />\n {footnotes && (\n <Text domElement='div' typeFace='Small Text/MedGray'>\n <RichTextField className='ArticleTextBlock__footnotes' content={footnotes} />\n </Text>\n )}\n </Col>\n </Row>\n </Container>\n </div>\n)\n\nArticleTextBlock.propTypes = {\n subtitle: PropTypes.string,\n text: PropTypes.node.isRequired,\n footnotes: PropTypes.string,\n leftColOffset: PropTypes.number\n}\n\nArticleTextBlock.defaultProps = {\n leftColOffset: 0\n}\nexport default ArticleTextBlock\n","/*\n Module to parse WYSWIG table data sent from the backend\n Assumed structure is a table HTML with no thead.\n*/\n\n// method: convert string to DOM then parse\n// returns an array of rows with headers at index 0\nfunction parseHtmlTable (tableString) {\n const parser = new DOMParser() // eslint-disable-line\n const htmlDoc = parser.parseFromString(tableString, 'text/html')\n const final = []\n const rows = htmlDoc.querySelectorAll('tr')\n\n rows.forEach(row => {\n final.push(parseRowValues(row))\n })\n\n return final\n}\n\n// extract row cell values into an array\nfunction parseRowValues (row) {\n const values = []\n\n for (let x = 0; x < row.children.length; x++) {\n const rowValue = row.children[x].innerHTML\n values.push(sanitizeRowValue(rowValue))\n }\n\n return values\n}\n\n// remove unwanted characters from row value\nfunction sanitizeRowValue (value = '') {\n return value.replace(/ /g, ' ')\n}\n\nexport default parseHtmlTable\n","import React from 'react'\nimport cx from 'classnames'\nimport PropTypes from 'prop-types'\nimport RichTextField from '../RichTextField/RichTextField'\n\nimport './CellRenderer.scss'\n\nconst CellRenderer = ({ column, size, type, className }) => {\n switch (type) {\n case 'header':\n return (\n <th style={size && { width: size }} className={cx('CellRenderer__cell', className || 'default-header')}>\n <RichTextField content={column} />\n </th>\n )\n default:\n return (\n <td style={size && { width: size }} className={cx('CellRenderer__cell', className || 'default-cell')}>\n <RichTextField content={column} />\n </td>\n )\n }\n}\n\nCellRenderer.propTypes = {\n className: PropTypes.string,\n column: PropTypes.string,\n type: PropTypes.string,\n size: PropTypes.number\n}\n\nexport default CellRenderer\n","import React, { PureComponent } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport memoizeOne from 'memoize-one'\nimport Text from '../Text/Text'\nimport RichTextField from '../RichTextField/RichTextField'\nimport ComponentShell from '../ComponentShell/ComponentShell'\nimport parseHtmlTable from '../../../utilities/htmlTableParser'\nimport config from '../../../config'\nimport get from 'lodash/get'\nimport withDisplayContext from '../../../hocs/withDisplayContext/withDisplayContext'\nimport CellRenderer from '../CellRenderer/CellRenderer'\nimport './DynamicTable.scss'\n\n// defines the table wrapper maximum width\nconst {\n dynamicTableOverflowWidthArticle,\n dynamicTableOverflowWidthInteractive,\n dynamicTableColumnMaximum,\n dynamicTableColumnMinimum\n} = config\n\nconst ARTICLE_CONTEXT = 'string'\nconst INTERACTIVE_CONTEXT = 'object'\n\nclass DynamicTable extends PureComponent {\n constructor (props) {\n super(props)\n\n this.state = {\n width: 0\n }\n }\n\n // determine whether or not to limit column widths based on content\n analyzeColumns (data, maxWidth) {\n // static controls\n const headerFontAverageWidth = 8\n const bodyFontAverageWidth = 7\n const rawWidths = []\n\n // determine the width of each column, and cache the max for each column\n data.forEach((row, rowIndex) => {\n row.forEach((column, columnIndex) => {\n // add 30 to accomodate padding requirements\n const currentWidth = rowIndex === 0\n ? column.length * headerFontAverageWidth + 30\n : column.length * bodyFontAverageWidth + 30\n const cachedWidth = rawWidths[columnIndex] ? rawWidths[columnIndex] : 0\n\n if (currentWidth > cachedWidth) {\n rawWidths[columnIndex] = currentWidth\n }\n })\n })\n\n // determine if table overflows wrapper\n const widthSum = rawWidths.reduce((prev, current) => {\n return prev + current\n }, [])\n\n // overflow exists, throttle widths\n if (widthSum > maxWidth) {\n return rawWidths.map(width => {\n if (width < dynamicTableColumnMinimum) return dynamicTableColumnMinimum\n if (width > dynamicTableColumnMaximum) return dynamicTableColumnMaximum\n\n return width\n })\n } else {\n return rawWidths\n }\n }\n\n parseHtmlTable = memoizeOne(parseHtmlTable)\n\n // flatten data into array of arrays the table expects\n parseJsonData = (data) => {\n const headers = get(data, 'headers', [])\n const rows = get(data, 'rows', [])\n\n return [\n headers,\n ...rows\n ]\n }\n\n refCallback = (element) => {\n if (element) {\n this.setState({\n width: element.getBoundingClientRect().width\n })\n }\n }\n\n render () {\n const { width } = this.state\n\n const {\n subtitle,\n footnotes,\n data,\n hasFooter,\n leftColOffset,\n windowWidth,\n toolType,\n hasPagination,\n headerClasses,\n bodyClasses\n } = this.props\n\n // determine how to display based on incoming data then parse\n // linting will not pass typeof with a constant (expects a string literal)\n // eslint-disable-next-line\n const tableContext = typeof data === ARTICLE_CONTEXT ? ARTICLE_CONTEXT : INTERACTIVE_CONTEXT\n const jsData = tableContext === ARTICLE_CONTEXT ? this.parseHtmlTable(data) : this.parseJsonData(data)\n // determine max table width to allow based on context then calc column size\n let tableWidth = '100%'\n // turn off for tools\n let columnSizeData\n if (toolType !== 'inpatient' && toolType !== 'perscriber') {\n tableWidth = tableContext === ARTICLE_CONTEXT ? dynamicTableOverflowWidthArticle : dynamicTableOverflowWidthInteractive\n columnSizeData = this.analyzeColumns(jsData, toolType ? '100%' : tableWidth)\n }\n\n // slice data array into relevant sections\n const hasHeader = tableContext === INTERACTIVE_CONTEXT || data.indexOf('<thead>') > -1\n const headerRow = hasHeader ? jsData[0] : null\n\n const bodyRowStartIndex = hasHeader ? 1 : 0\n const bodyRowEndIndex = hasFooter ? jsData.length - 1 : jsData.length\n\n const bodyRows = jsData.slice(bodyRowStartIndex, bodyRowEndIndex)\n const footerRow = hasFooter ? jsData[jsData.length - 1] : []\n\n // toggle inset box shadow on right hand side to indicate scrollability\n // first conditional expression is desktop & second handles mobile\n const hasScrollShadow = toolType ? false : (width > dynamicTableOverflowWidthArticle) || (width > windowWidth)\n\n const maxWidth = toolType ? 'none' : tableWidth\n return (\n <div className={toolType ? `DynamicTable DynamicTable__tools ${hasPagination ? '' : 'toolsMargin'}` : 'DynamicTable'}>\n <ComponentShell leftColOffset={leftColOffset}>\n <div className='DynamicTable__inner' style={{ maxWidth: maxWidth }}>\n\n {\n subtitle &&\n <Text typeFace='05 H3/Black/Regular/L' className='DynamicTable__title'>\n {subtitle}\n </Text>\n }\n\n <div\n tabIndex={0} className={cx({\n 'DynamicTable__table-wrapper': true,\n 'DynamicTable__with-shadow': hasScrollShadow\n })}\n >\n\n <table\n ref={this.refCallback}\n className='DynamicTable__table'\n >\n {hasHeader && (\n <thead>\n <tr>\n {\n headerRow.map((column, i) => (\n <CellRenderer\n key={`h-${i}`}\n index={i}\n column={column}\n className={headerClasses[i]}\n size={toolType ? null : columnSizeData[i]}\n type='header'\n />\n ))\n }\n </tr>\n </thead>\n )}\n <tbody>\n {\n bodyRows.map((row, rowIndex) => {\n return (\n <tr key={`r-${rowIndex}`}>\n {row.map((column, columnIndex) => (\n <CellRenderer\n key={`r-${rowIndex}-${columnIndex}`}\n index={columnIndex}\n column={column}\n rowIndex={rowIndex}\n size={toolType ? null : columnSizeData[columnIndex]}\n className={bodyClasses[columnIndex]}\n />\n ))}\n </tr>\n )\n })\n }\n </tbody>\n {\n hasFooter &&\n <tfoot>\n <tr>\n {\n footerRow.map((value, i) => (\n <td key={`f-${i}`} className='default-cell'>\n {\n !!value && (\n <div\n className='DynamicTable__footer-cell'\n style={{ width: columnSizeData[i] }}\n dangerouslySetInnerHTML={{ __html: value }}\n />\n )\n }\n </td>\n ))\n }\n </tr>\n </tfoot>\n }\n </table>\n <div className='DynamicTable__table-mobile-gutter' />\n </div>\n {footnotes && (\n <Text domElement='div' typeFace='Small Text/MedGray'>\n <RichTextField className='DynamicTable__footnotes' content={footnotes} />\n </Text>\n )}\n </div>\n </ComponentShell>\n </div>\n )\n }\n}\n\nDynamicTable.propTypes = {\n subtitle: PropTypes.string,\n footnotes: PropTypes.string,\n data: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.object\n ]),\n hasFooter: PropTypes.bool,\n leftColOffset: PropTypes.number,\n windowWidth: PropTypes.number.isRequired,\n toolType: PropTypes.string,\n hasPagination: PropTypes.bool,\n headerClasses: PropTypes.arrayOf(PropTypes.string),\n bodyClasses: PropTypes.arrayOf(PropTypes.string)\n}\n\nDynamicTable.defaultProps = {\n subtitle: '',\n footnotes: '',\n data: {},\n hasFooter: false,\n leftColOffset: 0,\n headerClasses: [],\n bodyClasses: []\n}\n\nexport default withDisplayContext(DynamicTable)\n\nexport { DynamicTable }\n","var _g;\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgPlus(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"20px\",\n height: \"21px\",\n viewBox: \"0 0 20 21\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"2. Atom/Icon/Plus\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Symbols\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"3.-Molecule/FAQ/Accordion_Closed\",\n transform: \"translate(-691.000000, -7.000000)\",\n fill: \"#0071BC\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"FAQ/Accordion_Closed\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"2.-Atom/Icon/Plus\",\n transform: \"translate(691.000000, 7.500000)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.4285714,0 L11.428,8.571 L20,8.57142857 L20,11.4285714 L11.428,11.428 L11.4285714,20 L8.57142857,20 L8.571,11.428 L0,11.4285714 L0,8.57142857 L8.571,8.571 L8.57142857,0 L11.4285714,0 Z\"\n })))))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgPlus);\nexport default __webpack_public_path__ + \"static/media/plus.bae004e4429382141801d443f21b34b8.svg\";\nexport { ForwardRef as ReactComponent };","var _g;\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgMinus(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"20px\",\n height: \"3px\",\n viewBox: \"0 0 20 3\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"minus icon\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Active\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"XL-Tool_Landing_InHospital-Results_Hover\",\n transform: \"translate(-1067.000000, -4687.000000)\",\n fill: \"#0071BC\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"FAQs\",\n transform: \"translate(102.000000, 4585.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Expanded-FAQ\",\n transform: \"translate(273.000000, 86.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"2.-Atom/Icon/Minus\",\n transform: \"translate(692.000000, 7.500000)\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n id: \"2.-Atom/Icon/Plus\",\n x: 0,\n y: 8.57142857,\n width: 20,\n height: 2.85714286\n }))))))));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgMinus);\nexport default __webpack_public_path__ + \"static/media/minus.1b78eaf6e8614a8257a72a8cfdd32bd8.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport Container from 'react-bootstrap/Container'\nimport Row from 'react-bootstrap/Row'\nimport Col from 'react-bootstrap/Col'\nimport Button from 'react-bootstrap/Button'\nimport Accordion from 'react-bootstrap/Accordion'\nimport Card from 'react-bootstrap/Card'\nimport take from 'lodash/take'\nimport configData from '../../../config'\nimport RichTextField from '../../common/RichTextField/RichTextField'\nimport { Helmet, HelmetProvider } from 'react-helmet-async'\nimport { stripHTML } from '../../../services/formatters/global'\n\nimport plusIcon from '../../../assets/plus.svg'\nimport minusIcon from '../../../assets/minus.svg'\n\nimport './FaqsList.scss'\n\n// pull max FAQs to display on screen from config\nconst { faqDisplayLimit } = configData\n\nclass FaqsList extends Component {\n constructor (props) {\n super(props)\n\n const { faqs } = props\n\n this.state = {\n faqs: faqs.map(({\n fieldFaqQuestion: question,\n fieldFaqAnswer: { value: answer }\n }) => {\n return {\n question,\n answer,\n collapsed: true\n }\n }),\n allFaqsShown: faqs.length <= faqDisplayLimit\n }\n }\n\n handleDisplayAllFaqs = () => {\n this.setState({\n allFaqsShown: true\n })\n }\n\n toggleFaq (i) {\n const { faqs } = this.state\n faqs[i].collapsed = !faqs[i].collapsed\n this.setState({ faqs })\n }\n\n render () {\n const {\n faqs,\n allFaqsShown\n } = this.state\n\n const {\n className,\n header,\n leftColOffset\n } = this.props\n\n const faqsToDisplay = allFaqsShown ? faqs : take(faqs, faqDisplayLimit)\n\n const faqSchema = {\n '@context': 'https://schema.org',\n '@type': 'FAQPage',\n mainEntity: faqsToDisplay.map(faq => ({\n '@type': 'Question',\n name: stripHTML(faq?.question),\n acceptedAnswer: {\n '@type': 'Answer',\n text: stripHTML(faq?.answer)\n }\n }))\n }\n\n return (\n <div className={cx('FaqsList', className)}>\n <HelmetProvider>\n <Helmet>\n <script type='application/ld+json'>\n {JSON.stringify(faqSchema)}\n </script>\n </Helmet>\n </HelmetProvider>\n\n <Container>\n <Row>\n <Col lg={{ offset: leftColOffset }}>\n <div className='FaqsList__inner'>\n <h2>{header}</h2>\n <Accordion>\n {faqsToDisplay.map(({\n question,\n collapsed,\n answer\n }, index) => (\n <Card key={index}>\n <div\n role='button'\n eventkey={index}\n // aria-expanded={!collapsed}\n aria-controls={`QuestionAccordionElement__${index}`}\n className='QuestionWrapper accordion-button collapsed card-header'\n onClick={() => this.toggleFaq(index)}\n >\n <div className='Question'>\n <div className='Question__prefix'>\n Q:\n </div>\n <div className='Question__content'>\n <h3>{question}</h3>\n </div>\n <div className='Question__suffix'>\n <img alt='' src={collapsed ? plusIcon : minusIcon} />\n </div>\n </div>\n </div>\n {/* <Accordion.Button\n as={Card.Header}\n className='QuestionWrapper'\n eventkey={index}\n onClick={() => this.toggleFaq(index)}\n >\n <div className='Question'>\n <div className='Question__prefix'>\n Q:\n </div>\n <div className='Question__content'>\n <h4>{question}</h4>\n </div>\n <div aria-expanded={collapsed ? 'false' : 'true'} className='Question__suffix'>\n <img alt='' src={collapsed ? plusIcon : minusIcon} />\n </div>\n </div>\n </Accordion.Button> */}\n <Accordion.Collapse eventKey={index} in={!collapsed} id={`QuestionAccordionElement__${index}`}>\n <Card.Body>\n <RichTextField\n className='Answer'\n content={answer}\n />\n </Card.Body>\n </Accordion.Collapse>\n </Card>\n ))}\n </Accordion>\n {\n !allFaqsShown &&\n <div className='ShowMoreContainer'>\n <Button onClick={this.handleDisplayAllFaqs}>\n {`Show more (${faqs.length - faqDisplayLimit})`}\n </Button>\n </div>\n }\n </div>\n </Col>\n </Row>\n </Container>\n\n </div>\n )\n }\n}\n\nFaqsList.propTypes = {\n className: PropTypes.string,\n header: PropTypes.string,\n faqs: PropTypes.arrayOf(PropTypes.shape({\n fieldFaqAnswer: PropTypes.shape({\n value: PropTypes.string.isRequired\n }),\n fieldFaqQuestion: PropTypes.string.isRequired\n })),\n leftColOffset: PropTypes.number\n}\n\nFaqsList.defaultProps = {\n header: 'Frequently Asked Questions',\n leftColOffset: 0\n}\n\nexport default FaqsList\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ComponentShell from '../ComponentShell/ComponentShell'\n\nimport './NumberCallouts.scss'\n\nconst getCallouts = (callouts) => {\n return callouts.map(({\n fieldNumCalloutDatatype: suffix,\n fieldNumCalloutNumber: value,\n fieldNumCalloutShortDesc: title,\n fieldNumCalloutIsDollarAmt: isDollar\n }) => {\n return {\n title,\n suffix,\n value,\n isDollar\n }\n })\n}\nconst NumberCallouts = ({ callouts, leftColOffset }) => {\n const cleanCallouts = getCallouts(callouts)\n\n return (\n <div className='NumberCallouts'>\n <ComponentShell leftColOffset={leftColOffset}>\n <p className='NumberCallouts__title'>By the numbers</p>\n <div className='NumberCallouts__callouts'>\n {cleanCallouts.map(({\n title,\n prefix = '',\n value,\n suffix,\n isDollar\n }, i) => {\n if (isDollar) prefix = `${prefix}$`\n return (\n <div key={i} className='NumberCallouts__callout'>\n <div className='NumberCallouts__callout-value-container'>\n {prefix && (\n <p className='NumberCallouts__callout-prefix'>{prefix}</p>\n )}\n <p className='NumberCallouts__callout-value'>{value}</p>\n {suffix && (\n <p className='NumberCallouts__callout-suffix'>{suffix}</p>\n )}\n </div>\n <p className='NumberCallouts__callout-title'>{title}</p>\n </div>\n )\n })}\n </div>\n </ComponentShell>\n </div>\n )\n}\n\nNumberCallouts.propTypes = {\n callouts: PropTypes.arrayOf(PropTypes.shape({\n fieldNumCalloutShortDesc: PropTypes.string.isRequired,\n fieldNumCalloutNumber: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string\n ]).isRequired,\n fieldNumCalloutDatatype: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.string\n ]),\n fieldNumCalloutIsDollarAmt: PropTypes.bool.isRequired\n })),\n leftColOffset: PropTypes.number\n}\n\nNumberCallouts.defaultProps = {\n callouts: [],\n leftColOffset: 0\n}\n\nexport default NumberCallouts\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Text from '../Text/Text'\nimport ResourceCardHeading from './ResourceCardHeading'\nimport { combineClassObjects } from '../../../utilities/displayUtilities'\n\nimport './DatasetCard.scss'\n\nconst baseClasses = {\n anchorContainer: 'DatasetCard__container',\n container: 'DatasetCard',\n containerInner: 'DatasetCard__inner',\n type: 'DatasetCard__small-text type',\n heading: 'DatasetCard__heading',\n footerLabel: 'DatasetCard__footer-label',\n footer: 'DatasetCard__small-text footer'\n}\n\nconst DatasetCard = (props) => {\n const {\n heading,\n slug,\n footer,\n classes\n } = props\n const combinedClasses = combineClassObjects(baseClasses, classes)\n const hasContainerClass = props?.classes?.container\n const handleCarouselSelection = (event = null) => {\n if (!event.key || event.key === 'Enter' || event.key === ' ') {\n window.open(slug, '_self')\n }\n }\n return (\n <a\n className={combinedClasses.anchorContainer}\n onClick={handleCarouselSelection}\n onKeyPress={handleCarouselSelection}\n aria-label={`Open ${heading}`}\n noBs\n >\n <div className={combinedClasses.container}>\n <div className={combinedClasses.containerInner}>\n <Text\n className={combinedClasses.type}\n typeFace='Small Text/MedGray'\n >\n Dataset\n </Text>\n\n <Text\n typeFace={hasContainerClass ? '05 H3/Regular/Dark Blue' : '05 H2/Regular/Dark Blue'}\n className={combinedClasses.heading}\n >\n <ResourceCardHeading heading={heading} />\n </Text>\n <Text\n className={combinedClasses.footerLabel}\n typeFace='Small Text/MedGray'\n >Page last modified\n </Text>\n <Text\n className={combinedClasses.footer}\n typeFace='Body/16pt/MedGray'\n >\n {footer}\n </Text>\n </div>\n </div>\n </a>\n )\n}\n\nDatasetCard.propTypes = {\n heading: PropTypes.string,\n slug: PropTypes.string,\n footer: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.object\n ]),\n // appends custom classes to the component's elements\n classes: PropTypes.shape({\n anchorContainer: PropTypes.string,\n container: PropTypes.string,\n containerInner: PropTypes.string,\n type: PropTypes.string,\n heading: PropTypes.string,\n footerLabel: PropTypes.string,\n footer: PropTypes.string\n })\n}\n\nDatasetCard.defaultProps = {\n classes: {}\n}\n\nexport default DatasetCard\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger'\nimport Tooltip from 'react-bootstrap/Tooltip'\n\nconst DEFAULT_CHAR_LIMIT = 85\n\n/**\n *\n * @param {string} string\n * @param {number} charLimit\n */\nfunction isTruncationRequired (string = '', charLimit = DEFAULT_CHAR_LIMIT) {\n return string.length > charLimit\n}\n\n/**\n *\n * @param {string} string\n * @param {number} charLimit\n */\nexport function truncate (string = '', charLimit = DEFAULT_CHAR_LIMIT) {\n // use trim to remove any trailing spaces\n return string.slice(0, charLimit).trim()\n}\n\nconst ResourceCardHeading = ({ heading, charLimit }) => {\n const shouldTruncate = isTruncationRequired(heading, charLimit)\n\n if (shouldTruncate) {\n return (\n <OverlayTrigger\n flip\n placement='right'\n delay={{ show: 0, hide: 0 }}\n overlay={(tooltipProps) => {\n return (\n <Tooltip\n {...tooltipProps}\n arrowProps={{ style: { display: 'none' } }}\n >\n {heading}\n </Tooltip>\n )\n }}\n trigger={['hover', 'focus']}\n >\n <span>{truncate(heading, charLimit)}...</span>\n </OverlayTrigger>\n )\n } else {\n return (\n <span>{heading}</span>\n )\n }\n}\n\nResourceCardHeading.propTypes = {\n heading: PropTypes.string,\n charLimit: PropTypes.number\n}\n\nResourceCardHeading.defaultProps = {\n heading: '',\n charLimit: DEFAULT_CHAR_LIMIT\n}\n\nexport default ResourceCardHeading\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { ButtonBack, ButtonNext, Dot, DotGroup } from 'pure-react-carousel'\nimport cx from 'classnames'\nimport dayjs from 'dayjs'\nimport isEmpty from 'lodash/isEmpty'\nimport Text from '../Text/Text'\nimport { ReactComponent as DownToLineIcon } from '../../../assets/fontawesome/solid/down-to-line.svg'\nimport DatasetCard from './DatasetCard'\nimport CarouselArrow from '../../icons/CarouselArrow'\nimport ResourceSmallCarousel from './ResourceSmallCarousel'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\n\nimport './ResourceHero.scss'\nimport LinkHandler from '../LinkHandler/LinkHandler'\n\nconst ResourceHero = (props) => {\n const {\n header,\n resources,\n topic,\n fileDownloadUrl,\n lastUpdated\n } = props\n\n const { isMobile } = useDisplayContext()\n const hasResources = !isEmpty(resources)\n const isMultiResourceDisplay = resources.length > 1\n\n function renderDownloadButton () {\n if (!fileDownloadUrl) {\n return null\n }\n\n return (\n <LinkHandler variant='primary' className='download_btn' href={fileDownloadUrl} target='blank'>\n <DownToLineIcon className='DownToLineIcon' />\n <Text\n typeFace='Button/White/L'\n className='download_btn_text'\n >Download\n </Text>\n </LinkHandler>\n )\n }\n\n function renderUpdatedDateDisplay () {\n return (\n <div\n className={cx({\n ResourceHero__updated: true,\n hasButtonSibling: fileDownloadUrl,\n bottomMargin: isMobile\n })}\n >\n {lastUpdated &&\n <>\n <Text typeFace='Small Text/LightGray'>Page last modified</Text>\n <Text typeFace='Body/16pt/White/L/List'>{lastUpdated ? dayjs(lastUpdated).format('MMMM D, YYYY') : null}</Text>\n </>}\n </div>\n )\n }\n\n function renderInnerLeftContent () {\n // desktop and mobile always render headers here;\n // mobile always renders the download and date display here;\n // desktop only does if single resource display\n // reverse order on mobile\n return (\n <>\n <Text className='ResourceHero__eyebrow' domElement='span' typeFace='Small Text/LightGray'>{topic}</Text>\n <Text className='ResourceHero__header' typeFace='00 Display/White'>{header}</Text>\n {isMultiResourceDisplay && !isMobile &&\n <Text className='ResourceHero__eyebrow' domElement='span' typeFace='Small Text/LightGray'>Related Datasets</Text>}\n {(isMobile && !isMultiResourceDisplay) && (\n <div className='ResourceHero__actions'>\n {renderUpdatedDateDisplay()}\n {renderDownloadButton()}\n </div>\n )}\n {(isMobile && isMultiResourceDisplay) && (\n <div className='ResourceHero__actions'>\n {renderUpdatedDateDisplay()}\n {renderDownloadButton()}\n <Text className='ResourceHero__eyebrow' domElement='span' typeFace='Small Text/LightGray'>Related Datasets</Text>\n </div>\n )}\n {(!isMultiResourceDisplay && !isMobile) && (\n <div className='ResourceHero__actions'>\n {renderDownloadButton()}\n {renderUpdatedDateDisplay()}\n </div>\n )}\n </>\n )\n }\n\n function renderInnerRightContent () {\n // mobile download button is only rendered in left content\n // both mobile and desktop render a resource here if single resource display\n return (\n <>\n {!isMobile && isMultiResourceDisplay && renderDownloadButton()}\n {hasResources && !isMultiResourceDisplay && (\n <DatasetCard\n heading={resources[0].heading}\n footer={dayjs(resources[0].date).format('MMMM D, YYYY')}\n slug={resources[0].slug}\n />\n )}\n </>\n )\n }\n\n function getRenderedResources () {\n return resources.map((resource, i) => {\n return (\n <DatasetCard\n key={i}\n heading={resource.heading}\n footer={dayjs(resource.date).format('MMMM D, YYYY')}\n slug={resource.slug}\n />\n )\n })\n }\n\n function renderCarouselControls (carouselData) {\n const { numOfVisibleSlides } = carouselData\n return (\n <div className='ResourceHero__slider-actions'>\n <ButtonBack className='ResourceHero__slider-actions-back-next'>\n <CarouselArrow size='large' direction='left' />\n </ButtonBack>\n\n <DotGroup\n showAsSelectedForCurrentSlideOnly\n renderDots={() => {\n return getDotSlideArray(resources.length, numOfVisibleSlides).map((slide, i) => {\n return (\n <Dot className='ResourceHero__slider-actions-dot' slide={slide} key={i} />\n )\n })\n }}\n />\n\n <ButtonNext className='ResourceHero__slider-actions-back-next'>\n <CarouselArrow size='large' direction='right' />\n </ButtonNext>\n </div>\n )\n }\n\n return (\n <div className={cx('ResourceHero', {\n ResourceHero__multi_resource: isMultiResourceDisplay\n })}\n >\n <div className='ResourceHero__jumbotron jumbotron'>\n <div className='ResourceHero__inner'>\n <div className='ResourceHero__inner_left'>\n {renderInnerLeftContent()}\n </div>\n\n <div className='ResourceHero__inner_right'>\n {isMultiResourceDisplay && (\n <div className='ResourceHero__actions_multi desktop-only'>\n {/* this only displayd on desktop for multi resource displays */}\n {renderUpdatedDateDisplay()}\n {renderInnerRightContent()}\n </div>\n )}\n {!isMultiResourceDisplay && renderInnerRightContent()}\n </div>\n </div>\n\n {isMultiResourceDisplay && (\n <ResourceSmallCarousel\n isDatasetCarousel\n useVisibleSlidesAsStep\n renderControls={controls => renderCarouselControls(controls)}\n renderedResources={getRenderedResources()}\n />\n )}\n </div>\n </div>\n\n )\n}\n\nfunction getDotSlideArray (numOfSlides, step) {\n return Array(Math.ceil(numOfSlides / step)).fill(true).map((v, i) => {\n return i * step\n })\n}\n\nResourceHero.propTypes = {\n /** Large text heading */\n header: PropTypes.string.isRequired,\n /** Small text */\n topic: PropTypes.string.isRequired,\n /** An array of resource objects used to render SmallResource; same prop schema */\n resources: PropTypes.array,\n fileDownloadUrl: PropTypes.string,\n lastUpdated: PropTypes.string\n}\n\nResourceHero.defaultProps = {\n resources: []\n}\n\nexport default ResourceHero\n\nconst ResourceHeroLoading = () => (\n <div className='ResourceHeroLoading'>\n <div>\n <div>\n <div className='ResourceHeroLoading__topic skeleton-box skeleton-box-inverse' />\n <div className='ResourceHeroLoading__title skeleton-box skeleton-box-inverse' />\n <div className='ResourceHeroLoading__spacer' />\n <div className='ResourceHeroLoading__last-updated-head skeleton-box skeleton-box-inverse' />\n <div className='ResourceHeroLoading__last-updated skeleton-box skeleton-box-inverse' />\n </div>\n <div>\n <div>\n <div className='ResourceHeroLoading__resource-topic skeleton-box skeleton-box-inverse' />\n <div className='ResourceHeroLoading__resource-title skeleton-box skeleton-box-inverse' />\n <div className='ResourceHeroLoading__spacer' />\n <div className='ResourceHeroLoading__resource-link skeleton-box skeleton-box-inverse' />\n </div>\n </div>\n </div>\n </div>\n)\n\nexport { getDotSlideArray, ResourceHeroLoading }\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport { getBorderColor } from './ResourceSmall'\nimport ExternalLinkIcon from '../../../components/icons/ExternalLinkIcon'\nimport { retainAccessToken } from '../../../utilities/linkHelpers'\nimport { isPreviewUrl } from '../../../utilities/routeHelpers'\n\nimport './ResourceJumbo.scss'\n\nconst ResourceJumbo = ({ type, text, linkText, linkHref, index, isExternal }) => {\n const isPreview = isPreviewUrl(linkHref)\n const isRelativePath = linkHref?.startsWith('/')\n let newUrl = linkHref\n\n if (isRelativePath && isPreview) {\n newUrl = '/preview' + linkHref\n newUrl = retainAccessToken(newUrl)\n }\n\n return (\n <LinkHandler\n className='ResourceJumbo__container'\n href={newUrl}\n noBs\n >\n <div className='ResourceJumbo jumbotron jumbotron-fluid' fluid='true' style={{ borderLeftColor: getBorderColor(index) }}>\n <h3 className='ResourceJumbo__type'>{type}</h3>\n <h4 className='ResourceJumbo__text'>{text}</h4>\n <p className='ResourceJumbo__pseudo-link'>{linkText} {isExternal && <ExternalLinkIcon />} </p>\n </div>\n </LinkHandler>\n )\n}\n\nResourceJumbo.propTypes = {\n index: PropTypes.number,\n type: PropTypes.string,\n text: PropTypes.string.isRequired,\n linkText: PropTypes.string,\n linkHref: PropTypes.string,\n isExternal: PropTypes.bool\n}\n\nResourceJumbo.defaultProps = {\n type: 'Resources',\n linkText: 'View Resource',\n linkHref: '/'\n}\n\nexport default ResourceJumbo\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Text from '../Text/Text'\nimport cx from 'classnames'\nimport LinkHandler from '../LinkHandler/LinkHandler'\nimport config from '../../../config'\nimport { combineClassObjects } from '../../../utilities/displayUtilities'\nimport ResourceCardHeading from './ResourceCardHeading'\n\nimport './ResourceSmall.scss'\n\n// top border cards have top color accent\nconst { wddseAccentColorPalette } = config\n// which only consists of first 6 colors in palette\nexport const resourceBorderAccents = wddseAccentColorPalette.slice(0, 7)\n\n/**\n * Determine accented border color to use based on position\n * @param {number} index\n */\nexport const getBorderColor = (index) => {\n if (typeof index !== 'number') return null\n\n const safeIndex = index % resourceBorderAccents.length\n return resourceBorderAccents[safeIndex]\n}\n\nconst baseClasses = {\n anchorContainer: 'ResourceSmall__container',\n container: 'ResourceSmall',\n containerInner: 'ResourceSmall__inner',\n type: 'ResourceSmall__small-text type',\n heading: 'ResourceSmall__heading',\n footerLabel: 'ResourceSmall__footer-label',\n footer: 'ResourceSmall__small-text footer'\n}\n\nconst ResourceSmall = (props) => {\n const {\n type,\n heading,\n index,\n slug,\n footer,\n classes\n } = props\n\n const style = { borderTopColor: getBorderColor(index) }\n const combinedClasses = combineClassObjects(baseClasses, classes)\n\n return (\n <LinkHandler className={combinedClasses.anchorContainer} href={slug} noBs>\n <div\n className={cx(combinedClasses.container, {\n isLight: true,\n isTopBorder: true\n })}\n style={style}\n >\n <div className={combinedClasses.containerInner}>\n {/* type added to resemble other card eyebrow structure */}\n {type &&\n <Text\n className={combinedClasses.type}\n typeFace='Small Text/MedGray'\n >\n {type}\n </Text>}\n {/* main card text */}\n <Text\n typeFace='Body/18pt/Black/L'\n className={combinedClasses.heading}\n >\n <ResourceCardHeading heading={heading} />\n </Text>\n {/* small footer text (date, View xxx) */}\n <Text\n className={combinedClasses.footer}\n typeFace='Body/16pt/MedGray'\n >\n {footer}\n </Text>\n </div>\n </div>\n </LinkHandler>\n )\n}\n\nResourceSmall.propTypes = {\n type: PropTypes.string,\n heading: PropTypes.string,\n slug: PropTypes.string,\n footer: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.object\n ]),\n // appends custom classes to the component's elements\n classes: PropTypes.shape({\n anchorContainer: PropTypes.string,\n container: PropTypes.string,\n containerInner: PropTypes.string,\n type: PropTypes.string,\n heading: PropTypes.string,\n footerLabel: PropTypes.string,\n footer: PropTypes.string\n }),\n index: PropTypes.number\n}\n\nResourceSmall.defaultProps = {\n index: null,\n classes: {}\n}\n\nexport default ResourceSmall\n","// extracted by mini-css-extract-plugin\nexport default {\"resourceSmallWidthDesktop\":\"251px\",\"resourceSmallWidthMobile\":\"222px\",\"resourceSmallHeightDesktop\":\"290px\",\"resourceSmallHeightMobile\":\"250px\",\"datasetCardWidthDesktop\":\"246px\",\"datasetCardWidthMobile\":\"222px\",\"datasetCardHeightDesktop\":\"328px\",\"datasetCardHeightMobile\":\"274px\"};","import React, { useMemo, useRef, useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport {\n CarouselProvider,\n Slider,\n Slide,\n DotGroup\n} from 'pure-react-carousel'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\nimport { calculateSliderProps } from '../../../utilities/displayUtilities'\nimport scssVar from './ResourceSmallCarousel.scss'\n\nconst desiredSlideSpacing = 18\n\nconst resourceSmallWidthDesktop = parseInt(scssVar.resourceSmallWidthDesktop || '251px', 10)\nconst resourceSmallWidthMobile = parseInt(scssVar.resourceSmallWidthMobile || '222px', 10)\nconst resourceSmallHeightDesktop = parseInt(scssVar.resourceSmallHeightDesktop || '290px', 10)\nconst resourceSmallHeightMobile = parseInt(scssVar.resourceSmallHeightMobile || '250px', 10)\nconst datasetCardWidthDesktop = parseInt(scssVar.datasetCardWidthDesktop || '251px', 10)\nconst datasetCardWidthMobile = parseInt(scssVar.datasetCardWidthMobile || '222px', 10)\nconst datasetCardHeightDesktop = parseInt(scssVar.datasetCardHeightDesktop || '328px', 10)\nconst datasetCardHeightMobile = parseInt(scssVar.datasetCardHeightMobile || '274px', 10)\n\nconst ResourceSmallCarousel = (props) => {\n const {\n renderedResources = [],\n renderControls,\n useVisibleSlidesAsStep,\n isDatasetCarousel\n } = props\n const { isMobile, windowWidth } = useDisplayContext()\n\n const slideWidth = isDatasetCarousel\n ? isMobile ? datasetCardWidthMobile : datasetCardWidthDesktop\n : isMobile ? resourceSmallWidthMobile : resourceSmallWidthDesktop\n\n // add in spacing\n const naturalSlideWidth = slideWidth + desiredSlideSpacing\n\n const naturalSlideHeight = isDatasetCarousel\n ? isMobile ? datasetCardHeightMobile : datasetCardHeightDesktop\n : isMobile ? resourceSmallHeightMobile : resourceSmallHeightDesktop\n\n const [availableWidth, setAvailableWidth] = useState(naturalSlideWidth)\n const containerRef = useRef()\n\n const numOfSlides = renderedResources.length\n\n useEffect(() => {\n if (containerRef.current) {\n const el = containerRef.current\n const elWidth = el.getBoundingClientRect().width\n setAvailableWidth(elWidth)\n }\n }, [windowWidth])\n\n const { sliderStyle, numOfVisibleSlides, areAllSlidesVisible } = useMemo(() => {\n return calculateSliderProps({\n availableWidth: availableWidth,\n totalWidthPerSlide: naturalSlideWidth,\n numOfSlides: numOfSlides\n })\n }, [availableWidth, naturalSlideWidth, numOfSlides])\n\n return (\n <div ref={containerRef} className='ResourceSmallCarousel'>\n <CarouselProvider\n className='ResourceSmallCarouselCarousel'\n naturalSlideWidth={naturalSlideWidth}\n naturalSlideHeight={naturalSlideHeight}\n totalSlides={numOfSlides}\n step={useVisibleSlidesAsStep ? numOfVisibleSlides : 1}\n dragStep={useVisibleSlidesAsStep ? numOfVisibleSlides : 1}\n visibleSlides={numOfVisibleSlides}\n >\n <Slider\n className='ResourceSmallCarousel__slider'\n classNameTray='ResourceSmallCarousel__slider-tray'\n classNameTrayWrap='ResourceSmallCarousel__slider-tray-wrap'\n style={sliderStyle}\n >\n {renderedResources.map((renderedResource, i) => {\n return (\n <Slide className='ResourceSmallCarousel__slide' key={i} index={i}>\n {renderedResource}\n </Slide>\n )\n })}\n </Slider>\n {!areAllSlidesVisible && renderControls({ numOfVisibleSlides })}\n </CarouselProvider>\n </div>\n )\n}\n\nResourceSmallCarousel.propTypes = {\n isDatasetCarousel: PropTypes.bool,\n renderedResources: PropTypes.arrayOf(PropTypes.object),\n // custom control rendering, passed object { numOfVisibleSlides }\n renderControls: PropTypes.func,\n // tells the component to use its calculated numOfVisible slides as the step and drag step\n useVisibleSlidesAsStep: PropTypes.bool\n}\n\nResourceSmallCarousel.defaultProps = {\n renderedResources: [],\n renderControls: () => {\n return (\n <DotGroup\n className='ResourceSmallCarousel__dotGroup'\n showAsSelectedForCurrentSlideOnly\n />\n )\n }\n}\n\nexport default ResourceSmallCarousel\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst SMALL = 'small'\nconst LARGE = 'large'\nconst LEFT = 'left'\nconst RIGHT = 'right'\n\nconst lgWidth = 69\nconst lgHeight = 18\n\nconst smWidth = 27\nconst smHeight = 16\n\nconst CarouselArrow = ({ direction, size }) => {\n let svgTransform = ''\n let svg = null\n\n if (direction === LEFT) {\n svgTransform = size === LARGE\n ? `rotate(180 ${lgWidth / 2} ${lgHeight / 2})`\n : `rotate(180 ${smWidth / 2} ${smHeight / 2})`\n }\n\n if (size === LARGE) {\n svg = (\n <svg fill='currentColor' width={lgWidth} height={lgHeight} viewBox={`0 0 ${lgWidth} ${lgHeight}`} version='1.1' xmlns='http://www.w3.org/2000/svg'>\n <g id='Topic-Page' stroke='none' transform={svgTransform} strokeWidth='1' fill='none' fillRule='evenodd'>\n <g id='01-Topic_XL-T04-' transform='translate(-1110.000000, -5661.000000)' fill='currentColor'>\n <g id='Related-Topic' transform='translate(0.000000, 5578.000000)'>\n <g id='Arrow' transform='translate(1018.000000, 83.000000)'>\n <g id='2.-Atom/Icon/Caret' transform='translate(126.500000, 9.000000) rotate(-90.000000) translate(-126.500000, -9.000000) translate(117.500000, -25.500000)'>\n <path d='M8.43844104,68.2205865 L0.774812809,60.3125613 C0.464303734,59.9970459 0.464303734,59.4868507 0.774812809,59.1713353 L1.24387971,58.6947056 C1.55438878,58.3791901 2.05648856,58.3791901 2.36699764,58.6947056 L9,65.5622011 L15.6330024,58.7014187 C15.9435114,58.3859032 16.4456112,58.3859032 16.7561203,58.7014187 L17.2251872,59.1780484 C17.5356963,59.4935638 17.5356963,60.003759 17.2251872,60.3192744 L9.56155896,68.2272996 C9.25104989,68.536102 8.74895011,68.536102 8.43844104,68.2205865 Z' />\n <rect id='Rectangle' x='8' y='0' width='2' height='67' rx='1' />\n </g>\n </g>\n </g>\n </g>\n </g>\n </svg>\n )\n } else {\n svg = (\n <svg fill='currentColor' width={smWidth} height={smHeight} viewBox={`0 0 ${smWidth} ${smHeight}`} version='1.1' xmlns='http://www.w3.org/2000/svg'>\n <g id='Topic-Page' stroke='none' transform={svgTransform} strokeWidth='1' fill='none' fillRule='evenodd'>\n <g id='01-Topic_XL-T04-' transform='translate(-709.000000, -1482.000000)' fill='currentColor'>\n <g id='Datasets' transform='translate(0.000000, 729.000000)'>\n <g id='2.-Atom/Icon/Caret' transform='translate(640.000000, 761.000000) rotate(-90.000000) translate(-640.000000, -761.000000) translate(632.000000, 665.000000)'>\n <g id='Group-14' transform='translate(-0.000000, 0.000000)'>\n <g id='Arrow' transform='translate(0.000000, 165.000000)'>\n <path d='M7.46885374,26.810014 L0.220269479,20.4835939 C-0.0734231595,20.2311815 -0.0734231595,19.8230254 0.220269479,19.570613 L0.663932826,19.1893093 C0.957625464,18.9368969 1.43253271,18.9368969 1.72622535,19.1893093 L8,24.6833057 L14.2737747,19.1946797 C14.5674673,18.9422674 15.0423745,18.9422674 15.3360672,19.1946797 L15.7797305,19.5759835 C16.0734232,19.8283958 16.0734232,20.236552 15.7797305,20.4889643 L8.53114626,26.8153845 C8.23745362,27.0624264 7.76254638,27.0624264 7.46885374,26.810014 Z' id='2.-Atom/Icon/Caret' />\n <rect id='Rectangle' x='6.85714286' y='0' width='2.28571429' height='25' rx='1' />\n </g>\n </g>\n </g>\n </g>\n </g>\n </g>\n </svg>\n )\n }\n\n return (\n <div className='CarouselArrow SvgIcon'>\n {svg}\n </div>\n )\n}\n\nCarouselArrow.propTypes = {\n direction: PropTypes.oneOf([LEFT, RIGHT]).isRequired,\n size: PropTypes.oneOf([SMALL, LARGE]).isRequired\n}\n\nCarouselArrow.defaultProps = {\n direction: RIGHT,\n size: SMALL\n}\n\nexport default CarouselArrow\n","import { useState, useEffect, useCallback } from 'react'\nimport log from '../../../log'\nimport config from '../../../config'\nimport {\n getArticleDatasets,\n getDataDictionaryById,\n getDataDictionaryTermsByNodeId,\n getStoryData,\n getDataResourceById\n} from '../../../services/api'\n\nconst { bundleTypes } = config\n\n/**\n * Fetch and format article from API\n * @param {string} uuid\n * @param {string} bundle - describes type of article page\n */\nexport function useFetchArticle (uuid, bundle) {\n const [{ isLoading, error, data }, setState] = useState({\n isLoading: true,\n data: null,\n error: null\n })\n\n const fetchArticle = useCallback(async () => {\n setState(state => ({\n ...state,\n isLoading: true,\n error: null\n }))\n\n let data = {}\n let error = null\n\n try {\n log.info('useFetchArticle', { uuid, bundle })\n\n if (bundle === bundleTypes.DATA_DICTIONARY) {\n data = await getDataDictionaryById(uuid)\n const orderedIds = data.orderedIds\n const unorderedTerms = await getDataDictionaryTermsByNodeId(data.internalNodeId)\n data.sections[0].content = unorderedTerms\n .filter(term => orderedIds.includes(term.id))\n .sort((a, b) => orderedIds.indexOf(a.id) - orderedIds.indexOf(b.id))\n } else if (bundle === bundleTypes.STORY) {\n data = await getStoryData(uuid)\n } else if (bundle === bundleTypes.DATA_RESOURCE) {\n data = await getDataResourceById(uuid)\n } else {\n data = {}\n error = new Error('Invalid bundle was received.')\n }\n\n // retrieve datasets this resource has been attached to\n const relatedDatasets = await getArticleDatasets(uuid)\n\n setState(() => ({\n data: { ...data, relatedDatasets },\n error: error,\n isLoading: false\n }))\n } catch (error) {\n log.error('useFetchArticle:', error)\n setState(state => ({\n ...state,\n error,\n isLoading: false\n }))\n }\n }, [bundle, uuid])\n\n useEffect(() => {\n fetchArticle()\n }, [fetchArticle])\n\n return {\n isLoading,\n error,\n data\n }\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport get from 'lodash/get'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\nimport config from '../../../config'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\nimport Text from '../../common/Text/Text'\nimport ResourceSmall from '../../common/Resource/ResourceSmall'\nimport ResourceSmallCarousel from '../../common/Resource/ResourceSmallCarousel'\n\nimport './ArticleResources.scss'\n\nconst RELATED_LABEL = 'related'\nconst ADDITIONAL_LABEL = 'additional'\n\nconst {\n apiSite\n} = config\n\n// files need apiSite to resolve properly\nconst buildCorrectUrl = ({ type, link }) => {\n const url = get(link, 'url', '')\n\n return type === 'File' ? `${apiSite}${url}` : url\n}\n\n// custom footer label for ResourceSmall to display\nconst FooterPseudoLink = ({ label }) => (\n <Text domElement='span' className='ResourceSmall__footer' typeFace='Body/16pt/Blue/L'>\n {label}\n </Text>\n)\n\nFooterPseudoLink.propTypes = {\n label: PropTypes.string.isRequired\n}\n\nfunction ArticleResourcesComponent (props) {\n const {\n resources,\n label,\n leftColOffset,\n isMobile\n } = props\n\n const labelProp = label.toLowerCase()\n\n function renderMobileDisplay () {\n const renderedResourceCards = resources.map((resource, i) => {\n return (\n <ResourceSmall\n key={i}\n index={i}\n type={resource.type}\n heading={resource.title}\n slug={buildCorrectUrl(resource)}\n footer={<FooterPseudoLink label={resource.link.name} />}\n />\n )\n })\n\n return (\n <ResourceSmallCarousel\n renderedResources={renderedResourceCards}\n />\n )\n }\n\n function renderDesktopDisplay () {\n return (\n <ul className='ArticleResources__list'>\n {\n resources.map((resource, i) => (\n <li key={i}>\n <ResourceSmall\n index={i}\n type={resource.type}\n heading={resource.title}\n slug={buildCorrectUrl(resource)}\n footer={<FooterPseudoLink label={resource.link.name} />}\n />\n </li>\n ))\n }\n </ul>\n )\n }\n\n return (\n <div className='ArticleResources'>\n <ComponentShell leftColOffset={leftColOffset}>\n <div className='ArticleResources__inner'>\n {labelProp === ADDITIONAL_LABEL &&\n <h2 className='ArticleResources__header'>Additional relevant resources</h2>}\n {labelProp === RELATED_LABEL &&\n <Text typeFace='Small Text/MedGray'>Related resources</Text>}\n\n {isMobile && renderMobileDisplay()}\n {!isMobile && renderDesktopDisplay()}\n </div>\n </ComponentShell>\n </div>\n )\n}\n\nArticleResourcesComponent.propTypes = {\n resources: PropTypes.array.isRequired,\n label: PropTypes.oneOf([RELATED_LABEL, ADDITIONAL_LABEL]),\n leftColOffset: PropTypes.number,\n isMobile: PropTypes.bool\n}\n\nArticleResourcesComponent.defaultProps = {\n leftColOffset: 0,\n label: ADDITIONAL_LABEL\n}\n\nfunction ArticleResources (props) {\n const { windowWidth, isMobile } = useDisplayContext()\n\n return (\n <ArticleResourcesComponent\n {...props}\n windowWidth={windowWidth}\n isMobile={isMobile}\n />\n )\n}\n\nArticleResources.labels = {\n related: RELATED_LABEL,\n additional: ADDITIONAL_LABEL\n}\n\nexport default ArticleResources\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport cx from 'classnames'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\nimport Text from '../../common/Text/Text'\n\nimport './ArticleMedia.scss'\n\nconst ArticleMedia = ({\n heading,\n imgSrc,\n imgAlt,\n featured,\n featuredText,\n caption,\n description,\n leftColOffset\n}) => {\n return (\n <div className={cx('ArticleMedia', { withOffset: leftColOffset > 0 })}>\n <ComponentShell leftColOffset={leftColOffset}>\n <div className='ArticleMedia__inner'>\n {featured && featuredText && (\n <div className='ArticleMedia__featured'>\n <Text typeFace='Small Text/MedGray'>\n {featuredText}\n </Text>\n </div>\n )}\n {heading && (\n <div className='ArticleMedia__heading'>\n <Text typeFace='05 H5/Black/Regular/L'>\n {heading}\n </Text>\n </div>\n )}\n <img\n className='ArticleMedia__img'\n src={imgSrc}\n alt={imgAlt}\n />\n {description && (\n <div className='ArticleMedia__description'>\n <Text typeFace='Small Text/MedGray'>\n {description}\n </Text>\n </div>\n )}\n </div>\n </ComponentShell>\n </div>\n )\n}\n\nArticleMedia.propTypes = {\n heading: PropTypes.string,\n imgSrc: PropTypes.string.isRequired,\n imgAlt: PropTypes.string,\n featured: PropTypes.bool,\n featuredText: PropTypes.string,\n caption: PropTypes.string,\n description: PropTypes.string,\n leftColOffset: PropTypes.number\n}\n\nArticleMedia.defaultProps = {\n featuredText: 'Featured visualization',\n featured: false,\n imgAlt: 'Visualization image',\n leftColOffset: 0\n}\n\nexport default ArticleMedia\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\nimport RichTextField from '../../common/RichTextField/RichTextField'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport isEmpty from 'lodash/isEmpty'\n\nimport './ImageText.scss'\n\nconst ImageText = (props) => {\n const {\n imgPos,\n imgSrc,\n imgAlt,\n cta,\n heading,\n desc,\n leftColOffset\n } = props\n\n return (\n <div className='ImageText'>\n <ComponentShell leftColOffset={leftColOffset}>\n <div className={`ImageText__inner ${imgPos === 'left' ? 'ImageText__left' : 'ImageText__right'}`}>\n <div\n className='ImageText__img'\n style={{ backgroundImage: `url(${imgSrc})` }}\n aria-label={imgAlt}\n role='img'\n />\n <div className='ImageText__content'>\n <h2 className='ImageText__heading'>{heading}</h2>\n <RichTextField className='ImageText__desc' content={desc} />\n {!isEmpty(cta) &&\n <LinkHandler\n className='ImageText__btn'\n href={cta.uri}\n label={cta.title}\n variant='primary'\n />}\n </div>\n </div>\n </ComponentShell>\n </div>\n )\n}\n\nImageText.propTypes = {\n imgPos: PropTypes.oneOf(['left', 'right']),\n imgSrc: PropTypes.string.isRequired,\n imgAlt: PropTypes.string,\n cta: PropTypes.shape({\n title: PropTypes.string,\n uri: PropTypes.string\n }),\n heading: PropTypes.string,\n desc: PropTypes.string,\n leftColOffset: PropTypes.number\n}\n\nImageText.defaultProps = {\n imgPos: 'left',\n imgAlt: 'Section Image',\n leftColOffset: 0\n}\n\nexport default ImageText\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\n\nimport './ArticleQuote.scss'\n\nconst ArticleQuote = ({\n quote,\n speaker,\n speakerTitle,\n leftColOffset\n}) => (\n <div className='ArticleQuote'>\n <ComponentShell leftColOffset={leftColOffset}>\n <div className='ArticleQuote__inner'>\n <h4 className='ArticleQuote__text'>\"{quote}\"</h4>\n <div className='ArticleQuote__divider' />\n <div className='ArticleQuote__author'>{speaker}</div>\n <div className='ArticleQuote__author_description'>{speakerTitle}</div>\n </div>\n </ComponentShell>\n </div>\n)\n\nArticleQuote.propTypes = {\n quote: PropTypes.string.isRequired,\n speaker: PropTypes.string.isRequired,\n speakerTitle: PropTypes.string.isRequired,\n leftColOffset: PropTypes.number\n}\n\nArticleQuote.defaultProps = {\n leftColOffset: 0\n}\n\nexport default ArticleQuote\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Text from '../../common/Text/Text'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\nimport RichTextField from '../../common/RichTextField/RichTextField'\nimport './ArticleKeyFindings.scss'\n\nconst NUMBER = 'number'\nconst BULLET = 'bullet'\n\nconst ArticleKeyFindings = (props) => {\n const {\n listItems,\n listType,\n header,\n leftColOffset\n } = props\n\n const hasHeader = !!(header && header.length > 0)\n\n return (\n <div className='ArticleKeyFindings'>\n <ComponentShell leftColOffset={leftColOffset}>\n <div className='ArticleKeyFindings__inner'>\n {hasHeader && <Text typeFace='02 H2/Black/L' className='ArticleKeyFindings__heading'>{header}</Text>}\n <ul className={listType === BULLET ? 'bullet' : 'number'}>\n {listItems.map(({ itemHeader, itemBody }, i) => {\n return (\n <li className='ArticleKeyFinding' key={i}>\n <Text typeFace='05 H5/Black/Regular/L' className='ArticleKeyFindings__title'>{itemHeader}</Text>\n <hr className='ArticleKeyFindings__divider' />\n <RichTextField\n className='ArticleKeyFindings__content'\n content={itemBody}\n />\n </li>\n )\n })}\n </ul>\n </div>\n </ComponentShell>\n </div>\n )\n}\n\nArticleKeyFindings.propTypes = {\n header: PropTypes.string,\n listType: PropTypes.oneOf([NUMBER, BULLET]),\n listItems: PropTypes.arrayOf(PropTypes.shape({\n itemHeader: PropTypes.string.isRequired,\n itemBody: PropTypes.string.isRequired\n })),\n leftColOffset: PropTypes.number\n}\n\nArticleKeyFindings.defaultProps = {\n listType: BULLET,\n listItems: [],\n leftColOffset: 0\n}\n\nexport default ArticleKeyFindings\n\nexport {\n BULLET,\n NUMBER\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Text from '../../common/Text/Text'\nimport ExternalLinkIcon from '../../../components/icons/ExternalLinkIcon'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport { isExternalLink } from '../../../utilities/linkHelpers'\n\nimport './ArticleCitation.scss'\n\nfunction ArticleCitation (props) {\n const {\n title,\n description,\n url,\n index\n } = props\n\n const isExternalUrl = isExternalLink(url)\n\n return (\n <li className='ArticleCitation'>\n <div className='ArticleCitation-top'>\n <Text typeFace='05 H5/Black/Semibold/L' className='ArticleCitation-numeral'>\n {index + 1}\n </Text>\n\n <LinkHandler\n className='ArticleCitation-title'\n href={url}\n >\n <Text typeFace='05 H5/Blue/Regular/L'>\n {title}\n {isExternalUrl ? <ExternalLinkIcon /> : null}\n </Text>\n </LinkHandler>\n </div>\n\n <Text typeFace='Rubik-Regular' className='ArticleCitation-bottom'>\n {description}\n </Text>\n </li>\n )\n}\n\nArticleCitation.propTypes = {\n url: PropTypes.string,\n description: PropTypes.string,\n title: PropTypes.string,\n index: PropTypes.number.isRequired\n}\n\nexport default ArticleCitation\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\nimport ArticleCitation from './ArticleCitation'\n\nimport './ArticleCitationsList.scss'\n\nfunction ArticleCitationsList (props) {\n const {\n citations,\n leftColOffset\n } = props\n\n return (\n <div className='ArticleCitationsList'>\n <ComponentShell leftColOffset={leftColOffset}>\n <div className='ArticleCitationsList__inner'>\n <ol>\n {citations.map((citation, i) => {\n return (\n <ArticleCitation\n key={citation.id}\n {...citation}\n index={i}\n />\n )\n })}\n </ol>\n </div>\n </ComponentShell>\n </div>\n )\n}\n\nArticleCitationsList.propTypes = {\n citations: PropTypes.array,\n leftColOffset: PropTypes.number\n}\n\nArticleCitationsList.defaultProps = {\n leftColOffset: 0\n}\n\nexport default ArticleCitationsList\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Text from '../../common/Text/Text'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\nimport RichTextField from '../../common/RichTextField/RichTextField'\nimport DynamicTable from '../../common/DynamicTable/DynamicTable'\nimport get from 'lodash/get'\nimport isEmpty from 'lodash/isEmpty'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\n\nimport './ArticleDictionary.scss'\n\nconst ArticleDictionary = (props) => {\n const {\n fullName,\n variableName,\n definition,\n table,\n footnote,\n sources,\n leftColOffset\n } = props\n\n const { isMobile } = useDisplayContext()\n const safeDefinition = get(definition, 'value', '')\n const processedFootnote = get(footnote, 'processed', '')\n\n return (\n <div className='ArticleDictionary'>\n <ComponentShell leftColOffset={leftColOffset}>\n <div className='ArticleDictionary__inner'>\n <Text\n className='ArticleDictionary__fullName'\n domElement='h2'\n typeFace={isMobile ? '03 H3/Mobile/Black' : '03 H3/Black/L'}\n >\n {fullName}\n </Text>\n <hr />\n\n {variableName &&\n <>\n <Text className='ArticleDictionary_label' typeFace='Small Text/MedGray'>Variable name</Text>\n <Text className='ArticleDictionary__variableName' typeFace='Body/18pt/Black/L'>{variableName}</Text>\n </>}\n\n <Text className='ArticleDictionary_label' typeFace='Small Text/MedGray'>Definition</Text>\n <RichTextField\n className='ArticleDictionary__definition'\n content={safeDefinition}\n />\n\n {table &&\n <div className='ArticleDictionary__table'>\n <DynamicTable {...table} />\n </div>}\n\n {processedFootnote && processedFootnote !== '' &&\n <RichTextField\n className='ArticleDictionary__footnote'\n content={processedFootnote}\n />}\n\n {!isEmpty(sources) &&\n <div className='ArticleDictionary__source'>\n {sources.map((source, i) => {\n const label = Object.keys(source)[0]\n\n return (\n <div key={i} className='source'>\n <Text\n className='ArticleDictionary__sourceLabel ArticleDictionary_label'\n typeFace='Small Text/MedGray'\n >{label}\n </Text>\n <Text\n className='ArticleDictionary__sourceValue'\n typeFace='Body/18pt/Black/L'\n >{source[label]}\n </Text>\n </div>\n )\n })}\n </div>}\n </div>\n </ComponentShell>\n </div>\n )\n}\n\nArticleDictionary.propTypes = {\n /** full name of the dictionary term */\n fullName: PropTypes.string.isRequired,\n /** name of the dictionary term variable */\n variableName: PropTypes.string,\n /** The definition of the term, in markup via WSYWIG */\n definition: PropTypes.shape({\n value: PropTypes.string\n }).isRequired,\n /** table display data which augments the definition; defer prop validation to consumer */\n table: PropTypes.object,\n /** optional footnote to definition */\n footnote: PropTypes.shape({\n processed: PropTypes.string.isRequired\n }),\n /** [] of key/value pairs where key is the label and value is the value */\n sources: PropTypes.array,\n leftColOffset: PropTypes.number\n}\n\nArticleDictionary.defaultProps = {\n sources: []\n}\n\nexport default ArticleDictionary\n","// extracted by mini-css-extract-plugin\nexport default {\"articleDataStorySlideWidth\":\"251px\",\"articleDataStorySlideWidthMobile\":\"221px\",\"articleDataStorySlideHeight\":\"440px\",\"articleDataStorySlideHeightMobile\":\"420px\",\"articleDataStorySlideSpacing\":\"35px\"};","import React, { PureComponent, useMemo } from 'react'\nimport Container from 'react-bootstrap/Container'\nimport Button from 'react-bootstrap/Button'\nimport { CarouselProvider, Slider, Slide, ButtonBack, ButtonNext, WithStore } from 'pure-react-carousel'\nimport PropTypes from 'prop-types'\nimport CarouselArrow from '../../icons/CarouselArrow'\nimport Text from '../../common/Text/Text'\nimport history from '../../../history'\nimport useDisplayContext from '../../../hooks/useDisplayContext'\nimport { calculateSliderProps } from '../../../utilities/displayUtilities'\n\nimport sizes from './ArticleDataStoryCarousel.scss'\n\nconst articleDataStorySlideWidth = parseInt((sizes.articleDataStorySlideWidth || '251px').split('px')[0], 10)\nconst articleDataStorySlideWidthMobile = parseInt((sizes.articleDataStorySlideWidthMobile || '221px').split('px')[0], 10)\nconst articleDataStorySlideHeight = parseInt((sizes.articleDataStorySlideHeight || '435px').split('px')[0], 10)\nconst articleDataStorySlideHeightMobile = parseInt((sizes.articleDataStorySlideHeightMobile || '420px').split('px')[0], 10)\nconst articleDataStorySlideSpacing = parseInt((sizes.articleDataStorySlideSpacing || '35px').split('px')[0], 10)\n\nclass ArticleDataStoryCarouselSlider extends PureComponent {\n handleSlideClick = (i) => (e) => {\n const isActive = e.currentTarget.getAttribute('aria-selected') === 'true'\n\n if (!isActive) {\n const {\n carouselStore\n } = this.props\n\n const {\n setStoreState,\n getStoreState\n } = carouselStore\n\n const { currentSlide } = getStoreState()\n\n setStoreState({\n currentSlide: (i > currentSlide) ? currentSlide + 1 : currentSlide - 1\n })\n }\n }\n\n // handle internal/external link clicking\n handleLinkClick (e) {\n if (e.preventDefault) {\n e.preventDefault()\n }\n const storyLink = e.target.getAttribute('href')\n\n history.push(storyLink)\n }\n\n viewStaticSlides () {\n const { slides, heading, sliderStyle } = this.props\n\n return (\n <div className='ArticleDataStorySlider only-three'>\n <Container className='ArticleDataStory__header'>\n <Text typeFace='02 H2/White/L'>{heading}</Text>\n </Container>\n <Container className='ArticleDataStory__slider-container'>\n <div\n className='ArticleDataStory__slider'\n style={sliderStyle}\n >\n {slides.map(({\n title,\n desc,\n imgSrc,\n storyLink\n }, i) => (\n <div\n key={i}\n index={i}\n className='ArticleDataStory__slide'\n onClick={this.handleSlideClick(i)}\n >\n <div\n className='ArticleDataStory__slide-img'\n style={{ backgroundImage: `url(${imgSrc})` }}\n aria-label={`Data Story Slide ${i + 1}`}\n />\n <Text className='ArticleDataStory__title' typeFace='05 H5/Desktop/Semibold/White'>{title}</Text>\n <Text className='ArticleDataStory__desc' typeFace='Body/16pt/White/L'>{desc}</Text>\n <Button\n className='ArticleDataStory__slide-button'\n href={storyLink}\n onClick={this.handleLinkClick}\n variant='link'\n >\n Read the story\n </Button>\n </div>\n ))}\n </div>\n </Container>\n </div>\n )\n }\n\n render () {\n const { isMobile, slides, heading, sliderStyle, visibleSlides } = this.props\n if (!isMobile && slides.length <= 3) {\n return this.viewStaticSlides()\n }\n return (\n <div className='ArticleDataStoryCarouselSlider'>\n <Container className='ArticleDataStoryCarousel__header'>\n <Text typeFace='02 H2/White/L'>{heading}</Text>\n {slides.length > visibleSlides && (\n <div className='ArticleDataStoryCarousel__header-controls controls-desktop'>\n <ButtonBack>\n <CarouselArrow size='large' direction='left' />\n </ButtonBack>\n <ButtonNext>\n <CarouselArrow size='large' direction='right' />\n </ButtonNext>\n </div>\n )}\n </Container>\n <Container className='ArticleDataStoryCarousel__slider-container'>\n <Slider\n className='ArticleDataStoryCarousel__slider'\n classNameTray='ArticleDataStoryCarousel__slider-tray'\n style={sliderStyle}\n >\n {slides.map(({\n title,\n desc,\n imgSrc,\n storyLink\n }, i) => (\n <Slide\n key={i}\n index={i}\n className='ArticleDataStoryCarousel__slide'\n onClick={this.handleSlideClick(i)}\n >\n <div\n className='ArticleDataStoryCarousel__slide-img'\n style={{ backgroundImage: `url(${imgSrc})` }}\n aria-label={`Data Story Slide ${i + 1}`}\n />\n <Text className='ArticleDataStoryCarousel__title' typeFace='05 H5/Desktop/Semibold/White'>{title}</Text>\n <Text className='ArticleDataStoryCarousel__desc' typeFace='Body/16pt/White/L'>{desc}</Text>\n <Button\n className='ArticleDataStoryCarousel__slide-button'\n href={storyLink}\n onClick={this.handleLinkClick}\n variant='link'\n >\n Read the story\n </Button>\n </Slide>\n ))}\n </Slider>\n {slides.length > visibleSlides && (\n <div className='ArticleDataStoryCarousel__header-controls controls-mobile'>\n <ButtonBack>\n <CarouselArrow size='large' direction='left' />\n </ButtonBack>\n <ButtonNext>\n <CarouselArrow size='large' direction='right' />\n </ButtonNext>\n </div>\n )}\n </Container>\n </div>\n )\n }\n}\n\nArticleDataStoryCarouselSlider.propTypes = {\n carouselStore: PropTypes.any,\n slides: PropTypes.array,\n heading: PropTypes.string,\n sliderStyle: PropTypes.shape({\n width: PropTypes.string\n }),\n isMobile: PropTypes.bool,\n visibleSlides: PropTypes.number\n}\n\nconst ArticleDataStoryCarouselSliderWithStore = WithStore(ArticleDataStoryCarouselSlider)\n\nconst ArticleDataStoryCarousel = ({\n heading,\n slides,\n step,\n windowWidth,\n isMobile\n}) => {\n const numOfSlides = slides.length\n\n const { sliderStyle, numOfVisibleSlides } = useMemo(() => {\n if (isMobile) {\n return calculateSliderProps({\n availableWidth: windowWidth,\n totalWidthPerSlide: articleDataStorySlideWidthMobile + articleDataStorySlideSpacing,\n numOfSlides: numOfSlides\n })\n } else {\n // for desktop we'll fall back to the lib/custom CSS styles for overall\n // slider width, andhave a fixed visible number of slides\n return {\n sliderStyle: {},\n numOfVisibleSlides: 3\n }\n }\n }, [windowWidth, numOfSlides, isMobile])\n\n return (\n <div className='ArticleDataStoryCarousel'>\n <CarouselProvider\n // slide aspect ratio vary slightly between desktop and mobile\n naturalSlideWidth={isMobile ? articleDataStorySlideWidthMobile : articleDataStorySlideWidth}\n naturalSlideHeight={isMobile ? articleDataStorySlideHeightMobile : articleDataStorySlideHeight}\n totalSlides={numOfSlides}\n visibleSlides={numOfVisibleSlides}\n step={step}\n dragEnabled={isMobile}\n >\n <ArticleDataStoryCarouselSliderWithStore\n sliderStyle={sliderStyle}\n slides={slides}\n isMobile={isMobile}\n heading={heading}\n visibleSlides={numOfVisibleSlides}\n />\n </CarouselProvider>\n </div>\n )\n}\n\nArticleDataStoryCarousel.propTypes = {\n slides: PropTypes.array,\n heading: PropTypes.string,\n step: PropTypes.number,\n windowWidth: PropTypes.number,\n isMobile: PropTypes.bool,\n sliderStyle: PropTypes.shape({\n width: PropTypes.string\n })\n}\n\nArticleDataStoryCarousel.defaultProps = {\n step: 1,\n slides: [],\n // although this text does not match Zeplin spec, it was specified in WDDSE-1102\n heading: 'Explore other data stories',\n sliderStyle: {}\n}\n\nexport default (props) => {\n const { windowWidth, isMobile } = useDisplayContext()\n\n return (\n <ArticleDataStoryCarousel\n {...props}\n isMobile={isMobile}\n windowWidth={windowWidth}\n />\n )\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ArticleHeader from '../../article/ArticleHeader/ArticleHeader'\nimport ArticleResources from '../../article/ArticleResources/ArticleResources'\nimport ArticleMedia from '../../article/ArticleMedia/ArticleMedia'\nimport ImageText from '../../common/ImageText/ImageText'\nimport FaqsList from '../../common/FaqsList/FaqsList'\nimport NumberCallouts from '../../common/NumberCallouts/NumberCallouts'\nimport ArticleTextBlock from '../../article/ArticleTextBlock/ArticleTextBlock'\nimport ArticleQuote from '../../article/ArticleQuote/ArticleQuote'\nimport ArticleKeyFindings from '../../article/ArticleKeyFindings/ArticleKeyFindings'\nimport ArticleCitationsList from '../../article/ArticleCitationsList/ArticleCitationsList'\nimport ArticleDictionary from '../../article/ArticleDictionary/ArticleDictionary'\nimport DynamicTable from '../../common/DynamicTable/DynamicTable'\nimport ArticleDataStoryCarousel from '../../article/ArticleDataStoryCarousel/ArticleDataStoryCarousel'\nimport ResourceJumbo from '../../common/Resource/ResourceJumbo'\nimport ComponentShell from '../../common/ComponentShell/ComponentShell'\nimport { getScaledImgUrl } from '../../../utilities/linkHelpers'\nimport { getIncludedUrls } from '../../../services/formatters/global'\nimport config from '../../../config'\nimport cx from 'classnames'\n\nimport './ArticleSection.scss'\n\nconst {\n related,\n additional\n} = ArticleResources.labels\n\nconst {\n articleComponentTypes: {\n componentTypeTextBlock,\n componentTypeMedia,\n componentTypeQuote,\n componentTypeFaqList,\n componentTypeImageText,\n componentTypeResources,\n componentTypeCallouts,\n componentTypeKeyInfoList,\n componentTypeCitations,\n componentTypeDictionary,\n componentTypeTable,\n componentTypeCarousel,\n componentTypeSingleResource\n },\n displayContexts: {\n DATA_RESOURCE\n }\n} = config\n\nclass ArticleSection extends React.PureComponent {\n get leftColOffset () {\n const { isNavPresent } = this.props\n const leftColOffset = isNavPresent ? 3 : 2\n return leftColOffset\n }\n\n renderComponent = (contentData, i) => {\n const { type } = contentData\n const { isNavPresent, included } = this.props\n\n switch (type) {\n case componentTypeImageText:\n return (\n <ImageText\n imgPos={contentData.imgPos}\n imgSrc={getScaledImgUrl('hero', getIncludedUrls(included), contentData.imgSrc)}\n imgAlt={contentData.imgAlt}\n heading={contentData.heading}\n cta={contentData.cta}\n desc={contentData.desc}\n leftColOffset={!isNavPresent ? 0 : this.leftColOffset}\n />\n )\n\n case componentTypeMedia:\n return (\n <ArticleMedia\n heading={contentData.heading}\n imgSrc={getScaledImgUrl('multipage', getIncludedUrls(included), contentData.imgSrc)}\n featured={contentData.featured}\n imgAlt={contentData.imgAlt}\n featuredText={contentData.featuredText}\n description={contentData.description}\n // display as full width when no nav is present\n leftColOffset={!isNavPresent ? 0 : this.leftColOffset}\n />\n )\n\n case componentTypeFaqList:\n return (\n <FaqsList\n faqs={contentData.faqs}\n leftColOffset={this.leftColOffset}\n />\n )\n\n case componentTypeResources:\n return (\n <ArticleResources\n resources={contentData.resources}\n label={contentData.displayContext === DATA_RESOURCE ? related : additional}\n // display as full width when no nav is present\n leftColOffset={!isNavPresent ? 0 : this.leftColOffset}\n />\n )\n\n case componentTypeCallouts:\n return (\n <NumberCallouts\n {...contentData}\n leftColOffset={this.leftColOffset}\n />\n )\n\n case componentTypeTextBlock:\n return (\n <ArticleTextBlock\n {...contentData}\n leftColOffset={this.leftColOffset}\n />\n )\n\n case componentTypeQuote:\n return (\n <ArticleQuote\n {...contentData}\n leftColOffset={this.leftColOffset}\n />\n )\n\n case componentTypeKeyInfoList:\n return (\n <ArticleKeyFindings\n {...contentData}\n leftColOffset={this.leftColOffset}\n />\n )\n\n case componentTypeCitations:\n return (\n <ArticleCitationsList\n {...contentData}\n leftColOffset={this.leftColOffset}\n />\n )\n\n case componentTypeDictionary:\n return (\n <ArticleDictionary\n {...contentData}\n leftColOffset={this.leftColOffset}\n />\n )\n\n case componentTypeTable:\n return (\n <DynamicTable\n subtitle={contentData.fieldComponentSubtitle}\n footnotes={contentData.footnotes}\n hasFooter={contentData.fieldHasDedicatedFooter}\n data={contentData.fieldWysiwygTable.value}\n leftColOffset={this.leftColOffset}\n />\n )\n\n case componentTypeCarousel:\n return (\n <ArticleDataStoryCarousel\n {...contentData}\n leftColOffset={this.leftColOffset}\n />\n )\n\n case componentTypeSingleResource:\n return (\n <ComponentShell leftColOffset={this.leftColOffset}>\n <ResourceJumbo\n {...contentData}\n type={contentData.contentType}\n />\n </ComponentShell>\n )\n\n default:\n return null\n }\n }\n\n render () {\n const {\n section: {\n header,\n content\n },\n className = ''\n } = this.props\n // remove margin from sequential single resources after first resource\n const marginNotNeeded = [componentTypeSingleResource]\n const classes = `ArticleSection ${className}`\n let firstSingleResource\n return (\n <div className={classes}>\n {content.map((contentData, i) => {\n const firstContent = i === 0\n if (contentData.type === marginNotNeeded[0] && firstSingleResource === undefined) {\n firstSingleResource = i\n }\n return (\n <div\n key={i}\n className={cx({\n 'ArticleSection__component-container': true,\n noTopMargin: i === firstSingleResource ? false : marginNotNeeded.includes(contentData.type)\n })}\n >\n {firstContent && header && header.length > 0 && (\n <ArticleHeader header={header} leftColOffset={this.leftColOffset} />\n )}\n\n {this.renderComponent(contentData, i)}\n </div>\n )\n })}\n </div>\n )\n }\n}\n\nArticleSection.propTypes = {\n /* section object */\n className: PropTypes.string,\n included: PropTypes.array,\n section: PropTypes.shape({\n header: PropTypes.string,\n content: PropTypes.arrayOf(PropTypes.object)\n }),\n /* lets the Section know if there is a nav present; used to render correct gutter on desktop */\n isNavPresent: PropTypes.bool\n}\n\nexport default ArticleSection\n","import React, { useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport ArticleSection from '../../article/ArticleSection/ArticleSection'\nimport ContentPageLayout from '../../common/ContentPageLayout/ContentPageLayout'\nimport ContentPageNav from '../../common/ContentPageLayout/ContentPageNav'\nimport ResourceHero from '../../common/Resource/ResourceHero'\nimport ContactBanner from '../../common/ContactBanner/ContactBanner'\nimport BackToTopBtn from '../../common/BackToTopBtn/BackToTopBtn'\nimport { getDefaultSubjectLineForContent } from '../../../utilities/linkHelpers'\n\nconst DataResourcePage = (props) => {\n const {\n sections,\n title,\n lastUpdated,\n pageContentType,\n hasFileDownload,\n fileDownloadUrl,\n contactEmail,\n relatedDatasets\n } = props\n\n const startRef = useRef(null)\n const stopRef = useRef(null)\n\n return (\n <div className='ArticlePage DataResourcePage'>\n <BackToTopBtn\n startRef={startRef}\n stopRef={stopRef}\n />\n <ResourceHero\n topic={pageContentType}\n header={title}\n lastUpdated={lastUpdated}\n fileDownloadUrl={hasFileDownload ? fileDownloadUrl : null}\n resources={relatedDatasets}\n />\n <div className='ArticlePage__sections'>\n <div ref={startRef} />\n <ContentPageLayout\n sections={sections}\n renderNav={renderNav}\n renderSection={renderSection}\n />\n </div>\n <div ref={stopRef} />\n <ContactBanner\n {...contactEmail}\n subjectLine={getDefaultSubjectLineForContent(title)}\n />\n </div>\n )\n}\n\nfunction renderSection (section) {\n return (\n <ArticleSection\n isNavPresent\n section={section}\n />\n )\n}\n\nfunction renderNav (sectionsData) {\n const { sections, currentSectionId } = sectionsData\n\n return (\n <ContentPageNav\n sections={sections}\n currentSectionId={currentSectionId}\n />\n )\n}\n\nDataResourcePage.propTypes = {\n /** Title of the article */\n title: PropTypes.string,\n /** Used for eyebrow of Resource Hero */\n pageContentType: PropTypes.string,\n /** the sections to be displayed */\n sections: PropTypes.arrayOf(PropTypes.shape({\n /** uuid of the section, from backend */\n id: PropTypes.string,\n /** if nav is displayed, label to use for nav */\n label: PropTypes.string,\n /** Title of the section, used for header */\n title: PropTypes.string,\n /** components to be displayed within the section */\n content: PropTypes.arrayOf(PropTypes.shape({\n /** component type */\n type: PropTypes.string\n // other properties depend on 'type'\n }))\n })),\n /** Indicates whether there is a file download associated with this article */\n hasFileDownload: PropTypes.bool,\n /** Url of the file download */\n fileDownloadUrl: PropTypes.string,\n /** Last updated date */\n lastUpdated: PropTypes.string,\n /** Email for contact banner */\n contactEmail: PropTypes.shape({\n contactLink: PropTypes.string,\n description: PropTypes.string,\n header: PropTypes.string\n }),\n /** datasets this resource is attached to */\n relatedDatasets: PropTypes.array,\n resources: PropTypes.arrayOf(PropTypes.object)\n}\n\nDataResourcePage.defaultProps = {\n citations: [],\n resources: []\n}\n\nexport default DataResourcePage\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Container from 'react-bootstrap/Container'\nimport Button from 'react-bootstrap/Button'\nimport isEmpty from 'lodash/isEmpty'\nimport Text from '../../common/Text/Text'\nimport LinkHandler from '../../common/LinkHandler/LinkHandler'\nimport './ArticleImageRightHeader.scss'\n\nconst ArticleImageRightHeader = (props) => {\n const {\n contentType,\n imgSrc,\n imgAlt,\n desc,\n heading,\n publishedBy,\n fileDownloadUrl,\n dataUsed = []\n } = props\n\n const withImage = !!imgSrc\n\n const DownloadButton = !fileDownloadUrl\n ? null\n : (\n <Button variant='primary' className='ArticleImageRightHeader__download-btn' href={fileDownloadUrl} target='blank'>\n <Text\n typeFace='Button/White/L'\n className='download_btn_text'\n >Download\n </Text>\n </Button>\n )\n\n return (\n <div className='ArticleImageRightHeader'>\n {withImage ? <div className='ArticleImageRightHeader__gutter' /> : null}\n <Container className='ArticleImageRightHeader__content-container'>\n <div className={'ArticleImageRightHeader__details' + (withImage ? ' withImage' : '')}>\n <p className='ArticleImageRightHeader__type'>{contentType}</p>\n <h1 className='ArticleImageRightHeader__heading'>{heading}</h1>\n <p className='ArticleImageRightHeader__desc'>{desc}</p>\n {DownloadButton}\n <div className='ArticleImageRightHeader__pub-data-used-sec'>\n {publishedBy && publishedBy !== '' && (\n <div className='ArticleImageRightHeader__published-by'>\n <p className='ArticleImageRightHeader__pub-data-used-sec__title'>Published by</p>\n <p className='ArticleImageRightHeader__published-by__value'>{publishedBy}</p>\n </div>\n )}\n {!isEmpty(dataUsed) && (\n <div className='ArticleImageRightHeader__data-used'>\n <p className='ArticleImageRightHeader__pub-data-used-sec__title'>Data used</p>\n {dataUsed.map(({ uri, title }, i) => (\n <LinkHandler\n noBs\n key={i}\n href={uri}\n >\n {title}\n </LinkHandler>\n ))}\n </div>\n )}\n </div>\n </div>\n {withImage ? (\n <div className='ArticleImageRightHeader__img-container'>\n <div className='ArticleImageRightHeader__img'>\n <img src={imgSrc} alt={imgAlt} />\n </div>\n </div>\n ) : null}\n </Container>\n </div>\n )\n}\n\nArticleImageRightHeader.propTypes = {\n contentType: PropTypes.string,\n imgSrc: PropTypes.string,\n imgAlt: PropTypes.string,\n desc: PropTypes.string,\n heading: PropTypes.string,\n publishedBy: PropTypes.string,\n fileDownloadUrl: PropTypes.string,\n dataUsed: PropTypes.arrayOf(PropTypes.shape({\n uri: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired\n }))\n}\n\nexport default ArticleImageRightHeader\n","import React, { useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport isEmpty from 'lodash/isEmpty'\nimport ArticleSection from '../../article/ArticleSection/ArticleSection'\nimport ContentPageLayout from '../../common/ContentPageLayout/ContentPageLayout'\nimport ContentPageNav from '../../common/ContentPageLayout/ContentPageNav'\nimport BackToTopBtn from '../../common/BackToTopBtn/BackToTopBtn'\nimport ArticleImageRightHeader from '../../article/ArticleImageRightHeader/ArticleImageRightHeader'\nimport ContactBanner from '../../common/ContactBanner/ContactBanner'\nimport config from '../../../config'\nimport { getDefaultSubjectLineForContent } from '../../../utilities/linkHelpers'\n\nconst {\n articleComponentTypes: {\n // componentTypeCarousel,\n componentTypeResources\n }\n} = config\n\nconst StoryPage = (props) => {\n const {\n sections,\n included,\n title,\n contentType,\n fileDownloadUrl,\n contactEmail,\n heroImageUrl,\n heroImageAltText,\n description,\n publishedBy,\n dataUsed,\n resources,\n // recentCaseStudies,\n hideLeftNav\n } = props\n\n const stopRef = useRef(null)\n const startRef = useRef(null)\n\n function renderNav (sectionsData) {\n const { sections, currentSectionId } = sectionsData\n\n return (\n <ContentPageNav\n className='StoryPage__nav'\n sections={sections}\n currentSectionId={currentSectionId}\n />\n )\n }\n\n return (\n <div className='ArticlePage StoryPage'>\n <BackToTopBtn\n startRef={startRef}\n stopRef={stopRef}\n />\n <ArticleImageRightHeader\n contentType={contentType}\n imgSrc={heroImageUrl}\n imgAlt={heroImageAltText}\n desc={description}\n heading={title}\n publishedBy={publishedBy}\n dataUsed={dataUsed}\n fileDownloadUrl={fileDownloadUrl}\n />\n <div ref={startRef} />\n <div className='ArticlePage__sections'>\n <ContentPageLayout\n sections={sections}\n renderNav={!hideLeftNav ? e => renderNav(e) : null}\n renderSection={section => {\n return (\n <ArticleSection\n isNavPresent={!hideLeftNav}\n section={section}\n included={included}\n />\n )\n }}\n />\n </div>\n {!isEmpty(resources) &&\n <ArticleSection\n className='StoryPage__recentCaseStudies'\n isNavPresent={false}\n included={included}\n section={{\n content: [{ type: componentTypeResources, resources }]\n }}\n />}\n {/* Temporarily disabling Recent Cases Studies section per WDDSE-3695 */}\n {/* {!isEmpty(recentCaseStudies) &&\n <ArticleSection\n isNavPresent={false}\n included={included}\n section={{\n content: [{ type: componentTypeCarousel, slides: recentCaseStudies }]\n }}\n />} */}\n <div ref={stopRef} />\n <ContactBanner\n {...contactEmail}\n subjectLine={getDefaultSubjectLineForContent(title)}\n />\n </div>\n )\n}\n\nStoryPage.propTypes = {\n contentType: PropTypes.string,\n heroImageUrl: PropTypes.string,\n heroImageAltText: PropTypes.string,\n description: PropTypes.string,\n publishedBy: PropTypes.string,\n dataUsed: PropTypes.array,\n included: PropTypes.array,\n /** Title of the article */\n title: PropTypes.string,\n /** the sections to be displayed */\n sections: PropTypes.arrayOf(PropTypes.shape({\n /** uuid of the section, from backend */\n id: PropTypes.string,\n /** if nav is displayed, label to use for nav */\n label: PropTypes.string,\n /** Title of the section, used for header */\n title: PropTypes.string,\n /** components to be displayed within the section */\n content: PropTypes.arrayOf(PropTypes.shape({\n /** component type */\n type: PropTypes.string\n // other properties depend on 'type'\n }))\n })),\n /** Citations for the article */\n citations: PropTypes.arrayOf(PropTypes.object),\n /** Resource for the article */\n resources: PropTypes.arrayOf(PropTypes.object),\n /** Case studies for stories section */\n recentCaseStudies: PropTypes.arrayOf(PropTypes.object),\n /** Indicates whether there is a file download associated with this article */\n hasFileDownload: PropTypes.bool,\n /** Url of the file download */\n fileDownloadUrl: PropTypes.string,\n /** Email for contact banner */\n contactEmail: PropTypes.shape({\n contactLink: PropTypes.string,\n description: PropTypes.string,\n header: PropTypes.string\n }),\n hideLeftNav: PropTypes.bool\n}\n\nStoryPage.defaultProps = {\n citations: [],\n resources: [],\n recentCaseStudies: []\n}\n\nexport default StoryPage\n","import React from 'react'\n\nconst CaretDown = () => (\n <div aria-label='next item' style={{ transformOrigin: '50% 55%', transform: 'rotate(180deg)' }} className='CaretDown SvgIcon'>\n <svg xmlns='http://www.w3.org/2000/svg' width='16' height='10' viewBox='0 0 16 10'>\n <path fill='currentColor' fillRule='evenodd' d='M8.531.622l7.249 7.597a.792.792 0 0 1 0 1.096l-.444.458a.734.734 0 0 1-1.062 0L8 3.176l-6.274 6.59a.734.734 0 0 1-1.062 0L.22 9.308a.792.792 0 0 1 0-1.096L7.47.615A.74.74 0 0 1 8.53.622z' />\n </svg>\n </div>\n)\n\nexport default CaretDown\n","import React from 'react'\n\nconst CaretUpIcon = () => (\n <div aria-label='previous item' className='CaretUpIcon SvgIcon'>\n <svg xmlns='http://www.w3.org/2000/svg' width='16' height='10' viewBox='0 0 16 10'>\n <path fill='currentColor' fillRule='evenodd' d='M8.531.622l7.249 7.597a.792.792 0 0 1 0 1.096l-.444.458a.734.734 0 0 1-1.062 0L8 3.176l-6.274 6.59a.734.734 0 0 1-1.062 0L.22 9.308a.792.792 0 0 1 0-1.096L7.47.615A.74.74 0 0 1 8.53.622z' />\n </svg>\n </div>\n)\n\nexport default CaretUpIcon\n","var _path;\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nfunction SvgMagnifyingGlass(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n fill: \"currentColor\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M368 208A160 160 0 1 0 48 208a160 160 0 1 0 320 0zM337.1 371.1C301.7 399.2 256.8 416 208 416C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208c0 48.8-16.8 93.7-44.9 129.1L505 471c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0L337.1 371.1z\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgMagnifyingGlass);\nexport default __webpack_public_path__ + \"static/media/magnifying-glass.29788a3b87107b7f55d230ab1db16cc9.svg\";\nexport { ForwardRef as ReactComponent };","/**\n * returns a new state object\n * @returns {object} initial state\n */\nexport const getInitialState = () => ({\n searchInputValue: '',\n isSearchInputFocused: false,\n searchResultNodes: [],\n currentSearchResultIndex: 0,\n typeaheadSuggestions: []\n})\n\n/**\n * Increments current search index\n * @param {object} currentState - current/previous state\n * @param {number} currentState.currentSearchResultIndex\n * @param {object[]} currentState.searchResultNodes\n */\nexport const incrementSearchIndex = ({ currentSearchResultIndex, searchResultNodes }) => {\n const lastIndex = searchResultNodes.length - 1\n return {\n currentSearchResultIndex: currentSearchResultIndex === lastIndex ? 0 : currentSearchResultIndex + 1\n }\n}\n\n/**\n * Decrements current search index\n * @param {object} currentState - current/previous state\n * @param {number} currentState.currentSearchResultIndex\n * @param {object[]} currentState.searchResultNodes\n */\nexport const decrementSearchIndex = ({ currentSearchResultIndex, searchResultNodes }) => {\n const lastIndex = searchResultNodes.length - 1\n return {\n currentSearchResultIndex: currentSearchResultIndex === 0 ? lastIndex : currentSearchResultIndex - 1\n }\n}\n\n/**\n * Updates searchResultNodes and resets currentSearchResultIndex\n * @param {object[]} results - array of dom nodes\n */\nexport const updateResults = (results) => {\n return {\n searchResultNodes: results,\n currentSearchResultIndex: 0\n }\n}\n\n/**\n * Updates searchInputValue\n * @param {string} updatedValue - array of dom nodes\n */\nexport const updateSearchInputValue = (updatedValue) => {\n return {\n searchInputValue: updatedValue\n }\n}\n\n/**\n * Updates typeaheadSuggestions\n * @param {string[]} suggestions - array of suggestions\n */\nexport const updateTypeaheadSuggestions = (suggestions) => {\n return {\n typeaheadSuggestions: suggestions\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"desktopHeaderHeight\":\"100px\",\"mobileHeaderHeight\":\"77px\"};","import React, { PureComponent, createRef } from 'react'\nimport PropTypes from 'prop-types'\nimport IsolatedScroll from 'react-isolated-scroll'\nimport Collapse from 'react-bootstrap/Collapse'\nimport Mark from 'mark.js'\nimport Text from '../../common/Text/Text'\nimport CaretDownIcon from '../../icons/CaretDownIcon'\nimport CaretUpIcon from '../../icons/CaretUpIcon'\nimport CloseIcon from '../../icons/CloseIcon'\nimport { ReactComponent as MagnifyingGlassIcon } from '../../../assets/fontawesome/regular/magnifying-glass.svg'\nimport { searchTypeaheadOptions } from '../../../utilities/typeheadUtilities'\nimport withDisplayContext from '../../../hocs/withDisplayContext/withDisplayContext'\nimport {\n getInitialState,\n incrementSearchIndex,\n decrementSearchIndex,\n updateResults,\n updateSearchInputValue,\n updateTypeaheadSuggestions\n} from './stateUpdaters'\nimport cx from 'classnames'\n\nimport scssVar from './ArticleSearchBox.scss'\n\nconst desktopHeaderHeight = parseInt((scssVar.desktopHeaderHeight || '100px').split('px')[0], 10)\nconst mobileHeaderHeight = parseInt((scssVar.mobileHeaderHeight || '77px').split('px')[0], 10)\n\nconst CURRENT_SEARCH_RESULT_CLASS = 'current-search-result'\nconst MIN_TYPEAHEAD_LENGTH = 3\n\nfunction isMinTypeaheadInputReached (value = '') {\n return value.trim().length >= MIN_TYPEAHEAD_LENGTH\n}\n\nclass ArticleSearchBox extends PureComponent {\n constructor (props) {\n super(props)\n\n this.state = getInitialState()\n\n this.markOptions = {\n separateWordSearch: false,\n diacritics: true,\n debug: false,\n exclude: ['.ArticleSearchBox *']\n }\n\n this.markInstance = null\n this.inputRef = createRef()\n }\n\n get hasSearchResults () {\n return this.state.searchResultNodes.length > 0\n }\n\n componentDidMount () {\n const {\n typeaheadOptions,\n searchElementRef\n } = this.props\n\n this.markInstance = new Mark(searchElementRef.current)\n this.setState({ typeaheadSuggestions: typeaheadOptions })\n }\n\n handleSearchInputBlur = () => {\n this.setState({ isSearchInputFocused: false })\n }\n\n handleSearchInputFocus = () => {\n this.setState({ isSearchInputFocused: true })\n }\n\n refreshResults () {\n const { searchElementRef } = this.props\n\n const results = searchElementRef.current.querySelectorAll('mark')\n\n this.setState(updateResults(results), () => {\n this.jumpToCurrentSearchResult()\n })\n }\n\n jumpToCurrentSearchResult = () => {\n const {\n searchResultNodes,\n currentSearchResultIndex\n } = this.state\n\n const { isMobile } = this.props\n\n if (this.hasSearchResults) {\n const newSearchResultNode = searchResultNodes[currentSearchResultIndex]\n\n if (newSearchResultNode) {\n newSearchResultNode.classList.add(CURRENT_SEARCH_RESULT_CLASS)\n\n const currentScrollTop = window.pageYOffset\n const searchResultNodeTop = newSearchResultNode.getBoundingClientRect().top\n\n const fixedHeaderAdjustment = isMobile ? mobileHeaderHeight : desktopHeaderHeight\n // padding adjustment on mobile is greater due to fixed search bar\n const paddingAdjustment = isMobile ? 100 : 80\n\n window.scrollTo({\n top: searchResultNodeTop + currentScrollTop - (fixedHeaderAdjustment + paddingAdjustment),\n behavior: 'smooth'\n })\n }\n }\n }\n\n handleSuggestionClick = (e, suggestion) => {\n // prevent automatic input blur so menu does not close before we handle suggestion click event\n e.preventDefault()\n\n const mockEvent = {\n target: { value: suggestion }\n }\n\n this.handleSearchInputChange(mockEvent)\n\n // manually blur after we know the input has been updated\n this.inputRef.current.blur()\n }\n\n /**\n * Business requirements: only highlight when required number of characters are\n * reached\n */\n handleSearchInputChange = (e) => {\n const updatedValue = e.target.value\n\n this.setState(updateSearchInputValue(updatedValue), () => {\n if (isMinTypeaheadInputReached(updatedValue)) {\n this.handleSuggestionFetchRequested({ value: updatedValue })\n\n this.markInstance.unmark({\n done: () => {\n this.markInstance.mark(updatedValue, {\n ...this.markOptions,\n done: () => {\n this.refreshResults()\n }\n })\n }\n })\n } else {\n this.markInstance.unmark()\n }\n })\n }\n\n handleKeyPress = (e) => {\n if (e.key === 'Enter') {\n this.handleNextClick()\n }\n }\n\n clearCurrentSearchResult = () => {\n const { searchResultNodes, currentSearchResultIndex } = this.state\n\n const currentSearchResultNode = searchResultNodes[currentSearchResultIndex]\n\n if (currentSearchResultNode) {\n currentSearchResultNode.classList.remove(CURRENT_SEARCH_RESULT_CLASS)\n }\n }\n\n handlePreviousClick = () => {\n this.clearCurrentSearchResult()\n\n this.setState(decrementSearchIndex, () => {\n this.jumpToCurrentSearchResult()\n })\n }\n\n handleNextClick = () => {\n this.clearCurrentSearchResult()\n\n this.setState(incrementSearchIndex, () => {\n this.jumpToCurrentSearchResult()\n })\n }\n\n handleClearClick = () => {\n // remove <mark> elements\n this.markInstance.unmark()\n\n this.setState(getInitialState())\n }\n\n handleSuggestionFetchRequested = ({ value }) => {\n const {\n typeaheadOptions\n } = this.props\n\n const updatedSuggestions = searchTypeaheadOptions(value, typeaheadOptions)\n\n this.setState(updateTypeaheadSuggestions(updatedSuggestions))\n }\n\n renderSuggestionsContainer = () => {\n const { isMobile } = this.props\n const {\n searchInputValue,\n isSearchInputFocused,\n typeaheadSuggestions\n } = this.state\n\n const hasSuggestions = typeaheadSuggestions.length > 0\n const showSuggestionsList = hasSuggestions && isSearchInputFocused\n\n return (\n <Collapse in={isMinTypeaheadInputReached(searchInputValue)}>\n <div className='ArticleSearchBox__suggestionsContainer'>\n {!isMobile && this.renderDesktopNaviation()}\n {isMobile && !this.hasSearchResults && (\n <div className='ArticleSearchBox__noMatches'>No Matches</div>\n )}\n {showSuggestionsList && (\n <div className='animated fadeIn'>\n <hr />\n <Text typeFace='Small Text/MedGray' className='ArticleSearchBox__suggestedItemsLabel'>Suggested Items</Text>\n <div className='ArticleSearchBox__suggestionsScroll'>{this.renderSuggestionsList()}</div>\n </div>\n )}\n </div>\n </Collapse>\n )\n }\n\n renderSuggestionsList () {\n const { isMobile } = this.props\n const { typeaheadSuggestions } = this.state\n const ContainingComponent = isMobile ? IsolatedScroll : 'div'\n\n return (\n <ContainingComponent className='ArticleSearchBox__suggestions'>\n <ul>\n {typeaheadSuggestions.map((suggestion, i) => {\n return (\n <li\n key={`${suggestion}-${i}`}\n onMouseDown={(e) => this.handleSuggestionClick(e, suggestion)}\n className='suggestion'\n >\n {suggestion}\n </li>\n )\n })}\n\n </ul>\n </ContainingComponent>\n )\n }\n\n renderDesktopNaviation () {\n const {\n searchResultNodes,\n currentSearchResultIndex\n } = this.state\n\n const currentResult = this.hasSearchResults\n ? currentSearchResultIndex + 1\n : 0\n\n return (\n <div className={cx('ArticleSearchBox__navigation', { noMatches: !this.hasSearchResults })}>\n <div className='ArticleSearchBox__resultsText'>\n {this.hasSearchResults && (\n <><span>{currentResult}</span> of <span>{searchResultNodes.length}</span> matches</>\n )}\n {!this.hasSearchResults && (\n <>No matches</>\n )}\n </div>\n {this.hasSearchResults && (\n <>\n <button className='ArticleSearchBox__nav previous-btn' onClick={this.handlePreviousClick}>\n <CaretUpIcon />\n </button>\n <button className='ArticleSearchBox__nav next-btn' onClick={this.handleNextClick}>\n <CaretDownIcon />\n </button>\n </>\n )}\n </div>\n )\n }\n\n renderInputActions () {\n const { isMobile } = this.props\n\n return (\n <div className='ArticleSearchBox__actions'>\n {!isMobile && this.renderInputActionButtonsDesktop()}\n {isMobile && this.renderInputActionButtonsMobile()}\n </div>\n )\n }\n\n renderInputActionButtonsDesktop () {\n const { searchInputValue } = this.state\n\n return (\n <>\n {searchInputValue.length > 0 && (\n <button className='ArticleSearchBox__action clear-btn' onMouseDown={this.handleClearClick} title='Search'>\n <CloseIcon />\n </button>\n )}\n {searchInputValue.length === 0 && (\n <button disabled className='ArticleSearchBox__action search-btn' title='Search'>\n <MagnifyingGlassIcon />\n </button>\n )}\n </>\n )\n }\n\n renderInputActionButtonsMobile () {\n const {\n searchInputValue,\n currentSearchResultIndex,\n searchResultNodes\n } = this.state\n\n const currentResult = this.hasSearchResults\n ? currentSearchResultIndex + 1\n : 0\n\n const showResultsCount = isMinTypeaheadInputReached(searchInputValue)\n const showSearchButton = searchInputValue.length === 0\n const showCloseButton = searchInputValue.length > 0\n const showNavigationActions = isMinTypeaheadInputReached(searchInputValue)\n\n return (\n <>\n {showResultsCount && <span className='ArticleSearchBox__resultsText'>{currentResult}/{searchResultNodes.length}</span>}\n {showSearchButton && (\n <button disabled className='ArticleSearchBox__action search-btn' title='Search'>\n <MagnifyingGlassIcon />\n </button>\n )}\n {showNavigationActions && (\n <button className='ArticleSearchBox__action previous-btn' onClick={this.handlePreviousClick} title='Search'>\n <CaretUpIcon />\n </button>\n )}\n {showNavigationActions && (\n <button className='ArticleSearchBox__action next-btn' onClick={this.handleNextClick} title='Search'>\n <CaretDownIcon />\n </button>\n )}\n {showCloseButton && (\n <button className='ArticleSearchBox__action clear-btn' onMouseDown={this.handleClearClick} title='Search'>\n <CloseIcon />\n </button>\n )}\n </>\n )\n }\n\n render () {\n const { isMobile } = this.props\n const {\n searchInputValue\n } = this.state\n\n const inputProps = {\n ref: this.inputRef,\n className: 'ArticleSearchBox__input',\n value: searchInputValue,\n onChange: this.handleSearchInputChange,\n onKeyPress: this.handleKeyPress,\n onBlur: this.handleSearchInputBlur,\n onFocus: this.handleSearchInputFocus,\n placeholder: isMobile ? 'Search this page' : 'Terms, variables',\n autoCapitalize: 'none'\n }\n\n const containerClassName = cx({\n ArticleSearchBox: true,\n navigationActive: isMinTypeaheadInputReached(searchInputValue)\n })\n\n return (\n <div className={containerClassName}>\n <Text className='ArticleSearchBox__label' typeFace='05 H3/Black/Regular/L'>Search this page</Text>\n <div className='Autosuggest-container'>\n <div className='ArticleSearchBox__input_wrapper'>\n <input {...inputProps} />\n {this.renderInputActions()}\n </div>\n {this.renderSuggestionsContainer()}\n </div>\n </div>\n )\n }\n}\n\nArticleSearchBox.propTypes = {\n /** dom element to search in; MUST BE REACT REF */\n searchElementRef: PropTypes.shape({\n current: PropTypes.object\n }),\n /** array of terms to use as auto suggest */\n typeaheadOptions: PropTypes.arrayOf(PropTypes.string),\n isMobile: PropTypes.bool\n}\n\nArticleSearchBox.defaultProps = {\n typeaheadOptions: []\n}\n\nexport { ArticleSearchBox }\n\nexport default withDisplayContext(ArticleSearchBox)\n","/**\n * Searches typeahead options/suggestions using an input value; using simple linear search for now\n * since we can expect the number of typehead suggestions not be such that some more optimized\n * algorithm is necessary\n * @param {string} inputValue value that is being searched across typeahead options\n * @param {string[]} typeaheadOptions available options/suggestions to search against\n * @returns {string[]} resulting suggestions from search\n */\nexport const searchTypeaheadOptions = (inputValue = '', typeaheadOptions = []) => {\n const formattedInputVal = inputValue.toLowerCase().trim()\n\n return typeaheadOptions.reduce((accumulatedResults, typeaheadOption) => {\n const formattedTypeaheadOption = typeaheadOption.toLowerCase()\n\n if (formattedTypeaheadOption.indexOf(formattedInputVal) > -1) {\n accumulatedResults.push(typeaheadOption)\n }\n\n return accumulatedResults\n }, [])\n}\n","import React, { useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport isEmpty from 'lodash/isEmpty'\nimport ArticleSection from '../../article/ArticleSection/ArticleSection'\nimport ContentPageLayout from '../../common/ContentPageLayout/ContentPageLayout'\nimport ArticleSearchBox from '../../article/ArticleSearchBox/ArticleSearchBox'\nimport ResourceHero from '../../common/Resource/ResourceHero'\nimport ContactBanner from '../../common/ContactBanner/ContactBanner'\nimport BackToTopBtn from '../../common/BackToTopBtn/BackToTopBtn'\nimport config from '../../../config'\nimport { getDefaultSubjectLineForContent } from '../../../utilities/linkHelpers'\nimport './DataDictionaryPage.scss'\n\nconst {\n articleComponentTypes: {\n componentTypeCitations\n }\n} = config\n\nconst DataDictionaryPage = (props) => {\n const {\n citations,\n sections,\n title,\n lastUpdated,\n pageContentType,\n fileDownloadUrl,\n contactEmail,\n relatedDatasets\n } = props\n\n const startRef = useRef(null)\n const stopRef = useRef(null)\n const sectionsRef = useRef(null)\n\n return (\n <div className='ArticlePage DataDictionaryPage'>\n <BackToTopBtn\n startRef={startRef}\n stopRef={stopRef}\n />\n <ResourceHero\n topic={pageContentType}\n header={title}\n lastUpdated={lastUpdated}\n fileDownloadUrl={fileDownloadUrl || null}\n resources={relatedDatasets}\n />\n <div className='ArticlePage__sections' ref={sectionsRef}>\n <div ref={startRef} />\n <ContentPageLayout\n sections={sections}\n renderNav={({ sections }) => {\n const typeaheadOptions = sections[0].content\n .filter(component => !!(component.type === 'dictionary'))\n .map(component => component.fullName)\n\n return (\n <ArticleSearchBox\n searchElementRef={sectionsRef}\n searchLabel={pageContentType}\n typeaheadOptions={typeaheadOptions}\n />\n )\n }}\n renderSection={section => {\n return (\n <ArticleSection\n isNavPresent\n section={section}\n />\n )\n }}\n />\n </div>\n {!isEmpty(citations) &&\n <ArticleSection\n isNavPresent\n section={{\n header: 'References',\n content: [{ type: componentTypeCitations, citations: citations }]\n }}\n />}\n <div ref={stopRef} />\n <ContactBanner\n {...contactEmail}\n subjectLine={getDefaultSubjectLineForContent(title)}\n />\n </div>\n )\n}\n\nDataDictionaryPage.propTypes = {\n /** Title of the article */\n title: PropTypes.string,\n /** Used for eyebrow of Resource Hero */\n pageContentType: PropTypes.string,\n /** the sections to be displayed */\n sections: PropTypes.arrayOf(PropTypes.shape({\n /** uuid of the section, from backend */\n id: PropTypes.string,\n /** if nav is displayed, label to use for nav */\n label: PropTypes.string,\n /** Title of the section, used for header */\n title: PropTypes.string,\n /** components to be displayed within the section */\n content: PropTypes.arrayOf(PropTypes.shape({\n /** component type */\n type: PropTypes.string\n // other properties depend on 'type'\n }))\n })),\n /** Citations for the article */\n citations: PropTypes.arrayOf(PropTypes.object),\n /** Url of the file download */\n fileDownloadUrl: PropTypes.string,\n /** Last updated date */\n lastUpdated: PropTypes.string,\n /** Email for contact banner */\n contactEmail: PropTypes.shape({\n contactLink: PropTypes.string,\n description: PropTypes.string,\n header: PropTypes.string\n }),\n /** datasets this resource is attached to */\n relatedDatasets: PropTypes.array\n}\n\nDataDictionaryPage.defaultProps = {\n citations: []\n}\n\nexport default DataDictionaryPage\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport get from 'lodash/get'\nimport LoadingCover from '../../common/LoadingCover/LoadingCover'\nimport ErrorPage from '../ErrorPage/ErrorPage'\nimport { useFetchArticle } from './useFetchArticle'\nimport compose from '../../../hocs/compose'\nimport log from '../../../log'\n// top level error handling\nimport withBoundary from '../../../hocs/withBoundary/withBoundary'\nimport MetaHead from '../../layout/MetaHead/MetaHead'\nimport Footer from '../../layout/Footer/Footer'\nimport config from '../../../config'\nimport DataResourcePage from './DataResourcePage'\nimport StoryPage from './StoryPage'\nimport DataDictionaryPage from './DataDictionaryPage'\n\nconst {\n metaOrganizationName,\n bundleTypes: {\n STORY,\n DATA_DICTIONARY,\n DATA_RESOURCE\n }\n} = config\n\nconst getDisplayComponent = (slugResolveData) => {\n const { bundle } = slugResolveData\n let ArticlePageComponent\n\n switch (bundle) {\n case DATA_RESOURCE:\n ArticlePageComponent = DataResourcePage\n break\n case STORY:\n ArticlePageComponent = StoryPage\n break\n case DATA_DICTIONARY:\n ArticlePageComponent = DataDictionaryPage\n break\n default:\n log.warn('ArticlePageContainer: unknown bundle; slugResolveData:', JSON.stringify(slugResolveData))\n ArticlePageComponent = <ErrorPage />\n }\n\n return ArticlePageComponent\n}\n\nconst ArticlePageContainer = ({ slugResolveData }) => {\n const {\n uuid,\n bundle\n } = slugResolveData\n\n const {\n isLoading,\n error,\n data\n } = useFetchArticle(uuid, bundle)\n\n if (isLoading) {\n return <LoadingCover />\n } else if (error) {\n return <ErrorPage error={error} />\n }\n\n const ArticlePageComponent = getDisplayComponent(slugResolveData)\n const pageTitle = get(slugResolveData, 'name')\n const { metaTags } = data\n\n return (\n <div className='ArticlePageContainer pageAnimation' data-bundle={bundle}>\n <MetaHead metaTags={metaTags}>\n <title>{`${pageTitle}${metaOrganizationName}`}</title>\n </MetaHead>\n <ArticlePageComponent {...data} />\n <Footer />\n </div>\n )\n}\n\nArticlePageContainer.propTypes = {\n slugResolveData: PropTypes.shape({\n /** uuid of article */\n uuid: PropTypes.string.isRequired,\n /** name of article */\n name: PropTypes.string.isRequired,\n /** backend term that describes the type of article page */\n bundle: PropTypes.string\n })\n}\n\nexport default compose(withBoundary)(ArticlePageContainer)\n\nexport {\n getDisplayComponent\n}\n"],"names":["ArticleHeader","_ref","header","leftColOffset","_jsx","className","children","ComponentShell","Text","typeFace","defaultProps","ArticleTextBlock","text","footnotes","subtitle","Container","Row","_jsxs","Col","lg","offset","trim","length","RichTextField","content","removeEmptyHtmlElement","domElement","sanitizeRowValue","arguments","undefined","replace","tableString","htmlDoc","DOMParser","parseFromString","final","querySelectorAll","forEach","row","push","values","x","rowValue","innerHTML","parseRowValues","column","size","type","style","width","cx","dynamicTableOverflowWidthArticle","dynamicTableOverflowWidthInteractive","dynamicTableColumnMaximum","dynamicTableColumnMinimum","config","ARTICLE_CONTEXT","INTERACTIVE_CONTEXT","DynamicTable","PureComponent","constructor","props","super","parseHtmlTable","memoizeOne","parseJsonData","data","get","refCallback","element","this","setState","getBoundingClientRect","state","analyzeColumns","maxWidth","rawWidths","rowIndex","columnIndex","currentWidth","reduce","prev","current","map","render","hasFooter","windowWidth","toolType","hasPagination","headerClasses","bodyClasses","tableContext","jsData","columnSizeData","tableWidth","hasHeader","indexOf","headerRow","bodyRowStartIndex","bodyRowEndIndex","bodyRows","slice","footerRow","hasScrollShadow","tabIndex","ref","i","CellRenderer","index","value","dangerouslySetInnerHTML","__html","withDisplayContext","faqDisplayLimit","configData","FaqsList","Component","handleDisplayAllFaqs","allFaqsShown","faqs","fieldFaqQuestion","question","fieldFaqAnswer","answer","collapsed","toggleFaq","faqsToDisplay","take","faqSchema","mainEntity","faq","name","stripHTML","acceptedAnswer","HelmetProvider","Helmet","JSON","stringify","Accordion","_ref2","Card","role","eventkey","onClick","alt","src","plusIcon","minusIcon","Collapse","eventKey","in","id","Body","Button","NumberCallouts","callouts","cleanCallouts","fieldNumCalloutDatatype","suffix","fieldNumCalloutNumber","fieldNumCalloutShortDesc","title","fieldNumCalloutIsDollarAmt","isDollar","getCallouts","_ref3","prefix","baseClasses","anchorContainer","container","containerInner","heading","footerLabel","footer","DatasetCard","_props$classes","slug","classes","combinedClasses","combineClassObjects","hasContainerClass","handleCarouselSelection","event","key","window","open","onKeyPress","noBs","ResourceCardHeading","truncate","charLimit","shouldTruncate","isTruncationRequired","OverlayTrigger","flip","placement","delay","show","hide","overlay","tooltipProps","Tooltip","arrowProps","display","trigger","ResourceHero","resources","topic","fileDownloadUrl","lastUpdated","isMobile","useDisplayContext","hasResources","isEmpty","isMultiResourceDisplay","renderDownloadButton","LinkHandler","variant","href","target","DownToLineIcon","renderUpdatedDateDisplay","ResourceHero__updated","hasButtonSibling","bottomMargin","_Fragment","dayjs","format","renderInnerRightContent","date","renderCarouselControls","carouselData","numOfVisibleSlides","ButtonBack","CarouselArrow","direction","DotGroup","showAsSelectedForCurrentSlideOnly","renderDots","numOfSlides","step","Array","Math","ceil","fill","v","slide","Dot","ButtonNext","ResourceHero__multi_resource","ResourceSmallCarousel","isDatasetCarousel","useVisibleSlidesAsStep","renderControls","controls","renderedResources","resource","ResourceHeroLoading","ResourceJumbo","linkText","linkHref","isExternal","isPreview","isPreviewUrl","isRelativePath","startsWith","newUrl","retainAccessToken","fluid","borderLeftColor","getBorderColor","ExternalLinkIcon","wddseAccentColorPalette","resourceBorderAccents","safeIndex","ResourceSmall","borderTopColor","isLight","isTopBorder","resourceSmallWidthDesktop","parseInt","scssVar","resourceSmallWidthMobile","resourceSmallHeightDesktop","resourceSmallHeightMobile","datasetCardWidthDesktop","datasetCardWidthMobile","datasetCardHeightDesktop","datasetCardHeightMobile","naturalSlideWidth","naturalSlideHeight","availableWidth","setAvailableWidth","useState","containerRef","useRef","useEffect","elWidth","sliderStyle","areAllSlidesVisible","useMemo","calculateSliderProps","totalWidthPerSlide","CarouselProvider","totalSlides","dragStep","visibleSlides","Slider","classNameTray","classNameTrayWrap","renderedResource","Slide","LARGE","svgTransform","svg","height","viewBox","version","xmlns","stroke","transform","strokeWidth","fillRule","d","y","rx","bundleTypes","RELATED_LABEL","ADDITIONAL_LABEL","apiSite","buildCorrectUrl","link","url","FooterPseudoLink","label","ArticleResourcesComponent","labelProp","toLowerCase","renderedResourceCards","renderMobileDisplay","ArticleResources","labels","related","additional","ArticleMedia","imgSrc","imgAlt","featured","featuredText","caption","description","withOffset","ImageText","imgPos","cta","desc","backgroundImage","uri","ArticleQuote","quote","speaker","speakerTitle","BULLET","ArticleKeyFindings","listItems","listType","itemHeader","itemBody","isExternalUrl","isExternalLink","ArticleCitationsList","citations","citation","ArticleCitation","ArticleDictionary","fullName","variableName","definition","table","footnote","sources","safeDefinition","processedFootnote","source","Object","keys","articleDataStorySlideWidth","split","articleDataStorySlideWidthMobile","sizes","articleDataStorySlideHeight","articleDataStorySlideHeightMobile","articleDataStorySlideSpacing","ArticleDataStoryCarouselSlider","handleSlideClick","e","currentTarget","getAttribute","carouselStore","setStoreState","getStoreState","currentSlide","handleLinkClick","preventDefault","storyLink","history","viewStaticSlides","slides","ArticleDataStoryCarouselSliderWithStore","WithStore","ArticleDataStoryCarousel","dragEnabled","articleComponentTypes","componentTypeTextBlock","componentTypeMedia","componentTypeQuote","componentTypeFaqList","componentTypeImageText","componentTypeResources","componentTypeCallouts","componentTypeKeyInfoList","componentTypeCitations","componentTypeDictionary","componentTypeTable","componentTypeCarousel","componentTypeSingleResource","displayContexts","DATA_RESOURCE","ArticleSection","React","renderComponent","contentData","isNavPresent","included","getScaledImgUrl","getIncludedUrls","displayContext","fieldComponentSubtitle","fieldHasDedicatedFooter","fieldWysiwygTable","contentType","section","marginNotNeeded","firstSingleResource","firstContent","noTopMargin","includes","DataResourcePage","sections","pageContentType","hasFileDownload","contactEmail","relatedDatasets","startRef","stopRef","BackToTopBtn","ContentPageLayout","renderNav","renderSection","ContactBanner","subjectLine","getDefaultSubjectLineForContent","sectionsData","currentSectionId","ContentPageNav","publishedBy","dataUsed","withImage","DownloadButton","StoryPage","heroImageUrl","heroImageAltText","hideLeftNav","ArticleImageRightHeader","recentCaseStudies","CaretDown","transformOrigin","CaretUpIcon","_path","_extends","assign","prototype","hasOwnProperty","call","apply","SvgMagnifyingGlass","svgRef","titleId","ForwardRef","incrementSearchIndex","currentSearchResultIndex","searchResultNodes","decrementSearchIndex","lastIndex","desktopHeaderHeight","mobileHeaderHeight","CURRENT_SEARCH_RESULT_CLASS","isMinTypeaheadInputReached","ArticleSearchBox","handleSearchInputBlur","isSearchInputFocused","handleSearchInputFocus","jumpToCurrentSearchResult","hasSearchResults","newSearchResultNode","classList","add","currentScrollTop","pageYOffset","searchResultNodeTop","top","fixedHeaderAdjustment","paddingAdjustment","scrollTo","behavior","handleSuggestionClick","suggestion","mockEvent","handleSearchInputChange","inputRef","blur","updatedValue","searchInputValue","updateSearchInputValue","handleSuggestionFetchRequested","markInstance","unmark","done","mark","markOptions","refreshResults","handleKeyPress","handleNextClick","clearCurrentSearchResult","currentSearchResultNode","remove","handlePreviousClick","handleClearClick","typeaheadSuggestions","typeaheadOptions","updatedSuggestions","formattedInputVal","accumulatedResults","typeaheadOption","searchTypeaheadOptions","renderSuggestionsContainer","showSuggestionsList","renderDesktopNaviation","renderSuggestionsList","separateWordSearch","diacritics","debug","exclude","createRef","componentDidMount","searchElementRef","Mark","results","updateResults","ContainingComponent","IsolatedScroll","onMouseDown","currentResult","noMatches","CaretDownIcon","renderInputActions","renderInputActionButtonsDesktop","renderInputActionButtonsMobile","CloseIcon","disabled","MagnifyingGlassIcon","showResultsCount","showSearchButton","showCloseButton","showNavigationActions","inputProps","onChange","onBlur","onFocus","placeholder","autoCapitalize","containerClassName","navigationActive","DataDictionaryPage","sectionsRef","filter","component","searchLabel","metaOrganizationName","STORY","DATA_DICTIONARY","getDisplayComponent","slugResolveData","bundle","ArticlePageComponent","log","warn","ErrorPage","compose","withBoundary","uuid","isLoading","error","fetchArticle","useCallback","async","info","getDataDictionaryById","orderedIds","unorderedTerms","getDataDictionaryTermsByNodeId","internalNodeId","term","sort","a","b","getStoryData","getDataResourceById","Error","getArticleDatasets","useFetchArticle","LoadingCover","pageTitle","metaTags","MetaHead","Footer"],"sourceRoot":""}