{"mappings":"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","sources":["site/src/scaffold/scripts/debounce.ts","site/src/scaffold/scripts/match-media.ts","site/src/scaffold/scripts/protected-storage.ts","site/src/scaffold/scripts/tokens.ts","css/dist/tokens.json","site/src/scaffold/scripts/theming.ts","js/src/behaviors/snap-scroll.ts","js/src/utilities/util.ts","js/src/elements/form-behavior.ts","site/src/scaffold/scripts/query-string.ts","js/src/behaviors/popover.ts","site/src/scaffold/index.ts","site/src/scaffold/scripts/code-filter.ts","site/src/scaffold/scripts/figma-embed.ts","site/src/scaffold/scripts/form-submit.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\r\n/* ⬆ (Function.bind required for this implementation) */\r\n\r\n/**\r\n * Generic function for debouncing some type of event handler or function. Debounce = only perform an action after specific period of time after an event stream stops.\r\n * @param scheduler A scheduling function that determines when the handler will run.\r\n * @param clearScheduler A function that will cancel the waiting handler.\r\n * @param handler The function to be run when the scheduler dictates.\r\n * @param timeout An optional timeout for the scheduling function.\r\n *\r\n * @example debounceScheduler(setTimeout, clearTimeout, (event) => console.log('event', event), 1000);\r\n * @example debounceScheduler(requestAnimationFrame, cancelAnimationFrame, (event) => console.log('event', event));\r\n */\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nexport function debounceScheduler<T extends Function>(\r\n\tscheduler: (fn: T, ...params: unknown[]) => number,\r\n\tclearScheduler: (number: number) => void,\r\n\thandler: T,\r\n\ttimeout = 500\r\n): CancellableFunction {\r\n\tlet scheduleId = 0;\r\n\tconst caller = (...args: string[]) => {\r\n\t\tclearScheduler(scheduleId);\r\n\t\tscheduleId = scheduler.apply(null, [handler.bind(null, ...args), timeout]);\r\n\t};\r\n\r\n\t(caller as CancellableFunction).cancel = () => clearScheduler(scheduleId);\r\n\r\n\treturn caller as CancellableFunction;\r\n}\r\n\r\nexport const debounce = {\r\n\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n\t// @ts-ignore\r\n\ttimeout: debounceScheduler.bind(null, setTimeout, clearTimeout) as <T extends Function>(\r\n\t\thandler: T,\r\n\t\ttimeout?: number\r\n\t) => CancellableFunction,\r\n\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n\t// @ts-ignore\r\n\tanimationFrame: debounceScheduler.bind(\r\n\t\tnull,\r\n\t\twindow.requestAnimationFrame,\r\n\t\twindow.cancelAnimationFrame\r\n\t\t// eslint-disable-next-line @typescript-eslint/ban-types\r\n\t) as <T extends Function>(handler: T, timeout?: number) => CancellableFunction\r\n};\r\n\r\nexport interface CancellableFunction {\r\n\tcancel: () => void;\r\n\t(...args: unknown[]): void;\r\n}\r\n","export const prefersColorSchemeDarkQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n","/* These methods *try* to return the proper object type in the catch handler */\r\nexport const localStorage = {\r\n\tsetItem(key: string, value: string): void {\r\n\t\ttry {\r\n\t\t\twindow.localStorage.setItem(key, value);\r\n\t\t\t/* eslint no-empty: \"off\" */\r\n\t\t} catch (e) {}\r\n\t},\r\n\r\n\tgetItem(key: string): string | null {\r\n\t\ttry {\r\n\t\t\treturn window.localStorage.getItem(key);\r\n\t\t} catch (e) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t},\r\n\r\n\tremoveItem(key: string): void {\r\n\t\ttry {\r\n\t\t\twindow.localStorage.removeItem(key);\r\n\t\t\t/* eslint no-empty: \"off\" */\r\n\t\t} catch (e) {}\r\n\t},\r\n\r\n\tclear(): void {\r\n\t\ttry {\r\n\t\t\twindow.localStorage.clear();\r\n\t\t\t/* eslint no-empty: \"off\" */\r\n\t\t} catch (e) {}\r\n\t}\r\n} as unknown as Storage;\r\n\r\nexport const sessionStorage = {\r\n\tsetItem(key: string, value: string): void {\r\n\t\ttry {\r\n\t\t\twindow.sessionStorage.setItem(key, value);\r\n\t\t\t// eslint-disable-line no-empty\r\n\t\t} catch (e) {}\r\n\t},\r\n\tgetItem(key: string): string | null {\r\n\t\ttry {\r\n\t\t\treturn window.sessionStorage.getItem(key);\r\n\t\t} catch (e) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t},\r\n\tremoveItem(key: string): void {\r\n\t\ttry {\r\n\t\t\twindow.sessionStorage.removeItem(key);\r\n\t\t\t// eslint-disable-line no-empty\r\n\t\t} catch (e) {}\r\n\t}\r\n} as unknown as Storage;\r\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n// @ts-ignore\r\nimport tokens from '@microsoft/atlas-css/dist/tokens.json';\r\nimport type { AtlasTokens } from '@microsoft/atlas-css/dist/tokens';\r\n\r\nexport const atlasTokens = tokens as AtlasTokens;\r\n","{\"animation\":{\"name\":\"animation\",\"location\":\"/css/src/tokens/animation.scss\",\"tokens\":{\"$input-timing-function\":\"cubic-bezier(0.4, 0, 0.23, 1)\",\"$input-transition-duration\":\"200ms\",\"$nav-bar-transition-duration\":\"86ms\"}},\"border\":{\"name\":\"border\",\"location\":\"/css/src/tokens/border.scss\",\"tokens\":{\"$border-width\":\"1px\",\"$border-width-md\":\"0.125rem\",\"$border-width-lg\":\"0.25rem\",\"$border-radius-sm\":\"0.125rem\",\"$border-radius\":\"0.25rem\",\"$border-radius-lg\":\"0.375rem\",\"$border-radius-rounded\":\"290486px\"}},\"breakpoints\":{\"name\":\"breakpoints\",\"location\":\"/css/src/tokens/breakpoints.scss\",\"tokens\":{\"$container-gap\":\"64px\",\"$breakpoint-tablet\":\"768px\",\"$breakpoint-desktop\":\"1088px\",\"$breakpoint-widescreen\":\"1800px\"}},\"colors\":{\"name\":\"colors\",\"location\":\"/css/src/tokens/colors.scss\",\"tokens\":{\"$white-static\":\"#fff\",\"$black-static\":\"#000\",\"$text\":\"var(--theme-text)\",\"$text-subtle\":\"var(--theme-text-subtle)\",\"$text-invert\":\"var(--theme-text-invert)\",\"$hyperlink\":\"var(--theme-hyperlink)\",\"$text-glow-high-contrast\":\"var(--theme-text-glow-high-contrast)\",\"$box-shadow-color-light\":\"var(--theme-box-shadow-light)\",\"$box-shadow-color-medium\":\"var(--theme-box-shadow-medium)\",\"$box-shadow-color-heavy\":\"var(--theme-box-shadow-heavy)\",\"$box-shadow-color-extra-heavy\":\"var(--theme-box-shadow-extra-heavy)\",\"$body-background\":\"var(--theme-body-background)\",\"$body-background-medium\":\"var(--theme-body-background-medium)\",\"$body-background-accent\":\"var(--theme-body-background-accent)\",\"$alternate-background\":\"var(--theme-alternate-background)\",\"$alternate-background-medium\":\"var(--theme-alternate-background-medium)\",\"$overlay\":\"var(--theme-overlay)\",\"$overlay-invert\":\"var(--theme-overlay-invert)\",\"$overlay-static\":\"hsla(0deg, 0%, 0%, 0.5)\",\"$border\":\"var(--theme-border)\",\"$border-accent\":\"var(--theme-border-accent)\",\"$card-background\":\"var(--theme-card-background)\",\"$code-header\":\"var(--theme-code-header)\",\"$code-block\":\"var(--theme-code-block)\",\"$inline-code\":\"var(--theme-inline-code)\",\"$control-border\":\"var(--theme-control-border)\",\"$table-header\":\"var(--theme-table-header)\",\"$table-row\":\"var(--theme-table-row)\",\"$table-row-header\":\"var(--theme-table-row-header)\",\"$table-border-dark\":\"var(--theme-table-border-dark)\",\"$facepile-red\":\"var(--theme-facepile-red)\",\"$facepile-teal\":\"var(--theme-facepile-teal)\",\"$facepile-blue\":\"var(--theme-facepile-blue)\",\"$gradient-text-purple\":\"var(--theme-gradient-text-purple)\",\"$gradient-text-blue\":\"var(--theme-gradient-text-blue)\",\"$default-hover\":\"var(--theme-hover-base)\",\"$default-hover-invert\":\"var(--theme-body-background-medium)\",\"$border-white-high-contrast\":\"var(--theme-border-white-high-contrast)\",\"$border-yellow-high-contrast\":\"var(--theme-border-yellow-high-contrast)\",\"$code-highlight-background\":\"var(--theme-code-highlight-background)\",\"$visited\":\"var(--theme-visited)\",\"$score-low-off\":\"var(--theme-score-low-off)\",\"$score-low\":\"var(--theme-score-low)\",\"$score-medium-off\":\"var(--theme-score-medium-off)\",\"$score-medium\":\"var(--theme-score-medium)\",\"$score-high-off\":\"var(--theme-score-high-off)\",\"$score-high\":\"var(--theme-score-high)\",\"$primary\":\"var(--theme-primary-base)\",\"$primary-background\":\"var(--theme-primary-background)\",\"$primary-background-glow-high-contrast\":\"var(--theme-primary-background-glow-high-contrast)\",\"$primary-dark\":\"var(--theme-primary-dark)\",\"$primary-hover\":\"var(--theme-primary-hover)\",\"$primary-active\":\"var(--theme-primary-active)\",\"$primary-invert\":\"var(--theme-primary-invert)\",\"$primary-box-shadow\":\"var(--theme-primary-box-shadow)\",\"$secondary\":\"var(--theme-secondary-base)\",\"$secondary-background\":\"var(--theme-secondary-background)\",\"$secondary-background-glow-high-contrast\":\"var(--theme-secondary-background-glow-high-contrast)\",\"$secondary-dark\":\"var(--theme-secondary-dark)\",\"$secondary-hover\":\"var(--theme-secondary-hover)\",\"$secondary-active\":\"var(--theme-secondary-active)\",\"$secondary-invert\":\"var(--theme-secondary-invert)\",\"$secondary-box-shadow\":\"var(--theme-secondary-box-shadow)\",\"$tertiary\":\"var(--theme-tertiary-base)\",\"$tertiary-background\":\"var(--theme-tertiary-background)\",\"$tertiary-background-glow-high-contrast\":\"var(--theme-tertiary-background-glow-high-contrast)\",\"$tertiary-dark\":\"var(--theme-tertiary-dark)\",\"$tertiary-hover\":\"var(--theme-tertiary-hover)\",\"$tertiary-active\":\"var(--theme-tertiary-active)\",\"$tertiary-invert\":\"var(--theme-tertiary-invert)\",\"$tertiary-box-shadow\":\"var(--theme-tertiary-box-shadow)\",\"$success\":\"var(--theme-success-base)\",\"$success-background\":\"var(--theme-success-background)\",\"$success-background-glow-high-contrast\":\"var(--theme-success-background-glow-high-contrast)\",\"$success-dark\":\"var(--theme-success-dark)\",\"$success-hover\":\"var(--theme-success-hover)\",\"$success-active\":\"var(--theme-success-active)\",\"$success-invert\":\"var(--theme-success-invert)\",\"$success-box-shadow\":\"var(--theme-success-box-shadow)\",\"$info\":\"var(--theme-info-base)\",\"$info-background\":\"var(--theme-info-background)\",\"$info-background-glow-high-contrast\":\"var(--theme-info-background-glow-high-contrast)\",\"$info-dark\":\"var(--theme-info-dark)\",\"$info-hover\":\"var(--theme-info-hover)\",\"$info-active\":\"var(--theme-info-active)\",\"$info-invert\":\"var(--theme-info-invert)\",\"$info-box-shadow\":\"var(--theme-info-box-shadow)\",\"$warning\":\"var(--theme-warning-base)\",\"$warning-background\":\"var(--theme-warning-background)\",\"$warning-background-glow-high-contrast\":\"var(--theme-warning-background-glow-high-contrast)\",\"$warning-dark\":\"var(--theme-warning-dark)\",\"$warning-hover\":\"var(--theme-warning-hover)\",\"$warning-active\":\"var(--theme-warning-active)\",\"$warning-invert\":\"var(--theme-warning-invert)\",\"$warning-box-shadow\":\"var(--theme-warning-box-shadow)\",\"$danger\":\"var(--theme-danger-base)\",\"$danger-background\":\"var(--theme-danger-background)\",\"$danger-background-glow-high-contrast\":\"var(--theme-danger-background-glow-high-contrast)\",\"$danger-dark\":\"var(--theme-danger-dark)\",\"$danger-hover\":\"var(--theme-danger-hover)\",\"$danger-active\":\"var(--theme-danger-active)\",\"$danger-invert\":\"var(--theme-danger-invert)\",\"$danger-box-shadow\":\"var(--theme-danger-box-shadow)\",\"$colors\":{\"primary\":\"var(--theme-primary-base),var(--theme-primary-background),var(--theme-primary-dark),var(--theme-primary-hover),var(--theme-primary-active),var(--theme-primary-invert),var(--theme-primary-box-shadow),var(--theme-primary-background-glow-high-contrast)\",\"secondary\":\"var(--theme-secondary-base),var(--theme-secondary-background),var(--theme-secondary-dark),var(--theme-secondary-hover),var(--theme-secondary-active),var(--theme-secondary-invert),var(--theme-secondary-box-shadow),var(--theme-secondary-background-glow-high-contrast)\",\"tertiary\":\"var(--theme-tertiary-base),var(--theme-tertiary-background),var(--theme-tertiary-dark),var(--theme-tertiary-hover),var(--theme-tertiary-active),var(--theme-tertiary-invert),var(--theme-tertiary-box-shadow),var(--theme-tertiary-background-glow-high-contrast)\",\"success\":\"var(--theme-success-base),var(--theme-success-background),var(--theme-success-dark),var(--theme-success-hover),var(--theme-success-active),var(--theme-success-invert),var(--theme-success-box-shadow),var(--theme-success-background-glow-high-contrast)\",\"info\":\"var(--theme-info-base),var(--theme-info-background),var(--theme-info-dark),var(--theme-info-hover),var(--theme-info-active),var(--theme-info-invert),var(--theme-info-box-shadow),var(--theme-info-background-glow-high-contrast)\",\"warning\":\"var(--theme-warning-base),var(--theme-warning-background),var(--theme-warning-dark),var(--theme-warning-hover),var(--theme-warning-active),var(--theme-warning-invert),var(--theme-warning-box-shadow),var(--theme-warning-background-glow-high-contrast)\",\"danger\":\"var(--theme-danger-base),var(--theme-danger-background),var(--theme-danger-dark),var(--theme-danger-hover),var(--theme-danger-active),var(--theme-danger-invert),var(--theme-danger-box-shadow),var(--theme-danger-background-glow-high-contrast)\"},\"$color-index-base\":\"1\",\"$color-index-background\":\"2\",\"$color-index-dark\":\"3\",\"$color-index-hover\":\"4\",\"$color-index-active\":\"5\",\"$color-index-invert\":\"6\",\"$color-index-box-shadow\":\"7\",\"$color-index-background-glow-high-contrast\":\"8\"}},\"direction\":{\"name\":\"direction\",\"location\":\"/css/src/tokens/direction.scss\",\"tokens\":{\"$user-text-direction\":\"ltr\",\"$user-left\":\"left\",\"$user-right\":\"right\",\"$user-translate-x-direction\":\"1\",\"$directions\":{\"top\":\"top\",\"right\":\"right\",\"bottom\":\"bottom\",\"left\":\"left\"},\"$logical-directions\":{\"top\":\"block-start\",\"right\":\"inline-end\",\"bottom\":\"block-end\",\"left\":\"inline-start\"}}},\"display\":{\"name\":\"display\",\"location\":\"/css/src/tokens/display.scss\",\"tokens\":{\"$displays\":\"block, flex, inline, inline-block, inline-flex, grid, none\"}},\"focus\":{\"name\":\"focus\",\"location\":\"/css/src/tokens/focus.scss\",\"tokens\":{\"$focus-width\":\"0.125rem\",\"$focus-style\":\"dashed\",\"$focus-outline-offset\":\"0.25rem\",\"$focus-visible-use-polyfill\":false}},\"font-stack\":{\"name\":\"font-stack\",\"location\":\"/css/src/tokens/font-stack.scss\",\"tokens\":{\"$monospace-font-stack\":\"SFMono-Regular, Consolas, Liberation Mono, Menlo, Courier, monospace\",\"$normal-font-stack\":\"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji\",\"$quote-font-stack\":\"Arial, Helvetica Neue, Helvetica, sans-serif\"}},\"layout\":{\"name\":\"layout\",\"location\":\"/css/src/tokens/layout.scss\",\"tokens\":{\"$column-gap\":\"0.75rem\",\"$large-column-gap\":\"1.5rem\",\"$reading-max-width\":\"50rem\",\"$layout-gap\":\"16px\",\"$layout-widescreen-width\":\"1768px\",\"$layout-widescreen-gap\":\"calc(50% - 1768px / 2)\"}},\"palette\":{\"name\":\"palette\",\"location\":\"/css/src/tokens/palette.scss\",\"tokens\":{\"$palette-grey-10\":\"#fafafa\",\"$palette-grey-20\":\"#f2f2f2\",\"$palette-grey-30\":\"#e6e6e6\",\"$palette-grey-40\":\"#d2d2d2\",\"$palette-grey-50\":\"#bcbcbc\",\"$palette-grey-60\":\"#a2a2a2\",\"$palette-grey-70\":\"#8e8e8e\",\"$palette-grey-80\":\"#757575\",\"$palette-grey-90\":\"#505050\",\"$palette-grey-100\":\"#404040\",\"$palette-grey-110\":\"#2f2f2f\",\"$palette-grey-120\":\"#171717\",\"$palette-black\":\"#000\",\"$palette-black-opacity-90\":\"hsla(0deg, 0%, 0%, 0.9)\",\"$palette-black-opacity-80\":\"hsla(0deg, 0%, 0%, 0.8)\",\"$palette-black-opacity-70\":\"hsla(0deg, 0%, 0%, 0.7)\",\"$palette-black-opacity-60\":\"hsla(0deg, 0%, 0%, 0.6)\",\"$palette-black-opacity-50\":\"hsla(0deg, 0%, 0%, 0.5)\",\"$palette-black-opacity-40\":\"hsla(0deg, 0%, 0%, 0.4)\",\"$palette-black-opacity-30\":\"hsla(0deg, 0%, 0%, 0.3)\",\"$palette-black-opacity-20\":\"hsla(0deg, 0%, 0%, 0.2)\",\"$palette-black-opacity-10\":\"hsla(0deg, 0%, 0%, 0.1)\",\"$palette-black-opacity-0\":\"hsla(0deg, 0%, 0%, 0)\",\"$palette-white\":\"#fff\",\"$palette-white-opacity-0\":\"hsla(0deg, 0%, 100%, 0)\",\"$palette-white-opacity-10\":\"hsla(0deg, 0%, 100%, 0.1)\",\"$palette-white-opacity-20\":\"hsla(0deg, 0%, 100%, 0.2)\",\"$palette-white-opacity-30\":\"hsla(0deg, 0%, 100%, 0.3)\",\"$palette-white-opacity-40\":\"hsla(0deg, 0%, 100%, 0.4)\",\"$palette-white-opacity-50\":\"hsla(0deg, 0%, 100%, 0.5)\",\"$palette-white-opacity-60\":\"hsla(0deg, 0%, 100%, 0.6)\",\"$palette-white-opacity-70\":\"hsla(0deg, 0%, 100%, 0.7)\",\"$palette-white-opacity-80\":\"hsla(0deg, 0%, 100%, 0.8)\",\"$palette-white-opacity-90\":\"hsla(0deg, 0%, 100%, 0.9)\",\"$palette-black-opacity-108\":\"hsla(0deg, 0%, 0%, 0.11)\",\"$palette-black-opacity-132\":\"hsla(0deg, 0%, 0%, 0.13)\",\"$palette-black-opacity-22\":\"hsla(0deg, 0%, 0%, 0.22)\",\"$palette-black-opacity-18\":\"hsla(0deg, 0%, 0%, 0.18)\",\"$palette-white-opacity-108\":\"hsla(0deg, 0%, 100%, 0.11)\",\"$palette-white-opacity-132\":\"hsla(0deg, 0%, 100%, 0.13)\",\"$palette-white-opacity-22\":\"hsla(0deg, 0%, 100%, 0.22)\",\"$palette-white-opacity-18\":\"hsla(0deg, 0%, 100%, 0.18)\",\"$palette-blue-10\":\"#d7eaf8\",\"$palette-blue-20\":\"#9ccbee\",\"$palette-blue-30\":\"#75b6e7\",\"$palette-blue-40\":\"#278cda\",\"$palette-blue-50\":\"#0078d4\",\"$palette-blue-60\":\"#0065b3\",\"$palette-blue-70\":\"#00579a\",\"$palette-blue-80\":\"#004173\",\"$palette-blue-90\":\"#002b4d\",\"$palette-blue-100\":\"#000a13\",\"$palette-blue-a\":\"#9ccbee\",\"$palette-blue-opacity-30\":\"hsla(206deg, 100%, 35%, 0.3)\",\"$palette-blue-opacity-70\":\"hsla(206deg, 100%, 35%, 0.7)\",\"$palette-blue-black\":\"#091f2c\",\"$palette-navy-10\":\"#dfe5ee\",\"$palette-navy-20\":\"#c1cbdc\",\"$palette-navy-30\":\"#a4b2c9\",\"$palette-navy-40\":\"#899ab5\",\"$palette-navy-50\":\"#70819f\",\"$palette-navy-60\":\"#4a5d7e\",\"$palette-navy-70\":\"#243a5e\",\"$palette-navy-80\":\"#14294c\",\"$palette-navy-90\":\"#061329\",\"$palette-navy-100\":\"#000910\",\"$palette-navy-opacity-30\":\"hsla(189deg, 52%, 12%, 0.3)\",\"$palette-navy-opacity-70\":\"hsla(189deg, 52%, 12%, 0.7)\",\"$palette-turqoise-10\":\"#e9fbff\",\"$palette-turqoise-20\":\"#bdf5ff\",\"$palette-turqoise-30\":\"#7becff\",\"$palette-turqoise-40\":\"#50e6ff\",\"$palette-turqoise-50\":\"#41b9cf\",\"$palette-turqoise-60\":\"#328e9f\",\"$palette-turqoise-70\":\"#28727f\",\"$palette-turqoise-80\":\"#19474f\",\"$palette-turqoise-90\":\"#0f2a2f\",\"$palette-turqoise-100\":\"#050e0f\",\"$palette-green-10\":\"#dff6dd\",\"$palette-green-20\":\"#acd7aa\",\"$palette-green-30\":\"#7cbb7b\",\"$palette-green-40\":\"#489d48\",\"$palette-green-50\":\"#2a8b2a\",\"$palette-green-60\":\"#107c10\",\"$palette-green-70\":\"#0b6413\",\"$palette-green-80\":\"#054b16\",\"$palette-green-90\":\"#05350c\",\"$palette-green-100\":\"#061a00\",\"$palette-green-opacity-30\":\"hsla(120deg, 37%, 45%, 0.3)\",\"$palette-green-opacity-70\":\"hsla(120deg, 37%, 45%, 0.7)\",\"$palette-purple-10\":\"#efd9fd\",\"$palette-purple-20\":\"#e0b7fe\",\"$palette-purple-30\":\"#d59dff\",\"$palette-purple-40\":\"#ac7ee1\",\"$palette-purple-50\":\"#9970d3\",\"$palette-purple-60\":\"#8661c5\",\"$palette-purple-70\":\"#624991\",\"$palette-purple-80\":\"#3b2e58\",\"$palette-purple-90\":\"#201843\",\"$palette-purple-100\":\"#03002c\",\"$palette-purple-a\":\"#cd9bcf\",\"$palette-purple-b\":\"#702573\",\"$palette-purple-opacity-30\":\"hsla(251deg, 47%, 18%, 0.3)\",\"$palette-purple-opacity-70\":\"hsla(251deg, 47%, 18%, 0.7)\",\"$palette-yellow-10\":\"#fff4ce\",\"$palette-yellow-20\":\"#ffe79f\",\"$palette-yellow-30\":\"#ffdf84\",\"$palette-yellow-40\":\"#ffcb3f\",\"$palette-yellow-50\":\"#ffb900\",\"$palette-yellow-60\":\"#d19501\",\"$palette-yellow-70\":\"#966802\",\"$palette-yellow-80\":\"#6a4b16\",\"$palette-yellow-90\":\"#4f340e\",\"$palette-yellow-100\":\"#2d1703\",\"$palette-yellow-opacity-30\":\"hsla(44deg, 100%, 50%, 0.3)\",\"$palette-yellow-opacity-70\":\"hsla(44deg, 100%, 50%, 0.7)\",\"$palette-yellow-sand\":\"#e8e6df\",\"$palette-red-10\":\"#fde7e9\",\"$palette-red-20\":\"#e5a7a8\",\"$palette-red-30\":\"#d4797a\",\"$palette-red-40\":\"#c54f4f\",\"$palette-red-50\":\"#b62626\",\"$palette-red-60\":\"#a80000\",\"$palette-red-70\":\"#870000\",\"$palette-red-80\":\"#630001\",\"$palette-red-90\":\"#470001\",\"$palette-red-100\":\"#290001\",\"$palette-red-opacity-30\":\"hsla(0deg, 100%, 33%, 0.3)\",\"$palette-red-opacity-70\":\"hsla(0deg, 100%, 33%, 0.7)\",\"$palette-yellow-high-contrast\":\"#ff0\",\"$palette-yellow-high-contrast-hover\":\"#ff3\",\"$palette-visited-high-contrast\":\"#3cff00\"}},\"position\":{\"name\":\"position\",\"location\":\"/css/src/tokens/position.scss\",\"tokens\":{\"$positions\":\"fixed, absolute, relative, sticky\"}},\"schemes\":{\"name\":\"schemes\",\"location\":\"/css/src/tokens/schemes.scss\",\"tokens\":{\"$color-schemes\":{\"light\":\"light\",\"dark\":\"dark\",\"high-contrast\":\"dark\"}}},\"shadow\":{\"name\":\"shadow\",\"location\":\"/css/src/tokens/shadow.scss\",\"tokens\":{\"$box-shadow-light\":\"0 1.6px 3.6px 0 var(--theme-box-shadow-medium), 0 0.3px 0.9px 0 var(--theme-box-shadow-light)\",\"$box-shadow-medium\":\"0 3.2px 7.2px 0 var(--theme-box-shadow-medium), 0 0.6px 1.8px 0 var(--theme-box-shadow-light)\",\"$box-shadow-heavy\":\"0 6.4px 14.4px 0 var(--theme-box-shadow-medium), 0 1.2px 3.6px 0 var(--theme-box-shadow-light)\",\"$box-shadow-extra-heavy\":\"0 25.6px 57.6px 0 var(--theme-box-shadow-extra-heavy), 0 4.8px 14.4px 0 var(--theme-box-shadow-heavy)\"}},\"spacing\":{\"name\":\"spacing\",\"location\":\"/css/src/tokens/spacing.scss\",\"tokens\":{\"$layout-0\":\"0\",\"$layout-1\":\"0.5rem\",\"$layout-2\":\"1rem\",\"$layout-3\":\"1.5rem\",\"$layout-4\":\"2rem\",\"$layout-5\":\"3rem\",\"$layout-6\":\"4rem\",\"$layout-7\":\"6rem\",\"$layout-8\":\"8rem\",\"$spacer-0\":\"0\",\"$spacer-1\":\"0.125rem\",\"$spacer-2\":\"0.25rem\",\"$spacer-3\":\"0.5rem\",\"$spacer-4\":\"0.75rem\",\"$spacer-5\":\"1rem\",\"$spacer-6\":\"1.25rem\",\"$spacer-7\":\"1.5rem\",\"$spacer-8\":\"2rem\",\"$spacer-9\":\"2.5rem\",\"$spacer-10\":\"3rem\"}},\"themes\":{\"name\":\"themes\",\"location\":\"/css/src/tokens/themes.scss\",\"tokens\":{\"$themes\":{\"light\":{\"text\":\"#171717\",\"text-subtle\":\"#505050\",\"text-invert\":\"#fff\",\"text-glow-high-contrast\":\"#171717\",\"box-shadow-light\":\"hsla0deg,0%,0%,0.11)\",\"box-shadow-medium\":\"hsla(0deg,0%,0%,0.13)\",\"box-shadow-heavy\":\"hsla(0deg,0%,0%,0.18)\",\"box-shadow-extra-heavy\":\"hsla(0deg,0%,0%,0.22)\",\"overlay\":\"hsla(0deg,0%,0%,0.7)\",\"overlay-invert\":\"#fff\",\"body-background\":\"#fff\",\"body-background-accent\":\"#e8e6df\",\"body-background-medium\":\"#f2f2f2\",\"alternate-background\":\"#171717\",\"alternate-background-medium\":\"#2f2f2f\",\"card-background\":\"#fff\",\"border\":\"#e6e6e6\",\"border-accent\":\"#e8e6df\",\"border-white-high-contrast\":\"hsla(0deg,0%,100%,0)\",\"border-yellow-high-contrast\":\"hsla(0deg,0%,0%,0)\",\"table-header\":\"#e6e6e6\",\"table-row\":\"#f2f2f2\",\"table-row-header\":\"#fafafa\",\"table-border-dark\":\"#d2d2d2\",\"hover-base\":\"#2f2f2f\",\"hover-invert\":\"#fafafa\",\"code-header\":\"#e6e6e6\",\"code-block\":\"#f2f2f2\",\"control-border\":\"#757575\",\"inline-code\":\"#e6e6e6\",\"code-highlight-background\":\"#fff4ce\",\"visited\":\"#624991\",\"score-low-off\":\"hsla(0deg,100%,33%,0.3)\",\"score-low\":\"#b62626\",\"score-medium-off\":\"hsla(44deg,100%,50%,0.3)\",\"score-medium\":\"#ffb900\",\"score-high-off\":\"hsla(120deg,37%,45%,0.3)\",\"score-high\":\"#2a8b2a\",\"hyperlink\":\"#0065b3\",\"primary-base\":\"#0078d4\",\"primary-background\":\"#d7eaf8\",\"primary-background-glow-high-contrast\":\"#d7eaf8\",\"primary-dark\":\"#004173\",\"primary-hover\":\"#0065b3\",\"primary-active\":\"#00579a\",\"primary-box-shadow\":\"hsla(206deg,100%,35%,0.3)\",\"primary-invert\":\"#fff\",\"secondary-base\":\"#a2a2a2\",\"secondary-background\":\"#e6e6e6\",\"secondary-background-glow-high-contrast\":\"#e6e6e6\",\"secondary-dark\":\"#2f2f2f\",\"secondary-hover\":\"#d2d2d2\",\"secondary-active\":\"#d2d2d2\",\"secondary-box-shadow\":\"hsla(0deg,0%,0%,0.3)\",\"secondary-invert\":\"#000\",\"tertiary-base\":\"#243a5e\",\"tertiary-background\":\"#061329\",\"tertiary-background-glow-high-contrast\":\"#061329\",\"tertiary-dark\":\"#a4b2c9\",\"tertiary-hover\":\"#14294c\",\"tertiary-active\":\"#70819f\",\"tertiary-box-shadow\":\"hsla(262deg,46%,17%,0.3)\",\"tertiary-invert\":\"#fff\",\"success-base\":\"#107c10\",\"success-background\":\"#dff6dd\",\"success-background-glow-high-contrast\":\"#dff6dd\",\"success-dark\":\"#054b16\",\"success-hover\":\"#0b6413\",\"success-active\":\"#054b16\",\"success-box-shadow\":\"hsla(120deg,37%,45%,0.3)\",\"success-invert\":\"#fff\",\"info-base\":\"#8661c5\",\"info-background\":\"#efd9fd\",\"info-background-glow-high-contrast\":\"#efd9fd\",\"info-dark\":\"#3b2e58\",\"info-hover\":\"#8661c5\",\"info-active\":\"#624991\",\"info-box-shadow\":\"hsla(251deg,47%,18%,0.3)\",\"info-invert\":\"#fff\",\"warning-base\":\"#ffb900\",\"warning-background\":\"#fff4ce\",\"warning-background-glow-high-contrast\":\"#fff4ce\",\"warning-dark\":\"#6a4b16\",\"warning-hover\":\"#d19501\",\"warning-active\":\"#966802\",\"warning-box-shadow\":\"hsla(44deg,100%,50%,0.3)\",\"warning-invert\":\"#000\",\"danger-base\":\"#a80000\",\"danger-background\":\"#fde7e9\",\"danger-background-glow-high-contrast\":\"#fde7e9\",\"danger-dark\":\"#470001\",\"danger-hover\":\"#870000\",\"danger-active\":\"#630001\",\"danger-box-shadow\":\"hsla(0deg,100%,33%,0.3)\",\"danger-invert\":\"#fff\",\"facepile-red\":\"#a80000\",\"facepile-teal\":\"#328e9f\",\"facepile-blue\":\"#0078d4\",\"gradient-text-purple\":\"#702573\",\"gradient-text-blue\":\"#00579a\"},\"dark\":{\"text\":\"#e6e6e6\",\"text-subtle\":\"#d2d2d2\",\"text-invert\":\"#2f2f2f\",\"text-glow-high-contrast\":\"#e6e6e6\",\"box-shadow-light\":\"hsla0deg,0%,0%,0.11)\",\"box-shadow-medium\":\"hsla(0deg,0%,0%,0.13)\",\"box-shadow-heavy\":\"hsla(0deg,0%,0%,0.18)\",\"box-shadow-extra-heavy\":\"hsla(0deg,0%,0%,0.22)\",\"overlay\":\"hsla(0deg,0%,0%,0.7)\",\"overlay-invert\":\"#fff\",\"body-background\":\"#171717\",\"body-background-accent\":\"#091f2c\",\"body-background-medium\":\"#2f2f2f\",\"alternate-background\":\"#f2f2f2\",\"alternate-background-medium\":\"#fafafa\",\"border\":\"#404040\",\"border-accent\":\"#505050\",\"border-white-high-contrast\":\"hsla(0deg,0%,100%,0)\",\"border-yellow-high-contrast\":\"hsla(0deg,0%,0%,0)\",\"card-background\":\"#091f2c\",\"table-header\":\"#404040\",\"table-row\":\"#2f2f2f\",\"table-row-header\":\"#2f2f2f\",\"table-border-dark\":\"#505050\",\"hover-base\":\"#d2d2d2\",\"hover-invert\":\"#2f2f2f\",\"code-header\":\"#404040\",\"code-block\":\"#2f2f2f\",\"control-border\":\"#d2d2d2\",\"inline-code\":\"#404040\",\"code-highlight-background\":\"#0b6413\",\"visited\":\"#ac7ee1\",\"score-low-off\":\"hsla(0deg,100%,33%,0.7)\",\"score-low\":\"#b62626\",\"score-medium-off\":\"hsla(44deg,100%,50%,0.3)\",\"score-medium\":\"#ffcb3f\",\"score-high-off\":\"hsla(120deg,37%,45%,0.7)\",\"score-high\":\"#489d48\",\"hyperlink\":\"#75b6e7\",\"primary-base\":\"#75b6e7\",\"primary-background\":\"#004173\",\"primary-background-glow-high-contrast\":\"#004173\",\"primary-dark\":\"#9ccbee\",\"primary-hover\":\"#278cda\",\"primary-active\":\"#0078d4\",\"primary-box-shadow\":\"hsla(206deg,100%,35%,0.3)\",\"primary-invert\":\"#000\",\"secondary-base\":\"#757575\",\"secondary-background\":\"#404040\",\"secondary-background-glow-high-contrast\":\"#404040\",\"secondary-dark\":\"#e6e6e6\",\"secondary-hover\":\"#8e8e8e\",\"secondary-active\":\"#a2a2a2\",\"secondary-box-shadow\":\"hsla(0deg,0%,0%,0.7)\",\"secondary-invert\":\"#fff\",\"tertiary-base\":\"#404040\",\"tertiary-background\":\"#171717\",\"tertiary-background-glow-high-contrast\":\"#171717\",\"tertiary-dark\":\"#e6e6e6\",\"tertiary-hover\":\"#505050\",\"tertiary-active\":\"#757575\",\"tertiary-box-shadow\":\"hsla(206deg,100%,35%,0.3)\",\"tertiary-invert\":\"#fff\",\"success-base\":\"#7cbb7b\",\"success-background\":\"#054b16\",\"success-background-glow-high-contrast\":\"#054b16\",\"success-dark\":\"#dff6dd\",\"success-hover\":\"#489d48\",\"success-active\":\"#7cbb7b\",\"success-box-shadow\":\"hsla(120deg,37%,45%,0.7)\",\"success-invert\":\"#000\",\"info-base\":\"#9970d3\",\"info-background\":\"#3b2e58\",\"info-background-glow-high-contrast\":\"#3b2e58\",\"info-dark\":\"#efd9fd\",\"info-hover\":\"#ac7ee1\",\"info-active\":\"#d59dff\",\"info-box-shadow\":\"hsla(251deg,47%,18%,0.7)\",\"info-invert\":\"#000\",\"warning-base\":\"#ffb900\",\"warning-background\":\"#6a4b16\",\"warning-background-glow-high-contrast\":\"#6a4b16\",\"warning-dark\":\"#fff4ce\",\"warning-hover\":\"#ffcb3f\",\"warning-active\":\"#ffdf84\",\"warning-box-shadow\":\"hsla(44deg,100%,50%,0.7)\",\"warning-invert\":\"#000\",\"danger-base\":\"#e5a7a8\",\"danger-background\":\"#630001\",\"danger-background-glow-high-contrast\":\"#630001\",\"danger-dark\":\"#fde7e9\",\"danger-hover\":\"#c54f4f\",\"danger-active\":\"#d4797a\",\"danger-box-shadow\":\"hsla(0deg,100%,33%,0.7)\",\"danger-invert\":\"#000\",\"facepile-red\":\"#c54f4f\",\"facepile-teal\":\"#50e6ff\",\"facepile-blue\":\"#278cda\",\"gradient-text-purple\":\"#cd9bcf\",\"gradient-text-blue\":\"#9ccbee\"},\"high-contrast\":{\"text\":\"#fff\",\"text-subtle\":\"#fff\",\"text-invert\":\"#000\",\"text-glow-high-contrast\":\"#ff0\",\"box-shadow-light\":\"hsla0deg,0%,0%,0.11)\",\"box-shadow-medium\":\"hsla(0deg,0%,0%,0.13)\",\"box-shadow-heavy\":\"hsla(0deg,0%,0%,0.18)\",\"box-shadow-extra-heavy\":\"hsla(0deg,0%,0%,0.22)\",\"overlay\":\"#404040\",\"overlay-invert\":\"#fff\",\"body-background\":\"#000\",\"body-background-accent\":\"#000\",\"body-background-medium\":\"#000\",\"alternate-background\":\"#fff\",\"alternate-background-medium\":\"#fff\",\"border\":\"#fff\",\"border-accent\":\"#fff\",\"border-white-high-contrast\":\"#fff\",\"border-yellow-high-contrast\":\"#ff0\",\"card-background\":\"#000\",\"table-header\":\"#505050\",\"table-row\":\"#000\",\"table-row-header\":\"#171717\",\"table-border-dark\":\"#fff\",\"hover-base\":\"#ff0\",\"hover-invert\":\"#000\",\"code-header\":\"#000\",\"code-block\":\"#000\",\"control-border\":\"#fff\",\"inline-code\":\"#2f2f2f\",\"code-highlight-background\":\"#0b6413\",\"visited\":\"#3cff00\",\"score-low-off\":\"#a80000\",\"score-low\":\"#fde7e9\",\"score-medium-off\":\"hsla(44deg,100%,50%,0.7)\",\"score-medium\":\"#ffe79f\",\"score-high-off\":\"#107c10\",\"score-high\":\"#dff6dd\",\"hyperlink\":\"#ff0\",\"primary-base\":\"#ff0\",\"primary-background\":\"#000\",\"primary-background-glow-high-contrast\":\"#ff0\",\"primary-dark\":\"#ff0\",\"primary-hover\":\"#ff3\",\"primary-active\":\"#ff3\",\"primary-box-shadow\":\"#fff\",\"primary-invert\":\"#000\",\"secondary-base\":\"#e6e6e6\",\"secondary-background\":\"#000\",\"secondary-background-glow-high-contrast\":\"#505050\",\"secondary-dark\":\"#e6e6e6\",\"secondary-hover\":\"#d2d2d2\",\"secondary-active\":\"#d2d2d2\",\"secondary-box-shadow\":\"#e6e6e6\",\"secondary-invert\":\"#000\",\"tertiary-base\":\"#fff\",\"tertiary-background\":\"#000\",\"tertiary-background-glow-high-contrast\":\"#fff\",\"tertiary-dark\":\"#fff\",\"tertiary-hover\":\"#e6e6e6\",\"tertiary-active\":\"#e6e6e6\",\"tertiary-box-shadow\":\"#fff\",\"tertiary-invert\":\"#000\",\"success-base\":\"#7cbb7b\",\"success-background\":\"#000\",\"success-background-glow-high-contrast\":\"#7cbb7b\",\"success-dark\":\"#acd7aa\",\"success-hover\":\"#acd7aa\",\"success-active\":\"#acd7aa\",\"success-box-shadow\":\"#fff\",\"success-invert\":\"#000\",\"info-base\":\"#e0b7fe\",\"info-background\":\"#000\",\"info-background-glow-high-contrast\":\"#e0b7fe\",\"info-dark\":\"#efd9fd\",\"info-hover\":\"#efd9fd\",\"info-active\":\"#efd9fd\",\"info-box-shadow\":\"#fff\",\"info-invert\":\"#000\",\"warning-base\":\"#ffe79f\",\"warning-background\":\"#000\",\"warning-background-glow-high-contrast\":\"#ffe79f\",\"warning-dark\":\"#fff4ce\",\"warning-hover\":\"#fff4ce\",\"warning-active\":\"#fff4ce\",\"warning-box-shadow\":\"#fff\",\"warning-invert\":\"#000\",\"danger-base\":\"#e5a7a8\",\"danger-background\":\"#000\",\"danger-background-glow-high-contrast\":\"#e5a7a8\",\"danger-dark\":\"#fde7e9\",\"danger-hover\":\"#fde7e9\",\"danger-active\":\"#fde7e9\",\"danger-box-shadow\":\"#fff\",\"danger-invert\":\"#000\",\"facepile-red\":\"#d4797a\",\"facepile-teal\":\"#7becff\",\"facepile-blue\":\"#75b6e7\",\"gradient-text-purple\":\"#fff\",\"gradient-text-blue\":\"#fff\"}}}},\"typography\":{\"name\":\"typography\",\"location\":\"/css/src/tokens/typography.scss\",\"tokens\":{\"$document-font-size\":\"16px\",\"$font-size-9\":\"0.75rem\",\"$font-size-8\":\"0.875rem\",\"$font-size-7\":\"1rem\",\"$font-size-6\":\"1.125rem\",\"$font-size-5\":\"1.25rem\",\"$font-size-4\":\"1.5rem\",\"$font-size-3\":\"1.75rem\",\"$font-size-2\":\"2.125rem\",\"$font-size-1\":\"2.5rem\",\"$font-size-0\":\"3.375rem\",\"$weight-light\":\"100\",\"$weight-semilight\":\"200\",\"$weight-normal\":\"400\",\"$weight-semibold\":\"600\",\"$weight-bold\":\"700\",\"$letter-spacing-medium\":\"0.125rem\",\"$letter-spacing-wide\":\"0.225rem\"}},\"z-index\":{\"name\":\"z-index\",\"location\":\"/css/src/tokens/z-index.scss\",\"tokens\":{\"$zindex-active\":\"1\",\"$zindex-hover\":\"2\",\"$zindex-focus\":\"3\",\"$zindex-multi\":\"4\",\"$zindex-dropdown\":\"1000\",\"$zindex-sticky\":\"1020\",\"$zindex-fixed\":\"1030\",\"$zindex-modal-backdrop\":\"1040\",\"$zindex-modal\":\"1050\",\"$zindex-popover\":\"1060\",\"$zindex-tooltip\":\"1070\",\"$zindex-stretched-link\":\"1\"}}}\n","import { prefersColorSchemeDarkQuery } from './match-media';\r\nimport { localStorage } from './protected-storage';\r\nimport { parseQueryString } from './query-string';\r\nimport { atlasTokens } from './tokens';\r\n\r\n/**\r\n * The globally available descriptor of the current theme. It is updated each time setTheme is called.\r\n */\r\nexport let currentTheme: ThemeType = 'light';\r\nexport type ThemeType = keyof ThemeTypeMap;\r\n\r\nfunction isTheme(value: string): value is ThemeType {\r\n\tif (value === 'light' || value === 'dark' || value === 'high-contrast') {\r\n\t\treturn true;\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n/**\r\n * Simple string name for each theme.\r\n */\r\nexport const themes = Object.keys(atlasTokens.themes.tokens.$themes);\r\n/**\r\n * Data structure for easy access to theme names and css classes.\r\n */\r\nexport const themeInfo = themes.reduce((themeInfo, themeName) => {\r\n\tthemeInfo[themeName as keyof ThemeTypeMap] = {\r\n\t\tdocumentClass: `theme-${themeName}`,\r\n\t\tname: themeName\r\n\t};\r\n\treturn themeInfo;\r\n}, {} as ThemeTypeMap);\r\n/**\r\n * CSS classes related to theming.\r\n * Used to remove all classes before adding them next one.\r\n */\r\nexport const cssClasses = themes.map(theme => themeInfo[theme as keyof ThemeTypeMap].documentClass);\r\nexport interface ThemeTypeInfo {\r\n\tdocumentClass: string;\r\n\tname: string;\r\n}\r\n\r\nexport interface ThemeTypeMap {\r\n\tlight: ThemeTypeInfo;\r\n\tdark: ThemeTypeInfo;\r\n\t'high-contrast': ThemeTypeInfo;\r\n}\r\n\r\n/**\r\n * The setTheme functions is used during page.evaulate in screenshots.\r\n */\r\ndeclare global {\r\n\tinterface Window {\r\n\t\tsetTheme: typeof setTheme;\r\n\t}\r\n}\r\n\r\n/**\r\n * Using the current theme key, get the next one in the cycle.\r\n * @param current The current theme's name.\r\n * @returns The next theme's name.\r\n */\r\nexport function cycleKeys(current: keyof ThemeTypeMap): keyof ThemeTypeMap {\r\n\tconst i = themes.findIndex(item => item === current) || 0;\r\n\tconst next = i < 2 ? i + 1 : 0;\r\n\t// eslint-disable-next-line security/detect-object-injection\r\n\treturn themes[next] as keyof ThemeTypeMap;\r\n}\r\n\r\n/**\r\n * Add class to apply the next theme, and remove previously applied classes.\r\n * @param appliedTheme The name of the theme we want to apply.\r\n */\r\nexport function setThemeClass(appliedTheme: ThemeType) {\r\n\tconst htmlClassList = document.documentElement.classList;\r\n\tfor (const docClass of cssClasses) {\r\n\t\thtmlClassList.remove(docClass);\r\n\t}\r\n\r\n\tif (isTheme(appliedTheme)) {\r\n\t\t// eslint-disable-next-line security/detect-object-injection\r\n\t\thtmlClassList.add(themeInfo[appliedTheme].documentClass);\r\n\t}\r\n}\r\n\r\nexport function setGlobalThemeValue(appliedTheme: ThemeType) {\r\n\treturn (currentTheme = appliedTheme);\r\n}\r\n\r\nexport function storeTheme(theme: ThemeType) {\r\n\tlocalStorage.setItem('theme', theme);\r\n}\r\n\r\nexport function getPreferredTheme(prefersDarkTheme = false): ThemeType {\r\n\t// check for user selection\r\n\tconst theme = localStorage.getItem('theme') as string;\r\n\tif (/^light|dark|high-contrast$/.test(theme)) {\r\n\t\treturn theme as ThemeType;\r\n\t}\r\n\r\n\t// check for system dark preference\r\n\tif (prefersDarkTheme) {\r\n\t\treturn 'dark';\r\n\t}\r\n\r\n\t// default to light\r\n\treturn 'light';\r\n}\r\n\r\n/**\r\n * SetTheme is the public way of changing the visual theme. It ensures we use the correct EventBus instance, while allow the user of the function to remain free of such implementation detail..\r\n *\r\n * @param theme The ThemeType to apply to the current window.\r\n */\r\nexport function setTheme(appliedTheme: ThemeType) {\r\n\tconst previousTheme = currentTheme;\r\n\tif (previousTheme === appliedTheme) {\r\n\t\treturn;\r\n\t}\r\n\tsetGlobalThemeValue(appliedTheme);\r\n\tsetThemeClass(appliedTheme);\r\n}\r\n\r\n/**\r\n * Initialize Theme related functionality\r\n */\r\nexport function initTheme() {\r\n\tconst theme = getInitialTheme();\r\n\tsetTheme(theme);\r\n\tinitThemeControls();\r\n\r\n\t// For use in screenshots\r\n\twindow.setTheme = setTheme;\r\n}\r\n\r\nexport function getInitialTheme(\r\n\tprefersDarkTheme: boolean = prefersColorSchemeDarkQuery.matches\r\n): ThemeType {\r\n\tconst args = parseQueryString();\r\n\r\n\t// Themes can be forced with query string arguments.\r\n\tif (args.theme === 'light' || args.theme === 'dark' || args.theme === 'high-contrast') {\r\n\t\treturn args.theme as ThemeType;\r\n\t}\r\n\r\n\treturn getPreferredTheme(prefersDarkTheme);\r\n}\r\n\r\n/**\r\n * Listens for clicks on elements with data-theme-cycle attributes.\r\n * Cycles through list of themes one after the other.\r\n */\r\nexport function initThemeControls(): void {\r\n\twindow.addEventListener('click', ({ target }: Event) => {\r\n\t\tconst button =\r\n\t\t\ttarget instanceof Element && (target.closest('[data-theme-cycle]') as HTMLElement);\r\n\r\n\t\tif (!button) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst themeToApply = cycleKeys(currentTheme);\r\n\r\n\t\tstoreTheme(themeToApply);\r\n\t\tsetTheme(themeToApply);\r\n\t});\r\n}\r\n","let snapScrollUpdating = false;\r\n\r\n/**\r\n * Snap scroll behaviors to have a smooth transition from one card to another\r\n */\r\nexport function initSnapScroll() {\r\n\t// slide card when the button is clicked\r\n\tinitSnapScrollClickListeners();\r\n\r\n\t// update when slide scrolls into the view\r\n\tconst snapScrolls = Array.from(document.querySelectorAll('[data-snap-scroll]')) as HTMLElement[];\r\n\tfor (const snapScroll of snapScrolls) {\r\n\t\tinitSnapScrollScrollListeners(snapScroll);\r\n\t}\r\n}\r\n\r\nexport function initSnapScrollScrollListeners(element: HTMLElement) {\r\n\tconst slideContainer = element.querySelector('[data-snap-scroll-slides]');\r\n\tif (!slideContainer) {\r\n\t\tthrow new Error(\r\n\t\t\t'Your snap scroll element must contain a scrollable element with \"data-snap-scroll-slides\" attribute.'\r\n\t\t);\r\n\t}\r\n\r\n\tconst slides = Array.from(\r\n\t\tslideContainer.querySelectorAll('[data-snap-scroll-slide]')\r\n\t) as HTMLAnchorElement[];\r\n\r\n\tconst options = {\r\n\t\troot: slideContainer,\r\n\t\trootMargin: '0px',\r\n\t\tthreshold: 0.8\r\n\t};\r\n\r\n\tconst observer = new IntersectionObserver(entries => {\r\n\t\tif (snapScrollUpdating) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (entries[0].isIntersecting === true) {\r\n\t\t\tconst step = entries[0].target.getAttribute('data-snap-scroll-slide' as string);\r\n\t\t\tif (!step) {\r\n\t\t\t\tthrow new Error(\r\n\t\t\t\t\t'The [data-snap-scroll-slide] clicked does not correspond to a [data-snap-scroll-nav-item]'\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tconst anchor = element.querySelector(\r\n\t\t\t\t`[data-snap-scroll-nav-item=\"${step}\"]`\r\n\t\t\t) as HTMLAnchorElement;\r\n\t\t\tif (!anchor) {\r\n\t\t\t\tthrow new Error('Anchor missing from snap scroll container');\r\n\t\t\t}\r\n\t\t\tupdatePaginationState(element, anchor);\r\n\t\t}\r\n\t}, options);\r\n\tslides.forEach(slide => observer.observe(slide));\r\n}\r\n\r\nfunction initSnapScrollClickListeners() {\r\n\twindow.addEventListener('click', (event: Event) => {\r\n\t\tconst target =\r\n\t\t\tevent.target instanceof Element &&\r\n\t\t\t(event.target.closest('[data-snap-scroll-nav-item]') as HTMLAnchorElement);\r\n\r\n\t\tif (!target) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst parentElement = target.closest('[data-snap-scroll]') as HTMLElement;\r\n\t\tif (!parentElement) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst snapScrollId = target.dataset.snapScrollNavItem;\r\n\t\tif (!snapScrollId) {\r\n\t\t\tthrow new Error(\r\n\t\t\t\t'You need to add a value to the parent of your snap scroll: [data-snap-scroll=\"id-goes-here\")'\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tsnapScrollUpdating = true;\r\n\r\n\t\tevent.preventDefault();\r\n\r\n\t\tconst slide = parentElement.querySelector(\r\n\t\t\t`[data-snap-scroll-slide=\"${snapScrollId}\"]`\r\n\t\t) as HTMLElement;\r\n\r\n\t\tupdatePaginationState(parentElement, target);\r\n\r\n\t\tslide.scrollIntoView({ behavior: 'auto', block: 'nearest', inline: 'start' });\r\n\r\n\t\tsetTimeout(() => (snapScrollUpdating = false), 500);\r\n\t});\r\n}\r\n\r\nfunction updatePaginationState(parentElement: HTMLElement, activeAnchor: HTMLAnchorElement) {\r\n\t// remove is current from all anchors in this container\r\n\tconst anchors = Array.from(\r\n\t\tparentElement.querySelectorAll('[data-snap-scroll-nav-item]')\r\n\t) as HTMLAnchorElement[];\r\n\tfor (const a of anchors) {\r\n\t\ta.classList.remove('is-current');\r\n\t}\r\n\t// add one back\r\n\tactiveAnchor.classList.add('is-current');\r\n}\r\n","let nextId = 0;\r\n\r\nexport function generateElementId() {\r\n\treturn `bx-${nextId++}`;\r\n}\r\n\r\nexport function kebabToCamelCase(str: string) {\r\n\treturn str.replace(/-./g, x => x[1].toUpperCase());\r\n}\r\n","import { generateElementId, kebabToCamelCase } from '../utilities/util';\r\n\r\nexport const defaultMessageStrings = {\r\n\tcontentHasChanged: 'Content has changed, please reload the page to get the latest changes.',\r\n\tinputMaxLength: '{inputLabel} cannot be longer than {maxLength} characters.',\r\n\tinputMinLength: '{inputLabel} must be at least {minLength} characters.',\r\n\tinputRequired: '{inputLabel} is required.',\r\n\tpleaseFixTheFollowingIssues: 'Please fix the following issues to continue:',\r\n\tthereAreNoEditsToSubmit: 'There are no edits to submit.',\r\n\tweEncounteredAnUnexpectedError:\r\n\t\t'We encountered an unexpected error. Please try again later. If this issue continues, please contact site support.'\r\n};\r\n// <form-behavior>\r\nexport class FormBehaviorElement extends HTMLElement {\r\n\tsubmitting = false as boolean;\r\n\tinitialData = new FormData();\r\n\ttoDispose: (() => void)[] = [];\r\n\tisDirty = false;\r\n\tcommitTimeout = 0;\r\n\tlocStrings = Object.assign(\r\n\t\t{},\r\n\t\tdefaultMessageStrings,\r\n\t\tArray.from(this.attributes)\r\n\t\t\t.filter(a => a.name.startsWith('loc-'))\r\n\t\t\t.reduce((map: { [key: string]: string }, a) => {\r\n\t\t\t\tmap[kebabToCamelCase(a.name.substring(4)) as keyof LocStrings] = a.value;\r\n\t\t\t\treturn map;\r\n\t\t\t}, {})\r\n\t);\r\n\r\n\tvalidators: Validator[] = [\r\n\t\tthis.validateMinLength.bind(this), // min length before required\r\n\t\tthis.validateRequired.bind(this),\r\n\t\tthis.validateMaxLength.bind(this)\r\n\t];\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.locStrings = this.locStrings;\r\n\t}\r\n\r\n\tget canSave() {\r\n\t\treturn this.isDirty || this.isNew;\r\n\t}\r\n\r\n\tget form() {\r\n\t\treturn this.closest(`form`);\r\n\t}\r\n\r\n\t// disable browser message when leaving page\r\n\tget hideUnloadMessage() {\r\n\t\treturn this.hasAttribute('nounload');\r\n\t}\r\n\r\n\t// use the new attribute when you want to ignore isDirty validation (for example, if the only user action on the form is to click a button)\r\n\tget isNew() {\r\n\t\treturn this.hasAttribute('new');\r\n\t}\r\n\r\n\tconnectedCallback() {\r\n\t\tconst form = this.parentElement;\r\n\t\tif (!(form instanceof HTMLFormElement)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tform.setAttribute('novalidate', '');\r\n\t\tconst errorSummaryContainer = document.createElement('div');\r\n\t\terrorSummaryContainer.setAttribute('data-form-error-container', '');\r\n\t\tthis.insertAdjacentElement('afterend', errorSummaryContainer);\r\n\r\n\t\tthis.initialData = new FormData(form);\r\n\r\n\t\tif (this.ownerDocument.readyState === 'loading') {\r\n\t\t\tthis.ownerDocument.addEventListener(\r\n\t\t\t\t'readystatechange',\r\n\t\t\t\t() => (this.initialData = new FormData(form))\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tthis.subscribe(form, 'input', this);\r\n\t\tthis.subscribe(form, 'change', this);\r\n\t\tthis.subscribe(form, 'submit', this);\r\n\t\tthis.subscribe(window, 'beforeunload', this);\r\n\t}\r\n\r\n\tdisconnectedCallback() {\r\n\t\tfor (const dispose of this.toDispose) {\r\n\t\t\tdispose();\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(target: EventTarget, type: string, listener: EventListenerObject) {\r\n\t\ttarget.addEventListener(type, listener);\r\n\t\tthis.toDispose.push(() => target.removeEventListener(type, listener));\r\n\t}\r\n\r\n\tsetDirty() {\r\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\r\n\t\tconst initial = new URLSearchParams(this.initialData as any).toString();\r\n\t\tconst current = new URLSearchParams(\r\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\r\n\t\t\tnew FormData(this.parentElement as HTMLFormElement) as any\r\n\t\t).toString();\r\n\t\tthis.isDirty = current !== initial;\r\n\t}\r\n\r\n\thandleEvent(event: Event) {\r\n\t\tswitch (event.type) {\r\n\t\t\tcase 'submit':\r\n\t\t\t\tthis.handleSubmitEvent(event);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'beforeunload':\r\n\t\t\t\tthis.handleUnloadEvent(event);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'input':\r\n\t\t\t\tthis.clearValidationErrors(event.target as HTMLInputElement);\r\n\t\t\t\tthis.scheduleCommit(event);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'change':\r\n\t\t\t\tthis.clearValidationErrors(event.target as HTMLInputElement);\r\n\t\t\t\tthis.commit(event);\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error(`Unexpected event ${event.type}.`);\r\n\t\t}\r\n\t}\r\n\r\n\tnavigate(href: string | null) {\r\n\t\tnavigateAfterSubmit(href, this.getAttribute('navigation') as NavigationSteps);\r\n\t}\r\n\r\n\tscheduleCommit(event: Event) {\r\n\t\tclearTimeout(this.commitTimeout);\r\n\t\tsetTimeout(this.commit, 300, event);\r\n\t}\r\n\r\n\tcommit = (event: Event) => {\r\n\t\tif (\r\n\t\t\t!isValueElement(event.target, this.form) ||\r\n\t\t\t!event.target?.form ||\r\n\t\t\tevent.target?.form !== this.parentElement\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tclearTimeout(this.commitTimeout);\r\n\r\n\t\tif (event.type === 'change') {\r\n\t\t\tnormalizeInputValue(event.target);\r\n\t\t}\r\n\t\tthis.setDirty();\r\n\t};\r\n\r\n\tasync handleUnloadEvent(event: BeforeUnloadEvent) {\r\n\t\tthis.setDirty();\r\n\t\tif (!this.isDirty || this.hideUnloadMessage) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tevent.preventDefault();\r\n\t\tevent.returnValue = 'You have unsaved work.'; // browser overrides this text\r\n\t}\r\n\r\n\tasync handleSubmitEvent(event: Event) {\r\n\t\tevent.preventDefault();\r\n\r\n\t\tif (this.submitting) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst form = event.currentTarget as HTMLFormElement;\r\n\r\n\t\t// reject the submit if no edits have been made (overridable with the new attribute)\r\n\t\tif (!this.canSave) {\r\n\t\t\tthis.showNoChangesMessage(form);\r\n\t\t\tconst validationErrorEvent = new CustomEvent('form-validating', {\r\n\t\t\t\tdetail: {\r\n\t\t\t\t\tform\r\n\t\t\t\t},\r\n\t\t\t\tbubbles: true\r\n\t\t\t});\r\n\t\t\tthis.dispatchEvent(validationErrorEvent);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tthis.submitting = true;\r\n\t\t\tsetBusySubmitButton(form, this.submitting);\r\n\t\t\tconst result = await this.validateForm(form);\r\n\t\t\tif (!result.valid) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst url = handleSubmitButtonAction(event) ?? form.action;\r\n\t\t\tconst params = new URL(url).searchParams;\r\n\t\t\tconst formData = new FormData(form);\r\n\t\t\t// set and read headers:\r\n\t\t\tconst headers = new Headers();\r\n\t\t\theaders.set('content-type', 'application/json');\r\n\t\t\tfor (const { name, value } of this.attributes) {\r\n\t\t\t\tif (name.startsWith('header-')) {\r\n\t\t\t\t\theaders.set(name.substring(7), value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// form.method does not support PUT or DELETE events, use method queryParam if it exists.\r\n\t\t\tconst method = params.get('_method') || form.method || ('GET' as string);\r\n\r\n\t\t\tconst init: RequestInit = {\r\n\t\t\t\tmethod,\r\n\t\t\t\tbody: JSON.stringify(Object.fromEntries(formData)),\r\n\t\t\t\theaders\r\n\t\t\t};\r\n\r\n\t\t\tconst beforeSubmitEvent = new CustomEvent('beforesubmit', {\r\n\t\t\t\tdetail: {\r\n\t\t\t\t\turl,\r\n\t\t\t\t\tinit,\r\n\t\t\t\t\tform\r\n\t\t\t\t},\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcancelable: true\r\n\t\t\t});\r\n\r\n\t\t\tconst cancelled = !this.dispatchEvent(beforeSubmitEvent);\r\n\t\t\tif (cancelled) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst request = new Request(beforeSubmitEvent.detail.url, beforeSubmitEvent.detail.init);\r\n\t\t\tconst response = await fetch(request);\r\n\t\t\tif (response.ok) {\r\n\t\t\t\tthis.removeAttribute('new');\r\n\t\t\t\tthis.initialData = formData;\r\n\t\t\t\tthis.setDirty();\r\n\r\n\t\t\t\tthis.dispatchEvent(\r\n\t\t\t\t\tnew CustomEvent('aftersubmit', {\r\n\t\t\t\t\t\tdetail: {\r\n\t\t\t\t\t\t\trequest,\r\n\t\t\t\t\t\t\tresponse\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tbubbles: true\r\n\t\t\t\t\t})\r\n\t\t\t\t);\r\n\t\t\t\tthis.navigate(response.headers.get('location') ?? this.getAttribute('navigation-href'));\r\n\t\t\t} else {\r\n\t\t\t\tconst { errorAlert, errorList } = this.getErrorAlert(form);\r\n\t\t\t\tconst errorText = document.createElement('li');\r\n\t\t\t\terrorText.innerText = this.locStrings.weEncounteredAnUnexpectedError;\r\n\t\t\t\t// custom text for version mismatch\r\n\t\t\t\tif (response.status === 412) {\r\n\t\t\t\t\terrorText.innerText = this.locStrings.contentHasChanged;\r\n\t\t\t\t}\r\n\t\t\t\tthis.dispatchEvent(\r\n\t\t\t\t\tnew CustomEvent('submission-error', {\r\n\t\t\t\t\t\tdetail: {\r\n\t\t\t\t\t\t\tform,\r\n\t\t\t\t\t\t\trequest,\r\n\t\t\t\t\t\t\tresponse\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tbubbles: true\r\n\t\t\t\t\t})\r\n\t\t\t\t);\r\n\r\n\t\t\t\terrorList.appendChild(errorText);\r\n\t\t\t\terrorAlert.hidden = false;\r\n\t\t\t\terrorAlert.focus();\r\n\t\t\t}\r\n\t\t} finally {\r\n\t\t\tthis.submitting = false;\r\n\t\t\tsetBusySubmitButton(form, this.submitting);\r\n\t\t}\r\n\t}\r\n\r\n\tcreateErrorAlert(form: HTMLFormElement): {\r\n\t\terrorAlert: HTMLDivElement;\r\n\t\terrorList: HTMLUListElement;\r\n\t} {\r\n\t\tconst formLayout = form.querySelector('[data-form-error-container]') || form;\r\n\t\tconst alertId = generateElementId();\r\n\r\n\t\tconst errorAlert = document.createElement('div');\r\n\t\terrorAlert.className =\r\n\t\t\t'help help-danger background-color-danger-light border border-color-danger border-radius padding-xs margin-bottom-sm';\r\n\t\terrorAlert.setAttribute('data-form-error-alert', '');\r\n\t\terrorAlert.setAttribute('role', 'alert');\r\n\t\terrorAlert.setAttribute('aria-labelledby', alertId);\r\n\t\terrorAlert.setAttribute('tabindex', '-1');\r\n\t\terrorAlert.hidden = true;\r\n\r\n\t\tconst alertText = document.createElement('p');\r\n\t\talertText.id = alertId;\r\n\t\talertText.className = 'font-size-md font-weight-semibold margin-bottom-xs display-inline-flex';\r\n\t\talertText.innerText = this.locStrings.pleaseFixTheFollowingIssues;\r\n\r\n\t\tconst errorList = document.createElement('ul');\r\n\t\terrorList.setAttribute('aria-label', 'Validation errors');\r\n\t\terrorList.classList.add('margin-left-sm-tablet');\r\n\r\n\t\terrorAlert.append(alertText, errorList);\r\n\t\tformLayout.appendChild(errorAlert);\r\n\r\n\t\treturn { errorAlert, errorList };\r\n\t}\r\n\r\n\tgetErrorAlert(form: HTMLFormElement) {\r\n\t\tconst errorAlert = form.querySelector<HTMLDivElement>('[data-form-error-alert]');\r\n\t\tif (errorAlert) {\r\n\t\t\treturn {\r\n\t\t\t\terrorAlert,\r\n\t\t\t\terrorList: errorAlert.lastElementChild as HTMLUListElement\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn this.createErrorAlert(form);\r\n\t}\r\n\r\n\tvalidateRequired(input: HTMLValueElement, label: string): string | null {\r\n\t\tif (input.validity.valueMissing) {\r\n\t\t\treturn `${this.locStrings.inputRequired.replace(\r\n\t\t\t\t'{inputLabel}',\r\n\t\t\t\tcustomElements.get(input.localName) ? `A selection for \"${label}\"` : label\r\n\t\t\t)}`;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvalidateMinLength(input: HTMLValueElement | HTMLInputElement, label: string): string | null {\r\n\t\tif (\r\n\t\t\t(input instanceof HTMLTextAreaElement || input instanceof HTMLInputElement) &&\r\n\t\t\t(input.validity.tooShort || (input.minLength > 0 && input.value.length < input.minLength))\r\n\t\t) {\r\n\t\t\treturn `${this.locStrings.inputMinLength\r\n\t\t\t\t.replace('{inputLabel}', label)\r\n\t\t\t\t.replace('{minLength}', input.minLength.toString())}`;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvalidateMaxLength(input: HTMLValueElement, label: string): string | null {\r\n\t\tif (\r\n\t\t\t(input instanceof HTMLTextAreaElement || input instanceof HTMLInputElement) &&\r\n\t\t\t(input.validity.tooLong || (input.maxLength > 0 && input.value.length > input.maxLength))\r\n\t\t) {\r\n\t\t\treturn `${this.locStrings.inputMaxLength\r\n\t\t\t\t.replace('{inputLabel}', label)\r\n\t\t\t\t.replace('{maxLength}', input.maxLength.toString())}`;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tasync validateForm(\r\n\t\tform: HTMLFormElement,\r\n\t\tdisplayValidity = true,\r\n\t\tscope: Element = form\r\n\t): Promise<FormValidationResult> {\r\n\t\tconst errors: FormValidationError[] = [];\r\n\t\tconst { errorAlert, errorList } = this.getErrorAlert(form);\r\n\r\n\t\tif (displayValidity) {\r\n\t\t\terrorAlert.hidden = true;\r\n\t\t\terrorList.innerHTML = '';\r\n\t\t}\r\n\r\n\t\tconst customElements = collectCustomElementsByName(form);\r\n\t\tfor (const input of [...form.elements, ...customElements]) {\r\n\t\t\tif (!scope.contains(input) || !canValidate(input, form)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (input.hasAttribute('aria-hidden') === true) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t// Don't check combobox\r\n\t\t\tif (input.getAttribute('role') === 'combobox') {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t// Don't check elements that are part of markdown editor\r\n\t\t\tif (input.closest('docs-markdown-editor')) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (input.hasAttribute('data-skip-validation')) {\r\n\t\t\t\tconst validationErrorEvent = new CustomEvent('form-validating', {\r\n\t\t\t\t\tdetail: {\r\n\t\t\t\t\t\terrors,\r\n\t\t\t\t\t\tform\r\n\t\t\t\t\t},\r\n\t\t\t\t\tbubbles: true\r\n\t\t\t\t});\r\n\t\t\t\tthis.dispatchEvent(validationErrorEvent);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst isCustomElement = !!customElements.find(el => el === input);\r\n\t\t\tthis.runBasicValidation(input, displayValidity, errors, errorList, isCustomElement);\r\n\t\t\tconst validationErrorEvent = new CustomEvent('form-validating', {\r\n\t\t\t\tdetail: {\r\n\t\t\t\t\terrors,\r\n\t\t\t\t\tform\r\n\t\t\t\t},\r\n\t\t\t\tbubbles: true\r\n\t\t\t});\r\n\t\t\tthis.dispatchEvent(validationErrorEvent);\r\n\t\t}\r\n\r\n\t\tif (errors.length === 0) {\r\n\t\t\treturn { valid: true };\r\n\t\t}\r\n\r\n\t\tif (displayValidity) {\r\n\t\t\terrorAlert.hidden = false;\r\n\t\t\terrorAlert.focus();\r\n\t\t}\r\n\r\n\t\treturn { valid: false, errors };\r\n\t}\r\n\r\n\tclearValidationErrors(target: EventTarget | null) {\r\n\t\tif (!canValidate(target, this.form)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tclearInputErrorBorder(target);\r\n\r\n\t\tsetValidationMessage(target, '');\r\n\t\tgetField(target).classList.remove('errored');\r\n\r\n\t\tif (target.form) {\r\n\t\t\tconst { errorAlert, errorList } = this.getErrorAlert(target.form);\r\n\t\t\terrorList.querySelectorAll(`a[href=\"#${target.id}\"]`).forEach(a => a.parentElement?.remove());\r\n\t\t\t// clear no edits error if it exists as well\r\n\t\t\terrorList.querySelector('#no-edits-error')?.remove();\r\n\r\n\t\t\tif (!errorList.firstElementChild) {\r\n\t\t\t\terrorAlert.hidden = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst clearValidationEvent = new CustomEvent('clear-validation-errors', {\r\n\t\t\tdetail: {\r\n\t\t\t\ttarget\r\n\t\t\t},\r\n\t\t\tbubbles: true\r\n\t\t});\r\n\t\tthis.dispatchEvent(clearValidationEvent);\r\n\t}\r\n\r\n\tshowNoChangesMessage(form: HTMLFormElement) {\r\n\t\tconst { errorAlert, errorList } = this.getErrorAlert(form);\r\n\t\tif (errorList.childElementCount > 0) {\r\n\t\t\twhile (errorList.firstChild) {\r\n\t\t\t\terrorList.lastChild?.remove();\r\n\t\t\t}\r\n\t\t\t// clear no edits error if it exists as well\r\n\t\t\terrorList.querySelector('#no-edits-error')?.remove();\r\n\t\t}\r\n\t\tconst errorText = document.createElement('li');\r\n\t\terrorText.id = 'no-edits-error';\r\n\t\terrorText.innerText = this.locStrings.thereAreNoEditsToSubmit;\r\n\r\n\t\terrorList.appendChild(errorText);\r\n\t\terrorAlert.hidden = false;\r\n\t\terrorAlert.focus();\r\n\t}\r\n\r\n\trunBasicValidation(\r\n\t\tinput: Element,\r\n\t\tdisplayValidity: boolean = true,\r\n\t\terrors: FormValidationError[],\r\n\t\terrorList: HTMLElement,\r\n\t\tisCustomElement: boolean\r\n\t) {\r\n\t\tif (!canValidate(input, this.form)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst label = getLabel(input);\r\n\t\tconst group = getField(input);\r\n\r\n\t\tif (displayValidity) {\r\n\t\t\tsetValidationMessage(input, '');\r\n\t\t\tgroup.classList.remove('errored');\r\n\t\t}\r\n\r\n\t\tfor (const validator of this.validators) {\r\n\t\t\tconst message = validator(input, label);\r\n\t\t\tif (!message) {\r\n\t\t\t\tif (!isCustomElement) {\r\n\t\t\t\t\tclearInputErrorBorder(input);\r\n\t\t\t\t}\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\terrors.push({ input, message });\r\n\t\t\tif (displayValidity) {\r\n\t\t\t\tif (!input.id) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsetValidationMessage(input, message);\r\n\t\t\t\tgroup.classList.add('errored');\r\n\t\t\t\tconst child = document.createElement('li');\r\n\t\t\t\tchild.classList.add('margin-bottom-xs');\r\n\r\n\t\t\t\tconst a = document.createElement('a');\r\n\t\t\t\ta.href = `#${input.id}`;\r\n\t\t\t\ta.textContent = message;\r\n\t\t\t\ta.classList.add('help', 'help-danger');\r\n\r\n\t\t\t\t// ensure focus is set on the custom element\r\n\t\t\t\ta.addEventListener('click', e => {\r\n\t\t\t\t\tif (isCustomElement) {\r\n\t\t\t\t\t\tconst target = (e.target as HTMLAnchorElement).getAttribute('href');\r\n\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\t(document.querySelector(target) as HTMLElement).focus();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tchild.appendChild(a);\r\n\t\t\t\terrorList.appendChild(child);\r\n\r\n\t\t\t\tif (!isCustomElement) {\r\n\t\t\t\t\tinput.classList.add(`${input.localName}-danger`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\ndeclare global {\r\n\tinterface Window {\r\n\t\tFormBehaviorElement: typeof FormBehaviorElement;\r\n\t}\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'form-behavior': FormBehaviorElement;\r\n\t}\r\n}\r\n\r\nif (!window.customElements.get('form-behavior')) {\r\n\twindow.FormBehaviorElement = FormBehaviorElement;\r\n\twindow.customElements.define('form-behavior', FormBehaviorElement);\r\n}\r\n\r\n// Start <form behavior> Helper functions\r\nexport interface HTMLValueElement extends HTMLElement {\r\n\tform: HTMLFormElement;\r\n\tlabels: NodeListOf<HTMLLabelElement> | null;\r\n\tname: string;\r\n\ttype: string;\r\n\tvalue: string;\r\n\tvalidity: ValidityState;\r\n}\r\n\r\ninterface LocStrings {\r\n\tcontentHasChanged: string;\r\n\tinputMaxLength: string;\r\n\tinputMinLength: string;\r\n\tinputRequired: string;\r\n\tpleaseFixTheFollowingIssues: string;\r\n\tthereAreNoEditsToSubmit: string;\r\n\tweEncounteredAnUnexpectedError: string;\r\n}\r\n\r\nexport type NavigationSteps = 'follow' | 'hash-reload' | 'replace' | 'reload' | null;\r\n\r\nexport interface FormValidationError {\r\n\tmessage: string;\r\n\tinput: HTMLValueElement;\r\n}\r\n\r\nexport type FormValidationResult =\r\n\t| { valid: true }\r\n\t| { valid: false; errors: FormValidationError[] };\r\n\r\ntype Validator = (input: HTMLValueElement, label: string) => string | null;\r\n\r\n// Check if the required value related properties exist rather than an instance of a form related element.\r\nfunction isValueElement(\r\n\ttarget: EventTarget | null,\r\n\tform: HTMLFormElement | null\r\n): target is HTMLValueElement {\r\n\tconst element = target as HTMLInputElement;\r\n\tif (element) {\r\n\t\treturn (\r\n\t\t\telement instanceof HTMLElement &&\r\n\t\t\t'form' in element &&\r\n\t\t\telement.form === form &&\r\n\t\t\t'validity' in element &&\r\n\t\t\telement.validity instanceof ValidityState &&\r\n\t\t\t'value' in element &&\r\n\t\t\ttypeof element.value === 'string' &&\r\n\t\t\t'type' in element &&\r\n\t\t\ttypeof element.type === 'string' &&\r\n\t\t\t!['button', 'submit'].includes(element.type)\r\n\t\t);\r\n\t}\r\n\r\n\treturn false;\r\n}\r\n\r\nfunction normalizeInputValue(target: EventTarget | null) {\r\n\tif (target instanceof HTMLTextAreaElement) {\r\n\t\ttarget.value = target.value.trim();\r\n\t} else if (\r\n\t\ttarget instanceof HTMLInputElement &&\r\n\t\t(target.type === 'text' || target.type === 'email')\r\n\t) {\r\n\t\ttarget.value = target.value.trim();\r\n\t}\r\n}\r\n\r\nfunction setBusySubmitButton(form: HTMLFormElement, isLoading: boolean) {\r\n\tArray.from(form.elements).forEach(element => {\r\n\t\tif (element instanceof HTMLButtonElement && element.type === 'submit') {\r\n\t\t\telement.classList.toggle('is-loading', isLoading);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nexport function getLabel(input: HTMLValueElement): string {\r\n\tconst label =\r\n\t\tinput.labels && input.labels.length\r\n\t\t\t? input.labels[0].textContent\r\n\t\t\t: input.getAttribute('aria-label');\r\n\tif (!label) {\r\n\t\tthrow new Error(\r\n\t\t\t`${input.nodeName} name=\"${input.name}\" id=\"${input.id}\" has no associated label.`\r\n\t\t);\r\n\t}\r\n\treturn label.trim();\r\n}\r\n\r\nexport function getField(input: HTMLValueElement) {\r\n\tconst group = input.closest<HTMLElement>('.field');\r\n\tif (!group) {\r\n\t\tthrow new Error(\r\n\t\t\t`${input.nodeName} name=\"${input.name}\" id=\"${input.id}\" is not within a .field`\r\n\t\t);\r\n\t}\r\n\treturn group;\r\n}\r\n\r\nexport function getFieldBody(input: HTMLValueElement) {\r\n\tconst body = input.closest('.field-body');\r\n\tif (!body) {\r\n\t\tthrow new Error(\r\n\t\t\t`${input.nodeName} name=\"${input.name}\" id=\"${input.id}\" is not within a .field-body`\r\n\t\t);\r\n\t}\r\n\treturn body;\r\n}\r\n\r\nfunction createErrorNote(input: HTMLValueElement) {\r\n\tconst note = document.createElement('p');\r\n\tnote.id = generateElementId();\r\n\tinput.setAttribute(\r\n\t\t'aria-describedby',\r\n\t\t`${note.id} ${input.getAttribute('aria-describedby') || ''}`\r\n\t);\r\n\tnote.classList.add('field-error');\r\n\tnote.setAttribute('data-field-error', '');\r\n\tgetFieldBody(input).after(note);\r\n\treturn note;\r\n}\r\n\r\nexport function setValidationMessage(element: HTMLValueElement, message: string) {\r\n\tconst group = getField(element);\r\n\tconst note = group.querySelector('[data-field-error]') || createErrorNote(element);\r\n\tnote.textContent = message;\r\n}\r\n\r\nfunction canValidate(\r\n\ttarget: EventTarget | null,\r\n\tform: HTMLFormElement | null\r\n): target is HTMLValueElement {\r\n\treturn isValueElement(target, form) && (target as HTMLValueElement).type !== 'hidden';\r\n}\r\n\r\nexport function navigateAfterSubmit(href: string | null, navigationStep: NavigationSteps) {\r\n\tswitch (navigationStep) {\r\n\t\tcase null:\r\n\t\t\t// do nothing.\r\n\t\t\tbreak;\r\n\t\tcase 'follow':\r\n\t\t\tif (href) {\r\n\t\t\t\tlocation.href = href;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'hash-reload':\r\n\t\t\tif (href) {\r\n\t\t\t\tconst search = href.includes('?') ? '' : window.location.search;\r\n\t\t\t\tif (href !== search + window.location.hash) {\r\n\t\t\t\t\tconst state = (history.state || {}) as Record<string, any>;\r\n\t\t\t\t\twindow.history.pushState(state, document.title, window.location.pathname + search + href); // prevents scrolling to spot until reload\r\n\t\t\t\t}\r\n\t\t\t\tlocation.reload();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'replace':\r\n\t\t\tif (href) {\r\n\t\t\t\tlocation.replace(href);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'reload':\r\n\t\t\tlocation.reload();\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow new Error(`Unexpected navigation attribute value.`);\r\n\t}\r\n}\r\n\r\n/* Custom elements are not included in HTMLFormControlsCollection so they can't be retrieved by form.elements */\r\nexport function collectCustomElementsByName(form: HTMLFormElement): Element[] {\r\n\t// Compare FormData with form.elements to find missing elements.\r\n\tconst formData = Object.fromEntries(new FormData(form));\r\n\tconst customElementList: Element[] = [];\r\n\tconst customElements = Object.keys(formData).filter(key => {\r\n\t\treturn !form.elements.namedItem(key);\r\n\t});\r\n\r\n\tcustomElements.forEach(name => {\r\n\t\tconst element = form.querySelector(`[name=\"${name}\"]`);\r\n\t\tif (element) {\r\n\t\t\tcustomElementList.push(element);\r\n\t\t}\r\n\t});\r\n\treturn customElementList;\r\n}\r\n\r\nfunction clearInputErrorBorder(input: HTMLValueElement) {\r\n\tinput.classList.remove(`${input.localName}-danger`);\r\n}\r\n\r\nfunction handleSubmitButtonAction(event: Event) {\r\n\tconst submitter = (event as SubmitEvent).submitter;\r\n\tconst formAction =\r\n\t\tsubmitter instanceof HTMLButtonElement && submitter.formAction !== window.location.href\r\n\t\t\t? submitter.formAction\r\n\t\t\t: null;\r\n\r\n\treturn formAction;\r\n}\r\n","/**\r\n * Parses the query string into a map object.\r\n * Handles x-www-form-urlencoded query strings. See https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1\r\n * @param queryString Optional query string to parse. If not supplied, location.search will be used.\r\n */\r\nexport function parseQueryString(queryString?: string): {\r\n\t[name: string]: string;\r\n} {\r\n\tlet match: RegExpExecArray;\r\n\tconst pl = /\\+/g;\r\n\tconst search = /([^&=]+)=?([^&]*)/g;\r\n\tconst decode = (s: string) => decodeURIComponent(s.replace(pl, ' '));\r\n\tif (queryString === undefined) {\r\n\t\tqueryString = location.search;\r\n\t}\r\n\tqueryString = queryString.substring(1);\r\n\tconst urlParams: { [name: string]: string } = {};\r\n\twhile ((match = search.exec(queryString) as RegExpExecArray)) {\r\n\t\turlParams[decode(match[1])] = decode(match[2]);\r\n\t}\r\n\treturn urlParams;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-use-before-define */\r\nexport function initPopover(container: HTMLElement = document.body) {\r\n\tcontainer.addEventListener(\r\n\t\t'toggle',\r\n\t\t(event: Event) => {\r\n\t\t\tconst targetPopover =\r\n\t\t\t\t(event.target instanceof Element &&\r\n\t\t\t\t\t(event.target.closest('details.popover') as HTMLDetailsElement)) ||\r\n\t\t\t\t(event.target instanceof Element &&\r\n\t\t\t\t\t(event.target.shadowRoot?.activeElement?.closest(\r\n\t\t\t\t\t\t'details.popover'\r\n\t\t\t\t\t) as HTMLDetailsElement));\r\n\r\n\t\t\tif (!targetPopover || !targetPopover.open) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst keyHandler = (event: KeyboardEvent) => {\r\n\t\t\t\tif (event.key === 'Escape') {\r\n\t\t\t\t\tclosePopovers();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst checkTarget = (event: Event) => {\r\n\t\t\t\tif (!(event.target instanceof Element)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!targetPopover?.contains(event.target)) {\r\n\t\t\t\t\tclosePopovers();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.type === 'click' && event.target.closest('[data-popover-close]')) {\r\n\t\t\t\t\tclosePopovers();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst blurHandler = () => {\r\n\t\t\t\tif (document.activeElement?.nodeName?.toLowerCase() === 'iframe') {\r\n\t\t\t\t\tclosePopovers();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tconst closePopovers = () => {\r\n\t\t\t\tcontainer.removeEventListener('focus', checkTarget, true);\r\n\t\t\t\tcontainer.removeEventListener('click', checkTarget);\r\n\t\t\t\tcontainer.removeEventListener('touchstart', checkTarget);\r\n\t\t\t\tcontainer.removeEventListener('keydown', keyHandler);\r\n\t\t\t\twindow.removeEventListener('blur', blurHandler);\r\n\t\t\t\tif (targetPopover?.open) {\r\n\t\t\t\t\ttargetPopover.removeAttribute('open');\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tcontainer.addEventListener('focus', checkTarget, true);\r\n\t\t\tcontainer.addEventListener('click', checkTarget);\r\n\t\t\tcontainer.addEventListener('touchstart', checkTarget);\r\n\t\t\tcontainer.addEventListener('keydown', keyHandler);\r\n\t\t\twindow.addEventListener('blur', blurHandler);\r\n\t\t},\r\n\t\ttrue\r\n\t);\r\n}\r\n","import { handleCodeFilters } from './scripts/code-filter';\r\nimport { handleFigmaFullScreenRequest } from './scripts/figma-embed';\r\nimport { initTheme } from './scripts/theming';\r\nimport { handleMockFormSubmit } from './scripts/form-submit';\r\n\r\nimport { initPopover, initSnapScroll } from '@microsoft/atlas-js/src/index';\r\n\r\ninitTheme();\r\ninitPopover();\r\nhandleCodeFilters();\r\nhandleFigmaFullScreenRequest();\r\nhandleMockFormSubmit();\r\ninitSnapScroll();\r\ninitFullScreenToggle();\r\n\r\nfunction initFullScreenToggle() {\r\n\t// eslint-disable-next-line @typescript-eslint/no-misused-promises\r\n\twindow.addEventListener('click', (e: MouseEvent) => {\r\n\t\tconst target = e.target instanceof Element && e.target.closest('[data-full-screen-main]');\r\n\t\tif (!target) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn handleFullscreen();\r\n\t});\r\n}\r\n\r\nasync function handleFullscreen() {\r\n\tconst main = document.getElementById('main');\r\n\tconst article = document.getElementById('article');\r\n\tif (!main || !article) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst isFullScreened = main?.dataset.isFullScreened === 'true';\r\n\tif (!isFullScreened) {\r\n\t\tarticle.style.overflow = 'visible';\r\n\t\tmain.style.display = 'block';\r\n\t\tmain.style.overflowX = 'auto';\r\n\t\tawait main.requestFullscreen({ navigationUI: 'show' });\r\n\t\tmain.dataset.isFullScreened = 'true';\r\n\t} else {\r\n\t\tmain.dataset.isFullScreened = 'false';\r\n\t\tarticle.style.cssText = '';\r\n\r\n\t\tif (document.fullscreenElement) {\r\n\t\t\tawait document.exitFullscreen();\r\n\t\t}\r\n\t}\r\n}\r\n","import { debounce } from './debounce';\r\n\r\nexport function handleCodeFilters(): void {\r\n\tconst memory: { [key: string]: string[] } = {};\r\n\r\n\twindow.addEventListener(\r\n\t\t'input',\r\n\t\tdebounce.timeout((e: Event) => {\r\n\t\t\tconst target =\r\n\t\t\t\te.target instanceof HTMLInputElement &&\r\n\t\t\t\t(e.target.closest('[data-code-filter-input]') as HTMLInputElement);\r\n\t\t\tif (!target) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst term = target?.value.toLowerCase();\r\n\t\t\tconst id = target.dataset.codeFilterInput as string;\r\n\t\t\tconst codeElt = document.querySelector(`[data-code-filter-code=\"${id}\"]`) as HTMLElement;\r\n\r\n\t\t\tif (!id || !codeElt || !codeElt.textContent) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// If we haven't save the whole contents of the block, do so.\r\n\t\t\t// eslint-disable-next-line security/detect-object-injection\r\n\t\t\tmemory[id] = memory[id] || codeElt.textContent.split('\\n');\r\n\t\t\t// Set text content to things that match the given term\r\n\t\t\t// eslint-disable-next-line security/detect-object-injection\r\n\t\t\tlet results = memory[id].filter(line => line.toLowerCase().includes(term));\r\n\r\n\t\t\t// Show all if there's no value in the filter\r\n\t\t\tif (term === '') {\r\n\t\t\t\t// eslint-disable-next-line security/detect-object-injection\r\n\t\t\t\tresults = memory[id];\r\n\t\t\t} else if (results.length === 0) {\r\n\t\t\t\tresults = ['No results'];\r\n\t\t\t}\r\n\r\n\t\t\tcodeElt.textContent = results.join('\\n');\r\n\t\t}, 400)\r\n\t);\r\n}\r\n","export function handleFigmaFullScreenRequest() {\r\n\twindow.addEventListener('click', (e: MouseEvent) => {\r\n\t\tconst target = e.target instanceof HTMLElement && e.target.closest('#expand-figma-embed');\r\n\t\tif (!target) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst iframe = document.getElementById('figma-embed-iframe') as HTMLIFrameElement;\r\n\t\tif (!iframe) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvoid iframe.requestFullscreen({ navigationUI: 'auto' });\r\n\t});\r\n}\r\n","export function handleMockFormSubmit() {\r\n\tconst warningIcon = document.createElement('span');\r\n\twarningIcon.classList.add('warning-icon-container');\r\n\twarningIcon.setAttribute('data-warning-icon-container', '');\r\n\twarningIcon.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"13\" viewBox=\"0 0 15 13\">\r\n\t\t\t<path d=\"M7.50781 0.109375C7.23698 0.109375 6.98177 0.182292 6.74219 0.328125C6.5026 0.46875 6.31771 0.658854 6.1875 \r\n\t\t\t0.898438L0.859375 10.7891C0.739583 11.013 0.679688 11.25 0.679688 11.5C0.679688 11.7031 0.721354 11.8958 0.804688 \r\n\t\t\t12.0781C0.882812 12.2604 0.989583 12.4193 1.125 12.5547C1.26042 12.6901 1.41927 12.7995 1.60156 12.8828C1.78385 12.9609 \r\n\t\t\t1.97656 13 2.17969 13H12.8359C13.0391 13 13.2318 12.9609 13.4141 12.8828C13.5911 12.7995 13.75 12.6901 13.8906 \r\n\t\t\t12.5547C14.026 12.4141 14.1354 12.2552 14.2188 12.0781C14.2969 11.8958 14.3359 11.7031 14.3359 11.5C14.3359 11.25 14.276 \r\n\t\t\t11.013 14.1562 10.7891L8.82812 0.898438C8.69792 0.658854 8.51302 0.46875 8.27344 0.328125C8.03385 0.182292 7.77865 0.109375 \r\n\t\t\t7.50781 0.109375ZM7.50781 9.75C7.40885 9.75 7.3151 9.77083 7.22656 9.8125C7.13802 9.85417 7.0599 9.91146 6.99219 \r\n\t\t\t9.98438C6.91927 10.0521 6.86198 10.1302 6.82031 10.2188C6.77865 10.3073 6.75781 10.401 6.75781 10.5C6.75781 10.599 \r\n\t\t\t6.77865 10.6927 6.82031 10.7812C6.86198 10.8698 6.91927 10.9505 6.99219 11.0234C7.0599 11.0911 7.13802 11.1458 7.22656 \r\n\t\t\t11.1875C7.3151 11.2292 7.40885 11.25 7.50781 11.25C7.60677 11.25 7.70052 11.2292 7.78906 11.1875C7.8776 11.1458 7.95833 \r\n\t\t\t11.0911 8.03125 11.0234C8.09896 10.9505 8.15365 10.8698 8.19531 10.7812C8.23698 10.6927 8.25781 10.599 8.25781 10.5C8.25781 \r\n\t\t\t10.401 8.23698 10.3073 8.19531 10.2188C8.15365 10.1302 8.09896 10.0521 8.03125 9.98438C7.95833 9.91146 7.8776 9.85417 \r\n\t\t\t7.78906 9.8125C7.70052 9.77083 7.60677 9.75 7.50781 9.75ZM7.50781 1.10938C7.61198 1.10938 7.70312 1.13802 7.78125 \r\n\t\t\t1.19531C7.85417 1.2526 7.91927 1.32292 7.97656 1.40625C8.03385 1.48958 8.08333 1.58073 8.125 1.67969C8.16667 1.77344 \r\n\t\t\t8.20833 1.85677 8.25 1.92969C8.32812 2.08073 8.46094 2.32812 8.64844 2.67188C8.83073 3.01562 9.04948 3.41667 9.30469 \r\n\t\t\t3.875C9.5599 4.33333 9.83594 4.83333 10.1328 5.375C10.4297 5.91667 10.7266 6.46094 11.0234 7.00781C11.3203 7.55469 \r\n\t\t\t11.6094 8.08594 11.8906 8.60156C12.1667 9.11719 12.4141 9.58073 12.6328 9.99219C12.8464 10.4036 13.0182 10.7448 13.1484 \r\n\t\t\t11.0156C13.2734 11.2812 13.3359 11.4427 13.3359 11.5C13.3359 11.6354 13.2865 11.7526 13.1875 11.8516C13.0885 11.9505 \r\n\t\t\t12.9714 12 12.8359 12H2.17969C2.04427 12 1.92708 11.9505 1.82812 11.8516C1.72917 11.7526 1.67969 11.6354 1.67969 \r\n\t\t\t11.5C1.83073 11.125 2.0026 10.763 2.19531 10.4141C2.38281 10.0651 2.57031 9.71094 2.75781 9.35156C3.0026 8.89323 3.24479 \r\n\t\t\t8.4349 3.48438 7.97656C3.71875 7.51302 3.95833 7.05208 4.20312 6.59375C4.45312 6.11979 4.70312 5.65104 4.95312 \r\n\t\t\t5.1875C5.20312 4.71875 5.45312 4.2474 5.70312 3.77344C5.88542 3.4401 6.06771 3.10938 6.25 2.78125C6.42708 2.44792 \r\n\t\t\t6.61198 2.11719 6.80469 1.78906C6.84635 1.71615 6.88802 1.64583 6.92969 1.57812C6.97135 1.50521 7.01823 1.4375 7.07031 \r\n\t\t\t1.375C7.1276 1.30208 7.1901 1.23958 7.25781 1.1875C7.32552 1.13542 7.40885 1.10938 7.50781 1.10938ZM7.00781 \r\n\t\t\t9H8.00781V4H7.00781V9Z\"/>\r\n\t\t\t</svg>`;\r\n\r\n\tdocument.querySelectorAll('form')?.forEach(form => {\r\n\t\tform.addEventListener(\r\n\t\t\t'form-validating',\r\n\t\t\te => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tconst container = form.querySelector('[data-form-error-container]');\r\n\t\t\t\tconst warningIconContainer = container?.firstElementChild?.querySelector(\r\n\t\t\t\t\t'[data-warning-icon-container]'\r\n\t\t\t\t);\r\n\r\n\t\t\t\tif (!warningIconContainer) {\r\n\t\t\t\t\tcontainer?.firstElementChild?.prepend(warningIcon);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{ capture: true }\r\n\t\t);\r\n\r\n\t\tform.addEventListener(\r\n\t\t\t'beforesubmit',\r\n\t\t\te => {\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tconst formData = new FormData(form);\r\n\t\t\t\tpopulateSubmittedFormData(formData, form);\r\n\t\t\t},\r\n\t\t\t{ capture: true }\r\n\t\t);\r\n\t});\r\n}\r\n\r\nfunction populateSubmittedFormData(formData: FormData, form: HTMLFormElement) {\r\n\tconst submittedFormDataExample = form.querySelector('.submitted-form-data-example');\r\n\tconst dataMessage = `The following data will be submitted: ${JSON.stringify(\r\n\t\tObject.fromEntries(formData),\r\n\t\tnull,\r\n\t\t2\r\n\t)}`;\r\n\r\n\tif (submittedFormDataExample?.firstChild) {\r\n\t\tsubmittedFormDataExample.firstChild.textContent = dataMessage;\r\n\t} else {\r\n\t\tconst message = document.createElement('p');\r\n\t\tmessage.classList.add('padding-xs');\r\n\t\tmessage.textContent = dataMessage;\r\n\t\tsubmittedFormDataExample?.appendChild(message);\r\n\t}\r\n}\r\n"],"names":["$f65146e94c2f3c75$export$8255f79c28055003","scheduler","clearScheduler","handler","timeout","scheduleId","caller","args","apply","bind","cancel","$f65146e94c2f3c75$export$61fc7d43ac8f84b0","setTimeout","clearTimeout","animationFrame","window","requestAnimationFrame","cancelAnimationFrame","$227e784e47219e65$export$28075517a6f9175","matchMedia","$84b1501969b8c5e9$export$c2ed3351cac403d1","setItem","key","value","localStorage","e","getItem","removeItem","clear","$7095f0ec81935327$export$94ec4826144972dd","$parcel$interopDefault","JSON","parse","$f78667648d019a86$export$f89dfc8082866bac","$f78667648d019a86$export$d9a33280f07116d9","Object","keys","themes","tokens","$themes","$f78667648d019a86$export$d5cd4a3428200c7d","reduce","themeInfo","themeName","documentClass","name","$f78667648d019a86$export$c1c0562ec8379000","map","theme","$f78667648d019a86$export$2e49b867b7a0847c","appliedTheme","$f78667648d019a86$export$c97f82194d899591","htmlClassList","document","documentElement","classList","docClass","remove","add","$f78667648d019a86$export$49fdfce91965b93d","$0ff9b3ba2ca1da31$var$snapScrollUpdating","$0ff9b3ba2ca1da31$export$3f1703e6cdd6d4ee","element","slideContainer","querySelector","Error","slides","Array","from","querySelectorAll","observer","IntersectionObserver","entries","isIntersecting","step","target","getAttribute","anchor","$0ff9b3ba2ca1da31$var$updatePaginationState","root","rootMargin","threshold","forEach","slide","observe","parentElement","activeAnchor","anchors","a","$48e0439ed1d493cd$var$nextId","$48e0439ed1d493cd$export$cfe7bad09682ff51","$63d6648ccf2da550$export$74d1e9f4105a478b","contentHasChanged","inputMaxLength","inputMinLength","inputRequired","pleaseFixTheFollowingIssues","thereAreNoEditsToSubmit","weEncounteredAnUnexpectedError","$63d6648ccf2da550$export$eff824212e04ca3f","HTMLElement","submitting","initialData","FormData","toDispose","isDirty","commitTimeout","locStrings","assign","this","attributes","filter","startsWith","str","substring","replace","x","toUpperCase","validators","validateMinLength","validateRequired","validateMaxLength","constructor","super","canSave","isNew","form","closest","hideUnloadMessage","hasAttribute","connectedCallback","HTMLFormElement","setAttribute","errorSummaryContainer","createElement","insertAdjacentElement","ownerDocument","readyState","addEventListener","subscribe","disconnectedCallback","dispose","type","listener","push","removeEventListener","setDirty","initial","URLSearchParams","toString","current","handleEvent","event","handleSubmitEvent","handleUnloadEvent","clearValidationErrors","scheduleCommit","commit","navigate","href","navigationStep","location","search","includes","hash","state","history","pushState","title","pathname","reload","$63d6648ccf2da550$export$7aa55fd9657ff73","$63d6648ccf2da550$var$isValueElement","HTMLTextAreaElement","HTMLInputElement","trim","async","preventDefault","returnValue","currentTarget","$63d6648ccf2da550$var$setBusySubmitButton","validateForm","valid","url","submitter","HTMLButtonElement","formAction","$63d6648ccf2da550$var$handleSubmitButtonAction","action","params","URL","searchParams","formData","headers","Headers","set","init","get","method","body","stringify","fromEntries","beforeSubmitEvent","CustomEvent","detail","bubbles","cancelable","dispatchEvent","request","Request","response","fetch","ok","removeAttribute","errorAlert","errorList","getErrorAlert","errorText","innerText","status","appendChild","hidden","focus","showNoChangesMessage","validationErrorEvent","createErrorAlert","formLayout","alertId","className","alertText","id","append","lastElementChild","input","label","validity","valueMissing","customElements","localName","tooShort","minLength","length","tooLong","maxLength","displayValidity","scope","errors","innerHTML","customElements1","customElementList","elements","namedItem","$63d6648ccf2da550$export$6fdbe88c041d855d","contains","$63d6648ccf2da550$var$canValidate","isCustomElement","find","el","runBasicValidation","validationErrorEvent1","$63d6648ccf2da550$var$clearInputErrorBorder","$63d6648ccf2da550$export$e0ddcd48746f2dd9","$63d6648ccf2da550$export$2c9b3f539cb25b05","firstElementChild","clearValidationEvent","childElementCount","firstChild","lastChild","labels","textContent","nodeName","$63d6648ccf2da550$export$236350842f3cd9bc","group","validator","message","child","ValidityState","isLoading","toggle","$63d6648ccf2da550$var$createErrorNote","note","$63d6648ccf2da550$export$52dd50fe747c85c8","after","FormBehaviorElement","define","prefersDarkTheme","matches","queryString","match","pl","decode","s","decodeURIComponent","undefined","urlParams","exec","test","$f78667648d019a86$export$4adfb56702530164","$f78667648d019a86$export$40f958b0338f176","Element","themeToApply","i","findIndex","item","$f78667648d019a86$export$dacf863dec39215c","$f78667648d019a86$export$f2c36dbf83bbf605","setTheme","container","targetPopover","shadowRoot","activeElement","open","keyHandler","closePopovers","checkTarget","blurHandler","toLowerCase","memory","term","dataset","codeFilterInput","codeElt","split","results","line","join","iframe","getElementById","requestFullscreen","navigationUI","warningIcon","snapScrollId","snapScrollNavItem","scrollIntoView","behavior","block","inline","snapScrolls","snapScroll","main","article","isFullScreened","style","overflow","display","overflowX","cssText","fullscreenElement","exitFullscreen","$76cf7c2eb02afc57$var$handleFullscreen"],"version":3,"file":"index.7acc0d19.js.map"}