@washingtonpost/subs-de-inputs 0.5.3-canary.0 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,57 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file. See
4
+ [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ **[0.5.3 - 2024-07-09]**:
7
+ * Add `FirstPartyIngestDataTypes` constant
8
+
9
+ **[0.5.2 - 2024-07-05]**:
10
+ * Fix for cookie thing
11
+
12
+ **[0.5.1 - 2024-06-03]**:
13
+ * Fix for multi paragraph disclosures
14
+ * Support hydration for Privacy Policy link
15
+
16
+ **[0.5.0 - 2024-05-30]**:
17
+ * Added Disclosure component
18
+
19
+ **[0.4.2 - 2024-05-10]**:
20
+ * Fix exception from `<DESelect />` if `dataDictionaryConfig` prop is readonly (such as in redux toolkit)
21
+ * Don't submit data if wp_wv cookie and anonymous user (feedback from ERD)
22
+
23
+ **[0.4.1 - 2024-05-07]**:
24
+ * Set the correct `type` for ingest() API
25
+
26
+ **[0.4.0 - 2024-05-07]**:
27
+ * Support for `implicit` collection via GA
28
+
29
+ **[0.3.0 - 2024-05-06]**:
30
+ * Uses the native `<select />` element in smaller viewport sizes for better UX
31
+
32
+ **[0.2.2 - 2024-05-03]**:
33
+ * use `window.__twpdeu.push()` for submitting
34
+ * Better loading state when fetching config over the wire
35
+ * Prevent extra calls to `ingest` API if user changes value after clicking submit
36
+ * Fix `ingest()` function to send the right format (again)
37
+
38
+ **[0.2.1 - 2024-05-02]**:
39
+ * Revert "ESM build only"
40
+ * `ingest()` function throws error if `submitData.value` is not an array (required by BE)
41
+
42
+ **[0.2.0 - 2024-05-01]**:
43
+ * Adds `ingest()` function
44
+ * ESM build only
45
+ * Babel config to target recent browsers only
46
+
47
+ **[0.1.1 - 2024-04-30]**:
48
+ * Fix build by removing unused file
49
+
50
+ **[0.1.0 - 2024-04-25]**:
51
+ * Add initial `<DESelect />` component
52
+
53
+ **[0.0.2 - 2024-04-24]**:
54
+ * Fix build error
55
+
56
+ **[0.0.1 - 2024-04-09]**:
57
+ * Initial setup
@@ -0,0 +1 @@
1
+ export declare const checkCookie: () => boolean;
@@ -0,0 +1,14 @@
1
+ export declare const FirstPartyIngestDataTypes: {
2
+ readonly JOB_LEVEL: "profile_job_level";
3
+ readonly JOB_INDUSTRY: "profile_job_industry";
4
+ readonly PERSONAL_GOALS: "personal_goals";
5
+ readonly HOBBIES: "hobbies";
6
+ readonly PROFESSIONAL_GOALS: "professional_goals";
7
+ readonly INDUSTRY: "industry";
8
+ readonly NEWS_LOCATION: "news_location";
9
+ readonly NY_PERSONAL_GOALS: "new_year_personal_goals";
10
+ readonly NY_HOBBIES: "new_year_hobbies";
11
+ readonly NY_PROFESSIONAL_GOALS: "new_year_professional_goals";
12
+ readonly NY_INDUSTRY: "new_year_industry";
13
+ readonly NY_NEWS_LOCATION: "new_year_news_location";
14
+ };
package/dist/index.d.ts CHANGED
@@ -5,3 +5,4 @@ export * from './utils/push';
5
5
  export * from './services/getAttributes';
6
6
  export * from './components/DESelect';
7
7
  export * from './components/DEDisclosure';
8
+ export { FirstPartyIngestDataTypes } from './constants/IngestDataTypes';
@@ -36,34 +36,11 @@ const IngestResponseState = {
36
36
  DO_NOT_COLLECT: '110'
37
37
  };
38
38
 
39
- const COOKIE = 'OptanonConsent';
40
- /**
41
- * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.
42
- * Returns true or false if the flag is found in the cookie, null otherwise.
43
- * @returns {boolean | null}
44
- */
45
- const checkConsentCookieForAllowTargeting = () => {
46
- const value = subsSdk.getCookie(COOKIE) || '';
47
- return value.includes('C0004%3A1') ? true : value.includes('C0004%3A0') ? false : null;
48
- };
49
-
50
- const COOKIE$1 = 'OptanonAlertBoxClosed';
51
- const checkAlertBoxCookie = () => {
52
- const value = subsSdk.getCookie(COOKIE$1) || '';
53
- // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)
54
- // "Invalid date" is 12 characters long
55
- return value.length > 12;
56
- };
57
-
58
39
  const hasRequiredPrivacyCookies = () => {
59
40
  var _WPGeo;
60
41
  if (typeof window === 'undefined') {
61
42
  return false;
62
43
  }
63
- const gdprAllowTargarting = checkConsentCookieForAllowTargeting();
64
- if (typeof gdprAllowTargarting === 'boolean' && checkAlertBoxCookie()) {
65
- return gdprAllowTargarting;
66
- }
67
44
  const wp_usp = subsSdk.getCookie('wp_usp');
68
45
  const countryCode = (_WPGeo = subsSdk.WPGeo()) === null || _WPGeo === void 0 ? void 0 : _WPGeo.country_code;
69
46
  return !!(wp_usp && countryCode === 'US');
@@ -513,7 +490,15 @@ const hydrateLinks = str => {
513
490
  return toReturn;
514
491
  };
515
492
 
516
- const COOKIE$2 = 'OptanonAlertBoxClosed';
493
+ const COOKIE = 'OptanonAlertBoxClosed';
494
+ const checkCookie = () => {
495
+ const value = subsSdk.getCookie(COOKIE) || '';
496
+ // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)
497
+ // "Invalid date" is 12 characters long
498
+ return value.length > 12;
499
+ };
500
+
501
+ const COOKIE$1 = 'OptanonAlertBoxClosed';
517
502
  const useOneTrustAlertBoxClosed = _ref => {
518
503
  let {
519
504
  allowCookieStore
@@ -523,7 +508,7 @@ const useOneTrustAlertBoxClosed = _ref => {
523
508
  const [listenToTcfApi, setListenToTcfApi] = React.useState(false);
524
509
  React.useEffect(() => {
525
510
  var _window;
526
- if (checkAlertBoxCookie()) {
511
+ if (checkCookie()) {
527
512
  setAlertBoxClosed(true);
528
513
  return;
529
514
  }
@@ -541,8 +526,8 @@ const useOneTrustAlertBoxClosed = _ref => {
541
526
  React.useEffect(() => {
542
527
  let cleanupFn = () => {};
543
528
  if (listenToCookieStore && window.cookieStore) {
544
- cleanupFn = subsSdk.listenToCookieStore(COOKIE$2, () => {
545
- if (checkAlertBoxCookie()) {
529
+ cleanupFn = subsSdk.listenToCookieStore(COOKIE$1, () => {
530
+ if (checkCookie()) {
546
531
  setAlertBoxClosed(true);
547
532
  } else {
548
533
  setAlertBoxClosed(false);
@@ -562,7 +547,7 @@ const useOneTrustAlertBoxClosed = _ref => {
562
547
  // cmpuishown means the banner is shown
563
548
  // useractioncomplete means the user has interacted with the banner
564
549
  // but actually if the result for any of these is true, we just use the value of the cookie
565
- if (checkAlertBoxCookie()) {
550
+ if (checkCookie()) {
566
551
  setAlertBoxClosed(true);
567
552
  }
568
553
  }
@@ -644,10 +629,26 @@ const DEDisclosure = _ref => {
644
629
  }, disclosureRendering);
645
630
  };
646
631
 
632
+ const FirstPartyIngestDataTypes = {
633
+ JOB_LEVEL: 'profile_job_level',
634
+ JOB_INDUSTRY: 'profile_job_industry',
635
+ PERSONAL_GOALS: 'personal_goals',
636
+ HOBBIES: 'hobbies',
637
+ PROFESSIONAL_GOALS: 'professional_goals',
638
+ INDUSTRY: 'industry',
639
+ NEWS_LOCATION: 'news_location',
640
+ NY_PERSONAL_GOALS: 'new_year_personal_goals',
641
+ NY_HOBBIES: 'new_year_hobbies',
642
+ NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',
643
+ NY_INDUSTRY: 'new_year_industry',
644
+ NY_NEWS_LOCATION: 'new_year_news_location'
645
+ };
646
+
647
647
  exports.AttributesState = AttributesState;
648
648
  exports.CollectionBehaviors = CollectionBehaviors;
649
649
  exports.DEDisclosure = DEDisclosure;
650
650
  exports.DESelect = DESelect;
651
+ exports.FirstPartyIngestDataTypes = FirstPartyIngestDataTypes;
651
652
  exports.IngestResponseState = IngestResponseState;
652
653
  exports.IngestType = IngestType;
653
654
  exports.getAttributes = getAttributes;
@@ -1 +1 @@
1
- {"version":3,"file":"subs-de-inputs.cjs.development.js","sources":["../src/interfaces/index.ts","../src/utils/checkConsentCookieForAllowTargeting.ts","../src/components/DEDisclosure/utils/checkAlertBoxCookie.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/index.tsx"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\n/**\n * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.\n * Returns true or false if the flag is found in the cookie, null otherwise.\n * @returns {boolean | null}\n */\nexport const checkConsentCookieForAllowTargeting = () => {\n const value = getCookie(COOKIE) || '';\n return value.includes('C0004%3A1')\n ? true\n : value.includes('C0004%3A0')\n ? false\n : null;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\nimport { checkConsentCookieForAllowTargeting } from './checkConsentCookieForAllowTargeting';\nimport { checkAlertBoxCookie } from '../components/DEDisclosure/utils/checkAlertBoxCookie';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (typeof gdprAllowTargarting === 'boolean' && checkAlertBoxCookie()) {\n return gdprAllowTargarting;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { ENDPOINTS, WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\nconst configSrc = `${\n ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n ? 'https://www.washingtonpost.com/subscribe'\n : ENDPOINTS.base\n}/config/de/disclosure.json`;\n\nexport const getConfig = async () => {\n let myConfig: DisclosureConfigValue | undefined = undefined;\n\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country- or region-specific config found, use that\n const { country_code, intl_region } = WPGeo();\n Object.keys(remoteConfig).forEach((configKey) => {\n if (\n country_code &&\n configKey.split('|').includes(country_code.toLowerCase())\n ) {\n myConfig = remoteConfig[configKey];\n } else if (intl_region === 'EEA' && configKey === 'eea') {\n myConfig = remoteConfig[configKey];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import React from 'react';\n\ntype hydrateLinksType = (str: string) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str: string) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkAlertBoxCookie } from '../utils/checkAlertBoxCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ninterface TCData {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n}\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window?.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n let cleanupFn: (() => void) | null = () => {};\n if (listenToCookieStore && window.cookieStore) {\n cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n }\n return cleanupFn || (() => {});\n }, [listenToCookieStore]);\n\n useEffect(() => {\n let listenerId: number;\n if (listenToTcfApi && window.__tcfapi) {\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n }\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce((prev, current) => {\n return (\n <>\n {prev}\n <p>{hydrateLinks(current)}</p>\n </>\n );\n }, <></>)\n );\n\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>\n );\n};\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","COOKIE","checkConsentCookieForAllowTargeting","value","getCookie","includes","checkAlertBoxCookie","length","hasRequiredPrivacyCookies","window","gdprAllowTargarting","wp_usp","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","_ref","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","sendGAEvent","props","process","env","NODE_ENV","warn","dataLayer","eventData","push","sendToGA","submitData","source","event","action","category","label","section","subsection","ingest","wapo_login_id","jucid","localStorage","getItem","ga","payload","type","metadata","response","method","body","JSON","stringify","isAnonymousWebview","wp_wv","isLoggedIn","Error","attributeInfo","name","collection_behavior","explicit","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","DESelect","dataDictionaryConfig","submit","onFinished","valuesFilter","children","config","setConfig","setSelected","scriptStatus","useScript","fetchConfig","_window","__twpdeu","getFieldConfigs","error","ScriptStatus","READY","submitSelected","_window2","result","isError","isFinished","isLoading","sort","a","b","order","filter","archived","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","getConfig","myConfig","undefined","remoteConfig","intl_region","Object","keys","forEach","configKey","split","toLowerCase","hydrateLinks","str","array","chunks","className","href","toReturn","reduce","prev","current","useOneTrustAlertBoxClosed","allowCookieStore","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","DEDisclosure","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","setMyConfig","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray"],"mappings":";;;;;;;;;;;;;MAQaA,mBAAmB,GAAG;EACjCC,OAAO,EAAE,SAAS;EAClBC,cAAc,EAAE;;MAeLC,eAAe,GAAG;EAC7BC,OAAO,EAAE;;MAGEC,UAAU,GAAG;EACxBC,QAAQ,EAAE,UAAU;EACpBC,QAAQ,EAAE;;MAGCC,mBAAmB,GAAG;EACjCJ,OAAO,EAAE,KAAK;EACdK,YAAY,EAAE,KAAK;EACnBC,YAAY,EAAE,KAAK;EACnBC,kBAAkB,EAAE,KAAK;EACzBC,YAAY,EAAE,KAAK;EACnBC,4BAA4B,EAAE,KAAK;EACnCC,uBAAuB,EAAE,KAAK;EAC9BC,eAAe,EAAE,KAAK;EACtBC,qBAAqB,EAAE,KAAK;EAC5BC,6BAA6B,EAAE,KAAK;EACpCf,cAAc,EAAE;;;AC3ClB,MAAMgB,MAAM,GAAG,gBAAgB;AAE/B;;;;;AAKA,AAAO,MAAMC,mCAAmC,GAAGA;EACjD,MAAMC,KAAK,GAAGC,iBAAS,CAACH,MAAM,CAAC,IAAI,EAAE;EACrC,OAAOE,KAAK,CAACE,QAAQ,CAAC,WAAW,CAAC,GAC9B,IAAI,GACJF,KAAK,CAACE,QAAQ,CAAC,WAAW,CAAC,GAC3B,KAAK,GACL,IAAI;AACV,CAAC;;ACdD,MAAMJ,QAAM,GAAG,uBAAuB;AAEtC,AAAO,MAAMK,mBAAmB,GAAGA;EACjC,MAAMH,KAAK,GAAGC,iBAAS,CAACH,QAAM,CAAC,IAAI,EAAE;;;EAGrC,OAAOE,KAAK,CAACI,MAAM,GAAG,EAAE;AAC1B,CAAC;;MCLYC,yBAAyB,GAAGA;;EACvC,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACjC,OAAO,KAAK;;EAGd,MAAMC,mBAAmB,GAAGR,mCAAmC,EAAE;EACjE,IAAI,OAAOQ,mBAAmB,KAAK,SAAS,IAAIJ,mBAAmB,EAAE,EAAE;IACrE,OAAOI,mBAAmB;;EAG5B,MAAMC,MAAM,GAAGP,iBAAS,CAAC,QAAQ,CAAC;EAElC,MAAMQ,WAAW,IAAAC,MAAA,GAAGC,aAAK,EAAE,cAAAD,MAAA,uBAAPA,MAAA,CAASE,YAAY;EAEzC,OAAO,CAAC,EAAEJ,MAAM,IAAIC,WAAW,KAAK,IAAI,CAAC;AAC3C,CAAC;;ACZD,MAAMI,IAAI,MAAMC,iBAAS,CAACD,YAAY;AAEtC,MAAME,eAAe,GAAwB,EAAE;AAC/C,MAAaC,aAAa,GAAsB,MAAAC,IAAA;MAAO;IACrDC;GAGD,GAAAD,IAAA;EACC,IAAIF,eAAe,CAACG,SAAS,CAAC,EAAE;IAC9B,OAAOH,eAAe,CAACG,SAAS,CAAC;;EAGnC,MAAMC,UAAU,GAAG,CAACD,SAAS,CAAC;EAE9B,IAAI;IACF,MAAME,GAAG,GAAG,IAAIC,GAAG,IAAIR,iBAAiB,CAAC;IACzCO,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,YAAY,EAAEJ,UAAU,CAACK,IAAI,CAAC,GAAG,CAAC,CAAC;IAExD,MAAMC,IAAI,GAAG,MAAMC,KAAK,CAACN,GAAG,CAACO,QAAQ,EAAE,EAAE;MACvCC,WAAW,EAAE,SAAS;MACtBC,OAAO,EAAEC;KACV,CAAC;IACF,MAAMC,IAAI,GAAG,MAAMN,IAAI,CAACM,IAAI,EAAE;IAE9B,IAAIN,IAAI,CAACO,EAAE,IAAID,IAAI,CAACE,MAAM,KAAKC,sBAAc,CAAClD,OAAO,EAAE;MACrD,MAAMmD,UAAU,GAAGJ,IAAI,CAACI,UAAU,IAAI,EAAE;MACxCpB,eAAe,CAACG,SAAS,CAAC,GAAGiB,UAAU;MACvC,OAAOA,UAAU;KAClB,MAAM;MACL,OAAO,EAAE;;GAEZ,CAAC,OAAOC,CAAC,EAAE;IACVC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;IAChB,OAAO,EAAE;;AAEb,CAAC;;AC1CD,MAAMG,WAAW,GAAIC,KAOpB;EACC,IAAI,OAAOlC,MAAM,KAAK,WAAW,EAAE;IACjC,IAAAmC,OAAA,CAAAC,GAAA,CAAAC,QAAA,mBAAaN,OAAO,CAACO,IAAI,CAAC,WAAW,CAAC;IACtC;;;EAGFtC,MAAM,CAACuC,SAAS,GAAGvC,MAAM,CAACuC,SAAS,IAAI,EAAE;EAEzC,MAAMC,SAAS,GAAwB;IACrC,GAAGN;GACJ;EACDlC,MAAM,CAACuC,SAAS,CAACE,IAAI,CAACD,SAAS,CAAC;AAClC,CAAC;AAED,AAAO,MAAME,QAAQ,GAAiB,MAAA/B,IAAA;MAAO;IAC3CgC,UAAU,EAAE;MAAE/B,SAAS;MAAElB;KAAO;IAChCkD;GACD,GAAAjC,IAAA;EACCsB,WAAW,CAAC;IACVY,KAAK,EAAE,mBAAmB;IAC1BC,MAAM,EAAE,mBAAmB;IAC3BC,QAAQ,EAAE,SAAS;IAEnBC,KAAK,EAAEpC,SAAS;IAChB,UAAU,EAAEA,SAAS;IACrB,CAACA,SAAS,GAAGlB,KAAK;IAElBuD,OAAO,EAAE,SAAS;IAClBC,UAAU,EAAEN;GACb,CAAC;EAEF,OAAO,IAAI;AACb,CAAC;;AC/BD,MAAMrC,MAAI,MAAMC,iBAAS,CAACD,YAAY;AAEtC,AAAO,MAAM4C,MAAM,GAAe,MAAAxC,IAAA;MAAO;IACvCgC,UAAU,EAAE;MAAE/B,SAAS;MAAElB;KAAO;IAChCkD;GACD,GAAAjC,IAAA;EACC,MAAMG,GAAG,MAAMP,eAAa;EAE5B,MAAM6C,aAAa,GAAGzD,iBAAS,CAAC,eAAe,CAAC;EAEhD,MAAM0D,KAAK,GAAGC,YAAY,CAACC,OAAO,CAAC,MAAM,CAAC;EAC1C,MAAMC,EAAE,GAAG7D,iBAAS,CAAC,KAAK,CAAC;EAE3B,MAAM8D,OAAO,GAAG;IACdJ,KAAK;IACLG,EAAE;IACFE,IAAI,EAAE/E,UAAU,CAACC,QAAQ;IACzBwE,aAAa;IACbjC,IAAI,EAAE;MACJ,CAACP,SAAS,GAAG,CAAClB,KAAK;KACpB;IACDiE,QAAQ,EAAE;MAAEf;;GACb;EAED,IAAI;IACF,MAAMgB,QAAQ,GAAG,MAAMxC,KAAK,CAACN,GAAG,EAAE;MAChC+C,MAAM,EAAE,MAAM;MACdvC,WAAW,EAAE,SAAS;MACtBC,OAAO,EAAEC,oBAAY;MACrBsC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACP,OAAO;KAC7B,CAAC;IAEF,MAAMhC,IAAI,GAAG,MAAMmC,QAAQ,CAACnC,IAAI,EAAE;IAElC,OAAOA,IAAI;GACZ,CAAC,OAAOK,CAAC,EAAE;IACVC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;IAChB,OAAO,IAAI;;AAEf,CAAC;;AC7CM,MAAMmC,kBAAkB,GAAGA;EAChC,IAAI,OAAOjE,MAAM,KAAK,WAAW,EAAE;IACjC,OAAO,KAAK;;EAGd,MAAMkE,KAAK,GAAGvE,iBAAS,CAAC,OAAO,CAAC;EAEhC,OAAO,CAAC,EAAEuE,KAAK,IAAI,CAACC,kBAAU,EAAE,CAAC;AACnC,CAAC;;MCEY1B,IAAI,GAAa,MAAA9B,IAAA;MAAO;IAAEgC,UAAU;IAAEC;GAAQ,GAAAjC,IAAA;EACzD,IAAI,CAACZ,yBAAyB,EAAE,EAAE;IAChC,MAAM,IAAIqE,KAAK,CAAC,+BAA+B,CAAC;;EAGlD,IAAIH,kBAAkB,EAAE,EAAE;IACxB,MAAM,IAAIG,KAAK,CAAC,+BAA+B,CAAC;;EAGlD,MAAM;IAAExD;GAAW,GAAG+B,UAAU;EAEhC,MAAM0B,aAAa,GAAG,MAAM3D,aAAa,CAAC;IACxCE;GACD,CAAC;EAEF,IACEyD,aAAa,CAAC,CAAC,CAAC,IAChBA,aAAa,CAAC,CAAC,CAAC,CAACC,IAAI,KAAK1D,SAAS,IACnCyD,aAAa,CAAC,CAAC,CAAC,CAACE,mBAAmB,KAAKjG,mBAAmB,CAACE,cAAc,EAC3E;IACA,MAAM,IAAI4F,KAAK,CAAC,gBAAgB,CAAC;;EAGnC,MAAMV,IAAI,GACRW,aAAa,CAAC,CAAC,CAAC,IAAIA,aAAa,CAAC,CAAC,CAAC,CAACG,QAAQ,KAAK,IAAI,GAClD7F,UAAU,CAACC,QAAQ,GACnBD,UAAU,CAACE,QAAQ;EAEzB,IAAI,CAACwF,aAAa,CAAC,CAAC,CAAC,IAAAlC,OAAA,CAAAC,GAAA,CAAAC,QAAA,iBAAW,EAAE;IAChCN,OAAO,CAACO,IAAI,gCAAgC1B,8BAA8B,CAAC;;EAG7E,IAAI8C,IAAI,KAAK/E,UAAU,CAACC,QAAQ,EAAE;IAChC,OAAOuE,MAAM,CAAC;MAAER,UAAU;MAAEC;KAAQ,CAAC;GACtC,MAAM;IACL,OAAOF,QAAQ,CAAC;MAAEC,UAAU;MAAEC;KAAQ,CAAC;;AAE3C,CAAC;;AClCD,MAAM6B,kBAAkB,gBAAGC,gBAAM,CAAC,QAAQ,EAAE;EAC1CC,OAAO,EAAE,oBAAoB;EAC7BC,OAAO,EAAE,MAAM;EACfC,cAAc,EAAE,eAAe;EAC/BC,KAAK,EAAE,MAAM;EACbC,eAAe,EAAE,YAAY;EAC7BC,KAAK,EAAE,UAAU;EACjBC,UAAU,EAAE,OAAO;EACnBC,QAAQ,EAAE,MAAM;EAChBC,UAAU,EAAE,QAAQ;EACpBC,UAAU,EAAE,MAAM;EAClBC,iBAAiB,EAAE,MAAM;EACzBC,YAAY,EAAE,UAAU;EACxBC,QAAQ,EAAE,UAAU;EACpBC,WAAW,EAAE,aAAa;EAC1BC,gBAAgB,EAAE,MAAM;EACxBC,gBAAgB,EAAE,aAAa;EAC/BC,UAAU,EAAE,MAAM;EAClB,oBAAoB,EAAE,MAAM;EAC5B,YAAY,EAAE;IACZZ,eAAe,EAAEa,eAAK,CAACC,MAAM,CAACC,QAAQ;IACtCN,WAAW,EAAEI,eAAK,CAACC,MAAM,CAACC,QAAQ;IAClCd,KAAK,EAAEY,eAAK,CAACC,MAAM,CAACE,UAAU;IAC9BC,MAAM,EAAE;;CAEX,CAAC;AAEF,MAAMC,mBAAmB,gBAAGvB,gBAAM,CAAC,KAAK,EAAE;EACxCI,KAAK,EAAE,MAAM;EACboB,QAAQ,EAAE,OAAO;EACjBC,YAAY,EAAE,MAAM;EACpBX,WAAW,EAAE,SAAS;EACtBY,WAAW,EAAE,OAAO;EACpBC,WAAW,EAAE,KAAK;EAClBtB,eAAe,EAAE,YAAY;EAC7BQ,QAAQ,EAAE;CACX,CAAC;AAEF,MAAMe,kBAAkB,gBAAG5B,gBAAM,CAAC,QAAQ,EAAE;EAC1CO,UAAU,EAAE,SAAS;EACrBC,QAAQ,EAAE,SAAS;EACnBF,KAAK,EAAE;CACR,CAAC;AAEF;;;;;AAKA,AAAO,MAAMuB,QAAQ,GAAG5F,IAAA;MAAC;IACvB6F,EAAE;IACFxD,KAAK;IACLyD,MAAM;IACNC,QAAQ,GAAG,KAAK;IAChBC,YAAY;IACZC,QAAQ,GAAGA,QAAQ;IACnBd,QAAQ,GAAG;GACI,GAAAnF,IAAA;EACf,MAAM,CAACkG,MAAM,EAAEC,SAAS,CAAC,GAAGC,cAAQ,EAAU;EAC9C,MAAM;IAAEC;GAAc,GAAGC,uBAAa,EAAE;EAExCC,eAAS,CAAC;IACR,IAAIL,MAAM,EAAED,QAAQ,CAACC,MAAM,CAAC;GAC7B,EAAE,CAACA,MAAM,CAAC,CAAC;EAEZ,MAAMM,YAAY,GAAGrB,QAAQ,GAAG;IAAEA,QAAQ,EAAE;GAAM,GAAG,EAAE;;EAGvD,MAAMsB,gBAAgB,GAAGP,MAAM,GAC3B;IAAEF,YAAY,EAAEE;GAAQ,GACxBF,YAAY,GACZ;IAAEA;GAAc,GAChB,EAAE;EAEN,MAAMU,sBAAsB,GAAI3H,KAAa;IAC3C,IAAImH,MAAM,EAAE;MACV,OAAOnH,KAAK,KAAKmH,MAAM,GAAG;QAAES,QAAQ,EAAE;OAAM,GAAG,EAAE;;IAEnD,OAAO5H,KAAK,KAAKiH,YAAY,GAAG;MAAEW,QAAQ,EAAE;KAAM,GAAG,EAAE;GACxD;EAED,OAAON,YAAY,GACjBO,6BAACtB,mBAAmB,QAClBsB,6BAAC9C,kBAAkB;IACjB+B,EAAE,EAAC,EAAE;IACLE,QAAQ,EAAEA,QAAQ;IAClBE,QAAQ,EAAG9E,CAAC,IAAKgF,SAAS,CAAChF,CAAC,CAAC0F,MAAM,CAAC9H,KAAK,CAAC;IAC1C+H,WAAW,EAAEzE,KAAK;OACdmE;KAEJI,4CAAQvE,KAAK,CAAS,EACtBuE,6BAACjB,kBAAkB;IACjB5G,KAAK,EAAC,EAAE;IACRoG,QAAQ;IACRwB,QAAQ;IACRI,KAAK,EAAE;MAAE1C,KAAK,EAAE;;KAEfhC,KAAK,CACa,EACpByD,MAAM,CAACkB,GAAG,CAAEjI,KAAK,IAChB6H,6BAACjB,kBAAkB;IACjB5G,KAAK,EAAEA,KAAK;IACZkI,GAAG,EAAElI,KAAK;OACN2H,sBAAsB,CAAC3H,KAAK;KAE/BA,KAAK,CAET,CAAC,CACiB,EACrB6H,6BAACM,cAAI;IACH7E,KAAK,EAAC,EAAE;IACR8E,IAAI,EAAC,KAAK;IACVC,IAAI,EAAEnC,eAAK,CAACC,MAAM,CAAC,QAAQ,CAAC;IAC5B6B,KAAK,EAAE;MACLM,aAAa,EAAE,MAAM;MACrBzC,QAAQ,EAAE,UAAU;MACpB0C,KAAK,EAAE,MAAM;MACbC,GAAG,EAAE,KAAK;MACVC,SAAS,EAAE;;KAGbZ,6BAACa,sBAAW;IAACV,KAAK,EAAE;MAAEnC,QAAQ,EAAE,UAAU;MAAE0C,KAAK,EAAE;;IAAY,CAC1D,CACa,GAEtBV,6BAACc,gBAAM,CAACC,IAAI;IACVC,aAAa,EAAGzG,CAAC,IAAKgF,SAAS,CAAChF,CAAC,CAAC;IAClC4E,QAAQ,EAAEA,QAAQ;OACdU,gBAAgB;OAChBD;KAEJI,6BAACc,gBAAM,CAACG,OAAO;uBAAkBhC;KAC/Be,6BAACc,gBAAM,CAACI,KAAK,QAAEzF,KAAK,CAAgB,EACpCuE,6BAACc,gBAAM,CAACK,KAAK,OAAG,CACD,EACjBnB,6BAACc,gBAAM,CAACM,OAAO;IACbC,GAAG,EAAE;MAAEC,MAAM,EAAEjD,eAAK,CAACkD,QAAQ,CAACC;KAAM;uBACnBvC;KAEhBC,MAAM,CAACkB,GAAG,CAAEjI,KAAK,IAChB6H,6BAACc,gBAAM,CAACW,IAAI;IAACtJ,KAAK,EAAEA,KAAK;IAAEkI,GAAG,EAAElI;KAC7BA,KAAK,CAET,CAAC,CACa,CAEpB;AACH,CAAC;;AC/HD,MAAMuJ,SAAS,MACbzI,iBAAS,CAAC0I,YAAY,KAAK,6CAA6C,GACpE,kDAAkD,GAClD1I,iBAAS,CAAC0I,qCACS;AAEzB,MAAaC,QAAQ,GAA4BxI,IAAA;MAAC;IAChDiC,MAAM;IACNhC,SAAS;IACToC,KAAK;IACLoG,oBAAoB;IACpBzC,YAAY;IACZb,QAAQ;IACRuD,MAAM;IACNzC,QAAQ,GAAGA,QAAQ;IACnB0C,UAAU,GAAGA,QAAQ;IACrBC,YAAY,GAAGA,MAAM,IAAI;IACzBC;GACD,GAAA7I,IAAA;EACC,MAAM,CAAC8I,MAAM,EAAEC,SAAS,CAAC,GAAG3C,cAAQ,CAACqC,oBAAoB,CAAC;EAE1D,MAAM,CAAC9B,QAAQ,EAAEqC,WAAW,CAAC,GAAG5C,cAAQ,CAAC,EAAE,CAAC;EAE5C,MAAM6C,YAAY,GAAGC,mBAAS,CAACZ,SAAS,CAAC;EAEzC/B,eAAS,CAAC;IACR,MAAM4C,WAAW,GAAG;MAClB,IAAI;QAAA,IAAAC,OAAA;QACF,MAAMN,MAAM,GAAG,QAAAM,OAAA,GAAM/J,MAAM,cAAA+J,OAAA,gBAAAA,OAAA,GAANA,OAAA,CAAQC,QAAQ,cAAAD,OAAA,uBAAhBA,OAAA,CAAkBE,eAAe,CAAC;UAAErJ;SAAW,CAAC;QACrE,IAAI6I,MAAM,EAAE;UACVC,SAAS,CAACD,MAAM,CAAC,CAAC,CAAC,CAAC;SACrB,MAAM;UACL1H,OAAO,CAACmI,KAAK,CAAC,sBAAsB,EAAEtJ,SAAS,CAAC;;OAEnD,CAAC,OAAOkB,CAAC,EAAE;QACVC,OAAO,CAACO,IAAI,CAAC,sBAAsB,EAAE1B,SAAS,EAAEkB,CAAC,CAAC;;KAErD;IAED,IAAI8H,YAAY,KAAKO,sBAAY,CAACC,KAAK,IAAI,EAAEZ,QAAQ,IAAIC,MAAM,CAAC,EAAE;MAChEK,WAAW,EAAE;;GAEhB,EAAE,CAACF,YAAY,CAAC,CAAC;EAElB1C,eAAS,CAAC;IACR,MAAMmD,cAAc,GAAG;MACrB,IAAI;QAAA,IAAAC,QAAA;QACF,MAAMC,MAAM,GAAG,QAAAD,QAAA,GAAMtK,MAAM,cAAAsK,QAAA,gBAAAA,QAAA,GAANA,QAAA,CAAQN,QAAQ,cAAAM,QAAA,uBAAhBA,QAAA,CAAkB7H,IAAI,CAAC;UAC1CE,UAAU,EAAE;YAAE/B,SAAS;YAAElB,KAAK,EAAE4H;WAAU;UAC1C1E;SACD,CAAC;QAEF,MAAM4H,OAAO,GACXD,MAAM,KAAK,IAAI,GACX,KAAK,GACLA,MAAM,GACNA,MAAM,CAAC5I,MAAM,KAAKC,sBAAc,CAAClD,OAAO,GACxC,IAAI;QAEV4K,UAAU,CAAC;UACTmB,UAAU,EAAE,IAAI;UAChBD;SACD,CAAC;OACH,CAAC,OAAO1I,CAAC,EAAE;QACVwH,UAAU,CAAC;UACTmB,UAAU,EAAE,KAAK;UACjBD,OAAO,EAAE;SACV,CAAC;;KAEL;IAED,IAAIZ,YAAY,KAAKO,sBAAY,CAACC,KAAK,IAAIf,MAAM,IAAI/B,QAAQ,EAAE;MAC7D+C,cAAc,EAAE;;GAEnB,EAAE,CAACT,YAAY,EAAEP,MAAM,CAAC,CAAC;EAE1B,MAAMjC,gBAAgB,GAAGT,YAAY,IAAI8C,MAAM,GAAG;IAAE9C;GAAc,GAAG,EAAE;EAEvE,MAAM+D,SAAS,GAAG,EAAElB,QAAQ,IAAIC,MAAM,CAAC;EAEvC,MAAMtC,YAAY,GAAGrB,QAAQ,IAAI4E,SAAS,GAAG;IAAE5E,QAAQ,EAAE;GAAM,GAAG,EAAE;;;EAIpE,MAAMW,MAAM,GAAGgD,MAAM,GACjB,CAAC,GAAGA,MAAM,CAAChD,MAAM,CAAC,CACfkE,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,KAAK,GAAGD,CAAC,CAACC,KAAK,CAAC,CACjCC,MAAM,CAAErL,KAAK,IAAKA,KAAK,CAACsL,QAAQ,KAAK,IAAI,CAAC,CAC1CD,MAAM,CAACxB,YAAY,CAAC,GACvB,EAAE;EAEN,OACEhC,6BAAC0D,aAAa,QACXzB,QAAQ,IACPjC,6BAACc,gBAAM,CAACC,IAAI;IACVC,aAAa,EAAGzG,CAAC;MACf6H,WAAW,CAAC7H,CAAC,CAAC;MACd8E,QAAQ,CAAC;QAAElH,KAAK,EAAEoC;OAAG,CAAC;KACvB;OACGsF,gBAAgB;OAChBD;KAEHqC,QAAQ,CAEZ,EACA,CAACA,QAAQ,IAAI,CAACC,MAAM,IACnBlC,6BAAChB,QAAQ;IACPC,EAAE,EAAE,SAAS;IACbxD,KAAK,EAAE,YAAY;IACnByD,MAAM,EAAE,EAAE;IACVX,QAAQ,EAAE;IAEb,EACA,CAAC0D,QAAQ,IAAIC,MAAM,IAClBlC,6BAAChB,QAAQ;IACPC,EAAE,EAAEiD,MAAM,CAACnF,IAAI;IACftB,KAAK,EAAEA,KAAK,IAAIyG,MAAM,CAACnF,IAAI;IAC3BsC,QAAQ,EAAG9E,CAAC;MACV6H,WAAW,CAAC7H,CAAC,CAAC;MACd8E,QAAQ,CAAC;QAAElH,KAAK,EAAEoC;OAAG,CAAC;KACvB;IACD2E,MAAM,EAAEA,MAAM,CAACkB,GAAG,CAAEjI,KAAK,IAAKA,KAAK,CAAC4E,IAAI,CAAC;IACzCqC,YAAY,EAAEA,YAAY;IAC1Bb,QAAQ,EAAEA;IAEb,CACa;AAEpB,CAAC;AAED,MAAMmF,aAAa,gBAAGvG,gBAAM,CAAC,KAAK,EAAE;EAClCwG,SAAS,EAAE,YAAY;EACvBtG,OAAO,EAAE,MAAM;EACfuG,YAAY,EAAE,MAAM;EACpBC,aAAa,EAAE,QAAQ;EACvB,UAAU,EAAE;IACVzG,OAAO,EAAE;GACV;EACD,KAAK,EAAE;IAAEuG,SAAS,EAAE;;CACrB,CAAC;;ACxKF,MAAMG,SAAS,MACb7K,iBAAS,CAACD,IAAI,KAAK,sCAAsC,GACrD,0CAA0C,GAC1CC,iBAAS,CAACD,gCACY;AAE5B,AAAO,MAAM+K,SAAS,GAAG;EACvB,IAAIC,QAAQ,GAAsCC,SAAS;;EAG3D,MAAM5H,QAAQ,GAAG,MAAMxC,KAAK,CAACiK,SAAS,CAAC;EACvC,MAAMI,YAAY,GAAqB,MAAM7H,QAAQ,CAACnC,IAAI,EAAE;;;EAK5D,MAAM;IAAEnB,YAAY;IAAEoL;GAAa,GAAGrL,aAAK,EAAE;EAC7CsL,MAAM,CAACC,IAAI,CAACH,YAAY,CAAC,CAACI,OAAO,CAAEC,SAAS;IAC1C,IACExL,YAAY,IACZwL,SAAS,CAACC,KAAK,CAAC,GAAG,CAAC,CAACnM,QAAQ,CAACU,YAAY,CAAC0L,WAAW,EAAE,CAAC,EACzD;MACAT,QAAQ,GAAGE,YAAY,CAACK,SAAS,CAAC;KACnC,MAAM,IAAIJ,WAAW,KAAK,KAAK,IAAII,SAAS,KAAK,KAAK,EAAE;MACvDP,QAAQ,GAAGE,YAAY,CAACK,SAAS,CAAC;;GAErC,CAAC;;;EAKF,IAAI,OAAOP,QAAQ,KAAK,WAAW,IAAIE,YAAY,CAAC,GAAG,CAAC,EAAE;IACxDF,QAAQ,GAAGE,YAAY,CAAC,GAAG,CAAC;;EAG9B,OAAOF,QAAQ;AACjB,CAAC;;ACtCM,MAAMU,YAAY,GAAsBC,GAAW;EACxD,MAAMC,KAAK,GAAGD,GAAG,CAACH,KAAK,CAAC,uBAAuB,CAAC;EAChD,MAAMK,MAAM,GAAGD,KAAK,CAACxE,GAAG,CAAEuE,GAAG;IAC3B,IAAIA,GAAG,KAAK,oBAAoB,EAAE;MAChC,OACE3E;QACEC,MAAM,EAAC,QAAQ;QACfE,KAAK,EAAE;UAAE1C,KAAK,EAAE;SAAW;QAC3BqH,SAAS,EAAC,WAAW;QACrBC,IAAI,EAAC;0BAGH;;IAGR,OAAOJ,GAAG;GACX,CAAC;EAEF,MAAMK,QAAQ,GAAGH,MAAM,CAACI,MAAM,CAC5B,CAACC,IAAI,EAAEC,OAAO,KACZnF,4DACGkF,IAAI,EACJC,OAAO,CAEX,EACDnF,2DAAK,CACN;EAED,OAAOgF,QAAQ;AACjB,CAAC;;AC1BD,MAAM/M,QAAM,GAAG,uBAAuB;AAkCtC,AAAO,MAAMmN,yBAAyB,GAAGhM,IAAA;MAAC;IACxCiM;GAGD,GAAAjM,IAAA;EACC,MAAM,CAACkM,cAAc,EAAEC,iBAAiB,CAAC,GAAG/F,cAAQ,EAAuB;EAE3E,MAAM,CAACgG,mBAAmB,EAAEC,sBAAsB,CAAC,GAAGjG,cAAQ,CAAC,KAAK,CAAC;EACrE,MAAM,CAACkG,cAAc,EAAEC,iBAAiB,CAAC,GAAGnG,cAAQ,CAAC,KAAK,CAAC;EAE3DG,eAAS,CAAC;;IACR,IAAIrH,mBAAmB,EAAE,EAAE;MACzBiN,iBAAiB,CAAC,IAAI,CAAC;MACvB;;IAGF,IAAI,CAAC9M,MAAM,CAACmN,QAAQ,EAAE;MACpBpL,OAAO,CAACO,IAAI,CAAC,6BAA6B,CAAC;;IAG7C,IAAI,CAAAyH,OAAA,GAAA/J,MAAM,cAAA+J,OAAA,eAANA,OAAA,CAAQqD,WAAW,IAAIR,gBAAgB,EAAE;MAC3CI,sBAAsB,CAAC,IAAI,CAAC;KAC7B,MAAM,IAAIhN,MAAM,CAACmN,QAAQ,EAAE;MAC1BD,iBAAiB,CAAC,IAAI,CAAC;KACxB,MAAM;MACLnL,OAAO,CAACO,IAAI,CAAC,iDAAiD,CAAC;;GAElE,EAAE,EAAE,CAAC;EAEN4E,eAAS,CAAC;IACR,IAAImG,SAAS,GAAwBA,QAAQ;IAC7C,IAAIN,mBAAmB,IAAI/M,MAAM,CAACoN,WAAW,EAAE;MAC7CC,SAAS,GAAGC,2BAAuB,CAAC9N,QAAM,EAAE;QAC1C,IAAIK,mBAAmB,EAAE,EAAE;UACzBiN,iBAAiB,CAAC,IAAI,CAAC;SACxB,MAAM;UACLA,iBAAiB,CAAC,KAAK,CAAC;;OAE3B,CAAC;;IAEJ,OAAOO,SAAS,KAAK,QAAQ,CAAC;GAC/B,EAAE,CAACN,mBAAmB,CAAC,CAAC;EAEzB7F,eAAS,CAAC;IACR,IAAIqG,UAAkB;IACtB,IAAIN,cAAc,IAAIjN,MAAM,CAACmN,QAAQ,EAAE;MACrC,MAAMK,QAAQ,GAAGA,CAACC,OAAe,EAAEC,OAAgB;QACjD,IAAIA,OAAO,EAAE;UACXH,UAAU,GAAGE,OAAO,CAACF,UAAU;;;;;;UAQ/B,IAAI1N,mBAAmB,EAAE,EAAE;YACzBiN,iBAAiB,CAAC,IAAI,CAAC;;;OAG5B;MAED9M,MAAM,CAACmN,QAAQ,CAAC,kBAAkB,EAAE,CAAC,EAAEK,QAAQ,CAAC;;;IAIlD,OAAO;MACL,IAAIxN,MAAM,CAACmN,QAAQ,IAAII,UAAU,EAC/BvN,MAAM,CAACmN,QAAQ,CACb,qBAAqB,EACrB,CAAC,EACAO,OAAO;QACN3L,OAAO,CAACC,KAAK,CAAC0L,OAAO,CAAC;OACvB,EACDH,UAAU,CACX;KACJ;GACF,EAAE,CAACN,cAAc,CAAC,CAAC;EAEpB,OAAO;IAAEJ,cAAc;IAAEE,mBAAmB;IAAEE;GAAgB;AAChE,CAAC;;MCrGYU,YAAY,GAA8BhN,IAAA;MAAC;IACtD2I,UAAU,GAAGA,QAAQ;IACrBsD,gBAAgB,GAAG;GACpB,GAAAjM,IAAA;EACC,MAAM,CAACiN,UAAU,EAAEC,aAAa,CAAC,GAAG9G,cAAQ,CAAkB,IAAI,CAAC;EACnE,MAAM,CAAC+G,mBAAmB,EAAEC,sBAAsB,CAAC,GACjDhH,cAAQ,CAAqB,IAAI,CAAC;EACpC,MAAM,CAACwE,QAAQ,EAAEyC,WAAW,CAAC,GAAGjH,cAAQ,EAAyB;EACjE,MAAM;IAAE8F;GAAgB,GAAGF,yBAAyB,CAAC;IAAEC;GAAkB,CAAC;EAE1E1F,eAAS,CAAC;IACR,CAAC;MACC,MAAMuC,MAAM,GAAG,MAAM6B,SAAS,EAAE;MAChC0C,WAAW,CAACvE,MAAM,CAAC;MAEnB,IAAI,CAACA,MAAM,EAAE;QACX1H,OAAO,CAACmI,KAAK,CAAC,iBAAiB,CAAC;;KAEnC,GAAG;GACL,EAAE,EAAE,CAAC;EAENhD,eAAS,CAAC;IACR,IAAIqE,QAAQ,EAAE;;;MAIZ,IAAI,mBAAmB,IAAIA,QAAQ,IAAIA,QAAQ,CAAC0C,iBAAiB,EAAE;;;;QAIjE,IAAIpB,cAAc,EAAE;UAClBgB,aAAa,CAACtC,QAAQ,CAAC2C,sBAAsB,CAAC;SAC/C,MAAM;UACLL,aAAa,CAACtC,QAAQ,CAAC4C,uBAAuB,CAAC;;OAElD,MAAM,IAAI,YAAY,IAAI5C,QAAQ,EAAE;QACnCsC,aAAa,CAACtC,QAAQ,CAACqC,UAAU,CAAC;OACnC,MAAM;QACL7L,OAAO,CAACmI,KAAK,CAAC,gBAAgB,CAAC;;;GAGpC,EAAE,CAACqB,QAAQ,EAAEsB,cAAc,CAAC,CAAC;EAE9B3F,eAAS,CAAC;IACR,IAAI0G,UAAU,IAAIQ,KAAK,CAACC,OAAO,CAACT,UAAU,CAAC,EAAE;MAC3CG,sBAAsB,CACpBH,UAAU,CAACpB,MAAM,CAAC,CAACC,IAAI,EAAEC,OAAO;QAC9B,OACEnF,4DACGkF,IAAI,EACLlF,wCAAI0E,YAAY,CAACS,OAAO,CAAC,CAAK,CAC7B;OAEN,EAAEnF,2DAAK,CAAC,CACV;;MAGD+B,UAAU,CAAC;QACTmB,UAAU,EAAE,IAAI;QAChBD,OAAO,EAAE;OACV,CAAC;;GAEL,EAAE,CAACoD,UAAU,CAAC,CAAC;EAEhB,OAAOA,UAAU,KAAK,IAAI,GACxBrG;oBAAkB;IAA8B,GAEhDA;oBAAkB;KAAiBuG,mBAAmB,CACvD;AACH,CAAC;;;;;;;;;;;;"}
1
+ {"version":3,"file":"subs-de-inputs.cjs.development.js","sources":["../src/interfaces/index.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/components/DEDisclosure/utils/checkCookie.ts","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/index.tsx","../src/constants/IngestDataTypes.ts"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { ENDPOINTS, WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\nconst configSrc = `${\n ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n ? 'https://www.washingtonpost.com/subscribe'\n : ENDPOINTS.base\n}/config/de/disclosure.json`;\n\nexport const getConfig = async () => {\n let myConfig: DisclosureConfigValue | undefined = undefined;\n\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country- or region-specific config found, use that\n const { country_code, intl_region } = WPGeo();\n Object.keys(remoteConfig).forEach((configKey) => {\n if (\n country_code &&\n configKey.split('|').includes(country_code.toLowerCase())\n ) {\n myConfig = remoteConfig[configKey];\n } else if (intl_region === 'EEA' && configKey === 'eea') {\n myConfig = remoteConfig[configKey];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import React from 'react';\n\ntype hydrateLinksType = (str: string) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str: string) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkCookie } from '../utils/checkCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ninterface TCData {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n}\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window?.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n let cleanupFn: (() => void) | null = () => {};\n if (listenToCookieStore && window.cookieStore) {\n cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n }\n return cleanupFn || (() => {});\n }, [listenToCookieStore]);\n\n useEffect(() => {\n let listenerId: number;\n if (listenToTcfApi && window.__tcfapi) {\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n }\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce((prev, current) => {\n return (\n <>\n {prev}\n <p>{hydrateLinks(current)}</p>\n </>\n );\n }, <></>)\n );\n\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>\n );\n};\n","export const FirstPartyIngestDataTypes = {\n JOB_LEVEL: 'profile_job_level',\n JOB_INDUSTRY: 'profile_job_industry',\n PERSONAL_GOALS: 'personal_goals',\n HOBBIES: 'hobbies',\n PROFESSIONAL_GOALS: 'professional_goals',\n INDUSTRY: 'industry',\n NEWS_LOCATION: 'news_location',\n NY_PERSONAL_GOALS: 'new_year_personal_goals',\n NY_HOBBIES: 'new_year_hobbies',\n NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',\n NY_INDUSTRY: 'new_year_industry',\n NY_NEWS_LOCATION: 'new_year_news_location',\n} as const;"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","hasRequiredPrivacyCookies","window","wp_usp","getCookie","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","_ref","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","sendGAEvent","props","process","env","NODE_ENV","warn","dataLayer","eventData","push","sendToGA","submitData","value","source","event","action","category","label","section","subsection","ingest","wapo_login_id","jucid","localStorage","getItem","ga","payload","type","metadata","response","method","body","JSON","stringify","isAnonymousWebview","wp_wv","isLoggedIn","Error","attributeInfo","name","collection_behavior","explicit","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","DESelect","dataDictionaryConfig","submit","onFinished","valuesFilter","children","config","setConfig","setSelected","scriptStatus","useScript","fetchConfig","_window","__twpdeu","getFieldConfigs","error","ScriptStatus","READY","submitSelected","_window2","result","isError","isFinished","isLoading","sort","a","b","order","filter","archived","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","getConfig","myConfig","undefined","remoteConfig","intl_region","Object","keys","forEach","configKey","split","includes","toLowerCase","hydrateLinks","str","array","chunks","className","href","toReturn","reduce","prev","current","COOKIE","checkCookie","length","useOneTrustAlertBoxClosed","allowCookieStore","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","DEDisclosure","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","setMyConfig","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","FirstPartyIngestDataTypes","JOB_LEVEL","JOB_INDUSTRY","PERSONAL_GOALS","HOBBIES","PROFESSIONAL_GOALS","INDUSTRY","NEWS_LOCATION","NY_PERSONAL_GOALS","NY_HOBBIES","NY_PROFESSIONAL_GOALS","NY_INDUSTRY","NY_NEWS_LOCATION"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("@washingtonpost/subs-sdk"),o=require("react"),n=(e=o)&&"object"==typeof e&&"default"in e?e.default:e,i=require("@washingtonpost/wpds-ui-kit"),a=require("@washingtonpost/subs-hooks"),s=require("@washingtonpost/wpds-assets");const r={COLLECT:"COLLECT",DO_NOT_COLLECT:"DO_NOT_COLLECT"},l={EXPLICIT:"explicit",IMPLICIT:"implicit"},c=()=>(t.getCookie("OptanonAlertBoxClosed")||"").length>12,d=()=>{var e;if("undefined"==typeof window)return!1;const o=(()=>{const e=t.getCookie("OptanonConsent")||"";return!!e.includes("C0004%3A1")||!e.includes("C0004%3A0")&&null})();if("boolean"==typeof o&&c())return o;const n=t.getCookie("wp_usp"),i=null===(e=t.WPGeo())||void 0===e?void 0:e.country_code;return!(!n||"US"!==i)},u=t.ENDPOINTS.base+"/de/v1",p={},f=async e=>{let{fieldName:o}=e;if(p[o])return p[o];const n=[o];try{const e=new URL(u+"/attributes");e.searchParams.set("attributes",n.join(","));const i=await fetch(e.toString(),{credentials:"include",headers:t.JSON_HEADERS}),a=await i.json();if(i.ok&&a.status===t.ResponseStatus.SUCCESS){const e=a.attributes||[];return p[o]=e,e}return[]}catch(e){return console.debug(e),[]}},w=t.ENDPOINTS.base+"/de/v1",E=i.styled("select",{padding:"12px 16px 12px 6px",display:"flex",justifyContent:"space-between",width:"100%",backgroundColor:"$secondary",color:"$primary",fontFamily:"$meta",fontSize:"$100",fontWeight:"$light",lineHeight:"$125",paddingBlockRight:"$125",textOverflow:"ellipsis",position:"relative",borderColor:"transparent",borderRightWidth:"10px",borderRightColor:"transparent",appearance:"none","-webkit-appearance":"none","&:disabled":{backgroundColor:i.theme.colors.disabled,borderColor:i.theme.colors.disabled,color:i.theme.colors.onDisabled,cursor:"not-allowed"}}),g=i.styled("div",{width:"100%",maxWidth:"380px",borderRadius:"$012",borderColor:"$subtle",borderStyle:"solid",borderWidth:"1px",backgroundColor:"$secondary",position:"relative"}),b=i.styled("option",{fontFamily:"inherit",fontSize:"inherit",color:"inherit"}),m=e=>{let{id:t,label:r,values:l,required:c=!1,defaultValue:d,onChange:u=(()=>{}),disabled:p=!1}=e;const[f,w]=o.useState(),{isMobileSize:m}=a.useWindowSize();o.useEffect(()=>{f&&u(f)},[f]);const h=p?{disabled:!0}:{},S=f?{defaultValue:f}:d?{defaultValue:d}:{},C=e=>f?e===f?{selected:!0}:{}:e===d?{selected:!0}:{};return m?n.createElement(g,null,n.createElement(E,{id:"",required:c,onChange:e=>w(e.target.value),placeholder:r,...h},n.createElement("label",null,r),n.createElement(b,{value:"",disabled:!0,selected:!0,style:{color:"#666666"}},r),l.map(e=>n.createElement(b,{value:e,key:e,...C(e)},e))),n.createElement(i.Icon,{label:"",size:"100",fill:i.theme.colors.gray80,style:{pointerEvents:"none",position:"absolute",right:"10px",top:"50%",transform:"translateY(-50%)"}},n.createElement(s.ChevronDown,{style:{position:"absolute",right:"10px"}}))):n.createElement(i.Select.Root,{onValueChange:e=>w(e),required:c,...S,...h},n.createElement(i.Select.Trigger,{"data-test-id":t+"-select-trigger"},n.createElement(i.Select.Label,null,r),n.createElement(i.Select.Value,null)),n.createElement(i.Select.Content,{css:{zIndex:i.theme.zIndices.page},"data-test-id":t+"-select-content"},l.map(e=>n.createElement(i.Select.Item,{value:e,key:e},e))))},h=("https://subscribe.washingtonpost.com/static"===t.ENDPOINTS.staticAssets?"https://www.washingtonpost.com/subscribe/static/":t.ENDPOINTS.staticAssets)+"/de-utils/twpdeu.min.js",S=i.styled("div",{boxSizing:"border-box",display:"flex",marginBottom:"$100",flexDirection:"column","& button":{padding:"1px 6px"},"& *":{boxSizing:"border-box"}}),C=("https://subscribe.washingtonpost.com"===t.ENDPOINTS.base?"https://www.washingtonpost.com/subscribe":t.ENDPOINTS.base)+"/config/de/disclosure.json";exports.AttributesState={SUCCESS:"100"},exports.CollectionBehaviors=r,exports.DEDisclosure=e=>{let{onFinished:i=(()=>{}),allowCookieStore:a=!0}=e;const[s,r]=o.useState(null),[l,d]=o.useState(null),[u,p]=o.useState(),{alertBoxClosed:f}=(e=>{let{allowCookieStore:n}=e;const[i,a]=o.useState(),[s,r]=o.useState(!1),[l,d]=o.useState(!1);return o.useEffect(()=>{var e;c()?a(!0):(window.__tcfapi||console.warn("warning: __tcfapi not found"),null!==(e=window)&&void 0!==e&&e.cookieStore&&n?r(!0):window.__tcfapi?d(!0):console.warn("warning: neither cookieStore nor __tcfapi found"))},[]),o.useEffect(()=>{let e=()=>{};return s&&window.cookieStore&&(e=t.listenToCookieStore("OptanonAlertBoxClosed",()=>{c()?a(!0):a(!1)})),e||(()=>{})},[s]),o.useEffect(()=>{let e;return l&&window.__tcfapi&&window.__tcfapi("addEventListener",2,(t,o)=>{o&&(e=t.listenerId,c()&&a(!0))}),()=>{window.__tcfapi&&e&&window.__tcfapi("removeEventListener",2,e=>{console.debug(e)},e)}},[l]),{alertBoxClosed:i,listenToCookieStore:s,listenToTcfApi:l}})({allowCookieStore:a});return o.useEffect(()=>{(async()=>{const e=await(async()=>{let e=void 0;const o=await fetch(C),n=await o.json(),{country_code:i,intl_region:a}=t.WPGeo();return Object.keys(n).forEach(t=>{(i&&t.split("|").includes(i.toLowerCase())||"EEA"===a&&"eea"===t)&&(e=n[t])}),void 0===e&&n._&&(e=n._),e})();p(e),e||console.error("No config found")})()},[]),o.useEffect(()=>{u&&("checkBannerStatus"in u&&u.checkBannerStatus?r(f?u.disclosure_afterbanner:u.disclosure_beforebanner):"disclosure"in u?r(u.disclosure):console.error("Invalid config"))},[u,f]),o.useEffect(()=>{s&&Array.isArray(s)&&(d(s.reduce((e,t)=>n.createElement(n.Fragment,null,e,n.createElement("p",null,t.split(/({{PRIVACY_POLICY}})/g).map(e=>"{{PRIVACY_POLICY}}"===e?n.createElement("a",{target:"_blank",style:{color:"inherit"},className:"underline",href:"https://www.washingtonpost.com/privacy-policy/"},"Privacy Policy"):e).reduce((e,t)=>n.createElement(n.Fragment,null,e,t),n.createElement(n.Fragment,null)))),n.createElement(n.Fragment,null))),i({isFinished:!0,isError:!1}))},[s]),null===s?n.createElement("div",{"data-test-id":"de-disclosure-loading"}):n.createElement("div",{"data-test-id":"de-disclosure"},l)},exports.DESelect=e=>{let{source:s,fieldName:r,label:l,dataDictionaryConfig:c,defaultValue:d,disabled:u,submit:p,onChange:f=(()=>{}),onFinished:w=(()=>{}),valuesFilter:E=(()=>!0),children:g}=e;const[b,C]=o.useState(c),[I,_]=o.useState(""),y=a.useScript(h);o.useEffect(()=>{y!==a.ScriptStatus.READY||g||b||(async()=>{try{var e;const t=await(null===(e=window)||void 0===e||null===(e=e.__twpdeu)||void 0===e?void 0:e.getFieldConfigs({fieldName:r}));t?C(t[0]):console.error("unable to get config",r)}catch(e){console.warn("unable to get config",r,e)}})()},[y]),o.useEffect(()=>{y===a.ScriptStatus.READY&&p&&I&&(async()=>{try{var e;const o=await(null===(e=window)||void 0===e||null===(e=e.__twpdeu)||void 0===e?void 0:e.push({submitData:{fieldName:r,value:I},source:s}));w({isFinished:!0,isError:!0!==o&&(!o||o.status!==t.ResponseStatus.SUCCESS)})}catch(e){w({isFinished:!1,isError:!0})}})()},[y,p]);const v=d&&b?{defaultValue:d}:{},N=u||!g&&!b?{disabled:!0}:{},T=b?[...b.values].sort((e,t)=>e.order-t.order).filter(e=>!0!==e.archived).filter(E):[];return n.createElement(S,null,g&&n.createElement(i.Select.Root,{onValueChange:e=>{_(e),f({value:e})},...v,...N},g),!g&&!b&&n.createElement(m,{id:"loading",label:"Loading...",values:[],disabled:!0}),!g&&b&&n.createElement(m,{id:b.name,label:l||b.name,onChange:e=>{_(e),f({value:e})},values:T.map(e=>e.name),defaultValue:d,disabled:u}))},exports.IngestResponseState={SUCCESS:"100",SYSTEM_ERROR:"101",INVALID_TYPE:"102",INVALID_IDENTIFIER:"103",INVALID_DATA:"104",INVALID_ATTRIBUTE_DEFINITION:"105",INVALID_META_DEFINITION:"106",UNAUTHENTICATED:"107",MISMATCHED_IDENTIFIER:"108",DISABLED_ATTRIBUTE_DEFINITION:"109",DO_NOT_COLLECT:"110"},exports.IngestType=l,exports.getAttributes=f,exports.hasRequiredPrivacyCookies=d,exports.push=async e=>{let{submitData:o,source:n}=e;if(!d())throw new Error("does not satisfy cookie check");if("undefined"!=typeof window&&t.getCookie("wp_wv")&&!t.isLoggedIn())throw new Error("does not satisfy cookie check");const{fieldName:i}=o,a=await f({fieldName:i});if(a[0]&&a[0].name===i&&a[0].collection_behavior===r.DO_NOT_COLLECT)throw new Error("do not collect");const s=a[0]&&!0===a[0].explicit?l.EXPLICIT:l.IMPLICIT;return a[0]||"production"===process.env.NODE_ENV||console.warn(`no attribute info found for ${i}, assuming implicit`),s===l.EXPLICIT?(async e=>{let{submitData:{fieldName:o,value:n},source:i}=e;const a=w+"/ingest",s=t.getCookie("wapo_login_id"),r={jucid:localStorage.getItem("uuid"),ga:t.getCookie("_ga"),type:l.EXPLICIT,wapo_login_id:s,data:{[o]:[n]},metadata:{source:i}};try{const e=await fetch(a,{method:"POST",credentials:"include",headers:t.JSON_HEADERS,body:JSON.stringify(r)});return await e.json()}catch(e){return console.debug(e),null}})({submitData:o,source:n}):(async e=>{let{submitData:{fieldName:t,value:o},source:n}=e;return(e=>{if("undefined"==typeof window)return void("production"!==process.env.NODE_ENV&&console.warn("NO WINDOW"));window.dataLayer=window.dataLayer||[];const t={...e};window.dataLayer.push(t)})({event:"site-onpage-click",action:"site-onpage-click",category:"profile",label:t,"de-label":t,[t]:o,section:"profile",subsection:n}),!0})({submitData:o,source:n})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=require("@washingtonpost/subs-sdk"),o=require("react"),n=(e=o)&&"object"==typeof e&&"default"in e?e.default:e,a=require("@washingtonpost/wpds-ui-kit"),i=require("@washingtonpost/subs-hooks"),s=require("@washingtonpost/wpds-assets");const r={COLLECT:"COLLECT",DO_NOT_COLLECT:"DO_NOT_COLLECT"},l={EXPLICIT:"explicit",IMPLICIT:"implicit"},c=()=>{var e;if("undefined"==typeof window)return!1;const o=t.getCookie("wp_usp"),n=null===(e=t.WPGeo())||void 0===e?void 0:e.country_code;return!(!o||"US"!==n)},d=t.ENDPOINTS.base+"/de/v1",u={},p=async e=>{let{fieldName:o}=e;if(u[o])return u[o];const n=[o];try{const e=new URL(d+"/attributes");e.searchParams.set("attributes",n.join(","));const a=await fetch(e.toString(),{credentials:"include",headers:t.JSON_HEADERS}),i=await a.json();if(a.ok&&i.status===t.ResponseStatus.SUCCESS){const e=i.attributes||[];return u[o]=e,e}return[]}catch(e){return console.debug(e),[]}},E=t.ENDPOINTS.base+"/de/v1",w=a.styled("select",{padding:"12px 16px 12px 6px",display:"flex",justifyContent:"space-between",width:"100%",backgroundColor:"$secondary",color:"$primary",fontFamily:"$meta",fontSize:"$100",fontWeight:"$light",lineHeight:"$125",paddingBlockRight:"$125",textOverflow:"ellipsis",position:"relative",borderColor:"transparent",borderRightWidth:"10px",borderRightColor:"transparent",appearance:"none","-webkit-appearance":"none","&:disabled":{backgroundColor:a.theme.colors.disabled,borderColor:a.theme.colors.disabled,color:a.theme.colors.onDisabled,cursor:"not-allowed"}}),f=a.styled("div",{width:"100%",maxWidth:"380px",borderRadius:"$012",borderColor:"$subtle",borderStyle:"solid",borderWidth:"1px",backgroundColor:"$secondary",position:"relative"}),_=a.styled("option",{fontFamily:"inherit",fontSize:"inherit",color:"inherit"}),g=e=>{let{id:t,label:r,values:l,required:c=!1,defaultValue:d,onChange:u=(()=>{}),disabled:p=!1}=e;const[E,g]=o.useState(),{isMobileSize:b}=i.useWindowSize();o.useEffect(()=>{E&&u(E)},[E]);const S=p?{disabled:!0}:{},h=E?{defaultValue:E}:d?{defaultValue:d}:{},m=e=>E?e===E?{selected:!0}:{}:e===d?{selected:!0}:{};return b?n.createElement(f,null,n.createElement(w,{id:"",required:c,onChange:e=>g(e.target.value),placeholder:r,...S},n.createElement("label",null,r),n.createElement(_,{value:"",disabled:!0,selected:!0,style:{color:"#666666"}},r),l.map(e=>n.createElement(_,{value:e,key:e,...m(e)},e))),n.createElement(a.Icon,{label:"",size:"100",fill:a.theme.colors.gray80,style:{pointerEvents:"none",position:"absolute",right:"10px",top:"50%",transform:"translateY(-50%)"}},n.createElement(s.ChevronDown,{style:{position:"absolute",right:"10px"}}))):n.createElement(a.Select.Root,{onValueChange:e=>g(e),required:c,...h,...S},n.createElement(a.Select.Trigger,{"data-test-id":t+"-select-trigger"},n.createElement(a.Select.Label,null,r),n.createElement(a.Select.Value,null)),n.createElement(a.Select.Content,{css:{zIndex:a.theme.zIndices.page},"data-test-id":t+"-select-content"},l.map(e=>n.createElement(a.Select.Item,{value:e,key:e},e))))},b=("https://subscribe.washingtonpost.com/static"===t.ENDPOINTS.staticAssets?"https://www.washingtonpost.com/subscribe/static/":t.ENDPOINTS.staticAssets)+"/de-utils/twpdeu.min.js",S=a.styled("div",{boxSizing:"border-box",display:"flex",marginBottom:"$100",flexDirection:"column","& button":{padding:"1px 6px"},"& *":{boxSizing:"border-box"}}),h=("https://subscribe.washingtonpost.com"===t.ENDPOINTS.base?"https://www.washingtonpost.com/subscribe":t.ENDPOINTS.base)+"/config/de/disclosure.json",m=()=>(t.getCookie("OptanonAlertBoxClosed")||"").length>12;exports.AttributesState={SUCCESS:"100"},exports.CollectionBehaviors=r,exports.DEDisclosure=e=>{let{onFinished:a=(()=>{}),allowCookieStore:i=!0}=e;const[s,r]=o.useState(null),[l,c]=o.useState(null),[d,u]=o.useState(),{alertBoxClosed:p}=(e=>{let{allowCookieStore:n}=e;const[a,i]=o.useState(),[s,r]=o.useState(!1),[l,c]=o.useState(!1);return o.useEffect(()=>{var e;m()?i(!0):(window.__tcfapi||console.warn("warning: __tcfapi not found"),null!==(e=window)&&void 0!==e&&e.cookieStore&&n?r(!0):window.__tcfapi?c(!0):console.warn("warning: neither cookieStore nor __tcfapi found"))},[]),o.useEffect(()=>{let e=()=>{};return s&&window.cookieStore&&(e=t.listenToCookieStore("OptanonAlertBoxClosed",()=>{m()?i(!0):i(!1)})),e||(()=>{})},[s]),o.useEffect(()=>{let e;return l&&window.__tcfapi&&window.__tcfapi("addEventListener",2,(t,o)=>{o&&(e=t.listenerId,m()&&i(!0))}),()=>{window.__tcfapi&&e&&window.__tcfapi("removeEventListener",2,e=>{console.debug(e)},e)}},[l]),{alertBoxClosed:a,listenToCookieStore:s,listenToTcfApi:l}})({allowCookieStore:i});return o.useEffect(()=>{(async()=>{const e=await(async()=>{let e=void 0;const o=await fetch(h),n=await o.json(),{country_code:a,intl_region:i}=t.WPGeo();return Object.keys(n).forEach(t=>{(a&&t.split("|").includes(a.toLowerCase())||"EEA"===i&&"eea"===t)&&(e=n[t])}),void 0===e&&n._&&(e=n._),e})();u(e),e||console.error("No config found")})()},[]),o.useEffect(()=>{d&&("checkBannerStatus"in d&&d.checkBannerStatus?r(p?d.disclosure_afterbanner:d.disclosure_beforebanner):"disclosure"in d?r(d.disclosure):console.error("Invalid config"))},[d,p]),o.useEffect(()=>{s&&Array.isArray(s)&&(c(s.reduce((e,t)=>n.createElement(n.Fragment,null,e,n.createElement("p",null,t.split(/({{PRIVACY_POLICY}})/g).map(e=>"{{PRIVACY_POLICY}}"===e?n.createElement("a",{target:"_blank",style:{color:"inherit"},className:"underline",href:"https://www.washingtonpost.com/privacy-policy/"},"Privacy Policy"):e).reduce((e,t)=>n.createElement(n.Fragment,null,e,t),n.createElement(n.Fragment,null)))),n.createElement(n.Fragment,null))),a({isFinished:!0,isError:!1}))},[s]),null===s?n.createElement("div",{"data-test-id":"de-disclosure-loading"}):n.createElement("div",{"data-test-id":"de-disclosure"},l)},exports.DESelect=e=>{let{source:s,fieldName:r,label:l,dataDictionaryConfig:c,defaultValue:d,disabled:u,submit:p,onChange:E=(()=>{}),onFinished:w=(()=>{}),valuesFilter:f=(()=>!0),children:_}=e;const[h,m]=o.useState(c),[I,C]=o.useState(""),y=i.useScript(b);o.useEffect(()=>{y!==i.ScriptStatus.READY||_||h||(async()=>{try{var e;const t=await(null===(e=window)||void 0===e||null===(e=e.__twpdeu)||void 0===e?void 0:e.getFieldConfigs({fieldName:r}));t?m(t[0]):console.error("unable to get config",r)}catch(e){console.warn("unable to get config",r,e)}})()},[y]),o.useEffect(()=>{y===i.ScriptStatus.READY&&p&&I&&(async()=>{try{var e;const o=await(null===(e=window)||void 0===e||null===(e=e.__twpdeu)||void 0===e?void 0:e.push({submitData:{fieldName:r,value:I},source:s}));w({isFinished:!0,isError:!0!==o&&(!o||o.status!==t.ResponseStatus.SUCCESS)})}catch(e){w({isFinished:!1,isError:!0})}})()},[y,p]);const N=d&&h?{defaultValue:d}:{},v=u||!_&&!h?{disabled:!0}:{},O=h?[...h.values].sort((e,t)=>e.order-t.order).filter(e=>!0!==e.archived).filter(f):[];return n.createElement(S,null,_&&n.createElement(a.Select.Root,{onValueChange:e=>{C(e),E({value:e})},...N,...v},_),!_&&!h&&n.createElement(g,{id:"loading",label:"Loading...",values:[],disabled:!0}),!_&&h&&n.createElement(g,{id:h.name,label:l||h.name,onChange:e=>{C(e),E({value:e})},values:O.map(e=>e.name),defaultValue:d,disabled:u}))},exports.FirstPartyIngestDataTypes={JOB_LEVEL:"profile_job_level",JOB_INDUSTRY:"profile_job_industry",PERSONAL_GOALS:"personal_goals",HOBBIES:"hobbies",PROFESSIONAL_GOALS:"professional_goals",INDUSTRY:"industry",NEWS_LOCATION:"news_location",NY_PERSONAL_GOALS:"new_year_personal_goals",NY_HOBBIES:"new_year_hobbies",NY_PROFESSIONAL_GOALS:"new_year_professional_goals",NY_INDUSTRY:"new_year_industry",NY_NEWS_LOCATION:"new_year_news_location"},exports.IngestResponseState={SUCCESS:"100",SYSTEM_ERROR:"101",INVALID_TYPE:"102",INVALID_IDENTIFIER:"103",INVALID_DATA:"104",INVALID_ATTRIBUTE_DEFINITION:"105",INVALID_META_DEFINITION:"106",UNAUTHENTICATED:"107",MISMATCHED_IDENTIFIER:"108",DISABLED_ATTRIBUTE_DEFINITION:"109",DO_NOT_COLLECT:"110"},exports.IngestType=l,exports.getAttributes=p,exports.hasRequiredPrivacyCookies=c,exports.push=async e=>{let{submitData:o,source:n}=e;if(!c())throw new Error("does not satisfy cookie check");if("undefined"!=typeof window&&t.getCookie("wp_wv")&&!t.isLoggedIn())throw new Error("does not satisfy cookie check");const{fieldName:a}=o,i=await p({fieldName:a});if(i[0]&&i[0].name===a&&i[0].collection_behavior===r.DO_NOT_COLLECT)throw new Error("do not collect");const s=i[0]&&!0===i[0].explicit?l.EXPLICIT:l.IMPLICIT;return i[0]||"production"===process.env.NODE_ENV||console.warn(`no attribute info found for ${a}, assuming implicit`),s===l.EXPLICIT?(async e=>{let{submitData:{fieldName:o,value:n},source:a}=e;const i=E+"/ingest",s=t.getCookie("wapo_login_id"),r={jucid:localStorage.getItem("uuid"),ga:t.getCookie("_ga"),type:l.EXPLICIT,wapo_login_id:s,data:{[o]:[n]},metadata:{source:a}};try{const e=await fetch(i,{method:"POST",credentials:"include",headers:t.JSON_HEADERS,body:JSON.stringify(r)});return await e.json()}catch(e){return console.debug(e),null}})({submitData:o,source:n}):(async e=>{let{submitData:{fieldName:t,value:o},source:n}=e;return(e=>{if("undefined"==typeof window)return void("production"!==process.env.NODE_ENV&&console.warn("NO WINDOW"));window.dataLayer=window.dataLayer||[];const t={...e};window.dataLayer.push(t)})({event:"site-onpage-click",action:"site-onpage-click",category:"profile",label:t,"de-label":t,[t]:o,section:"profile",subsection:n}),!0})({submitData:o,source:n})};
2
2
  //# sourceMappingURL=subs-de-inputs.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subs-de-inputs.cjs.production.min.js","sources":["../src/interfaces/index.ts","../src/components/DEDisclosure/utils/checkAlertBoxCookie.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/utils/checkConsentCookieForAllowTargeting.ts","../src/services/getAttributes.ts","../src/services/ingest.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/index.tsx","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/utils/push.ts","../src/utils/isAnonymousWebview.ts","../src/services/sendToGA.ts"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\nimport { checkConsentCookieForAllowTargeting } from './checkConsentCookieForAllowTargeting';\nimport { checkAlertBoxCookie } from '../components/DEDisclosure/utils/checkAlertBoxCookie';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (typeof gdprAllowTargarting === 'boolean' && checkAlertBoxCookie()) {\n return gdprAllowTargarting;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\n/**\n * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.\n * Returns true or false if the flag is found in the cookie, null otherwise.\n * @returns {boolean | null}\n */\nexport const checkConsentCookieForAllowTargeting = () => {\n const value = getCookie(COOKIE) || '';\n return value.includes('C0004%3A1')\n ? true\n : value.includes('C0004%3A0')\n ? false\n : null;\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { ENDPOINTS, WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\nconst configSrc = `${\n ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n ? 'https://www.washingtonpost.com/subscribe'\n : ENDPOINTS.base\n}/config/de/disclosure.json`;\n\nexport const getConfig = async () => {\n let myConfig: DisclosureConfigValue | undefined = undefined;\n\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country- or region-specific config found, use that\n const { country_code, intl_region } = WPGeo();\n Object.keys(remoteConfig).forEach((configKey) => {\n if (\n country_code &&\n configKey.split('|').includes(country_code.toLowerCase())\n ) {\n myConfig = remoteConfig[configKey];\n } else if (intl_region === 'EEA' && configKey === 'eea') {\n myConfig = remoteConfig[configKey];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce((prev, current) => {\n return (\n <>\n {prev}\n <p>{hydrateLinks(current)}</p>\n </>\n );\n }, <></>)\n );\n\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>\n );\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkAlertBoxCookie } from '../utils/checkAlertBoxCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ninterface TCData {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n}\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window?.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n let cleanupFn: (() => void) | null = () => {};\n if (listenToCookieStore && window.cookieStore) {\n cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n }\n return cleanupFn || (() => {});\n }, [listenToCookieStore]);\n\n useEffect(() => {\n let listenerId: number;\n if (listenToTcfApi && window.__tcfapi) {\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n }\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React from 'react';\n\ntype hydrateLinksType = (str: string) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str: string) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","IngestType","EXPLICIT","IMPLICIT","checkAlertBoxCookie","getCookie","length","hasRequiredPrivacyCookies","window","gdprAllowTargarting","checkConsentCookieForAllowTargeting","value","includes","wp_usp","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","async","fieldName","_ref","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","SUCCESS","attributes","e","console","debug","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","-webkit-appearance","&:disabled","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","label","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","SelectWrapper","boxSizing","marginBottom","flexDirection","& button","& *","configSrc","onFinished","allowCookieStore","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","myConfig","setMyConfig","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","warn","_window","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","useOneTrustAlertBoxClosed","config","undefined","response","remoteConfig","intl_region","Object","keys","forEach","configKey","split","toLowerCase","getConfig","error","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","reduce","prev","current","str","className","href","isFinished","isError","source","dataDictionaryConfig","submit","valuesFilter","children","setConfig","setSelected","scriptStatus","useScript","ScriptStatus","READY","__twpdeu","getFieldConfigs","fetchConfig","_window2","result","push","submitData","submitSelected","sort","a","b","order","filter","archived","name","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","Error","isLoggedIn","attributeInfo","collection_behavior","type","explicit","process","env","NODE_ENV","wapo_login_id","payload","jucid","localStorage","getItem","ga","[object Object]","metadata","method","body","JSON","stringify","ingest","props","dataLayer","eventData","sendGAEvent","event","action","category","de-label","section","subsection","sendToGA"],"mappings":"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"}
1
+ {"version":3,"file":"subs-de-inputs.cjs.production.min.js","sources":["../src/interfaces/index.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/ingest.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/checkCookie.ts","../src/components/DEDisclosure/index.tsx","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/constants/IngestDataTypes.ts","../src/utils/push.ts","../src/utils/isAnonymousWebview.ts","../src/services/sendToGA.ts"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { ENDPOINTS, WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\nconst configSrc = `${\n ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n ? 'https://www.washingtonpost.com/subscribe'\n : ENDPOINTS.base\n}/config/de/disclosure.json`;\n\nexport const getConfig = async () => {\n let myConfig: DisclosureConfigValue | undefined = undefined;\n\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country- or region-specific config found, use that\n const { country_code, intl_region } = WPGeo();\n Object.keys(remoteConfig).forEach((configKey) => {\n if (\n country_code &&\n configKey.split('|').includes(country_code.toLowerCase())\n ) {\n myConfig = remoteConfig[configKey];\n } else if (intl_region === 'EEA' && configKey === 'eea') {\n myConfig = remoteConfig[configKey];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce((prev, current) => {\n return (\n <>\n {prev}\n <p>{hydrateLinks(current)}</p>\n </>\n );\n }, <></>)\n );\n\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>\n );\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkCookie } from '../utils/checkCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ninterface TCData {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n}\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window?.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n let cleanupFn: (() => void) | null = () => {};\n if (listenToCookieStore && window.cookieStore) {\n cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n }\n return cleanupFn || (() => {});\n }, [listenToCookieStore]);\n\n useEffect(() => {\n let listenerId: number;\n if (listenToTcfApi && window.__tcfapi) {\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n }\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React from 'react';\n\ntype hydrateLinksType = (str: string) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str: string) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","export const FirstPartyIngestDataTypes = {\n JOB_LEVEL: 'profile_job_level',\n JOB_INDUSTRY: 'profile_job_industry',\n PERSONAL_GOALS: 'personal_goals',\n HOBBIES: 'hobbies',\n PROFESSIONAL_GOALS: 'professional_goals',\n INDUSTRY: 'industry',\n NEWS_LOCATION: 'news_location',\n NY_PERSONAL_GOALS: 'new_year_personal_goals',\n NY_HOBBIES: 'new_year_hobbies',\n NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',\n NY_INDUSTRY: 'new_year_industry',\n NY_NEWS_LOCATION: 'new_year_news_location',\n} as const;","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","IngestType","EXPLICIT","IMPLICIT","hasRequiredPrivacyCookies","window","wp_usp","getCookie","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","async","fieldName","_ref","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","SUCCESS","attributes","e","console","debug","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","-webkit-appearance","&:disabled","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","label","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","value","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","SelectWrapper","boxSizing","marginBottom","flexDirection","& button","& *","configSrc","checkCookie","length","onFinished","allowCookieStore","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","myConfig","setMyConfig","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","warn","_window","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","useOneTrustAlertBoxClosed","config","undefined","response","remoteConfig","intl_region","Object","keys","forEach","configKey","split","includes","toLowerCase","getConfig","error","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","reduce","prev","current","str","className","href","isFinished","isError","source","dataDictionaryConfig","submit","valuesFilter","children","setConfig","setSelected","scriptStatus","useScript","ScriptStatus","READY","__twpdeu","getFieldConfigs","fetchConfig","_window2","result","push","submitData","submitSelected","sort","a","b","order","filter","archived","name","JOB_LEVEL","JOB_INDUSTRY","PERSONAL_GOALS","HOBBIES","PROFESSIONAL_GOALS","INDUSTRY","NEWS_LOCATION","NY_PERSONAL_GOALS","NY_HOBBIES","NY_PROFESSIONAL_GOALS","NY_INDUSTRY","NY_NEWS_LOCATION","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","Error","isLoggedIn","attributeInfo","collection_behavior","type","explicit","process","env","NODE_ENV","wapo_login_id","payload","jucid","localStorage","getItem","ga","[object Object]","metadata","method","body","JSON","stringify","ingest","props","dataLayer","eventData","sendGAEvent","event","action","category","de-label","section","subsection","sendToGA"],"mappings":"0TAQaA,EAAsB,CACjCC,QAAS,UACTC,eAAgB,kBAmBLC,EAAa,CACxBC,SAAU,WACVC,SAAU,YC7BCC,EAA4BA,WACvC,GAAsB,oBAAXC,OACT,OAAO,EAGT,MAAMC,EAASC,YAAU,UAEnBC,UAAWC,EAAGC,qBAAOD,SAAPA,EAASE,aAE7B,SAAUL,GAA0B,OAAhBE,ICJhBI,EAAUC,YAAUD,cAEpBE,EAAuC,GAChCC,EAAmCC,MAAAA,QAAOC,UACrDA,GAGDC,EACC,GAAIJ,EAAgBG,GAClB,OAAOH,EAAgBG,GAGzB,MAAME,EAAa,CAACF,GAEpB,IACE,MAAMG,EAAM,IAAIC,IAAOT,iBACvBQ,EAAIE,aAAaC,IAAI,aAAcJ,EAAWK,KAAK,MAEnD,MAAMC,QAAaC,MAAMN,EAAIO,WAAY,CACvCC,YAAa,UACbC,QAASC,iBAELC,QAAaN,EAAKM,OAExB,GAAIN,EAAKO,IAAMD,EAAKE,SAAWC,iBAAeC,QAAS,CACrD,MAAMC,EAAaL,EAAKK,YAAc,GAEtC,OADAtB,EAAgBG,GAAamB,EACtBA,EAEP,MAAO,GAET,MAAOC,GAEP,OADAC,QAAQC,MAAMF,GACP,KChCLzB,EAAUC,YAAUD,cCOpB4B,EAAqBC,SAAO,SAAU,CAC1CC,QAAS,qBACTC,QAAS,OACTC,eAAgB,gBAChBC,MAAO,OACPC,gBAAiB,aACjBC,MAAO,WACPC,WAAY,QACZC,SAAU,OACVC,WAAY,SACZC,WAAY,OACZC,kBAAmB,OACnBC,aAAc,WACdC,SAAU,WACVC,YAAa,cACbC,iBAAkB,OAClBC,iBAAkB,cAClBC,WAAY,OACZC,qBAAsB,OACtBC,aAAc,CACZd,gBAAiBe,QAAMC,OAAOC,SAC9BR,YAAaM,QAAMC,OAAOC,SAC1BhB,MAAOc,QAAMC,OAAOE,WACpBC,OAAQ,iBAINC,EAAsBzB,SAAO,MAAO,CACxCI,MAAO,OACPsB,SAAU,QACVC,aAAc,OACdb,YAAa,UACbc,YAAa,QACbC,YAAa,MACbxB,gBAAiB,aACjBQ,SAAU,aAGNiB,EAAqB9B,SAAO,SAAU,CAC1CO,WAAY,UACZC,SAAU,UACVF,MAAO,YAQIyB,EAAWtD,QAACuD,GACvBA,EAAEC,MACFA,EAAKC,OACLA,EAAMC,SACNA,GAAW,EAAKC,aAChBA,EAAYC,SACZA,EAAWA,SAAQf,SACnBA,GAAW,GACI7C,EACf,MAAO6D,EAAQC,GAAaC,cACtBC,aAAEA,GAAiBC,kBAEzBC,YAAU,KACJL,GAAQD,EAASC,IACpB,CAACA,IAEJ,MAAMM,EAAetB,EAAW,CAAEA,UAAU,GAAS,GAG/CuB,EAAmBP,EACrB,CAAEF,aAAcE,GAChBF,EACA,CAAEA,aAAAA,GACF,GAEEU,EAA0BC,GAC1BT,EACKS,IAAUT,EAAS,CAAEU,UAAU,GAAS,GAE1CD,IAAUX,EAAe,CAAEY,UAAU,GAAS,GAGvD,OAAOP,EACLQ,gBAACxB,OACCwB,gBAAClD,GACCiC,GAAG,GACHG,SAAUA,EACVE,SAAWzC,GAAM2C,EAAU3C,EAAEsD,OAAOH,OACpCI,YAAalB,KACTW,GAEJK,6BAAQhB,GACRgB,gBAACnB,GACCiB,MAAM,GACNzB,YACA0B,YACAI,MAAO,CAAE9C,MAAO,YAEf2B,GAEFC,EAAOmB,IAAKN,GACXE,gBAACnB,GACCiB,MAAOA,EACPO,IAAKP,KACDD,EAAuBC,IAE1BA,KAIPE,gBAACM,QACCtB,MAAM,GACNuB,KAAK,MACLC,KAAMrC,QAAMC,OAAe,OAC3B+B,MAAO,CACLM,cAAe,OACf7C,SAAU,WACV8C,MAAO,OACPC,IAAK,MACLC,UAAW,qBAGbZ,gBAACa,eAAYV,MAAO,CAAEvC,SAAU,WAAY8C,MAAO,YAIvDV,gBAACc,SAAOC,MACNC,cAAgBrE,GAAM2C,EAAU3C,GAChCuC,SAAUA,KACNU,KACAD,GAEJK,gBAACc,SAAOG,wBAAyBlC,qBAC/BiB,gBAACc,SAAOI,WAAOlC,GACfgB,gBAACc,SAAOK,aAEVnB,gBAACc,SAAOM,SACNC,IAAK,CAAEC,OAAQnD,QAAMoD,SAASC,qBACbzC,qBAEhBE,EAAOmB,IAAKN,GACXE,gBAACc,SAAOW,MAAK3B,MAAOA,EAAOO,IAAKP,GAC7BA,OCzHP4B,GACuB,gDAA3BvG,YAAUwG,aACN,mDACAxG,YAAUwG,wCA+HVC,EAAgB7E,SAAO,MAAO,CAClC8E,UAAW,aACX5E,QAAS,OACT6E,aAAc,OACdC,cAAe,SACfC,WAAY,CACVhF,QAAS,WAEXiF,MAAO,CAAEJ,UAAW,gBCvKhBK,GACe,yCAAnB/G,YAAUD,KACN,2CACAC,YAAUD,mCCLHiH,EAAcA,KACXtH,YAHD,0BAGsB,IAGtBuH,OAAS,2BPiBO,CAC7B3F,QAAS,0DQN4CjB,QAAC6G,WACtDA,EAAaA,SAAQC,iBACrBA,GAAmB,GACpB9G,EACC,MAAO+G,EAAYC,GAAiBjD,WAA0B,OACvDkD,EAAqBC,GAC1BnD,WAA6B,OACxBoD,EAAUC,GAAerD,cAC1BsD,eAAEA,GCa+BrH,CAAAA,QAAC8G,iBACxCA,GAGD9G,EACC,MAAOqH,EAAgBC,GAAqBvD,cAErCwD,EAAqBC,GAA0BzD,YAAS,IACxD0D,EAAgBC,GAAqB3D,YAAS,GAuErD,OArEAG,YAAU,WACJyC,IACFW,GAAkB,IAIfnI,OAAOwI,UACVvG,QAAQwG,KAAK,uCAGXC,EAAA1I,kBAAM0I,GAANA,EAAQC,aAAehB,EACzBU,GAAuB,GACdrI,OAAOwI,SAChBD,GAAkB,GAElBtG,QAAQwG,KAAK,qDAEd,IAEH1D,YAAU,KACR,IAAI6D,EAAiCA,OAUrC,OATIR,GAAuBpI,OAAO2I,cAChCC,EAAYC,sBAlEH,wBAkEmC,KACtCrB,IACFW,GAAkB,GAElBA,GAAkB,MAIjBS,aACN,CAACR,IAEJrD,YAAU,KACR,IAAI+D,EAsBJ,OArBIR,GAAkBtI,OAAOwI,UAiB3BxI,OAAOwI,SAAS,mBAAoB,EAhBnBO,CAACC,EAAiBC,KAC7BA,IACFH,EAAaE,EAAQF,WAQjBtB,KACFW,GAAkB,MASnB,KACDnI,OAAOwI,UAAYM,GACrB9I,OAAOwI,SACL,sBACA,EACCS,IACChH,QAAQC,MAAM+G,IAEhBH,KAGL,CAACR,IAEG,CAAEJ,eAAAA,EAAgBE,oBAAAA,EAAqBE,eAAAA,ID5FnBY,CAA0B,CAAEvB,iBAAAA,IAwDvD,OAtDA5C,YAAU,KACR,WACE,MAAMoE,OFpBaxI,WACvB,IAAIqH,OAA8CoB,EAGlD,MAAMC,QAAiBhI,MAAMkG,GACvB+B,QAAuCD,EAAS3H,QAKhDpB,aAAEA,EAAYiJ,YAAEA,GAAgBlJ,UAmBtC,OAlBAmJ,OAAOC,KAAKH,GAAcI,QAASC,KAE/BrJ,GACAqJ,EAAUC,MAAM,KAAKC,SAASvJ,EAAawJ,gBAGlB,QAAhBP,GAAuC,QAAdI,KADlC3B,EAAWsB,EAAaK,WASJ,IAAb3B,GAA4BsB,EAAgB,IACrDtB,EAAWsB,EAAgB,GAGtBtB,GETkB+B,GACrB9B,EAAYkB,GAEPA,GACHlH,QAAQ+H,MAAM,oBALlB,IAQC,IAEHjF,YAAU,KACJiD,IAIE,sBAAuBA,GAAYA,EAASiC,kBAK5CpC,EADEK,EACYF,EAASkC,uBAETlC,EAASmC,yBAEhB,eAAgBnC,EACzBH,EAAcG,EAASJ,YAEvB3F,QAAQ+H,MAAM,oBAGjB,CAAChC,EAAUE,IAEdnD,YAAU,KACJ6C,GAAcwC,MAAMC,QAAQzC,KAC9BG,EACEH,EAAW0C,OAAO,CAACC,EAAMC,IAErBnF,gCACGkF,EACDlF,yBAAiBmF,EEjEXZ,MAAM,yBACHnE,IAAKgF,GACZ,uBAARA,EAEApF,qBACEC,OAAO,SACPE,MAAO,CAAE9C,MAAO,WAChBgI,UAAU,YACVC,KAAK,oEAMJF,GAGeH,OACtB,CAACC,EAAMC,IACLnF,gCACGkF,EACAC,GAGLnF,oCF4COA,mCAILqC,EAAW,CACTkD,YAAY,EACZC,SAAS,MAGZ,CAACjD,IAEkB,OAAfA,EACLvC,sCAAkB,0BAElBA,sCAAkB,iBAAiByC,qBH9CUjH,QAACiK,OAChDA,EAAMlK,UACNA,EAASyD,MACTA,EAAK0G,qBACLA,EAAoBvG,aACpBA,EAAYd,SACZA,EAAQsH,OACRA,EAAMvG,SACNA,EAAWA,SAAQiD,WACnBA,EAAaA,SAAQuD,aACrBA,EAAeA,MAAM,GAAIC,SACzBA,GACDrK,EACC,MAAOsI,EAAQgC,GAAavG,WAASmG,IAE9B3F,EAAUgG,GAAexG,WAAS,IAEnCyG,EAAeC,YAAUvE,GAE/BhC,YAAU,KAcJsG,IAAiBE,eAAaC,OAAWN,GAAY/B,GAbrCxI,WAClB,IAAI,IAAA+H,EACF,MAAMS,gBAAST,EAAM1I,kBAAM0I,WAAAA,EAANA,EAAQ+C,oBAAQ/C,SAAhBA,EAAkBgD,gBAAgB,CAAE9K,UAAAA,KACrDuI,EACFgC,EAAUhC,EAAO,IAEjBlH,QAAQ+H,MAAM,uBAAwBpJ,GAExC,MAAOoB,GACPC,QAAQwG,KAAK,uBAAwB7H,EAAWoB,KAKlD2J,IAED,CAACN,IAEJtG,YAAU,KA2BJsG,IAAiBE,eAAaC,OAASR,GAAU5F,GA1B9BzE,WACrB,IAAI,IAAAiL,EACF,MAAMC,gBAASD,EAAM5L,kBAAM4L,WAAAA,EAANA,EAAQH,oBAAQG,SAAhBA,EAAkBE,KAAK,CAC1CC,WAAY,CAAEnL,UAAAA,EAAWuE,MAAOC,GAChC0F,OAAAA,KAUFpD,EAAW,CACTkD,YAAY,EACZC,SARW,IAAXgB,KAEIA,GACAA,EAAOjK,SAAWC,iBAAeC,WAOvC,MAAOE,GACP0F,EAAW,CACTkD,YAAY,EACZC,SAAS,MAMbmB,IAED,CAACX,EAAcL,IAElB,MAAM/F,EAAmBT,GAAgB2E,EAAS,CAAE3E,aAAAA,GAAiB,GAI/DQ,EAAetB,IAFDwH,IAAY/B,EAEa,CAAEzF,UAAU,GAAS,GAI5DY,EAAS6E,EACX,IAAIA,EAAO7E,QACR2H,KAAK,CAACC,EAAGC,IAAMD,EAAEE,MAAQD,EAAEC,OAC3BC,OAAQlH,IAA6B,IAAnBA,EAAMmH,UACxBD,OAAOpB,GACV,GAEJ,OACE5F,gBAAC4B,OACEiE,GACC7F,gBAACc,SAAOC,MACNC,cAAgBrE,IACdoJ,EAAYpJ,GACZyC,EAAS,CAAEU,MAAOnD,QAEhBiD,KACAD,GAEHkG,IAGHA,IAAa/B,GACb9D,gBAAClB,GACCC,GAAI,UACJC,MAAO,aACPC,OAAQ,GACRZ,UAAU,KAGZwH,GAAY/B,GACZ9D,gBAAClB,GACCC,GAAI+E,EAAOoD,KACXlI,MAAOA,GAAS8E,EAAOoD,KACvB9H,SAAWzC,IACToJ,EAAYpJ,GACZyC,EAAS,CAAEU,MAAOnD,KAEpBsC,OAAQA,EAAOmB,IAAKN,GAAUA,EAAMoH,MACpC/H,aAAcA,EACdd,SAAUA,wCM9JqB,CACvC8I,UAAW,oBACXC,aAAc,uBACdC,eAAgB,iBAChBC,QAAS,UACTC,mBAAoB,qBACpBC,SAAU,WACVC,cAAe,gBACfC,kBAAmB,0BACnBC,WAAY,mBACZC,sBAAuB,8BACvBC,YAAa,oBACbC,iBAAkB,sDXsBe,CACjCrL,QAAS,MACTsL,aAAc,MACdC,aAAc,MACdC,mBAAoB,MACpBC,aAAc,MACdC,6BAA8B,MAC9BC,wBAAyB,MACzBC,gBAAiB,MACjBC,sBAAuB,MACvBC,8BAA+B,MAC/BjO,eAAgB,qGYjCYgB,MAAAA,QAAOoL,WAAEA,EAAUjB,OAAEA,GAAQjK,EACzD,IAAKd,IACH,MAAM,IAAI8N,MAAM,iCAGlB,GCdsB,oBAAX7N,QAIGE,YAAU,WAEJ4N,eDSlB,MAAM,IAAID,MAAM,iCAGlB,MAAMjN,UAAEA,GAAcmL,EAEhBgC,QAAsBrN,EAAc,CACxCE,UAAAA,IAGF,GACEmN,EAAc,IACdA,EAAc,GAAGxB,OAAS3L,GAC1BmN,EAAc,GAAGC,sBAAwBvO,EAAoBE,eAE7D,MAAM,IAAIkO,MAAM,kBAGlB,MAAMI,EACJF,EAAc,KAAoC,IAA9BA,EAAc,GAAGG,SACjCtO,EAAWC,SACXD,EAAWE,SAMjB,OAJKiO,EAAc,mBAAEI,QAAAC,IAAAC,UACnBpM,QAAQwG,oCAAoC7H,wBAG1CqN,IAASrO,EAAWC,STlCQc,OAAAA,QAChCoL,YAAYnL,UAAEA,EAASuE,MAAEA,GAAO2F,OAChCA,GACDjK,EACC,MAAME,EAASR,YAET+N,EAAgBpO,YAAU,iBAK1BqO,EAAU,CACdC,MAJYC,aAAaC,QAAQ,QAKjCC,GAJSzO,YAAU,OAKnB+N,KAAMrO,EAAWC,SACjByO,cAAAA,EACAlN,KAAM,CACJwN,CAAChO,GAAY,CAACuE,IAEhB0J,SAAU,CAAE/D,OAAAA,IAGd,IACE,MAAMzB,QAAiBhI,MAAMN,EAAK,CAChC+N,OAAQ,OACRvN,YAAa,UACbC,QAASC,eACTsN,KAAMC,KAAKC,UAAUV,KAKvB,aAFmBlF,EAAS3H,OAG5B,MAAOM,GAEP,OADAC,QAAQC,MAAMF,GACP,OSAAkN,CAAO,CAAEnD,WAAAA,EAAYjB,OAAAA,IExBMnK,OAAAA,QACpCoL,YAAYnL,UAAEA,EAASuE,MAAEA,GAAO2F,OAChCA,GACDjK,EAcC,MAtCmBsO,CAAAA,IAQnB,GAAsB,oBAAXnP,OAET,2BADAmO,QAAAC,IAAAC,UAAapM,QAAQwG,KAAK,cAI5BzI,OAAOoP,UAAYpP,OAAOoP,WAAa,GAEvC,MAAMC,EAAiC,IAClCF,GAELnP,OAAOoP,UAAUtD,KAAKuD,IAOtBC,CAAY,CACVC,MAAO,oBACPC,OAAQ,oBACRC,SAAU,UAEVpL,MAAOzD,EACP8O,WAAY9O,EACZgO,CAAChO,GAAYuE,EAEbwK,QAAS,UACTC,WAAY9E,KAGP,GFSE+E,CAAS,CAAE9D,WAAAA,EAAYjB,OAAAA"}
@@ -29,34 +29,11 @@ const IngestResponseState = {
29
29
  DO_NOT_COLLECT: '110'
30
30
  };
31
31
 
32
- const COOKIE = 'OptanonConsent';
33
- /**
34
- * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.
35
- * Returns true or false if the flag is found in the cookie, null otherwise.
36
- * @returns {boolean | null}
37
- */
38
- const checkConsentCookieForAllowTargeting = () => {
39
- const value = getCookie(COOKIE) || '';
40
- return value.includes('C0004%3A1') ? true : value.includes('C0004%3A0') ? false : null;
41
- };
42
-
43
- const COOKIE$1 = 'OptanonAlertBoxClosed';
44
- const checkAlertBoxCookie = () => {
45
- const value = getCookie(COOKIE$1) || '';
46
- // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)
47
- // "Invalid date" is 12 characters long
48
- return value.length > 12;
49
- };
50
-
51
32
  const hasRequiredPrivacyCookies = () => {
52
33
  var _WPGeo;
53
34
  if (typeof window === 'undefined') {
54
35
  return false;
55
36
  }
56
- const gdprAllowTargarting = checkConsentCookieForAllowTargeting();
57
- if (typeof gdprAllowTargarting === 'boolean' && checkAlertBoxCookie()) {
58
- return gdprAllowTargarting;
59
- }
60
37
  const wp_usp = getCookie('wp_usp');
61
38
  const countryCode = (_WPGeo = WPGeo()) === null || _WPGeo === void 0 ? void 0 : _WPGeo.country_code;
62
39
  return !!(wp_usp && countryCode === 'US');
@@ -506,7 +483,15 @@ const hydrateLinks = str => {
506
483
  return toReturn;
507
484
  };
508
485
 
509
- const COOKIE$2 = 'OptanonAlertBoxClosed';
486
+ const COOKIE = 'OptanonAlertBoxClosed';
487
+ const checkCookie = () => {
488
+ const value = getCookie(COOKIE) || '';
489
+ // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)
490
+ // "Invalid date" is 12 characters long
491
+ return value.length > 12;
492
+ };
493
+
494
+ const COOKIE$1 = 'OptanonAlertBoxClosed';
510
495
  const useOneTrustAlertBoxClosed = _ref => {
511
496
  let {
512
497
  allowCookieStore
@@ -516,7 +501,7 @@ const useOneTrustAlertBoxClosed = _ref => {
516
501
  const [listenToTcfApi, setListenToTcfApi] = useState(false);
517
502
  useEffect(() => {
518
503
  var _window;
519
- if (checkAlertBoxCookie()) {
504
+ if (checkCookie()) {
520
505
  setAlertBoxClosed(true);
521
506
  return;
522
507
  }
@@ -534,8 +519,8 @@ const useOneTrustAlertBoxClosed = _ref => {
534
519
  useEffect(() => {
535
520
  let cleanupFn = () => {};
536
521
  if (listenToCookieStore$1 && window.cookieStore) {
537
- cleanupFn = listenToCookieStore(COOKIE$2, () => {
538
- if (checkAlertBoxCookie()) {
522
+ cleanupFn = listenToCookieStore(COOKIE$1, () => {
523
+ if (checkCookie()) {
539
524
  setAlertBoxClosed(true);
540
525
  } else {
541
526
  setAlertBoxClosed(false);
@@ -555,7 +540,7 @@ const useOneTrustAlertBoxClosed = _ref => {
555
540
  // cmpuishown means the banner is shown
556
541
  // useractioncomplete means the user has interacted with the banner
557
542
  // but actually if the result for any of these is true, we just use the value of the cookie
558
- if (checkAlertBoxCookie()) {
543
+ if (checkCookie()) {
559
544
  setAlertBoxClosed(true);
560
545
  }
561
546
  }
@@ -637,5 +622,20 @@ const DEDisclosure = _ref => {
637
622
  }, disclosureRendering);
638
623
  };
639
624
 
640
- export { AttributesState, CollectionBehaviors, DEDisclosure, DESelect, IngestResponseState, IngestType, getAttributes, hasRequiredPrivacyCookies, push };
625
+ const FirstPartyIngestDataTypes = {
626
+ JOB_LEVEL: 'profile_job_level',
627
+ JOB_INDUSTRY: 'profile_job_industry',
628
+ PERSONAL_GOALS: 'personal_goals',
629
+ HOBBIES: 'hobbies',
630
+ PROFESSIONAL_GOALS: 'professional_goals',
631
+ INDUSTRY: 'industry',
632
+ NEWS_LOCATION: 'news_location',
633
+ NY_PERSONAL_GOALS: 'new_year_personal_goals',
634
+ NY_HOBBIES: 'new_year_hobbies',
635
+ NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',
636
+ NY_INDUSTRY: 'new_year_industry',
637
+ NY_NEWS_LOCATION: 'new_year_news_location'
638
+ };
639
+
640
+ export { AttributesState, CollectionBehaviors, DEDisclosure, DESelect, FirstPartyIngestDataTypes, IngestResponseState, IngestType, getAttributes, hasRequiredPrivacyCookies, push };
641
641
  //# sourceMappingURL=subs-de-inputs.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subs-de-inputs.esm.js","sources":["../src/interfaces/index.ts","../src/utils/checkConsentCookieForAllowTargeting.ts","../src/components/DEDisclosure/utils/checkAlertBoxCookie.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/index.tsx"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonConsent';\n\n/**\n * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.\n * Returns true or false if the flag is found in the cookie, null otherwise.\n * @returns {boolean | null}\n */\nexport const checkConsentCookieForAllowTargeting = () => {\n const value = getCookie(COOKIE) || '';\n return value.includes('C0004%3A1')\n ? true\n : value.includes('C0004%3A0')\n ? false\n : null;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkAlertBoxCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\nimport { checkConsentCookieForAllowTargeting } from './checkConsentCookieForAllowTargeting';\nimport { checkAlertBoxCookie } from '../components/DEDisclosure/utils/checkAlertBoxCookie';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const gdprAllowTargarting = checkConsentCookieForAllowTargeting();\n if (typeof gdprAllowTargarting === 'boolean' && checkAlertBoxCookie()) {\n return gdprAllowTargarting;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { ENDPOINTS, WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\nconst configSrc = `${\n ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n ? 'https://www.washingtonpost.com/subscribe'\n : ENDPOINTS.base\n}/config/de/disclosure.json`;\n\nexport const getConfig = async () => {\n let myConfig: DisclosureConfigValue | undefined = undefined;\n\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country- or region-specific config found, use that\n const { country_code, intl_region } = WPGeo();\n Object.keys(remoteConfig).forEach((configKey) => {\n if (\n country_code &&\n configKey.split('|').includes(country_code.toLowerCase())\n ) {\n myConfig = remoteConfig[configKey];\n } else if (intl_region === 'EEA' && configKey === 'eea') {\n myConfig = remoteConfig[configKey];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import React from 'react';\n\ntype hydrateLinksType = (str: string) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str: string) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkAlertBoxCookie } from '../utils/checkAlertBoxCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ninterface TCData {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n}\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window?.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n let cleanupFn: (() => void) | null = () => {};\n if (listenToCookieStore && window.cookieStore) {\n cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n }\n return cleanupFn || (() => {});\n }, [listenToCookieStore]);\n\n useEffect(() => {\n let listenerId: number;\n if (listenToTcfApi && window.__tcfapi) {\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkAlertBoxCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n }\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce((prev, current) => {\n return (\n <>\n {prev}\n <p>{hydrateLinks(current)}</p>\n </>\n );\n }, <></>)\n );\n\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>\n );\n};\n"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","COOKIE","checkConsentCookieForAllowTargeting","value","getCookie","includes","checkAlertBoxCookie","length","hasRequiredPrivacyCookies","window","gdprAllowTargarting","wp_usp","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","_ref","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","sendGAEvent","props","process","env","NODE_ENV","warn","dataLayer","eventData","push","sendToGA","submitData","source","event","action","category","label","section","subsection","ingest","wapo_login_id","jucid","localStorage","getItem","ga","payload","type","metadata","response","method","body","JSON","stringify","isAnonymousWebview","wp_wv","isLoggedIn","Error","attributeInfo","name","collection_behavior","explicit","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","DESelect","dataDictionaryConfig","submit","onFinished","valuesFilter","children","config","setConfig","setSelected","scriptStatus","useScript","fetchConfig","_window","__twpdeu","getFieldConfigs","error","ScriptStatus","READY","submitSelected","_window2","result","isError","isFinished","isLoading","sort","a","b","order","filter","archived","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","getConfig","myConfig","undefined","remoteConfig","intl_region","Object","keys","forEach","configKey","split","toLowerCase","hydrateLinks","str","array","chunks","className","href","toReturn","reduce","prev","current","useOneTrustAlertBoxClosed","allowCookieStore","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","DEDisclosure","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","setMyConfig","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray"],"mappings":"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"}
1
+ {"version":3,"file":"subs-de-inputs.esm.js","sources":["../src/interfaces/index.ts","../src/utils/hasRequiredPrivacyCookies.ts","../src/services/getAttributes.ts","../src/services/sendToGA.ts","../src/services/ingest.ts","../src/utils/isAnonymousWebview.ts","../src/utils/push.ts","../src/components/DESelect/Dropdown.tsx","../src/components/DESelect/index.tsx","../src/components/DEDisclosure/utils/getConfig.ts","../src/components/DEDisclosure/utils/hydrateLinks.tsx","../src/components/DEDisclosure/utils/checkCookie.ts","../src/components/DEDisclosure/hooks/useOnetrustAlertBoxClosedPromise.ts","../src/components/DEDisclosure/index.tsx","../src/constants/IngestDataTypes.ts"],"sourcesContent":["export type AttributeValue = {\n name: string;\n date_created: Number;\n last_modified_date: Number;\n archived: boolean;\n order: number;\n};\n\nexport const CollectionBehaviors = {\n COLLECT: 'COLLECT',\n DO_NOT_COLLECT: 'DO_NOT_COLLECT',\n} as const;\n\nexport type Attribute = {\n name: string;\n approved_for_use?: boolean;\n collection_behavior?: (typeof CollectionBehaviors)[keyof typeof CollectionBehaviors];\n datatype: string;\n explicit: boolean;\n multiple_value: boolean;\n last_modified_date: Number;\n date_created: Number;\n values: AttributeValue[] | Readonly<AttributeValue[]>;\n};\n\nexport const AttributesState = {\n SUCCESS: '100',\n} as const;\n\nexport const IngestType = {\n EXPLICIT: 'explicit',\n IMPLICIT: 'implicit',\n} as const;\n\nexport const IngestResponseState = {\n SUCCESS: '100',\n SYSTEM_ERROR: '101',\n INVALID_TYPE: '102',\n INVALID_IDENTIFIER: '103',\n INVALID_DATA: '104',\n INVALID_ATTRIBUTE_DEFINITION: '105',\n INVALID_META_DEFINITION: '106',\n UNAUTHENTICATED: '107',\n MISMATCHED_IDENTIFIER: '108',\n DISABLED_ATTRIBUTE_DEFINITION: '109',\n DO_NOT_COLLECT: '110',\n} as const;\n","import { WPGeo, getCookie } from '@washingtonpost/subs-sdk';\n\nexport const hasRequiredPrivacyCookies = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_usp = getCookie('wp_usp');\n\n const countryCode = WPGeo()?.country_code;\n\n return !!(wp_usp && countryCode === 'US');\n};\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n} from '@washingtonpost/subs-sdk';\nimport { Attribute } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nconst attributesCache: Record<string, any> = {};\nexport const getAttributes: GetAttributesType = async ({\n fieldName,\n}: {\n fieldName: string;\n}) => {\n if (attributesCache[fieldName]) {\n return attributesCache[fieldName];\n }\n\n const fieldNames = [fieldName];\n\n try {\n const url = new URL(`${base}/attributes`);\n url.searchParams.set('attributes', fieldNames.join(','));\n\n const data = await fetch(url.toString(), {\n credentials: 'include',\n headers: JSON_HEADERS,\n });\n const json = await data.json();\n\n if (data.ok && json.status === ResponseStatus.SUCCESS) {\n const attributes = json.attributes || [];\n attributesCache[fieldName] = attributes;\n return attributes;\n } else {\n return [];\n }\n } catch (e) {\n console.debug(e);\n return [];\n }\n};\n\ntype GetAttributesType = ({\n fieldName,\n}: {\n fieldName: string;\n}) => Promise<Attribute[]>;\n","const sendGAEvent = (props: {\n event: string;\n category: string;\n action: string;\n label: string;\n 'de-label': string;\n [key: string]: undefined | string | string[];\n}): void => {\n if (typeof window === 'undefined') {\n if (__DEV__) console.warn('NO WINDOW');\n return;\n }\n // Initialize dataLayer if needed\n window.dataLayer = window.dataLayer || [];\n\n const eventData: Record<string, any> = {\n ...props,\n };\n window.dataLayer.push(eventData);\n};\n\nexport const sendToGA: SendToGaType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n sendGAEvent({\n event: 'site-onpage-click',\n action: 'site-onpage-click',\n category: 'profile',\n\n label: fieldName,\n 'de-label': fieldName,\n [fieldName]: value,\n\n section: 'profile',\n subsection: source,\n });\n\n return true;\n};\n\ntype SendToGaType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<true>;\n","import {\n ENDPOINTS,\n ResponseStatus,\n JSON_HEADERS,\n getCookie,\n} from '@washingtonpost/subs-sdk';\nimport { IngestResponseState, IngestType } from '../interfaces';\n\nconst base = `${ENDPOINTS.base}/de/v1`;\n\nexport const ingest: IngestType = async ({\n submitData: { fieldName, value },\n source,\n}) => {\n const url = `${base}/ingest`;\n\n const wapo_login_id = getCookie('wapo_login_id');\n\n const jucid = localStorage.getItem('uuid');\n const ga = getCookie('_ga');\n\n const payload = {\n jucid,\n ga,\n type: IngestType.EXPLICIT,\n wapo_login_id, // TODO: move this to BE to read from cookie headers\n data: {\n [fieldName]: [value],\n },\n metadata: { source },\n };\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n credentials: 'include',\n headers: JSON_HEADERS,\n body: JSON.stringify(payload),\n });\n\n const json = await response.json();\n\n return json;\n } catch (e) {\n console.debug(e);\n return null;\n }\n};\n\ntype IngestType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<{\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n} | null>;\n","import { getCookie, isLoggedIn } from '@washingtonpost/subs-sdk';\n\nexport const isAnonymousWebview = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const wp_wv = getCookie('wp_wv');\n\n return !!(wp_wv && !isLoggedIn());\n};\n","import {\n CollectionBehaviors,\n IngestResponseState,\n IngestType,\n} from '../interfaces';\nimport { getAttributes } from '../services/getAttributes';\nimport { sendToGA } from '../services/sendToGA';\nimport { hasRequiredPrivacyCookies } from './hasRequiredPrivacyCookies';\nimport { ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { ingest } from '../services/ingest';\nimport { isAnonymousWebview } from './isAnonymousWebview';\n\nexport const push: PushType = async ({ submitData, source }) => {\n if (!hasRequiredPrivacyCookies()) {\n throw new Error('does not satisfy cookie check');\n }\n\n if (isAnonymousWebview()) {\n throw new Error('does not satisfy cookie check');\n }\n\n const { fieldName } = submitData;\n\n const attributeInfo = await getAttributes({\n fieldName,\n });\n\n if (\n attributeInfo[0] &&\n attributeInfo[0].name === fieldName &&\n attributeInfo[0].collection_behavior === CollectionBehaviors.DO_NOT_COLLECT\n ) {\n throw new Error('do not collect');\n }\n\n const type =\n attributeInfo[0] && attributeInfo[0].explicit === true\n ? IngestType.EXPLICIT\n : IngestType.IMPLICIT;\n\n if (!attributeInfo[0] && __DEV__) {\n console.warn(`no attribute info found for ${fieldName}, assuming implicit`);\n }\n\n if (type === IngestType.EXPLICIT) {\n return ingest({ submitData, source });\n } else {\n return sendToGA({ submitData, source });\n }\n};\n\ntype PushType = ({\n submitData: { fieldName, value },\n source,\n}: {\n submitData: {\n fieldName: string;\n value: string;\n };\n source: string;\n}) => Promise<\n | {\n status: ResponseStatus;\n state: (typeof IngestResponseState)[keyof typeof IngestResponseState];\n }\n | null\n | true\n>;\n","import React, { useEffect, useState } from 'react';\nimport { Icon, Select, styled, theme } from '@washingtonpost/wpds-ui-kit';\nimport { useWindowSize } from '@washingtonpost/subs-hooks';\nimport { ChevronDown } from '@washingtonpost/wpds-assets';\n\ninterface IDropdownProps {\n id: string;\n label: string;\n values: Array<string>;\n required?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst StyledMobileSelect = styled('select', {\n padding: '12px 16px 12px 6px',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n backgroundColor: '$secondary',\n color: '$primary',\n fontFamily: '$meta',\n fontSize: '$100',\n fontWeight: '$light',\n lineHeight: '$125',\n paddingBlockRight: '$125',\n textOverflow: 'ellipsis',\n position: 'relative',\n borderColor: 'transparent',\n borderRightWidth: '10px',\n borderRightColor: 'transparent',\n appearance: 'none',\n '-webkit-appearance': 'none',\n '&:disabled': {\n backgroundColor: theme.colors.disabled,\n borderColor: theme.colors.disabled,\n color: theme.colors.onDisabled,\n cursor: 'not-allowed',\n },\n});\n\nconst StyledSelectWrapper = styled('div', {\n width: '100%',\n maxWidth: '380px',\n borderRadius: '$012',\n borderColor: '$subtle',\n borderStyle: 'solid',\n borderWidth: '1px',\n backgroundColor: '$secondary',\n position: 'relative',\n});\n\nconst StyledMobileOption = styled('option', {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n color: 'inherit',\n});\n\n/**\n * Dropdown component. Uses wpds-ui-kit on desktop and native select on mobile.\n * @param {IDropdownProps} props The props.\n * @returns {React.ReactElement} The dropdown.\n */\nexport const Dropdown = ({\n id,\n label,\n values,\n required = false,\n defaultValue,\n onChange = () => {},\n disabled = false,\n}: IDropdownProps) => {\n const [answer, setAnswer] = useState<string>();\n const { isMobileSize } = useWindowSize();\n\n useEffect(() => {\n if (answer) onChange(answer);\n }, [answer]);\n\n const disabledProp = disabled ? { disabled: true } : {};\n\n // helps maintain state between WPDS and native dropdowns\n const defaultValueProp = answer\n ? { defaultValue: answer }\n : defaultValue\n ? { defaultValue }\n : {};\n\n const defaultValuePropMobile = (value: string) => {\n if (answer) {\n return value === answer ? { selected: true } : {};\n }\n return value === defaultValue ? { selected: true } : {};\n };\n\n return isMobileSize ? (\n <StyledSelectWrapper>\n <StyledMobileSelect\n id=\"\"\n required={required}\n onChange={(e) => setAnswer(e.target.value)}\n placeholder={label}\n {...disabledProp}\n >\n <label>{label}</label>\n <StyledMobileOption\n value=\"\"\n disabled\n selected\n style={{ color: '#666666' }}\n >\n {label}\n </StyledMobileOption>\n {values.map((value) => (\n <StyledMobileOption\n value={value}\n key={value}\n {...defaultValuePropMobile(value)}\n >\n {value}\n </StyledMobileOption>\n ))}\n </StyledMobileSelect>\n <Icon\n label=\"\"\n size=\"100\"\n fill={theme.colors['gray80']}\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n right: '10px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n <ChevronDown style={{ position: 'absolute', right: '10px' }} />\n </Icon>\n </StyledSelectWrapper>\n ) : (\n <Select.Root\n onValueChange={(e) => setAnswer(e)}\n required={required}\n {...defaultValueProp}\n {...disabledProp}\n >\n <Select.Trigger data-test-id={`${id}-select-trigger`}>\n <Select.Label>{label}</Select.Label>\n <Select.Value />\n </Select.Trigger>\n <Select.Content\n css={{ zIndex: theme.zIndices.page }}\n data-test-id={`${id}-select-content`}\n >\n {values.map((value) => (\n <Select.Item value={value} key={value}>\n {value}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { Select, styled } from '@washingtonpost/wpds-ui-kit';\nimport { Attribute, AttributeValue } from '../../interfaces';\nimport { ENDPOINTS, ResponseStatus } from '@washingtonpost/subs-sdk';\nimport { useScript, ScriptStatus } from '@washingtonpost/subs-hooks';\nimport { Dropdown } from './Dropdown';\n\ninterface DESelectProps {\n source: string;\n fieldName: string;\n label?: string;\n dataDictionaryConfig?: Attribute | Readonly<Attribute>;\n defaultValue?: string;\n disabled?: boolean;\n submit: boolean;\n onChange?: ({ value }: { value: string }) => void;\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n valuesFilter?: (value: AttributeValue) => boolean;\n selectProps?: {\n root?: any;\n trigger?: any;\n label?: any;\n value?: any;\n content?: any;\n item?: any;\n };\n children?: React.ReactNode;\n}\n\nconst scriptSrc = `${\n ENDPOINTS.staticAssets === 'https://subscribe.washingtonpost.com/static'\n ? 'https://www.washingtonpost.com/subscribe/static/'\n : ENDPOINTS.staticAssets\n}/de-utils/twpdeu.min.js`;\n\nexport const DESelect: React.FC<DESelectProps> = ({\n source,\n fieldName,\n label,\n dataDictionaryConfig,\n defaultValue,\n disabled,\n submit,\n onChange = () => {},\n onFinished = () => {},\n valuesFilter = () => true,\n children,\n}) => {\n const [config, setConfig] = useState(dataDictionaryConfig);\n\n const [selected, setSelected] = useState('');\n\n const scriptStatus = useScript(scriptSrc);\n\n useEffect(() => {\n const fetchConfig = async () => {\n try {\n const config = await window?.__twpdeu?.getFieldConfigs({ fieldName });\n if (config) {\n setConfig(config[0]);\n } else {\n console.error('unable to get config', fieldName);\n }\n } catch (e) {\n console.warn('unable to get config', fieldName, e);\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && !(children || config)) {\n fetchConfig();\n }\n }, [scriptStatus]);\n\n useEffect(() => {\n const submitSelected = async () => {\n try {\n const result = await window?.__twpdeu?.push({\n submitData: { fieldName, value: selected },\n source,\n });\n\n const isError =\n result === true\n ? false\n : result\n ? result.status !== ResponseStatus.SUCCESS\n : true;\n\n onFinished({\n isFinished: true,\n isError,\n });\n } catch (e) {\n onFinished({\n isFinished: false,\n isError: true,\n });\n }\n };\n\n if (scriptStatus === ScriptStatus.READY && submit && selected) {\n submitSelected();\n }\n }, [scriptStatus, submit]);\n\n const defaultValueProp = defaultValue && config ? { defaultValue } : {};\n\n const isLoading = !(children || config);\n\n const disabledProp = disabled || isLoading ? { disabled: true } : {};\n\n // sort and filter out archived values\n // Note: config.values may be readonly\n const values = config\n ? [...config.values]\n .sort((a, b) => a.order - b.order)\n .filter((value) => value.archived !== true)\n .filter(valuesFilter)\n : [];\n\n return (\n <SelectWrapper>\n {children && (\n <Select.Root\n onValueChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n {...defaultValueProp}\n {...disabledProp}\n >\n {children}\n </Select.Root>\n )}\n {!children && !config && (\n <Dropdown\n id={'loading'}\n label={'Loading...'}\n values={[]}\n disabled={true}\n />\n )}\n {!children && config && (\n <Dropdown\n id={config.name}\n label={label || config.name}\n onChange={(e) => {\n setSelected(e);\n onChange({ value: e });\n }}\n values={values.map((value) => value.name)}\n defaultValue={defaultValue}\n disabled={disabled}\n />\n )}\n </SelectWrapper>\n );\n};\n\nconst SelectWrapper = styled('div', {\n boxSizing: 'border-box',\n display: 'flex',\n marginBottom: '$100',\n flexDirection: 'column',\n '& button': {\n padding: '1px 6px',\n },\n '& *': { boxSizing: 'border-box' },\n});\n","import { ENDPOINTS, WPGeo } from '@washingtonpost/subs-sdk';\nimport {\n DisclosureConfig,\n DisclosureConfigValue,\n} from '../../../interfaces/disclosure';\n\nconst configSrc = `${\n ENDPOINTS.base === 'https://subscribe.washingtonpost.com'\n ? 'https://www.washingtonpost.com/subscribe'\n : ENDPOINTS.base\n}/config/de/disclosure.json`;\n\nexport const getConfig = async () => {\n let myConfig: DisclosureConfigValue | undefined = undefined;\n\n // step 1: fetch config\n const response = await fetch(configSrc);\n const remoteConfig: DisclosureConfig = await response.json();\n\n // step 2: figure out which part of the config to use\n\n // if country- or region-specific config found, use that\n const { country_code, intl_region } = WPGeo();\n Object.keys(remoteConfig).forEach((configKey) => {\n if (\n country_code &&\n configKey.split('|').includes(country_code.toLowerCase())\n ) {\n myConfig = remoteConfig[configKey];\n } else if (intl_region === 'EEA' && configKey === 'eea') {\n myConfig = remoteConfig[configKey];\n }\n });\n\n // TODO: Check for billing country also\n\n // else if no country-specific config, use the default config\n if (typeof myConfig === 'undefined' && remoteConfig['_']) {\n myConfig = remoteConfig['_'];\n }\n\n return myConfig;\n};\n","import React from 'react';\n\ntype hydrateLinksType = (str: string) => string | JSX.Element;\n\nexport const hydrateLinks: hydrateLinksType = (str: string) => {\n const array = str.split(/({{PRIVACY_POLICY}})/g);\n const chunks = array.map((str) => {\n if (str === '{{PRIVACY_POLICY}}') {\n return (\n <a\n target=\"_blank\"\n style={{ color: 'inherit' }}\n className=\"underline\"\n href=\"https://www.washingtonpost.com/privacy-policy/\"\n >\n Privacy Policy\n </a>\n );\n }\n return str;\n });\n\n const toReturn = chunks.reduce(\n (prev, current) => (\n <>\n {prev}\n {current}\n </>\n ),\n <></>\n );\n\n return toReturn;\n};\n","import { getCookie } from '@washingtonpost/subs-sdk';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\nexport const checkCookie = () => {\n const value = getCookie(COOKIE) || '';\n // Wed May 15 2024 06:29:23 GMT-0500 (Central Daylight Time)\n // \"Invalid date\" is 12 characters long\n return value.length > 12;\n};\n","import { useState, useEffect } from 'react';\nimport {\n listenToCookieStore as listenToCookieStoreUtil,\n ICookieStore,\n} from '@washingtonpost/subs-sdk';\nimport { checkCookie } from '../utils/checkCookie';\n\nconst COOKIE = 'OptanonAlertBoxClosed';\n\ninterface TCData {\n eventStatus: 'tcloaded' | 'cmpuishown' | 'useractioncomplete';\n listenerId: number;\n [key: string]: any;\n}\n\ntype TCFAPIAddListener = (\n command: 'addEventListener',\n version: number,\n callback: (tcData: TCData, success: boolean) => void\n) => void;\n\ntype TCFAPIRmListener = (\n command: 'removeEventListener',\n version: number,\n callback: (success: boolean) => void,\n listenerId: number\n) => void;\n\ntype TCFAPIPing = (\n command: 'ping',\n version: number,\n callback: (pingReturn: any, success: boolean) => void\n) => void;\n\ndeclare global {\n interface Window {\n cookieStore?: ICookieStore;\n __tcfapi?: TCFAPIAddListener & TCFAPIRmListener & TCFAPIPing;\n }\n}\n\nexport const useOneTrustAlertBoxClosed = ({\n allowCookieStore,\n}: {\n allowCookieStore: boolean;\n}) => {\n const [alertBoxClosed, setAlertBoxClosed] = useState<boolean | undefined>();\n\n const [listenToCookieStore, setListenToCookieStore] = useState(false);\n const [listenToTcfApi, setListenToTcfApi] = useState(false);\n\n useEffect(() => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n return;\n }\n\n if (!window.__tcfapi) {\n console.warn('warning: __tcfapi not found');\n }\n\n if (window?.cookieStore && allowCookieStore) {\n setListenToCookieStore(true);\n } else if (window.__tcfapi) {\n setListenToTcfApi(true);\n } else {\n console.warn('warning: neither cookieStore nor __tcfapi found');\n }\n }, []);\n\n useEffect(() => {\n let cleanupFn: (() => void) | null = () => {};\n if (listenToCookieStore && window.cookieStore) {\n cleanupFn = listenToCookieStoreUtil(COOKIE, () => {\n if (checkCookie()) {\n setAlertBoxClosed(true);\n } else {\n setAlertBoxClosed(false);\n }\n });\n }\n return cleanupFn || (() => {});\n }, [listenToCookieStore]);\n\n useEffect(() => {\n let listenerId: number;\n if (listenToTcfApi && window.__tcfapi) {\n const callback = (_tcData: TCData, success: boolean) => {\n if (success) {\n listenerId = _tcData.listenerId;\n\n // tcData.eventStatus can be:\n // tcloaded means user has made a choice and we’re ready to check it\n // cmpuishown means the banner is shown\n // useractioncomplete means the user has interacted with the banner\n\n // but actually if the result for any of these is true, we just use the value of the cookie\n if (checkCookie()) {\n setAlertBoxClosed(true);\n }\n }\n };\n\n window.__tcfapi('addEventListener', 2, callback);\n }\n\n // cleanup fn\n return () => {\n if (window.__tcfapi && listenerId)\n window.__tcfapi(\n 'removeEventListener',\n 2,\n (success) => {\n console.debug(success);\n },\n listenerId\n );\n };\n }, [listenToTcfApi]);\n\n return { alertBoxClosed, listenToCookieStore, listenToTcfApi };\n};\n","import React, { useState, useEffect } from 'react';\nimport { DisclosureConfigValue } from '../../interfaces/disclosure';\nimport { getConfig } from './utils/getConfig';\nimport { hydrateLinks } from './utils/hydrateLinks';\nimport { useOneTrustAlertBoxClosed } from './hooks/useOnetrustAlertBoxClosedPromise';\n\ninterface DisclosureProps {\n /** callback function to be called when the disclosure is finished loading */\n onFinished?: ({\n isFinished,\n isError,\n }: {\n isFinished: boolean;\n isError: boolean;\n }) => void;\n\n /** ability to turn off cookiestore listener, primarily for testing purposes */\n allowCookieStore?: boolean;\n}\n\nexport const DEDisclosure: React.FC<DisclosureProps> = ({\n onFinished = () => {},\n allowCookieStore = true,\n}) => {\n const [disclosure, setDisclosure] = useState<string[] | null>(null);\n const [disclosureRendering, setDisclosureRendering] =\n useState<JSX.Element | null>(null);\n const [myConfig, setMyConfig] = useState<DisclosureConfigValue>();\n const { alertBoxClosed } = useOneTrustAlertBoxClosed({ allowCookieStore });\n\n useEffect(() => {\n (async () => {\n const config = await getConfig();\n setMyConfig(config);\n\n if (!config) {\n console.error('No config found');\n }\n })();\n }, []);\n\n useEffect(() => {\n if (myConfig) {\n // step 3: set disclosure based on config\n\n // if config says to check onetrust, check onetrust\n if ('checkBannerStatus' in myConfig && myConfig.checkBannerStatus) {\n // check if onetrust is closed\n // if it is, show the after banner disclosure\n // if it is not, show the before banner disclosure\n if (alertBoxClosed) {\n setDisclosure(myConfig.disclosure_afterbanner);\n } else {\n setDisclosure(myConfig.disclosure_beforebanner);\n }\n } else if ('disclosure' in myConfig) {\n setDisclosure(myConfig.disclosure);\n } else {\n console.error('Invalid config');\n }\n }\n }, [myConfig, alertBoxClosed]);\n\n useEffect(() => {\n if (disclosure && Array.isArray(disclosure)) {\n setDisclosureRendering(\n disclosure.reduce((prev, current) => {\n return (\n <>\n {prev}\n <p>{hydrateLinks(current)}</p>\n </>\n );\n }, <></>)\n );\n\n // Is it ok to fire `onFinished` if still waiting for onetrust to load on the page?\n onFinished({\n isFinished: true,\n isError: false,\n });\n }\n }, [disclosure]);\n\n return disclosure === null ? (\n <div data-test-id=\"de-disclosure-loading\"></div>\n ) : (\n <div data-test-id=\"de-disclosure\">{disclosureRendering}</div>\n );\n};\n","export const FirstPartyIngestDataTypes = {\n JOB_LEVEL: 'profile_job_level',\n JOB_INDUSTRY: 'profile_job_industry',\n PERSONAL_GOALS: 'personal_goals',\n HOBBIES: 'hobbies',\n PROFESSIONAL_GOALS: 'professional_goals',\n INDUSTRY: 'industry',\n NEWS_LOCATION: 'news_location',\n NY_PERSONAL_GOALS: 'new_year_personal_goals',\n NY_HOBBIES: 'new_year_hobbies',\n NY_PROFESSIONAL_GOALS: 'new_year_professional_goals',\n NY_INDUSTRY: 'new_year_industry',\n NY_NEWS_LOCATION: 'new_year_news_location',\n} as const;"],"names":["CollectionBehaviors","COLLECT","DO_NOT_COLLECT","AttributesState","SUCCESS","IngestType","EXPLICIT","IMPLICIT","IngestResponseState","SYSTEM_ERROR","INVALID_TYPE","INVALID_IDENTIFIER","INVALID_DATA","INVALID_ATTRIBUTE_DEFINITION","INVALID_META_DEFINITION","UNAUTHENTICATED","MISMATCHED_IDENTIFIER","DISABLED_ATTRIBUTE_DEFINITION","hasRequiredPrivacyCookies","window","wp_usp","getCookie","countryCode","_WPGeo","WPGeo","country_code","base","ENDPOINTS","attributesCache","getAttributes","_ref","fieldName","fieldNames","url","URL","searchParams","set","join","data","fetch","toString","credentials","headers","JSON_HEADERS","json","ok","status","ResponseStatus","attributes","e","console","debug","sendGAEvent","props","process","env","NODE_ENV","warn","dataLayer","eventData","push","sendToGA","submitData","value","source","event","action","category","label","section","subsection","ingest","wapo_login_id","jucid","localStorage","getItem","ga","payload","type","metadata","response","method","body","JSON","stringify","isAnonymousWebview","wp_wv","isLoggedIn","Error","attributeInfo","name","collection_behavior","explicit","StyledMobileSelect","styled","padding","display","justifyContent","width","backgroundColor","color","fontFamily","fontSize","fontWeight","lineHeight","paddingBlockRight","textOverflow","position","borderColor","borderRightWidth","borderRightColor","appearance","theme","colors","disabled","onDisabled","cursor","StyledSelectWrapper","maxWidth","borderRadius","borderStyle","borderWidth","StyledMobileOption","Dropdown","id","values","required","defaultValue","onChange","answer","setAnswer","useState","isMobileSize","useWindowSize","useEffect","disabledProp","defaultValueProp","defaultValuePropMobile","selected","React","target","placeholder","style","map","key","Icon","size","fill","pointerEvents","right","top","transform","ChevronDown","Select","Root","onValueChange","Trigger","Label","Value","Content","css","zIndex","zIndices","page","Item","scriptSrc","staticAssets","DESelect","dataDictionaryConfig","submit","onFinished","valuesFilter","children","config","setConfig","setSelected","scriptStatus","useScript","fetchConfig","_window","__twpdeu","getFieldConfigs","error","ScriptStatus","READY","submitSelected","_window2","result","isError","isFinished","isLoading","sort","a","b","order","filter","archived","SelectWrapper","boxSizing","marginBottom","flexDirection","configSrc","getConfig","myConfig","undefined","remoteConfig","intl_region","Object","keys","forEach","configKey","split","includes","toLowerCase","hydrateLinks","str","array","chunks","className","href","toReturn","reduce","prev","current","COOKIE","checkCookie","length","useOneTrustAlertBoxClosed","allowCookieStore","alertBoxClosed","setAlertBoxClosed","listenToCookieStore","setListenToCookieStore","listenToTcfApi","setListenToTcfApi","__tcfapi","cookieStore","cleanupFn","listenToCookieStoreUtil","listenerId","callback","_tcData","success","DEDisclosure","disclosure","setDisclosure","disclosureRendering","setDisclosureRendering","setMyConfig","checkBannerStatus","disclosure_afterbanner","disclosure_beforebanner","Array","isArray","FirstPartyIngestDataTypes","JOB_LEVEL","JOB_INDUSTRY","PERSONAL_GOALS","HOBBIES","PROFESSIONAL_GOALS","INDUSTRY","NEWS_LOCATION","NY_PERSONAL_GOALS","NY_HOBBIES","NY_PROFESSIONAL_GOALS","NY_INDUSTRY","NY_NEWS_LOCATION"],"mappings":";;;;;;MAQaA,mBAAmB,GAAG;EACjCC,OAAO,EAAE,SAAS;EAClBC,cAAc,EAAE;;MAeLC,eAAe,GAAG;EAC7BC,OAAO,EAAE;;MAGEC,UAAU,GAAG;EACxBC,QAAQ,EAAE,UAAU;EACpBC,QAAQ,EAAE;;MAGCC,mBAAmB,GAAG;EACjCJ,OAAO,EAAE,KAAK;EACdK,YAAY,EAAE,KAAK;EACnBC,YAAY,EAAE,KAAK;EACnBC,kBAAkB,EAAE,KAAK;EACzBC,YAAY,EAAE,KAAK;EACnBC,4BAA4B,EAAE,KAAK;EACnCC,uBAAuB,EAAE,KAAK;EAC9BC,eAAe,EAAE,KAAK;EACtBC,qBAAqB,EAAE,KAAK;EAC5BC,6BAA6B,EAAE,KAAK;EACpCf,cAAc,EAAE;;;MC3CLgB,yBAAyB,GAAGA;;EACvC,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACjC,OAAO,KAAK;;EAGd,MAAMC,MAAM,GAAGC,SAAS,CAAC,QAAQ,CAAC;EAElC,MAAMC,WAAW,IAAAC,MAAA,GAAGC,KAAK,EAAE,cAAAD,MAAA,uBAAPA,MAAA,CAASE,YAAY;EAEzC,OAAO,CAAC,EAAEL,MAAM,IAAIE,WAAW,KAAK,IAAI,CAAC;AAC3C,CAAC;;ACLD,MAAMI,IAAI,MAAMC,SAAS,CAACD,YAAY;AAEtC,MAAME,eAAe,GAAwB,EAAE;AAC/C,MAAaC,aAAa,GAAsB,MAAAC,IAAA;MAAO;IACrDC;GAGD,GAAAD,IAAA;EACC,IAAIF,eAAe,CAACG,SAAS,CAAC,EAAE;IAC9B,OAAOH,eAAe,CAACG,SAAS,CAAC;;EAGnC,MAAMC,UAAU,GAAG,CAACD,SAAS,CAAC;EAE9B,IAAI;IACF,MAAME,GAAG,GAAG,IAAIC,GAAG,IAAIR,iBAAiB,CAAC;IACzCO,GAAG,CAACE,YAAY,CAACC,GAAG,CAAC,YAAY,EAAEJ,UAAU,CAACK,IAAI,CAAC,GAAG,CAAC,CAAC;IAExD,MAAMC,IAAI,GAAG,MAAMC,KAAK,CAACN,GAAG,CAACO,QAAQ,EAAE,EAAE;MACvCC,WAAW,EAAE,SAAS;MACtBC,OAAO,EAAEC;KACV,CAAC;IACF,MAAMC,IAAI,GAAG,MAAMN,IAAI,CAACM,IAAI,EAAE;IAE9B,IAAIN,IAAI,CAACO,EAAE,IAAID,IAAI,CAACE,MAAM,KAAKC,cAAc,CAAC3C,OAAO,EAAE;MACrD,MAAM4C,UAAU,GAAGJ,IAAI,CAACI,UAAU,IAAI,EAAE;MACxCpB,eAAe,CAACG,SAAS,CAAC,GAAGiB,UAAU;MACvC,OAAOA,UAAU;KAClB,MAAM;MACL,OAAO,EAAE;;GAEZ,CAAC,OAAOC,CAAC,EAAE;IACVC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;IAChB,OAAO,EAAE;;AAEb,CAAC;;AC1CD,MAAMG,WAAW,GAAIC,KAOpB;EACC,IAAI,OAAOlC,MAAM,KAAK,WAAW,EAAE;IACjC,IAAAmC,OAAA,CAAAC,GAAA,CAAAC,QAAA,mBAAaN,OAAO,CAACO,IAAI,CAAC,WAAW,CAAC;IACtC;;;EAGFtC,MAAM,CAACuC,SAAS,GAAGvC,MAAM,CAACuC,SAAS,IAAI,EAAE;EAEzC,MAAMC,SAAS,GAAwB;IACrC,GAAGN;GACJ;EACDlC,MAAM,CAACuC,SAAS,CAACE,IAAI,CAACD,SAAS,CAAC;AAClC,CAAC;AAED,AAAO,MAAME,QAAQ,GAAiB,MAAA/B,IAAA;MAAO;IAC3CgC,UAAU,EAAE;MAAE/B,SAAS;MAAEgC;KAAO;IAChCC;GACD,GAAAlC,IAAA;EACCsB,WAAW,CAAC;IACVa,KAAK,EAAE,mBAAmB;IAC1BC,MAAM,EAAE,mBAAmB;IAC3BC,QAAQ,EAAE,SAAS;IAEnBC,KAAK,EAAErC,SAAS;IAChB,UAAU,EAAEA,SAAS;IACrB,CAACA,SAAS,GAAGgC,KAAK;IAElBM,OAAO,EAAE,SAAS;IAClBC,UAAU,EAAEN;GACb,CAAC;EAEF,OAAO,IAAI;AACb,CAAC;;AC/BD,MAAMtC,MAAI,MAAMC,SAAS,CAACD,YAAY;AAEtC,AAAO,MAAM6C,MAAM,GAAe,MAAAzC,IAAA;MAAO;IACvCgC,UAAU,EAAE;MAAE/B,SAAS;MAAEgC;KAAO;IAChCC;GACD,GAAAlC,IAAA;EACC,MAAMG,GAAG,MAAMP,eAAa;EAE5B,MAAM8C,aAAa,GAAGnD,SAAS,CAAC,eAAe,CAAC;EAEhD,MAAMoD,KAAK,GAAGC,YAAY,CAACC,OAAO,CAAC,MAAM,CAAC;EAC1C,MAAMC,EAAE,GAAGvD,SAAS,CAAC,KAAK,CAAC;EAE3B,MAAMwD,OAAO,GAAG;IACdJ,KAAK;IACLG,EAAE;IACFE,IAAI,EAAEzE,UAAU,CAACC,QAAQ;IACzBkE,aAAa;IACblC,IAAI,EAAE;MACJ,CAACP,SAAS,GAAG,CAACgC,KAAK;KACpB;IACDgB,QAAQ,EAAE;MAAEf;;GACb;EAED,IAAI;IACF,MAAMgB,QAAQ,GAAG,MAAMzC,KAAK,CAACN,GAAG,EAAE;MAChCgD,MAAM,EAAE,MAAM;MACdxC,WAAW,EAAE,SAAS;MACtBC,OAAO,EAAEC,YAAY;MACrBuC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACP,OAAO;KAC7B,CAAC;IAEF,MAAMjC,IAAI,GAAG,MAAMoC,QAAQ,CAACpC,IAAI,EAAE;IAElC,OAAOA,IAAI;GACZ,CAAC,OAAOK,CAAC,EAAE;IACVC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;IAChB,OAAO,IAAI;;AAEf,CAAC;;AC7CM,MAAMoC,kBAAkB,GAAGA;EAChC,IAAI,OAAOlE,MAAM,KAAK,WAAW,EAAE;IACjC,OAAO,KAAK;;EAGd,MAAMmE,KAAK,GAAGjE,SAAS,CAAC,OAAO,CAAC;EAEhC,OAAO,CAAC,EAAEiE,KAAK,IAAI,CAACC,UAAU,EAAE,CAAC;AACnC,CAAC;;MCEY3B,IAAI,GAAa,MAAA9B,IAAA;MAAO;IAAEgC,UAAU;IAAEE;GAAQ,GAAAlC,IAAA;EACzD,IAAI,CAACZ,yBAAyB,EAAE,EAAE;IAChC,MAAM,IAAIsE,KAAK,CAAC,+BAA+B,CAAC;;EAGlD,IAAIH,kBAAkB,EAAE,EAAE;IACxB,MAAM,IAAIG,KAAK,CAAC,+BAA+B,CAAC;;EAGlD,MAAM;IAAEzD;GAAW,GAAG+B,UAAU;EAEhC,MAAM2B,aAAa,GAAG,MAAM5D,aAAa,CAAC;IACxCE;GACD,CAAC;EAEF,IACE0D,aAAa,CAAC,CAAC,CAAC,IAChBA,aAAa,CAAC,CAAC,CAAC,CAACC,IAAI,KAAK3D,SAAS,IACnC0D,aAAa,CAAC,CAAC,CAAC,CAACE,mBAAmB,KAAK3F,mBAAmB,CAACE,cAAc,EAC3E;IACA,MAAM,IAAIsF,KAAK,CAAC,gBAAgB,CAAC;;EAGnC,MAAMV,IAAI,GACRW,aAAa,CAAC,CAAC,CAAC,IAAIA,aAAa,CAAC,CAAC,CAAC,CAACG,QAAQ,KAAK,IAAI,GAClDvF,UAAU,CAACC,QAAQ,GACnBD,UAAU,CAACE,QAAQ;EAEzB,IAAI,CAACkF,aAAa,CAAC,CAAC,CAAC,IAAAnC,OAAA,CAAAC,GAAA,CAAAC,QAAA,iBAAW,EAAE;IAChCN,OAAO,CAACO,IAAI,gCAAgC1B,8BAA8B,CAAC;;EAG7E,IAAI+C,IAAI,KAAKzE,UAAU,CAACC,QAAQ,EAAE;IAChC,OAAOiE,MAAM,CAAC;MAAET,UAAU;MAAEE;KAAQ,CAAC;GACtC,MAAM;IACL,OAAOH,QAAQ,CAAC;MAAEC,UAAU;MAAEE;KAAQ,CAAC;;AAE3C,CAAC;;AClCD,MAAM6B,kBAAkB,gBAAGC,MAAM,CAAC,QAAQ,EAAE;EAC1CC,OAAO,EAAE,oBAAoB;EAC7BC,OAAO,EAAE,MAAM;EACfC,cAAc,EAAE,eAAe;EAC/BC,KAAK,EAAE,MAAM;EACbC,eAAe,EAAE,YAAY;EAC7BC,KAAK,EAAE,UAAU;EACjBC,UAAU,EAAE,OAAO;EACnBC,QAAQ,EAAE,MAAM;EAChBC,UAAU,EAAE,QAAQ;EACpBC,UAAU,EAAE,MAAM;EAClBC,iBAAiB,EAAE,MAAM;EACzBC,YAAY,EAAE,UAAU;EACxBC,QAAQ,EAAE,UAAU;EACpBC,WAAW,EAAE,aAAa;EAC1BC,gBAAgB,EAAE,MAAM;EACxBC,gBAAgB,EAAE,aAAa;EAC/BC,UAAU,EAAE,MAAM;EAClB,oBAAoB,EAAE,MAAM;EAC5B,YAAY,EAAE;IACZZ,eAAe,EAAEa,KAAK,CAACC,MAAM,CAACC,QAAQ;IACtCN,WAAW,EAAEI,KAAK,CAACC,MAAM,CAACC,QAAQ;IAClCd,KAAK,EAAEY,KAAK,CAACC,MAAM,CAACE,UAAU;IAC9BC,MAAM,EAAE;;CAEX,CAAC;AAEF,MAAMC,mBAAmB,gBAAGvB,MAAM,CAAC,KAAK,EAAE;EACxCI,KAAK,EAAE,MAAM;EACboB,QAAQ,EAAE,OAAO;EACjBC,YAAY,EAAE,MAAM;EACpBX,WAAW,EAAE,SAAS;EACtBY,WAAW,EAAE,OAAO;EACpBC,WAAW,EAAE,KAAK;EAClBtB,eAAe,EAAE,YAAY;EAC7BQ,QAAQ,EAAE;CACX,CAAC;AAEF,MAAMe,kBAAkB,gBAAG5B,MAAM,CAAC,QAAQ,EAAE;EAC1CO,UAAU,EAAE,SAAS;EACrBC,QAAQ,EAAE,SAAS;EACnBF,KAAK,EAAE;CACR,CAAC;AAEF;;;;;AAKA,AAAO,MAAMuB,QAAQ,GAAG7F,IAAA;MAAC;IACvB8F,EAAE;IACFxD,KAAK;IACLyD,MAAM;IACNC,QAAQ,GAAG,KAAK;IAChBC,YAAY;IACZC,QAAQ,GAAGA,QAAQ;IACnBd,QAAQ,GAAG;GACI,GAAApF,IAAA;EACf,MAAM,CAACmG,MAAM,EAAEC,SAAS,CAAC,GAAGC,QAAQ,EAAU;EAC9C,MAAM;IAAEC;GAAc,GAAGC,aAAa,EAAE;EAExCC,SAAS,CAAC;IACR,IAAIL,MAAM,EAAED,QAAQ,CAACC,MAAM,CAAC;GAC7B,EAAE,CAACA,MAAM,CAAC,CAAC;EAEZ,MAAMM,YAAY,GAAGrB,QAAQ,GAAG;IAAEA,QAAQ,EAAE;GAAM,GAAG,EAAE;;EAGvD,MAAMsB,gBAAgB,GAAGP,MAAM,GAC3B;IAAEF,YAAY,EAAEE;GAAQ,GACxBF,YAAY,GACZ;IAAEA;GAAc,GAChB,EAAE;EAEN,MAAMU,sBAAsB,GAAI1E,KAAa;IAC3C,IAAIkE,MAAM,EAAE;MACV,OAAOlE,KAAK,KAAKkE,MAAM,GAAG;QAAES,QAAQ,EAAE;OAAM,GAAG,EAAE;;IAEnD,OAAO3E,KAAK,KAAKgE,YAAY,GAAG;MAAEW,QAAQ,EAAE;KAAM,GAAG,EAAE;GACxD;EAED,OAAON,YAAY,GACjBO,oBAACtB,mBAAmB,QAClBsB,oBAAC9C,kBAAkB;IACjB+B,EAAE,EAAC,EAAE;IACLE,QAAQ,EAAEA,QAAQ;IAClBE,QAAQ,EAAG/E,CAAC,IAAKiF,SAAS,CAACjF,CAAC,CAAC2F,MAAM,CAAC7E,KAAK,CAAC;IAC1C8E,WAAW,EAAEzE,KAAK;OACdmE;KAEJI,mCAAQvE,KAAK,CAAS,EACtBuE,oBAACjB,kBAAkB;IACjB3D,KAAK,EAAC,EAAE;IACRmD,QAAQ;IACRwB,QAAQ;IACRI,KAAK,EAAE;MAAE1C,KAAK,EAAE;;KAEfhC,KAAK,CACa,EACpByD,MAAM,CAACkB,GAAG,CAAEhF,KAAK,IAChB4E,oBAACjB,kBAAkB;IACjB3D,KAAK,EAAEA,KAAK;IACZiF,GAAG,EAAEjF,KAAK;OACN0E,sBAAsB,CAAC1E,KAAK;KAE/BA,KAAK,CAET,CAAC,CACiB,EACrB4E,oBAACM,IAAI;IACH7E,KAAK,EAAC,EAAE;IACR8E,IAAI,EAAC,KAAK;IACVC,IAAI,EAAEnC,KAAK,CAACC,MAAM,CAAC,QAAQ,CAAC;IAC5B6B,KAAK,EAAE;MACLM,aAAa,EAAE,MAAM;MACrBzC,QAAQ,EAAE,UAAU;MACpB0C,KAAK,EAAE,MAAM;MACbC,GAAG,EAAE,KAAK;MACVC,SAAS,EAAE;;KAGbZ,oBAACa,WAAW;IAACV,KAAK,EAAE;MAAEnC,QAAQ,EAAE,UAAU;MAAE0C,KAAK,EAAE;;IAAY,CAC1D,CACa,GAEtBV,oBAACc,MAAM,CAACC,IAAI;IACVC,aAAa,EAAG1G,CAAC,IAAKiF,SAAS,CAACjF,CAAC,CAAC;IAClC6E,QAAQ,EAAEA,QAAQ;OACdU,gBAAgB;OAChBD;KAEJI,oBAACc,MAAM,CAACG,OAAO;uBAAkBhC;KAC/Be,oBAACc,MAAM,CAACI,KAAK,QAAEzF,KAAK,CAAgB,EACpCuE,oBAACc,MAAM,CAACK,KAAK,OAAG,CACD,EACjBnB,oBAACc,MAAM,CAACM,OAAO;IACbC,GAAG,EAAE;MAAEC,MAAM,EAAEjD,KAAK,CAACkD,QAAQ,CAACC;KAAM;uBACnBvC;KAEhBC,MAAM,CAACkB,GAAG,CAAEhF,KAAK,IAChB4E,oBAACc,MAAM,CAACW,IAAI;IAACrG,KAAK,EAAEA,KAAK;IAAEiF,GAAG,EAAEjF;KAC7BA,KAAK,CAET,CAAC,CACa,CAEpB;AACH,CAAC;;AC/HD,MAAMsG,SAAS,MACb1I,SAAS,CAAC2I,YAAY,KAAK,6CAA6C,GACpE,kDAAkD,GAClD3I,SAAS,CAAC2I,qCACS;AAEzB,MAAaC,QAAQ,GAA4BzI,IAAA;MAAC;IAChDkC,MAAM;IACNjC,SAAS;IACTqC,KAAK;IACLoG,oBAAoB;IACpBzC,YAAY;IACZb,QAAQ;IACRuD,MAAM;IACNzC,QAAQ,GAAGA,QAAQ;IACnB0C,UAAU,GAAGA,QAAQ;IACrBC,YAAY,GAAGA,MAAM,IAAI;IACzBC;GACD,GAAA9I,IAAA;EACC,MAAM,CAAC+I,MAAM,EAAEC,SAAS,CAAC,GAAG3C,QAAQ,CAACqC,oBAAoB,CAAC;EAE1D,MAAM,CAAC9B,QAAQ,EAAEqC,WAAW,CAAC,GAAG5C,QAAQ,CAAC,EAAE,CAAC;EAE5C,MAAM6C,YAAY,GAAGC,SAAS,CAACZ,SAAS,CAAC;EAEzC/B,SAAS,CAAC;IACR,MAAM4C,WAAW,GAAG;MAClB,IAAI;QAAA,IAAAC,OAAA;QACF,MAAMN,MAAM,GAAG,QAAAM,OAAA,GAAMhK,MAAM,cAAAgK,OAAA,gBAAAA,OAAA,GAANA,OAAA,CAAQC,QAAQ,cAAAD,OAAA,uBAAhBA,OAAA,CAAkBE,eAAe,CAAC;UAAEtJ;SAAW,CAAC;QACrE,IAAI8I,MAAM,EAAE;UACVC,SAAS,CAACD,MAAM,CAAC,CAAC,CAAC,CAAC;SACrB,MAAM;UACL3H,OAAO,CAACoI,KAAK,CAAC,sBAAsB,EAAEvJ,SAAS,CAAC;;OAEnD,CAAC,OAAOkB,CAAC,EAAE;QACVC,OAAO,CAACO,IAAI,CAAC,sBAAsB,EAAE1B,SAAS,EAAEkB,CAAC,CAAC;;KAErD;IAED,IAAI+H,YAAY,KAAKO,YAAY,CAACC,KAAK,IAAI,EAAEZ,QAAQ,IAAIC,MAAM,CAAC,EAAE;MAChEK,WAAW,EAAE;;GAEhB,EAAE,CAACF,YAAY,CAAC,CAAC;EAElB1C,SAAS,CAAC;IACR,MAAMmD,cAAc,GAAG;MACrB,IAAI;QAAA,IAAAC,QAAA;QACF,MAAMC,MAAM,GAAG,QAAAD,QAAA,GAAMvK,MAAM,cAAAuK,QAAA,gBAAAA,QAAA,GAANA,QAAA,CAAQN,QAAQ,cAAAM,QAAA,uBAAhBA,QAAA,CAAkB9H,IAAI,CAAC;UAC1CE,UAAU,EAAE;YAAE/B,SAAS;YAAEgC,KAAK,EAAE2E;WAAU;UAC1C1E;SACD,CAAC;QAEF,MAAM4H,OAAO,GACXD,MAAM,KAAK,IAAI,GACX,KAAK,GACLA,MAAM,GACNA,MAAM,CAAC7I,MAAM,KAAKC,cAAc,CAAC3C,OAAO,GACxC,IAAI;QAEVsK,UAAU,CAAC;UACTmB,UAAU,EAAE,IAAI;UAChBD;SACD,CAAC;OACH,CAAC,OAAO3I,CAAC,EAAE;QACVyH,UAAU,CAAC;UACTmB,UAAU,EAAE,KAAK;UACjBD,OAAO,EAAE;SACV,CAAC;;KAEL;IAED,IAAIZ,YAAY,KAAKO,YAAY,CAACC,KAAK,IAAIf,MAAM,IAAI/B,QAAQ,EAAE;MAC7D+C,cAAc,EAAE;;GAEnB,EAAE,CAACT,YAAY,EAAEP,MAAM,CAAC,CAAC;EAE1B,MAAMjC,gBAAgB,GAAGT,YAAY,IAAI8C,MAAM,GAAG;IAAE9C;GAAc,GAAG,EAAE;EAEvE,MAAM+D,SAAS,GAAG,EAAElB,QAAQ,IAAIC,MAAM,CAAC;EAEvC,MAAMtC,YAAY,GAAGrB,QAAQ,IAAI4E,SAAS,GAAG;IAAE5E,QAAQ,EAAE;GAAM,GAAG,EAAE;;;EAIpE,MAAMW,MAAM,GAAGgD,MAAM,GACjB,CAAC,GAAGA,MAAM,CAAChD,MAAM,CAAC,CACfkE,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,KAAK,GAAGD,CAAC,CAACC,KAAK,CAAC,CACjCC,MAAM,CAAEpI,KAAK,IAAKA,KAAK,CAACqI,QAAQ,KAAK,IAAI,CAAC,CAC1CD,MAAM,CAACxB,YAAY,CAAC,GACvB,EAAE;EAEN,OACEhC,oBAAC0D,aAAa,QACXzB,QAAQ,IACPjC,oBAACc,MAAM,CAACC,IAAI;IACVC,aAAa,EAAG1G,CAAC;MACf8H,WAAW,CAAC9H,CAAC,CAAC;MACd+E,QAAQ,CAAC;QAAEjE,KAAK,EAAEd;OAAG,CAAC;KACvB;OACGuF,gBAAgB;OAChBD;KAEHqC,QAAQ,CAEZ,EACA,CAACA,QAAQ,IAAI,CAACC,MAAM,IACnBlC,oBAAChB,QAAQ;IACPC,EAAE,EAAE,SAAS;IACbxD,KAAK,EAAE,YAAY;IACnByD,MAAM,EAAE,EAAE;IACVX,QAAQ,EAAE;IAEb,EACA,CAAC0D,QAAQ,IAAIC,MAAM,IAClBlC,oBAAChB,QAAQ;IACPC,EAAE,EAAEiD,MAAM,CAACnF,IAAI;IACftB,KAAK,EAAEA,KAAK,IAAIyG,MAAM,CAACnF,IAAI;IAC3BsC,QAAQ,EAAG/E,CAAC;MACV8H,WAAW,CAAC9H,CAAC,CAAC;MACd+E,QAAQ,CAAC;QAAEjE,KAAK,EAAEd;OAAG,CAAC;KACvB;IACD4E,MAAM,EAAEA,MAAM,CAACkB,GAAG,CAAEhF,KAAK,IAAKA,KAAK,CAAC2B,IAAI,CAAC;IACzCqC,YAAY,EAAEA,YAAY;IAC1Bb,QAAQ,EAAEA;IAEb,CACa;AAEpB,CAAC;AAED,MAAMmF,aAAa,gBAAGvG,MAAM,CAAC,KAAK,EAAE;EAClCwG,SAAS,EAAE,YAAY;EACvBtG,OAAO,EAAE,MAAM;EACfuG,YAAY,EAAE,MAAM;EACpBC,aAAa,EAAE,QAAQ;EACvB,UAAU,EAAE;IACVzG,OAAO,EAAE;GACV;EACD,KAAK,EAAE;IAAEuG,SAAS,EAAE;;CACrB,CAAC;;ACxKF,MAAMG,SAAS,MACb9K,SAAS,CAACD,IAAI,KAAK,sCAAsC,GACrD,0CAA0C,GAC1CC,SAAS,CAACD,gCACY;AAE5B,AAAO,MAAMgL,SAAS,GAAG;EACvB,IAAIC,QAAQ,GAAsCC,SAAS;;EAG3D,MAAM5H,QAAQ,GAAG,MAAMzC,KAAK,CAACkK,SAAS,CAAC;EACvC,MAAMI,YAAY,GAAqB,MAAM7H,QAAQ,CAACpC,IAAI,EAAE;;;EAK5D,MAAM;IAAEnB,YAAY;IAAEqL;GAAa,GAAGtL,KAAK,EAAE;EAC7CuL,MAAM,CAACC,IAAI,CAACH,YAAY,CAAC,CAACI,OAAO,CAAEC,SAAS;IAC1C,IACEzL,YAAY,IACZyL,SAAS,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,QAAQ,CAAC3L,YAAY,CAAC4L,WAAW,EAAE,CAAC,EACzD;MACAV,QAAQ,GAAGE,YAAY,CAACK,SAAS,CAAC;KACnC,MAAM,IAAIJ,WAAW,KAAK,KAAK,IAAII,SAAS,KAAK,KAAK,EAAE;MACvDP,QAAQ,GAAGE,YAAY,CAACK,SAAS,CAAC;;GAErC,CAAC;;;EAKF,IAAI,OAAOP,QAAQ,KAAK,WAAW,IAAIE,YAAY,CAAC,GAAG,CAAC,EAAE;IACxDF,QAAQ,GAAGE,YAAY,CAAC,GAAG,CAAC;;EAG9B,OAAOF,QAAQ;AACjB,CAAC;;ACtCM,MAAMW,YAAY,GAAsBC,GAAW;EACxD,MAAMC,KAAK,GAAGD,GAAG,CAACJ,KAAK,CAAC,uBAAuB,CAAC;EAChD,MAAMM,MAAM,GAAGD,KAAK,CAACzE,GAAG,CAAEwE,GAAG;IAC3B,IAAIA,GAAG,KAAK,oBAAoB,EAAE;MAChC,OACE5E;QACEC,MAAM,EAAC,QAAQ;QACfE,KAAK,EAAE;UAAE1C,KAAK,EAAE;SAAW;QAC3BsH,SAAS,EAAC,WAAW;QACrBC,IAAI,EAAC;0BAGH;;IAGR,OAAOJ,GAAG;GACX,CAAC;EAEF,MAAMK,QAAQ,GAAGH,MAAM,CAACI,MAAM,CAC5B,CAACC,IAAI,EAAEC,OAAO,KACZpF,0CACGmF,IAAI,EACJC,OAAO,CAEX,EACDpF,yCAAK,CACN;EAED,OAAOiF,QAAQ;AACjB,CAAC;;AC/BD,MAAMI,MAAM,GAAG,uBAAuB;AAEtC,AAAO,MAAMC,WAAW,GAAGA;EACzB,MAAMlK,KAAK,GAAG1C,SAAS,CAAC2M,MAAM,CAAC,IAAI,EAAE;;;EAGrC,OAAOjK,KAAK,CAACmK,MAAM,GAAG,EAAE;AAC1B,CAAC;;ACFD,MAAMF,QAAM,GAAG,uBAAuB;AAkCtC,AAAO,MAAMG,yBAAyB,GAAGrM,IAAA;MAAC;IACxCsM;GAGD,GAAAtM,IAAA;EACC,MAAM,CAACuM,cAAc,EAAEC,iBAAiB,CAAC,GAAGnG,QAAQ,EAAuB;EAE3E,MAAM,CAACoG,qBAAmB,EAAEC,sBAAsB,CAAC,GAAGrG,QAAQ,CAAC,KAAK,CAAC;EACrE,MAAM,CAACsG,cAAc,EAAEC,iBAAiB,CAAC,GAAGvG,QAAQ,CAAC,KAAK,CAAC;EAE3DG,SAAS,CAAC;;IACR,IAAI2F,WAAW,EAAE,EAAE;MACjBK,iBAAiB,CAAC,IAAI,CAAC;MACvB;;IAGF,IAAI,CAACnN,MAAM,CAACwN,QAAQ,EAAE;MACpBzL,OAAO,CAACO,IAAI,CAAC,6BAA6B,CAAC;;IAG7C,IAAI,CAAA0H,OAAA,GAAAhK,MAAM,cAAAgK,OAAA,eAANA,OAAA,CAAQyD,WAAW,IAAIR,gBAAgB,EAAE;MAC3CI,sBAAsB,CAAC,IAAI,CAAC;KAC7B,MAAM,IAAIrN,MAAM,CAACwN,QAAQ,EAAE;MAC1BD,iBAAiB,CAAC,IAAI,CAAC;KACxB,MAAM;MACLxL,OAAO,CAACO,IAAI,CAAC,iDAAiD,CAAC;;GAElE,EAAE,EAAE,CAAC;EAEN6E,SAAS,CAAC;IACR,IAAIuG,SAAS,GAAwBA,QAAQ;IAC7C,IAAIN,qBAAmB,IAAIpN,MAAM,CAACyN,WAAW,EAAE;MAC7CC,SAAS,GAAGC,mBAAuB,CAACd,QAAM,EAAE;QAC1C,IAAIC,WAAW,EAAE,EAAE;UACjBK,iBAAiB,CAAC,IAAI,CAAC;SACxB,MAAM;UACLA,iBAAiB,CAAC,KAAK,CAAC;;OAE3B,CAAC;;IAEJ,OAAOO,SAAS,KAAK,QAAQ,CAAC;GAC/B,EAAE,CAACN,qBAAmB,CAAC,CAAC;EAEzBjG,SAAS,CAAC;IACR,IAAIyG,UAAkB;IACtB,IAAIN,cAAc,IAAItN,MAAM,CAACwN,QAAQ,EAAE;MACrC,MAAMK,QAAQ,GAAGA,CAACC,OAAe,EAAEC,OAAgB;QACjD,IAAIA,OAAO,EAAE;UACXH,UAAU,GAAGE,OAAO,CAACF,UAAU;;;;;;UAQ/B,IAAId,WAAW,EAAE,EAAE;YACjBK,iBAAiB,CAAC,IAAI,CAAC;;;OAG5B;MAEDnN,MAAM,CAACwN,QAAQ,CAAC,kBAAkB,EAAE,CAAC,EAAEK,QAAQ,CAAC;;;IAIlD,OAAO;MACL,IAAI7N,MAAM,CAACwN,QAAQ,IAAII,UAAU,EAC/B5N,MAAM,CAACwN,QAAQ,CACb,qBAAqB,EACrB,CAAC,EACAO,OAAO;QACNhM,OAAO,CAACC,KAAK,CAAC+L,OAAO,CAAC;OACvB,EACDH,UAAU,CACX;KACJ;GACF,EAAE,CAACN,cAAc,CAAC,CAAC;EAEpB,OAAO;IAAEJ,cAAc;yBAAEE,qBAAmB;IAAEE;GAAgB;AAChE,CAAC;;MCrGYU,YAAY,GAA8BrN,IAAA;MAAC;IACtD4I,UAAU,GAAGA,QAAQ;IACrB0D,gBAAgB,GAAG;GACpB,GAAAtM,IAAA;EACC,MAAM,CAACsN,UAAU,EAAEC,aAAa,CAAC,GAAGlH,QAAQ,CAAkB,IAAI,CAAC;EACnE,MAAM,CAACmH,mBAAmB,EAAEC,sBAAsB,CAAC,GACjDpH,QAAQ,CAAqB,IAAI,CAAC;EACpC,MAAM,CAACwE,QAAQ,EAAE6C,WAAW,CAAC,GAAGrH,QAAQ,EAAyB;EACjE,MAAM;IAAEkG;GAAgB,GAAGF,yBAAyB,CAAC;IAAEC;GAAkB,CAAC;EAE1E9F,SAAS,CAAC;IACR,CAAC;MACC,MAAMuC,MAAM,GAAG,MAAM6B,SAAS,EAAE;MAChC8C,WAAW,CAAC3E,MAAM,CAAC;MAEnB,IAAI,CAACA,MAAM,EAAE;QACX3H,OAAO,CAACoI,KAAK,CAAC,iBAAiB,CAAC;;KAEnC,GAAG;GACL,EAAE,EAAE,CAAC;EAENhD,SAAS,CAAC;IACR,IAAIqE,QAAQ,EAAE;;;MAIZ,IAAI,mBAAmB,IAAIA,QAAQ,IAAIA,QAAQ,CAAC8C,iBAAiB,EAAE;;;;QAIjE,IAAIpB,cAAc,EAAE;UAClBgB,aAAa,CAAC1C,QAAQ,CAAC+C,sBAAsB,CAAC;SAC/C,MAAM;UACLL,aAAa,CAAC1C,QAAQ,CAACgD,uBAAuB,CAAC;;OAElD,MAAM,IAAI,YAAY,IAAIhD,QAAQ,EAAE;QACnC0C,aAAa,CAAC1C,QAAQ,CAACyC,UAAU,CAAC;OACnC,MAAM;QACLlM,OAAO,CAACoI,KAAK,CAAC,gBAAgB,CAAC;;;GAGpC,EAAE,CAACqB,QAAQ,EAAE0B,cAAc,CAAC,CAAC;EAE9B/F,SAAS,CAAC;IACR,IAAI8G,UAAU,IAAIQ,KAAK,CAACC,OAAO,CAACT,UAAU,CAAC,EAAE;MAC3CG,sBAAsB,CACpBH,UAAU,CAACvB,MAAM,CAAC,CAACC,IAAI,EAAEC,OAAO;QAC9B,OACEpF,0CACGmF,IAAI,EACLnF,+BAAI2E,YAAY,CAACS,OAAO,CAAC,CAAK,CAC7B;OAEN,EAAEpF,yCAAK,CAAC,CACV;;MAGD+B,UAAU,CAAC;QACTmB,UAAU,EAAE,IAAI;QAChBD,OAAO,EAAE;OACV,CAAC;;GAEL,EAAE,CAACwD,UAAU,CAAC,CAAC;EAEhB,OAAOA,UAAU,KAAK,IAAI,GACxBzG;oBAAkB;IAA8B,GAEhDA;oBAAkB;KAAiB2G,mBAAmB,CACvD;AACH,CAAC;;MCzFYQ,yBAAyB,GAAG;EACvCC,SAAS,EAAE,mBAAmB;EAC9BC,YAAY,EAAE,sBAAsB;EACpCC,cAAc,EAAE,gBAAgB;EAChCC,OAAO,EAAE,SAAS;EAClBC,kBAAkB,EAAE,oBAAoB;EACxCC,QAAQ,EAAE,UAAU;EACpBC,aAAa,EAAE,eAAe;EAC9BC,iBAAiB,EAAE,yBAAyB;EAC5CC,UAAU,EAAE,kBAAkB;EAC9BC,qBAAqB,EAAE,6BAA6B;EACpDC,WAAW,EAAE,mBAAmB;EAChCC,gBAAgB,EAAE;CACV;;;;"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.5.3-canary.0",
2
+ "version": "0.5.3",
3
3
  "license": "UNLICENSED",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -1 +0,0 @@
1
- export declare const checkAlertBoxCookie: () => boolean;
@@ -1,6 +0,0 @@
1
- /**
2
- * Checks the users OptanonConsent cookie to determine if the user has allowed targeting.
3
- * Returns true or false if the flag is found in the cookie, null otherwise.
4
- * @returns {boolean | null}
5
- */
6
- export declare const checkConsentCookieForAllowTargeting: () => boolean | null;