{"mappings":"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","sources":["","site/src/scaffold/index.ts","site/src/scaffold/scripts/code-filter.ts","site/src/scaffold/scripts/debounce.ts","site/src/scaffold/scripts/figma-embed.ts","site/src/scaffold/scripts/theming.ts","site/src/scaffold/scripts/match-media.ts","site/src/scaffold/scripts/protected-storage.ts","site/src/scaffold/scripts/query-string.ts","site/src/scaffold/scripts/tokens.ts","css/dist/tokens.json","site/src/scaffold/scripts/form-submit.ts","js/src/index.ts","js/src/behaviors/dismiss.ts","js/src/behaviors/popover.ts","js/src/behaviors/snap-scroll.ts","js/src/elements/form-behavior.ts","js/src/utilities/util.ts","site/src/scaffold/scripts/focusable-if-scrollable.ts","site/src/scaffold/scripts/full-screen-toggle.ts","site/src/scaffold/scripts/layout-page.ts","site/src/scaffold/scripts/mobile-navigation.ts"],"sourcesContent":["\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n/* eslint-disable @typescript-eslint/ban-types */ /* ⬆ (Function.bind required for this implementation) */ /**\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 */ // eslint-disable-next-line @typescript-eslint/ban-types\nfunction $f65146e94c2f3c75$export$8255f79c28055003(scheduler, clearScheduler, handler, timeout = 500) {\n let scheduleId = 0;\n const caller = (...args)=>{\n clearScheduler(scheduleId);\n scheduleId = scheduler.apply(null, [\n handler.bind(null, ...args),\n timeout\n ]);\n };\n caller.cancel = ()=>clearScheduler(scheduleId);\n return caller;\n}\nconst $f65146e94c2f3c75$export$61fc7d43ac8f84b0 = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n timeout: $f65146e94c2f3c75$export$8255f79c28055003.bind(null, setTimeout, clearTimeout),\n animationFrame: $f65146e94c2f3c75$export$8255f79c28055003.bind(null, // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n window.requestAnimationFrame, window.cancelAnimationFrame)\n};\n\n\nfunction $ac10d40a2fa020d1$export$cacf7dd05fca3e17() {\n const memory = {};\n window.addEventListener(\"input\", (0, $f65146e94c2f3c75$export$61fc7d43ac8f84b0).timeout((e)=>{\n const target = e.target instanceof HTMLInputElement && e.target.closest(\"[data-code-filter-input]\");\n if (!target) return;\n const term = target?.value.toLowerCase();\n const id = target.dataset.codeFilterInput;\n const codeElt = document.querySelector(`[data-code-filter-code=\"${id}\"]`);\n if (!id || !codeElt || !codeElt.textContent) return;\n // If we haven't save the whole contents of the block, do so.\n // eslint-disable-next-line security/detect-object-injection\n memory[id] = memory[id] || codeElt.textContent.split(\"\\n\");\n // Set text content to things that match the given term\n // eslint-disable-next-line security/detect-object-injection\n let results = memory[id].filter((line)=>line.toLowerCase().includes(term));\n // Show all if there's no value in the filter\n if (term === \"\") // eslint-disable-next-line security/detect-object-injection\n results = memory[id];\n else if (results.length === 0) results = [\n \"No results\"\n ];\n codeElt.textContent = results.join(\"\\n\");\n }, 400));\n}\n\n\nfunction $c1dcb31e94c13fa0$export$3bf7e98e931d1cdc() {\n window.addEventListener(\"click\", (e)=>{\n const target = e.target instanceof HTMLElement && e.target.closest(\"#expand-figma-embed\");\n if (!target) return;\n const iframe = document.getElementById(\"figma-embed-iframe\");\n if (!iframe) return;\n iframe.requestFullscreen({\n navigationUI: \"auto\"\n });\n });\n}\n\n\nconst $227e784e47219e65$export$28075517a6f9175 = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\n\n/* These methods *try* to return the proper object type in the catch handler */ const $84b1501969b8c5e9$export$c2ed3351cac403d1 = {\n setItem (key, value) {\n try {\n window.localStorage.setItem(key, value);\n /* eslint no-empty: \"off\" */ } catch (e) {}\n },\n getItem (key) {\n try {\n return window.localStorage.getItem(key);\n } catch (e) {\n return null;\n }\n },\n removeItem (key) {\n try {\n window.localStorage.removeItem(key);\n /* eslint no-empty: \"off\" */ } catch (e) {}\n },\n clear () {\n try {\n window.localStorage.clear();\n /* eslint no-empty: \"off\" */ } catch (e) {}\n }\n};\nconst $84b1501969b8c5e9$export$f119d83aa936d634 = {\n setItem (key, value) {\n try {\n window.sessionStorage.setItem(key, value);\n // eslint-disable-line no-empty\n } catch (e) {}\n },\n getItem (key) {\n try {\n return window.sessionStorage.getItem(key);\n } catch (e) {\n return null;\n }\n },\n removeItem (key) {\n try {\n window.sessionStorage.removeItem(key);\n // eslint-disable-line no-empty\n } catch (e) {}\n }\n};\n\n\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 */ function $088734a1400ffdfa$export$66256f83798e5415(queryString) {\n let match;\n const pl = /\\+/g;\n const search = /([^&=]+)=?([^&]*)/g;\n const decode = (s)=>decodeURIComponent(s.replace(pl, \" \"));\n if (queryString === undefined) queryString = location.search;\n queryString = queryString.substring(1);\n const urlParams = {};\n while(match = search.exec(queryString))urlParams[decode(match[1])] = decode(match[2]);\n return urlParams;\n}\n\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nvar $e9aea353ec7e87a3$exports = {};\n$e9aea353ec7e87a3$exports = JSON.parse('{\"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)\",\"$gradient-vivid-start\":\"var(--theme-gradient-vivid-start)\",\"$gradient-vivid-end\":\"var(--theme-gradient-vivid-end)\",\"$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\",\"$gradients\":{\"vivid\":\"var(--theme-gradient-vivid-start),var(--theme-gradient-vivid-end)\",\"purple-blue\":\"var(--theme-gradient-text-purple),var(--theme-gradient-text-blue)\"},\"$gradient-color-start-index\":\"1\",\"$gradient-color-end-index\":\"2\"}},\"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\":\"24px\",\"$layout-widescreen-width\":\"1752px\",\"$layout-widescreen-gap\":\"calc( 50% - 1752px / 2 )\",\"$layout-gap-custom-property-name\":\"--layout-gap\",\"$layout-gap-scalable-custom-property-name\":\"--layout-gap-scalable\"}},\"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-grey-130\":\"#161616\",\"$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-c\":\"#b84dc6\",\"$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\":\"#161616\",\"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\",\"gradient-vivid-start\":\"#b84dc6\",\"gradient-vivid-end\":\"#0078d4\"},\"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\",\"gradient-vivid-start\":\"#b84dc6\",\"gradient-vivid-end\":\"#75b6e7\"},\"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\",\"gradient-vivid-start\":\"#fff\",\"gradient-vivid-end\":\"#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\",\"$line-height-normal\":\"1.3\"}},\"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\n\nconst $7095f0ec81935327$export$94ec4826144972dd = (0, (/*@__PURE__*/$parcel$interopDefault($e9aea353ec7e87a3$exports)));\n\n\nlet $f78667648d019a86$export$f89dfc8082866bac = \"light\";\nfunction $f78667648d019a86$var$isTheme(value) {\n if (value === \"light\" || value === \"dark\" || value === \"high-contrast\") return true;\n return false;\n}\nconst $f78667648d019a86$export$d9a33280f07116d9 = Object.keys((0, $7095f0ec81935327$export$94ec4826144972dd).themes.tokens.$themes);\nconst $f78667648d019a86$export$d5cd4a3428200c7d = $f78667648d019a86$export$d9a33280f07116d9.reduce((themeInfo, themeName)=>{\n themeInfo[themeName] = {\n documentClass: `theme-${themeName}`,\n name: themeName\n };\n return themeInfo;\n}, {});\nconst $f78667648d019a86$export$c1c0562ec8379000 = $f78667648d019a86$export$d9a33280f07116d9.map((theme)=>$f78667648d019a86$export$d5cd4a3428200c7d[theme].documentClass);\nfunction $f78667648d019a86$export$dacf863dec39215c(current) {\n const i = $f78667648d019a86$export$d9a33280f07116d9.findIndex((item)=>item === current) || 0;\n const next = i < 2 ? i + 1 : 0;\n // eslint-disable-next-line security/detect-object-injection\n return $f78667648d019a86$export$d9a33280f07116d9[next];\n}\nfunction $f78667648d019a86$export$49fdfce91965b93d(appliedTheme) {\n const htmlClassList = document.documentElement.classList;\n for (const docClass of $f78667648d019a86$export$c1c0562ec8379000)htmlClassList.remove(docClass);\n if ($f78667648d019a86$var$isTheme(appliedTheme)) // eslint-disable-next-line security/detect-object-injection\n htmlClassList.add($f78667648d019a86$export$d5cd4a3428200c7d[appliedTheme].documentClass);\n}\nfunction $f78667648d019a86$export$c97f82194d899591(appliedTheme) {\n return $f78667648d019a86$export$f89dfc8082866bac = appliedTheme;\n}\nfunction $f78667648d019a86$export$f2c36dbf83bbf605(theme) {\n (0, $84b1501969b8c5e9$export$c2ed3351cac403d1).setItem(\"theme\", theme);\n}\nfunction $f78667648d019a86$export$4adfb56702530164(prefersDarkTheme = false) {\n // check for user selection\n const theme = (0, $84b1501969b8c5e9$export$c2ed3351cac403d1).getItem(\"theme\");\n if (/^light|dark|high-contrast$/.test(theme)) return theme;\n // check for system dark preference\n if (prefersDarkTheme) return \"dark\";\n // default to light\n return \"light\";\n}\nfunction $f78667648d019a86$export$2e49b867b7a0847c(appliedTheme) {\n const previousTheme = $f78667648d019a86$export$f89dfc8082866bac;\n if (previousTheme === appliedTheme) return;\n $f78667648d019a86$export$c97f82194d899591(appliedTheme);\n $f78667648d019a86$export$49fdfce91965b93d(appliedTheme);\n}\nfunction $f78667648d019a86$export$4c47704ed26c13e8() {\n const theme = $f78667648d019a86$export$40f958b0338f176();\n $f78667648d019a86$export$2e49b867b7a0847c(theme);\n $f78667648d019a86$export$dc203973592e6a3f();\n // For use in screenshots\n window.setTheme = $f78667648d019a86$export$2e49b867b7a0847c;\n}\nfunction $f78667648d019a86$export$40f958b0338f176(prefersDarkTheme = (0, $227e784e47219e65$export$28075517a6f9175).matches) {\n const args = (0, $088734a1400ffdfa$export$66256f83798e5415)();\n // Themes can be forced with query string arguments.\n if (args.theme === \"light\" || args.theme === \"dark\" || args.theme === \"high-contrast\") return args.theme;\n return $f78667648d019a86$export$4adfb56702530164(prefersDarkTheme);\n}\nfunction $f78667648d019a86$export$dc203973592e6a3f() {\n window.addEventListener(\"click\", ({ target: target })=>{\n const button = target instanceof Element && target.closest(\"[data-theme-cycle]\");\n if (!button) return;\n const themeToApply = $f78667648d019a86$export$dacf863dec39215c($f78667648d019a86$export$f89dfc8082866bac);\n $f78667648d019a86$export$f2c36dbf83bbf605(themeToApply);\n $f78667648d019a86$export$2e49b867b7a0847c(themeToApply);\n });\n}\n\n\nfunction $d902694ff4349214$export$f4ff70372302e0aa() {\n const warningIcon = document.createElement(\"span\");\n warningIcon.classList.add(\"warning-icon-container\");\n warningIcon.setAttribute(\"data-warning-icon-container\", \"\");\n warningIcon.innerHTML = `\r\n\t\t\t\r\n\t\t\t`;\n document.querySelectorAll(\"form\")?.forEach((form)=>{\n form.addEventListener(\"form-validating\", (e)=>{\n e.preventDefault();\n const container = form.querySelector(\"[data-form-error-container]\");\n const warningIconContainer = container?.firstElementChild?.querySelector(\"[data-warning-icon-container]\");\n if (!warningIconContainer) container?.firstElementChild?.prepend(warningIcon);\n }, {\n capture: true\n });\n form.addEventListener(\"beforesubmit\", (e)=>{\n e.preventDefault();\n if (form.hasAttribute(\"test-async-before-submit\")) {\n const customEvent = e;\n if (customEvent.detail) customEvent.detail.callback = async ()=>{\n await new Promise((resolve)=>setTimeout(resolve, 3000));\n const formData = new FormData(form);\n $d902694ff4349214$var$populateSubmittedFormData(formData, form);\n };\n } else {\n const formData = new FormData(form);\n $d902694ff4349214$var$populateSubmittedFormData(formData, form);\n }\n }, {\n capture: true\n });\n });\n}\nfunction $d902694ff4349214$var$populateSubmittedFormData(formData, form) {\n const submittedFormDataExample = form.querySelector(\".submitted-form-data-example\");\n const dataMessage = `The following data will be submitted: ${JSON.stringify(Object.fromEntries(formData), null, 2)}`;\n if (submittedFormDataExample?.firstChild) submittedFormDataExample.firstChild.textContent = dataMessage;\n else {\n const message = document.createElement(\"p\");\n message.classList.add(\"padding-xs\");\n message.textContent = dataMessage;\n submittedFormDataExample?.appendChild(message);\n }\n}\n\n\nfunction $4e0192595c049343$export$bec8e2005d807978() {\n window.addEventListener(\"click\", ({ target: target })=>{\n const dismissButton = target instanceof Element && target.closest(\"[data-dismiss]\");\n if (!dismissButton) return;\n const dismissTarget = dismissButton.closest(\"[data-dismissable]\");\n if (!dismissTarget) return;\n $4e0192595c049343$var$dismissElement(dismissTarget);\n });\n}\nfunction $4e0192595c049343$var$dismissElement(dismissTarget) {\n const dismissAnimation = dismissTarget.getAttribute(\"data-dismiss-animation\");\n if (dismissAnimation) {\n dismissTarget.addEventListener(\"animationend\", ()=>{\n dismissTarget.remove();\n });\n switch(dismissAnimation){\n case \"slide-up\":\n dismissTarget.classList.add(\"animation-slide-up\");\n break;\n case \"fade\":\n dismissTarget.classList.add(\"animation-fade\");\n break;\n }\n } else dismissTarget.remove();\n // Notification about content update occurrence.\n window.dispatchEvent(new CustomEvent(\"dismiss-content-update\"));\n}\n\n\n/* eslint-disable @typescript-eslint/no-use-before-define */ function $c1991f537e9ddabd$export$7ae0af140e650b26(container = document.body) {\n container.addEventListener(\"toggle\", (event)=>{\n const targetPopover = event.target instanceof Element && event.target.closest(\"details.popover\") || event.target instanceof Element && event.target.shadowRoot?.activeElement?.closest(\"details.popover\");\n if (!targetPopover || !targetPopover.open) return;\n const keyHandler = (event)=>{\n if (event.key === \"Escape\") closePopovers();\n };\n const checkTarget = (event)=>{\n if (!(event.target instanceof Element)) return;\n if (!targetPopover?.contains(event.target)) closePopovers();\n if (event.type === \"click\" && event.target.closest(\"[data-popover-close]\")) closePopovers();\n };\n const blurHandler = ()=>{\n if (document.activeElement?.nodeName?.toLowerCase() === \"iframe\") closePopovers();\n };\n const closePopovers = ()=>{\n container.removeEventListener(\"focus\", checkTarget, true);\n container.removeEventListener(\"click\", checkTarget);\n container.removeEventListener(\"touchstart\", checkTarget);\n container.removeEventListener(\"keydown\", keyHandler);\n window.removeEventListener(\"blur\", blurHandler);\n if (targetPopover?.open) targetPopover.removeAttribute(\"open\");\n };\n container.addEventListener(\"focus\", checkTarget, true);\n container.addEventListener(\"click\", checkTarget);\n container.addEventListener(\"touchstart\", checkTarget);\n container.addEventListener(\"keydown\", keyHandler);\n window.addEventListener(\"blur\", blurHandler);\n }, true);\n}\n\n\nlet $0ff9b3ba2ca1da31$var$snapScrollUpdating = false;\nfunction $0ff9b3ba2ca1da31$export$4b58943ac722c0ed() {\n // slide card when the button is clicked\n $0ff9b3ba2ca1da31$var$initSnapScrollClickListeners();\n // update when slide scrolls into the view\n const snapScrolls = Array.from(document.querySelectorAll(\"[data-snap-scroll]\"));\n for (const snapScroll of snapScrolls)$0ff9b3ba2ca1da31$export$3f1703e6cdd6d4ee(snapScroll);\n}\nfunction $0ff9b3ba2ca1da31$export$3f1703e6cdd6d4ee(element) {\n const slideContainer = element.querySelector(\"[data-snap-scroll-slides]\");\n if (!slideContainer) throw new Error('Your snap scroll element must contain a scrollable element with \"data-snap-scroll-slides\" attribute.');\n const slides = Array.from(slideContainer.querySelectorAll(\"[data-snap-scroll-slide]\"));\n const options = {\n root: slideContainer,\n rootMargin: \"0px\",\n threshold: 0.8\n };\n const observer = new IntersectionObserver((entries)=>{\n if ($0ff9b3ba2ca1da31$var$snapScrollUpdating) return;\n if (entries[0].isIntersecting === true) {\n const step = entries[0].target.getAttribute(\"data-snap-scroll-slide\");\n if (!step) throw new Error(\"The [data-snap-scroll-slide] clicked does not correspond to a [data-snap-scroll-nav-item]\");\n const anchor = element.querySelector(`[data-snap-scroll-nav-item=\"${step}\"]`);\n if (!anchor) throw new Error(\"Anchor missing from snap scroll container\");\n $0ff9b3ba2ca1da31$var$updatePaginationState(element, anchor);\n }\n }, options);\n slides.forEach((slide)=>observer.observe(slide));\n}\nfunction $0ff9b3ba2ca1da31$var$initSnapScrollClickListeners() {\n window.addEventListener(\"click\", (event)=>{\n const target = event.target instanceof Element && event.target.closest(\"[data-snap-scroll-nav-item]\");\n if (!target) return;\n const parentElement = target.closest(\"[data-snap-scroll]\");\n if (!parentElement) return;\n const snapScrollId = target.dataset.snapScrollNavItem;\n if (!snapScrollId) throw new Error('You need to add a value to the parent of your snap scroll: [data-snap-scroll=\"id-goes-here\")');\n $0ff9b3ba2ca1da31$var$snapScrollUpdating = true;\n event.preventDefault();\n const slide = parentElement.querySelector(`[data-snap-scroll-slide=\"${snapScrollId}\"]`);\n $0ff9b3ba2ca1da31$var$updatePaginationState(parentElement, target);\n slide.scrollIntoView({\n behavior: \"auto\",\n block: \"nearest\",\n inline: \"start\"\n });\n setTimeout(()=>$0ff9b3ba2ca1da31$var$snapScrollUpdating = false, 500);\n });\n}\nfunction $0ff9b3ba2ca1da31$var$updatePaginationState(parentElement, activeAnchor) {\n // remove is current from all anchors in this container\n const anchors = Array.from(parentElement.querySelectorAll(\"[data-snap-scroll-nav-item]\"));\n for (const a of anchors)a.classList.remove(\"is-current\");\n // add one back\n activeAnchor.classList.add(\"is-current\");\n}\n\n\nlet $48e0439ed1d493cd$var$nextId = 0;\nfunction $48e0439ed1d493cd$export$cfe7bad09682ff51() {\n return `bx-${$48e0439ed1d493cd$var$nextId++}`;\n}\nfunction $48e0439ed1d493cd$export$4e2d767d23cc93ee(str) {\n return str.replace(/-./g, (x)=>x[1].toUpperCase());\n}\n\n\nconst $63d6648ccf2da550$export$74d1e9f4105a478b = {\n contentHasChanged: \"Content has changed, please reload the page to get the latest changes.\",\n inputMaxLength: \"{inputLabel} cannot be longer than {maxLength} characters.\",\n inputMinLength: \"{inputLabel} must be at least {minLength} characters.\",\n inputRequired: \"{inputLabel} is required.\",\n notAuthenticated: \"You are not authenticated. Please refresh the page and try again. If this issue persists, please log out and log back in.\",\n notAuthorized: \"You are not authorized to make this response. If you believe this to be in error, please refresh the page and try again.\",\n pleaseFixTheFollowingIssues: \"Please fix the following issues to continue:\",\n thereAreNoEditsToSubmit: \"There are no edits to submit.\",\n tooManyRequests: \"You have sent too many requests. Please wait a few minutes and try again.\",\n weEncounteredAnUnexpectedError: \"We encountered an unexpected error. Please try again later. If this issue continues, please contact site support.\"\n};\nclass $63d6648ccf2da550$export$eff824212e04ca3f extends HTMLElement {\n constructor(){\n super();\n this.submitting = false;\n this.initialData = new FormData();\n this.toDispose = [];\n this.isDirty = false;\n this.commitTimeout = 0;\n this.locStrings = $63d6648ccf2da550$export$74d1e9f4105a478b;\n this.validators = [\n this.validateMinLength.bind(this),\n this.validateRequired.bind(this),\n this.validateMaxLength.bind(this)\n ];\n this.commit = (event)=>{\n if (!$63d6648ccf2da550$var$isValueElement(event.target, this.form) || !event.target?.form || event.target?.form !== this.parentElement) return;\n clearTimeout(this.commitTimeout);\n if (event.type === \"change\") $63d6648ccf2da550$var$normalizeInputValue(event.target);\n this.setDirty();\n };\n this.locStrings = this.locStrings;\n }\n get canSave() {\n return this.isDirty || this.isNew;\n }\n get form() {\n return this.closest(`form`);\n }\n // disable browser message when leaving page\n get hideUnloadMessage() {\n return this.hasAttribute(\"nounload\");\n }\n // 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)\n get isNew() {\n return this.hasAttribute(\"new\");\n }\n // Currently only used for Feedback form-behavior.\n // Use the `nosubmit` attibute to bypass automatic form submission if a form contains a body but does not need to send a POST request.\n get noSubmit() {\n return this.hasAttribute(\"nosubmit\");\n }\n connectedCallback() {\n const form = this.parentElement;\n if (!(form instanceof HTMLFormElement)) return;\n this.locStrings = this.getLocaleStrings();\n form.setAttribute(\"novalidate\", \"\");\n const errorSummaryContainer = document.createElement(\"div\");\n errorSummaryContainer.setAttribute(\"data-form-error-container\", \"\");\n if (form.hasAttribute(\"data-hide-validation-banner\")) errorSummaryContainer.hidden = true;\n this.insertAdjacentElement(\"afterend\", errorSummaryContainer);\n this.initialData = new FormData(form);\n if (this.ownerDocument.readyState === \"loading\") this.ownerDocument.addEventListener(\"readystatechange\", ()=>this.initialData = new FormData(form));\n this.subscribe(form, \"input\", this);\n this.subscribe(form, \"change\", this);\n this.subscribe(form, \"submit\", this);\n this.subscribe(window, \"beforeunload\", this);\n }\n disconnectedCallback() {\n for (const dispose of this.toDispose)dispose();\n }\n getLocaleStrings() {\n const formLocaleStrings = Array.from(this.attributes).filter((a)=>a.name.startsWith(\"loc-\")).reduce((map, a)=>{\n map[(0, $48e0439ed1d493cd$export$4e2d767d23cc93ee)(a.name.substring(4))] = a.value;\n return map;\n }, {});\n return Object.assign({}, $63d6648ccf2da550$export$74d1e9f4105a478b, formLocaleStrings);\n }\n subscribe(target, type, listener) {\n target.addEventListener(type, listener);\n this.toDispose.push(()=>target.removeEventListener(type, listener));\n }\n setDirty() {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const initial = new URLSearchParams(this.initialData).toString();\n const current = new URLSearchParams(// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n new FormData(this.parentElement)).toString();\n this.isDirty = current !== initial;\n }\n handleEvent(event) {\n switch(event.type){\n case \"submit\":\n this.handleSubmitEvent(event);\n break;\n case \"beforeunload\":\n this.handleUnloadEvent(event);\n break;\n case \"input\":\n this.clearValidationErrors(event.target);\n this.scheduleCommit(event);\n break;\n case \"change\":\n this.clearValidationErrors(event.target);\n this.commit(event);\n break;\n default:\n throw new Error(`Unexpected event ${event.type}.`);\n }\n }\n navigate(href) {\n const navigate = $63d6648ccf2da550$export$7aa55fd9657ff73(href, this.getAttribute(\"navigation\"));\n return navigate;\n }\n scheduleCommit(event) {\n clearTimeout(this.commitTimeout);\n setTimeout(this.commit, 300, event);\n }\n async handleUnloadEvent(event) {\n this.setDirty();\n if (!this.isDirty || this.hideUnloadMessage) return;\n event.preventDefault();\n event.returnValue = \"You have unsaved work.\"; // browser overrides this text\n }\n async handleSubmitEvent(event) {\n event.preventDefault();\n if (this.submitting) return;\n const form = event.currentTarget;\n // reject the submit if no edits have been made (overridable with the new attribute)\n if (!this.canSave) {\n this.showNoChangesMessage(form);\n const validationErrorEvent = new CustomEvent(\"form-validating\", {\n detail: {\n form: form\n },\n bubbles: true\n });\n this.dispatchEvent(validationErrorEvent);\n return;\n }\n let isNavigating = false;\n try {\n this.submitting = true;\n $63d6648ccf2da550$var$setBusySubmitButton(event, form, this.submitting);\n const result = await this.validateForm(form);\n if (!result.valid || this.noSubmit) return;\n const url = $63d6648ccf2da550$var$handleSubmitButtonAction(event) ?? form.action;\n const params = new URL(url).searchParams;\n const formData = new FormData(form);\n // set and read headers:\n const headers = new Headers();\n headers.set(\"content-type\", \"application/json\");\n for (const { name: name, value: value } of this.attributes)if (name.startsWith(\"header-\")) headers.set(name.substring(7), value);\n // form.method does not support PUT or DELETE events, use method queryParam if it exists.\n const method = params.get(\"_method\") || form.method || \"GET\";\n const init = {\n method: method,\n body: JSON.stringify(Object.fromEntries(formData)),\n headers: headers\n };\n const beforeSubmitEvent = new CustomEvent(\"beforesubmit\", {\n detail: {\n url: url,\n init: init,\n form: form,\n callback: async ()=>{}\n },\n bubbles: true,\n cancelable: true\n });\n const cancelled = !this.dispatchEvent(beforeSubmitEvent);\n if (beforeSubmitEvent.detail.callback) try {\n await beforeSubmitEvent.detail.callback();\n } catch (error) {\n // on error return and allow for custom error handling\n return;\n }\n if (cancelled) return;\n const request = new Request(beforeSubmitEvent.detail.url, beforeSubmitEvent.detail.init);\n const response = await fetch(request);\n if (response.ok) {\n this.removeAttribute(\"new\");\n this.initialData = formData;\n this.setDirty();\n this.dispatchEvent(new CustomEvent(\"aftersubmit\", {\n detail: {\n request: request,\n response: response\n },\n bubbles: true\n }));\n isNavigating = this.navigate(response.headers.get(\"location\") ?? this.getAttribute(\"navigation-href\"));\n } else {\n const { errorAlert: errorAlert, errorList: errorList } = this.getErrorAlert(form);\n const errorText = document.createElement(\"li\");\n errorText.innerText = this.locStrings.weEncounteredAnUnexpectedError;\n // custom text for version mismatch\n if (response.status === 401) errorText.innerText = this.locStrings.notAuthenticated;\n if (response.status === 403) errorText.innerText = this.locStrings.notAuthorized;\n if (response.status === 412) errorText.innerText = this.locStrings.contentHasChanged;\n if (response.status === 429) errorText.innerText = this.locStrings.tooManyRequests;\n this.dispatchEvent(new CustomEvent(\"submission-error\", {\n detail: {\n form: form,\n request: request,\n response: response\n },\n bubbles: true\n }));\n errorList.appendChild(errorText);\n errorAlert.hidden = false;\n errorAlert.focus();\n }\n } finally{\n this.submitting = isNavigating;\n $63d6648ccf2da550$var$setBusySubmitButton(event, form, this.submitting);\n }\n }\n createErrorAlert(form) {\n const formLayout = form.querySelector(\"[data-form-error-container]\") || form;\n const alertId = (0, $48e0439ed1d493cd$export$cfe7bad09682ff51)();\n const errorAlert = document.createElement(\"div\");\n errorAlert.className = \"help help-danger background-color-danger-light border border-color-danger border-radius padding-xs margin-bottom-sm\";\n errorAlert.setAttribute(\"data-form-error-alert\", \"\");\n errorAlert.setAttribute(\"role\", \"alert\");\n errorAlert.setAttribute(\"aria-labelledby\", alertId);\n errorAlert.setAttribute(\"tabindex\", \"-1\");\n errorAlert.hidden = true;\n const alertText = document.createElement(\"p\");\n alertText.id = alertId;\n alertText.className = \"font-size-md font-weight-semibold margin-bottom-xs display-inline-flex\";\n alertText.innerText = this.locStrings.pleaseFixTheFollowingIssues;\n const errorList = document.createElement(\"ul\");\n errorList.setAttribute(\"aria-label\", \"Validation errors\");\n errorList.classList.add(\"margin-left-sm-tablet\");\n errorAlert.append(alertText, errorList);\n formLayout.appendChild(errorAlert);\n return {\n errorAlert: errorAlert,\n errorList: errorList\n };\n }\n getErrorAlert(form) {\n const errorAlert = form.querySelector(\"[data-form-error-alert]\");\n if (errorAlert) return {\n errorAlert: errorAlert,\n errorList: errorAlert.lastElementChild\n };\n return this.createErrorAlert(form);\n }\n validateRequired(input, label) {\n if (input.validity.valueMissing) return `${this.locStrings.inputRequired.replace(\"{inputLabel}\", customElements.get(input.localName) ? `A selection for \"${label}\"` : label)}`;\n return null;\n }\n validateMinLength(input, label) {\n if ((input instanceof HTMLTextAreaElement || input instanceof HTMLInputElement) && (input.validity.tooShort || input.minLength > 0 && input.value.length < input.minLength)) return `${this.locStrings.inputMinLength.replace(\"{inputLabel}\", label).replace(\"{minLength}\", input.minLength.toString())}`;\n return null;\n }\n validateMaxLength(input, label) {\n if ((input instanceof HTMLTextAreaElement || input instanceof HTMLInputElement) && (input.validity.tooLong || input.maxLength > 0 && input.value.length > input.maxLength)) return `${this.locStrings.inputMaxLength.replace(\"{inputLabel}\", label).replace(\"{maxLength}\", input.maxLength.toString())}`;\n return null;\n }\n async validateForm(form, displayValidity = true, scope = form) {\n const errors = [];\n const { errorAlert: errorAlert, errorList: errorList } = this.getErrorAlert(form);\n if (displayValidity || form.hasAttribute(\"data-hide-validation-banner\")) {\n errorAlert.hidden = true;\n errorList.innerHTML = \"\";\n }\n const customElements1 = $63d6648ccf2da550$export$6fdbe88c041d855d(form);\n for (const input of [\n ...form.elements,\n ...customElements1\n ]){\n if (!scope.contains(input) || !$63d6648ccf2da550$var$canValidate(input, form)) continue;\n if (input.hasAttribute(\"aria-hidden\") === true) continue;\n // Don't check combobox\n if (input.getAttribute(\"role\") === \"combobox\") continue;\n // Don't check elements that are part of markdown editor\n if (input.closest(\"docs-markdown-editor\")) continue;\n if (input.hasAttribute(\"data-skip-validation\")) {\n const validationErrorEvent = new CustomEvent(\"form-validating\", {\n detail: {\n errors: errors,\n form: form\n },\n bubbles: true\n });\n this.dispatchEvent(validationErrorEvent);\n continue;\n }\n const isCustomElement = !!customElements1.find((el)=>el === input);\n this.runBasicValidation(input, displayValidity, errors, errorList, isCustomElement);\n const validationErrorEvent = new CustomEvent(\"form-validating\", {\n detail: {\n errors: errors,\n form: form\n },\n bubbles: true\n });\n this.dispatchEvent(validationErrorEvent);\n }\n if (errors.length === 0) return {\n valid: true\n };\n if (displayValidity) {\n errorAlert.hidden = false;\n errorAlert.focus();\n }\n return {\n valid: false,\n errors: errors\n };\n }\n clearValidationErrors(target) {\n if (!$63d6648ccf2da550$var$canValidate(target, this.form)) return;\n $63d6648ccf2da550$var$clearInputErrorBorder(target);\n $63d6648ccf2da550$export$e0ddcd48746f2dd9(target, \"\");\n $63d6648ccf2da550$export$2c9b3f539cb25b05(target).classList.remove(\"errored\");\n if (target.form) {\n const { errorAlert: errorAlert, errorList: errorList } = this.getErrorAlert(target.form);\n errorList.querySelectorAll(`a[href=\"#${target.id}\"]`).forEach((a)=>a.parentElement?.remove());\n // clear no edits error if it exists as well\n errorList.querySelector(\"#no-edits-error\")?.remove();\n if (!errorList.firstElementChild) errorAlert.hidden = true;\n }\n const clearValidationEvent = new CustomEvent(\"clear-validation-errors\", {\n detail: {\n target: target\n },\n bubbles: true\n });\n this.dispatchEvent(clearValidationEvent);\n }\n showNoChangesMessage(form) {\n const { errorAlert: errorAlert, errorList: errorList } = this.getErrorAlert(form);\n if (errorList.childElementCount > 0) {\n while(errorList.firstChild)errorList.lastChild?.remove();\n // clear no edits error if it exists as well\n errorList.querySelector(\"#no-edits-error\")?.remove();\n }\n const errorText = document.createElement(\"li\");\n errorText.id = \"no-edits-error\";\n errorText.innerText = this.locStrings.thereAreNoEditsToSubmit;\n errorList.appendChild(errorText);\n errorAlert.hidden = false;\n errorAlert.focus();\n }\n runBasicValidation(input, displayValidity = true, errors, errorList, isCustomElement) {\n if (!$63d6648ccf2da550$var$canValidate(input, this.form)) return;\n const label = $63d6648ccf2da550$export$236350842f3cd9bc(input);\n const group = $63d6648ccf2da550$export$2c9b3f539cb25b05(input);\n if (displayValidity) {\n $63d6648ccf2da550$export$e0ddcd48746f2dd9(input, \"\");\n group.classList.remove(\"errored\");\n }\n for (const validator of this.validators){\n const message = validator(input, label);\n if (!message) {\n if (!isCustomElement) $63d6648ccf2da550$var$clearInputErrorBorder(input);\n continue;\n }\n errors.push({\n input: input,\n message: message\n });\n if (displayValidity) {\n if (!input.id) continue;\n $63d6648ccf2da550$export$e0ddcd48746f2dd9(input, message);\n group.classList.add(\"errored\");\n const child = document.createElement(\"li\");\n child.classList.add(\"margin-bottom-xs\");\n const a = document.createElement(\"a\");\n a.href = `#${input.id}`;\n a.textContent = message;\n a.classList.add(\"help\", \"help-danger\");\n // ensure focus is set on the custom element\n a.addEventListener(\"click\", (e)=>{\n if (isCustomElement) {\n const target = e.target.getAttribute(\"href\");\n if (target) document.querySelector(target).focus();\n }\n });\n child.appendChild(a);\n errorList.appendChild(child);\n if (!isCustomElement) {\n if (input.type === \"checkbox\") input.closest(\"label.checkbox\")?.classList.add(`is-invalid`);\n else input.classList.add(`${input.localName}-danger`);\n }\n }\n break;\n }\n }\n}\nif (!window.customElements.get(\"form-behavior\")) {\n window.FormBehaviorElement = $63d6648ccf2da550$export$eff824212e04ca3f;\n window.customElements.define(\"form-behavior\", $63d6648ccf2da550$export$eff824212e04ca3f);\n}\n// Check if the required value related properties exist rather than an instance of a form related element.\nfunction $63d6648ccf2da550$var$isValueElement(target, form) {\n const element = target;\n if (element) return element instanceof HTMLElement && \"form\" in element && element.form === form && \"validity\" in element && element.validity instanceof ValidityState && \"value\" in element && typeof element.value === \"string\" && \"type\" in element && typeof element.type === \"string\" && ![\n \"button\",\n \"submit\"\n ].includes(element.type);\n return false;\n}\nfunction $63d6648ccf2da550$var$normalizeInputValue(target) {\n if (target instanceof HTMLTextAreaElement) target.value = target.value.trim();\n else if (target instanceof HTMLInputElement && (target.type === \"text\" || target.type === \"email\")) target.value = target.value.trim();\n}\nfunction $63d6648ccf2da550$var$setBusySubmitButton(event, form, isLoading) {\n const submitter = event.submitter;\n Array.from(form.elements).forEach((element)=>{\n if (element instanceof HTMLButtonElement && element.type === \"submit\") {\n if (submitter && submitter === element) element.classList.toggle(\"is-loading\", isLoading);\n else element.disabled = isLoading;\n }\n });\n}\nfunction $63d6648ccf2da550$export$236350842f3cd9bc(input) {\n const label = input.labels && input.labels.length ? input.labels[0].textContent : input.getAttribute(\"aria-label\");\n if (!label) throw new Error(`${input.nodeName} name=\"${input.name}\" id=\"${input.id}\" has no associated label.`);\n return label.trim();\n}\nfunction $63d6648ccf2da550$export$2c9b3f539cb25b05(input) {\n const group = input.closest(\".field\");\n if (!group) throw new Error(`${input.nodeName} name=\"${input.name}\" id=\"${input.id}\" is not within a .field`);\n return group;\n}\nfunction $63d6648ccf2da550$export$52dd50fe747c85c8(input) {\n const body = input.closest(\".field-body\");\n if (!body) throw new Error(`${input.nodeName} name=\"${input.name}\" id=\"${input.id}\" is not within a .field-body`);\n return body;\n}\nfunction $63d6648ccf2da550$var$createErrorNote(input) {\n const note = document.createElement(\"p\");\n note.id = (0, $48e0439ed1d493cd$export$cfe7bad09682ff51)();\n input.setAttribute(\"aria-describedby\", `${note.id} ${input.getAttribute(\"aria-describedby\") || \"\"}`);\n note.classList.add(\"field-error\");\n note.setAttribute(\"data-field-error\", \"\");\n $63d6648ccf2da550$export$52dd50fe747c85c8(input).after(note);\n return note;\n}\nfunction $63d6648ccf2da550$export$e0ddcd48746f2dd9(element, message) {\n const group = $63d6648ccf2da550$export$2c9b3f539cb25b05(element);\n const note = group.querySelector(\"[data-field-error]\") || $63d6648ccf2da550$var$createErrorNote(element);\n note.textContent = message;\n}\nfunction $63d6648ccf2da550$var$canValidate(target, form) {\n return $63d6648ccf2da550$var$isValueElement(target, form) && target.type !== \"hidden\";\n}\nfunction $63d6648ccf2da550$export$7aa55fd9657ff73(href, navigationStep) {\n switch(navigationStep){\n case null:\n // do nothing.\n return false;\n case \"follow\":\n if (href) {\n location.href = href;\n return true;\n }\n return false;\n case \"hash-reload\":\n if (href) {\n const search = href.includes(\"?\") ? \"\" : window.location.search;\n if (href !== search + window.location.hash) {\n const state = history.state || {};\n window.history.pushState(state, document.title, window.location.pathname + search + href); // prevents scrolling to spot until reload\n }\n location.reload();\n return true;\n }\n return false;\n case \"replace\":\n if (href) {\n location.replace(href);\n return true;\n }\n return false;\n case \"reload\":\n location.reload();\n return true;\n default:\n throw new Error(`Unexpected navigation attribute value.`);\n }\n}\nfunction $63d6648ccf2da550$export$6fdbe88c041d855d(form) {\n // Compare FormData with form.elements to find missing elements.\n const formData = Object.fromEntries(new FormData(form));\n const customElementList = [];\n const customElements1 = Object.keys(formData).filter((key)=>{\n return !form.elements.namedItem(key);\n });\n customElements1.forEach((name)=>{\n const element = form.querySelector(`[name=\"${name}\"]`);\n if (element) customElementList.push(element);\n });\n return customElementList;\n}\nfunction $63d6648ccf2da550$var$clearInputErrorBorder(input) {\n if (input.type === \"checkbox\") input.closest(\"label.checkbox\")?.classList.remove(`is-invalid`);\n else input.classList.remove(`${input.localName}-danger`);\n}\nfunction $63d6648ccf2da550$var$handleSubmitButtonAction(event) {\n const submitter = event.submitter;\n const formAction = submitter instanceof HTMLButtonElement && submitter.formAction !== window.location.href ? submitter.formAction : null;\n return formAction;\n}\n\n\n\n\n\nfunction $eb50081cb8c1c364$export$b54c97eeb2b88f5d(selectors = `[data-focusable-if-scrollable]`) {\n const elements = Array.from(document.querySelectorAll(selectors));\n $eb50081cb8c1c364$var$setScrollableAttrs(elements);\n window.addEventListener(\"resize\", ()=>{\n const elements = Array.from(document.querySelectorAll(\"[data-focusable-if-scrollable]\"));\n $eb50081cb8c1c364$var$setScrollableAttrs(elements);\n });\n}\nfunction $eb50081cb8c1c364$var$setScrollableAttrs(elements) {\n for (const block of elements){\n const isHorizontallyScrollable = block.scrollWidth > block.clientWidth;\n const isVerticallyScrollable = block.scrollHeight > block.clientHeight;\n if (isHorizontallyScrollable) {\n block.setAttribute(\"role\", \"group\");\n block.setAttribute(\"aria-label\", \"Horizontally scrollable element\");\n block.tabIndex = 0;\n } else if (isVerticallyScrollable) {\n block.setAttribute(\"role\", \"group\");\n block.setAttribute(\"aria-label\", \"Vertically scrollable element\");\n block.tabIndex = 0;\n } else {\n block.removeAttribute(\"role\");\n block.removeAttribute(\"aria-label\");\n block.removeAttribute(\"tabindex\");\n }\n }\n}\n\n\nfunction $6affabdeba5460cf$export$eab4cb1d5a93b779() {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n window.addEventListener(\"click\", (e)=>{\n const target = e.target instanceof Element && e.target.closest(\"[data-full-screen-main]\");\n if (!target) return;\n return $6affabdeba5460cf$var$handleFullscreen();\n });\n}\nasync function $6affabdeba5460cf$var$handleFullscreen() {\n const main = document.getElementById(\"main\");\n const article = document.getElementById(\"article\");\n if (!main || !article) return;\n const isFullScreened = main?.dataset.isFullScreened === \"true\";\n if (!isFullScreened) {\n article.style.overflow = \"visible\";\n main.style.display = \"block\";\n main.style.overflowX = \"auto\";\n await main.requestFullscreen({\n navigationUI: \"show\"\n });\n main.dataset.isFullScreened = \"true\";\n } else {\n main.dataset.isFullScreened = \"false\";\n article.style.cssText = \"\";\n if (document.fullscreenElement) await document.exitFullscreen();\n }\n}\n\n\nconst $97683cc1acd86126$var$layoutsClasses = [\n \"layout-single\",\n \"layout-holy-grail\",\n \"layout-sidecar-left\",\n \"layout-sidecar-right\"\n];\n// A function that removes all classes that begin with layout- on the html element\nfunction $97683cc1acd86126$var$setLayoutClass(layoutToSet) {\n for (const layoutClass of $97683cc1acd86126$var$layoutsClasses)document.documentElement.classList.remove(layoutClass);\n document.documentElement.classList.add(layoutToSet);\n}\nfunction $97683cc1acd86126$export$7418a22239be2e7() {\n window.addEventListener(\"click\", (e)=>{\n const target = e.target instanceof Element && e.target.closest(\"[data-set-layout]\");\n if (!target) return;\n const layoutToSet = target.dataset.setLayout || \"not-found\";\n if (!$97683cc1acd86126$var$layoutsClasses.includes(layoutToSet)) throw new Error(\"Attempting to set a layout class that does not match current list of available layouts\");\n $97683cc1acd86126$var$setLayoutClass(layoutToSet);\n scrollTo({\n behavior: \"smooth\",\n top: target.getBoundingClientRect().top - 200\n });\n const setThemeButtons = Array.from(document.querySelectorAll(\"[data-set-layout]\"));\n for (const button of setThemeButtons)button.setAttribute(\"aria-pressed\", \"false\");\n target.setAttribute(\"aria-pressed\", \"true\");\n });\n window.addEventListener(\"click\", (e)=>{\n const target = e.target instanceof Element && e.target.closest(\"[data-toggle-debug]\");\n if (!target) return;\n target.classList.toggle(\"button-filled\");\n document.documentElement.classList.toggle(\"debug\");\n target.setAttribute(\"aria-pressed\", target.classList.contains(\"button-filled\").toString());\n });\n}\n\n\nfunction $715792aaf7c0f6c4$export$bc2336b8340d680e() {\n addEventListener(\"fullscreenchange\", ()=>{\n const isFullScreened = !document.fullscreenElement;\n const navContent = document.getElementById(\"menu-content\");\n const nav = document.getElementById(\"menu\");\n if (!nav) throw new Error(\"Need an element with an id of #nav before we can show a mobile menu\");\n if (!navContent) throw new Error(\"Trying to modify classes on #menu-content, which does not exist.\");\n const innerNavButton = nav.querySelector(\"[data-full-screen-nav]\");\n if (!innerNavButton) throw new Error(\"Trying to modify classes on nav > [data-full-screen-nav], which does not exist.\");\n const headerTrigger = document.querySelector(\"#header [data-full-screen-nav]\");\n if (!headerTrigger) throw new Error(\"Trying to focus #header > [data-full-screen-nav], which does not exist.\");\n if (isFullScreened) $715792aaf7c0f6c4$export$12c591e78e1e6616(navContent, nav, innerNavButton, headerTrigger);\n });\n document.addEventListener(\"fullscreenchange\", ()=>{\n const nav = document.getElementById(\"menu\");\n if (!nav) throw new Error(\"Need an element with an id of #nav before we can show a mobile menu\");\n // logic is odd because of timing, this will run after a full screen exits\n const notFullScreen = document.fullscreenElement;\n if (notFullScreen) return;\n const trigger = document.querySelector(\"[data-full-screen-nav]\");\n if (!trigger) return;\n const navContent = document.getElementById(\"menu-content\");\n if (!navContent) throw new Error(\"Trying to modify classes on #menu-content, which does not exist.\");\n const innerNavButton = nav.querySelector(\"[data-full-screen-nav]\");\n if (!innerNavButton) throw new Error(\"Trying to modify classes on nav > [data-full-screen-nav], which does not exist.\");\n $715792aaf7c0f6c4$export$12c591e78e1e6616(navContent, nav, innerNavButton, trigger);\n }, false);\n window.addEventListener(\"click\", (e)=>{\n const trigger = e.target instanceof HTMLElement && e.target.closest(\"[data-full-screen-nav]\");\n if (!trigger) return;\n const nav = document.getElementById(\"menu\");\n if (!nav) throw new Error(\"Need an element with an id of #nav before we can show a mobile menu\");\n const navContent = document.getElementById(\"menu-content\");\n if (!navContent) throw new Error(\"Trying to modify classes on #menu-content, which does not exist.\");\n const innerNavButton = nav.querySelector(\"[data-full-screen-nav]\");\n if (!innerNavButton) throw new Error(\"Trying to modify classes on nav > [data-full-screen-nav], which does not exist.\");\n // logic is odd because of timing, this will run before a full screen is requested\n const isFullScreened = document.fullscreenElement;\n if (isFullScreened) $715792aaf7c0f6c4$export$12c591e78e1e6616(navContent, nav, innerNavButton, trigger);\n else {\n navContent.classList.remove(\"display-none\");\n navContent.classList.add(\"padding-inline-lg\");\n navContent.classList.add(\"padding-block-md\");\n nav.dataset.isFullScreened = \"true\";\n nav.style.overflowX = \"auto\";\n nav.requestFullscreen({\n navigationUI: \"show\"\n }).then(()=>{\n innerNavButton.classList.remove(\"display-none\");\n innerNavButton.focus();\n innerNavButton.classList.add(\"burger-expanded\");\n });\n }\n });\n}\nfunction $715792aaf7c0f6c4$export$12c591e78e1e6616(navContent, nav, innerNavButton, trigger) {\n innerNavButton.classList.add(\"display-none\");\n innerNavButton.classList.remove(\"burger-expanded\");\n navContent.classList.add(\"display-none\");\n nav.dataset.isFullScreened = \"false\";\n navContent.classList.remove(\"padding-inline-lg\");\n navContent.classList.remove(\"padding-block-md\");\n nav.style.cssText = \"\";\n document.exitFullscreen().then(()=>{\n trigger.focus();\n });\n}\n\n\n(0, $f78667648d019a86$export$4c47704ed26c13e8)();\n(0, $4e0192595c049343$export$bec8e2005d807978)();\n(0, $c1991f537e9ddabd$export$7ae0af140e650b26)();\n(0, $ac10d40a2fa020d1$export$cacf7dd05fca3e17)();\n(0, $c1dcb31e94c13fa0$export$3bf7e98e931d1cdc)();\n(0, $d902694ff4349214$export$f4ff70372302e0aa)();\n(0, $0ff9b3ba2ca1da31$export$4b58943ac722c0ed)();\n(0, $6affabdeba5460cf$export$eab4cb1d5a93b779)();\n(0, $eb50081cb8c1c364$export$b54c97eeb2b88f5d)();\n(0, $715792aaf7c0f6c4$export$bc2336b8340d680e)();\n(0, $97683cc1acd86126$export$7418a22239be2e7)();\n\n\n//# sourceMappingURL=index.f3906f68.js.map\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\nimport { initDismiss, initPopover, initSnapScroll } from '@microsoft/atlas-js/src/index';\r\nimport { handleFocusableIfScrollable } from './scripts/focusable-if-scrollable';\r\nimport { initFullScreenToggle } from './scripts/full-screen-toggle';\r\nimport { initLayoutPageControls } from './scripts/layout-page';\r\nimport { handleFullScreenNavButton } from './scripts/mobile-navigation';\r\n\r\ninitTheme();\r\ninitDismiss();\r\ninitPopover();\r\nhandleCodeFilters();\r\nhandleFigmaFullScreenRequest();\r\nhandleMockFormSubmit();\r\ninitSnapScroll();\r\ninitFullScreenToggle();\r\nhandleFocusableIfScrollable();\r\nhandleFullScreenNavButton();\r\ninitLayoutPageControls();\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","/* 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(\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 (\r\n\t\thandler: T,\r\n\t\ttimeout?: number\r\n\t) => CancellableFunction,\r\n\tanimationFrame: debounceScheduler.bind(\r\n\t\tnull,\r\n\t\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n\t\t// @ts-ignore\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 (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 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","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","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","/**\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-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)\",\"$gradient-vivid-start\":\"var(--theme-gradient-vivid-start)\",\"$gradient-vivid-end\":\"var(--theme-gradient-vivid-end)\",\"$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\",\"$gradients\":{\"vivid\":\"var(--theme-gradient-vivid-start),var(--theme-gradient-vivid-end)\",\"purple-blue\":\"var(--theme-gradient-text-purple),var(--theme-gradient-text-blue)\"},\"$gradient-color-start-index\":\"1\",\"$gradient-color-end-index\":\"2\"}},\"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\":\"24px\",\"$layout-widescreen-width\":\"1752px\",\"$layout-widescreen-gap\":\"calc( 50% - 1752px / 2 )\",\"$layout-gap-custom-property-name\":\"--layout-gap\",\"$layout-gap-scalable-custom-property-name\":\"--layout-gap-scalable\"}},\"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-grey-130\":\"#161616\",\"$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-c\":\"#b84dc6\",\"$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\":\"#161616\",\"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\",\"gradient-vivid-start\":\"#b84dc6\",\"gradient-vivid-end\":\"#0078d4\"},\"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\",\"gradient-vivid-start\":\"#b84dc6\",\"gradient-vivid-end\":\"#75b6e7\"},\"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\",\"gradient-vivid-start\":\"#fff\",\"gradient-vivid-end\":\"#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\",\"$line-height-normal\":\"1.3\"}},\"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","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 = `\r\n\t\t\t\r\n\t\t\t`;\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\tif (form.hasAttribute('test-async-before-submit')) {\r\n\t\t\t\t\tconst customEvent = e as CustomEventInit<{ callback: () => Promise }>;\r\n\t\t\t\t\tif (customEvent.detail) {\r\n\t\t\t\t\t\tcustomEvent.detail.callback = async () => {\r\n\t\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 3000));\r\n\t\t\t\t\t\t\tconst formData = new FormData(form);\r\n\t\t\t\t\t\t\tpopulateSubmittedFormData(formData, form);\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst formData = new FormData(form);\r\n\t\t\t\t\tpopulateSubmittedFormData(formData, form);\r\n\t\t\t\t}\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","export * from './behaviors/dismiss';\r\nexport * from './behaviors/popover';\r\nexport * from './behaviors/snap-scroll';\r\nexport * from './elements/form-behavior';\r\nexport * from './utilities/util';\r\n","export function initDismiss() {\r\n\twindow.addEventListener('click', ({ target }: Event) => {\r\n\t\tconst dismissButton = target instanceof Element && target.closest('[data-dismiss]');\r\n\r\n\t\tif (!dismissButton) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst dismissTarget = dismissButton.closest('[data-dismissable]');\r\n\r\n\t\tif (!dismissTarget) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tdismissElement(dismissTarget);\r\n\t});\r\n}\r\n\r\nfunction dismissElement(dismissTarget: Element) {\r\n\tconst dismissAnimation = dismissTarget.getAttribute('data-dismiss-animation');\r\n\r\n\tif (dismissAnimation) {\r\n\t\tdismissTarget.addEventListener('animationend', () => {\r\n\t\t\tdismissTarget.remove();\r\n\t\t});\r\n\r\n\t\tswitch (dismissAnimation) {\r\n\t\t\tcase 'slide-up':\r\n\t\t\t\tdismissTarget.classList.add('animation-slide-up');\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'fade':\r\n\t\t\t\tdismissTarget.classList.add('animation-fade');\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t} else {\r\n\t\tdismissTarget.remove();\r\n\t}\r\n\r\n\t// Notification about content update occurrence.\r\n\twindow.dispatchEvent(new CustomEvent('dismiss-content-update'));\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","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","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\tnotAuthenticated:\r\n\t\t'You are not authenticated. Please refresh the page and try again. If this issue persists, please log out and log back in.',\r\n\tnotAuthorized:\r\n\t\t'You are not authorized to make this response. If you believe this to be in error, please refresh the page and try again.',\r\n\tpleaseFixTheFollowingIssues: 'Please fix the following issues to continue:',\r\n\tthereAreNoEditsToSubmit: 'There are no edits to submit.',\r\n\ttooManyRequests: 'You have sent too many requests. Please wait a few minutes and try again.',\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// \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 = defaultMessageStrings;\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\t// Currently only used for Feedback form-behavior.\r\n\t// Use the `nosubmit` attibute to bypass automatic form submission if a form contains a body but does not need to send a POST request.\r\n\tget noSubmit() {\r\n\t\treturn this.hasAttribute('nosubmit');\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\tthis.locStrings = this.getLocaleStrings();\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\tif (form.hasAttribute('data-hide-validation-banner')) {\r\n\t\t\terrorSummaryContainer.hidden = true;\r\n\t\t}\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\tgetLocaleStrings() {\r\n\t\tconst formLocaleStrings = Array.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\r\n\t\treturn Object.assign({}, defaultMessageStrings, formLocaleStrings);\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\tconst navigate = navigateAfterSubmit(href, this.getAttribute('navigation') as NavigationSteps);\r\n\t\treturn navigate;\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\t\tlet isNavigating = false;\r\n\t\ttry {\r\n\t\t\tthis.submitting = true;\r\n\t\t\tsetBusySubmitButton(event, form, this.submitting);\r\n\t\t\tconst result = await this.validateForm(form);\r\n\t\t\tif (!result.valid || this.noSubmit) {\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\tcallback: async () => {}\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 (beforeSubmitEvent.detail.callback) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tawait beforeSubmitEvent.detail.callback();\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\t// on error return and allow for custom error handling\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\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\tisNavigating = this.navigate(\r\n\t\t\t\t\tresponse.headers.get('location') ?? this.getAttribute('navigation-href')\r\n\t\t\t\t);\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 === 401) {\r\n\t\t\t\t\terrorText.innerText = this.locStrings.notAuthenticated;\r\n\t\t\t\t}\r\n\t\t\t\tif (response.status === 403) {\r\n\t\t\t\t\terrorText.innerText = this.locStrings.notAuthorized;\r\n\t\t\t\t}\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\tif (response.status === 429) {\r\n\t\t\t\t\terrorText.innerText = this.locStrings.tooManyRequests;\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 = isNavigating;\r\n\t\t\tsetBusySubmitButton(event, 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('[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 {\r\n\t\tconst errors: FormValidationError[] = [];\r\n\t\tconst { errorAlert, errorList } = this.getErrorAlert(form);\r\n\r\n\t\tif (displayValidity || form.hasAttribute('data-hide-validation-banner')) {\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\tif (input.type === 'checkbox') {\r\n\t\t\t\t\t\tinput.closest('label.checkbox')?.classList.add(`is-invalid`);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tinput.classList.add(`${input.localName}-danger`);\r\n\t\t\t\t\t}\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
Helper functions\r\nexport interface HTMLValueElement extends HTMLElement {\r\n\tform: HTMLFormElement;\r\n\tlabels: NodeListOf | 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\tnotAuthenticated: string;\r\n\tnotAuthorized: string;\r\n\tpleaseFixTheFollowingIssues: string;\r\n\tthereAreNoEditsToSubmit: string;\r\n\ttooManyRequests: 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(event: Event, form: HTMLFormElement, isLoading: boolean) {\r\n\tconst submitter = (event as SubmitEvent).submitter;\r\n\tArray.from(form.elements).forEach(element => {\r\n\t\tif (element instanceof HTMLButtonElement && element.type === 'submit') {\r\n\t\t\tif (submitter && submitter === element) {\r\n\t\t\t\telement.classList.toggle('is-loading', isLoading);\r\n\t\t\t} else {\r\n\t\t\t\telement.disabled = isLoading;\r\n\t\t\t}\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('.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\treturn false;\r\n\t\tcase 'follow':\r\n\t\t\tif (href) {\r\n\t\t\t\tlocation.href = href;\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\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;\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\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\tcase 'replace':\r\n\t\t\tif (href) {\r\n\t\t\t\tlocation.replace(href);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\tcase 'reload':\r\n\t\t\tlocation.reload();\r\n\t\t\treturn true;\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\tif (input.type === 'checkbox') {\r\n\t\tinput.closest('label.checkbox')?.classList.remove(`is-invalid`);\r\n\t} else {\r\n\t\tinput.classList.remove(`${input.localName}-danger`);\r\n\t}\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","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","export function handleFocusableIfScrollable(selectors = `[data-focusable-if-scrollable]`) {\r\n\tconst elements: HTMLElement[] = Array.from(document.querySelectorAll(selectors));\r\n\r\n\tsetScrollableAttrs(elements);\r\n\r\n\twindow.addEventListener('resize', () => {\r\n\t\tconst elements: HTMLElement[] = Array.from(\r\n\t\t\tdocument.querySelectorAll('[data-focusable-if-scrollable]')\r\n\t\t);\r\n\t\tsetScrollableAttrs(elements);\r\n\t});\r\n}\r\nfunction setScrollableAttrs(elements: HTMLElement[]) {\r\n\tfor (const block of elements) {\r\n\t\tconst isHorizontallyScrollable = block.scrollWidth > block.clientWidth;\r\n\t\tconst isVerticallyScrollable = block.scrollHeight > block.clientHeight;\r\n\r\n\t\tif (isHorizontallyScrollable) {\r\n\t\t\tblock.setAttribute('role', 'group');\r\n\t\t\tblock.setAttribute('aria-label', 'Horizontally scrollable element');\r\n\t\t\tblock.tabIndex = 0;\r\n\t\t} else if (isVerticallyScrollable) {\r\n\t\t\tblock.setAttribute('role', 'group');\r\n\t\t\tblock.setAttribute('aria-label', 'Vertically scrollable element');\r\n\t\t\tblock.tabIndex = 0;\r\n\t\t} else {\r\n\t\t\tblock.removeAttribute('role');\r\n\t\t\tblock.removeAttribute('aria-label');\r\n\t\t\tblock.removeAttribute('tabindex');\r\n\t\t}\r\n\t}\r\n}\r\n","export function 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","const layoutsClasses = [\r\n\t'layout-single',\r\n\t'layout-holy-grail',\r\n\t'layout-sidecar-left',\r\n\t'layout-sidecar-right'\r\n];\r\n\r\n// A function that removes all classes that begin with layout- on the html element\r\nfunction setLayoutClass(layoutToSet: string) {\r\n\tfor (const layoutClass of layoutsClasses) {\r\n\t\tdocument.documentElement.classList.remove(layoutClass);\r\n\t}\r\n\tdocument.documentElement.classList.add(layoutToSet);\r\n}\r\n\r\nexport function initLayoutPageControls() {\r\n\twindow.addEventListener('click', (e: MouseEvent) => {\r\n\t\tconst target =\r\n\t\t\te.target instanceof Element && (e.target.closest('[data-set-layout]') as HTMLElement);\r\n\t\tif (!target) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst layoutToSet: string = target.dataset.setLayout || 'not-found';\r\n\t\tif (!layoutsClasses.includes(layoutToSet)) {\r\n\t\t\tthrow new Error(\r\n\t\t\t\t'Attempting to set a layout class that does not match current list of available layouts'\r\n\t\t\t);\r\n\t\t}\r\n\t\tsetLayoutClass(layoutToSet);\r\n\t\tscrollTo({ behavior: 'smooth', top: target.getBoundingClientRect().top - 200 });\r\n\r\n\t\tconst setThemeButtons = Array.from(document.querySelectorAll('[data-set-layout]'));\r\n\t\tfor (const button of setThemeButtons) {\r\n\t\t\tbutton.setAttribute('aria-pressed', 'false');\r\n\t\t}\r\n\t\ttarget.setAttribute('aria-pressed', 'true');\r\n\t});\r\n\r\n\twindow.addEventListener('click', (e: MouseEvent) => {\r\n\t\tconst target =\r\n\t\t\te.target instanceof Element && (e.target.closest('[data-toggle-debug]') as HTMLElement);\r\n\t\tif (!target) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\ttarget.classList.toggle('button-filled');\r\n\t\tdocument.documentElement.classList.toggle('debug');\r\n\t\ttarget.setAttribute('aria-pressed', target.classList.contains('button-filled').toString());\r\n\t});\r\n}\r\n","export function handleFullScreenNavButton() {\r\n\taddEventListener('fullscreenchange', () => {\r\n\t\tconst isFullScreened = !document.fullscreenElement;\r\n\t\tconst navContent = document.getElementById('menu-content') as HTMLElement;\r\n\t\tconst nav = document.getElementById('menu');\r\n\t\tif (!nav) {\r\n\t\t\tthrow new Error('Need an element with an id of #nav before we can show a mobile menu');\r\n\t\t}\r\n\t\tif (!navContent) {\r\n\t\t\tthrow new Error('Trying to modify classes on #menu-content, which does not exist.');\r\n\t\t}\r\n\t\tconst innerNavButton = nav.querySelector('[data-full-screen-nav]') as HTMLElement;\r\n\t\tif (!innerNavButton) {\r\n\t\t\tthrow new Error(\r\n\t\t\t\t'Trying to modify classes on nav > [data-full-screen-nav], which does not exist.'\r\n\t\t\t);\r\n\t\t}\r\n\t\tconst headerTrigger = document.querySelector('#header [data-full-screen-nav]') as HTMLElement;\r\n\t\tif (!headerTrigger) {\r\n\t\t\tthrow new Error('Trying to focus #header > [data-full-screen-nav], which does not exist.');\r\n\t\t}\r\n\t\tif (isFullScreened) {\r\n\t\t\thandleNavCollapse(navContent, nav, innerNavButton, headerTrigger);\r\n\t\t}\r\n\t});\r\n\r\n\tdocument.addEventListener(\r\n\t\t'fullscreenchange',\r\n\t\t() => {\r\n\t\t\tconst nav = document.getElementById('menu');\r\n\t\t\tif (!nav) {\r\n\t\t\t\tthrow new Error('Need an element with an id of #nav before we can show a mobile menu');\r\n\t\t\t}\r\n\r\n\t\t\t// logic is odd because of timing, this will run after a full screen exits\r\n\t\t\tconst notFullScreen = document.fullscreenElement;\r\n\t\t\tif (notFullScreen) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst trigger = document.querySelector('[data-full-screen-nav]') as HTMLElement;\r\n\t\t\tif (!trigger) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst navContent = document.getElementById('menu-content') as HTMLElement;\r\n\t\t\tif (!navContent) {\r\n\t\t\t\tthrow new Error('Trying to modify classes on #menu-content, which does not exist.');\r\n\t\t\t}\r\n\r\n\t\t\tconst innerNavButton = nav.querySelector('[data-full-screen-nav]') as HTMLElement;\r\n\t\t\tif (!innerNavButton) {\r\n\t\t\t\tthrow new Error(\r\n\t\t\t\t\t'Trying to modify classes on nav > [data-full-screen-nav], which does not exist.'\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\thandleNavCollapse(navContent, nav, innerNavButton, trigger);\r\n\t\t},\r\n\t\tfalse\r\n\t);\r\n\r\n\twindow.addEventListener('click', (e: MouseEvent) => {\r\n\t\tconst trigger =\r\n\t\t\te.target instanceof HTMLElement &&\r\n\t\t\t(e.target.closest('[data-full-screen-nav]') as HTMLElement);\r\n\t\tif (!trigger) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst nav = document.getElementById('menu');\r\n\t\tif (!nav) {\r\n\t\t\tthrow new Error('Need an element with an id of #nav before we can show a mobile menu');\r\n\t\t}\r\n\r\n\t\tconst navContent = document.getElementById('menu-content') as HTMLElement;\r\n\t\tif (!navContent) {\r\n\t\t\tthrow new Error('Trying to modify classes on #menu-content, which does not exist.');\r\n\t\t}\r\n\r\n\t\tconst innerNavButton = nav.querySelector('[data-full-screen-nav]') as HTMLElement;\r\n\t\tif (!innerNavButton) {\r\n\t\t\tthrow new Error(\r\n\t\t\t\t'Trying to modify classes on nav > [data-full-screen-nav], which does not exist.'\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// logic is odd because of timing, this will run before a full screen is requested\r\n\t\tconst isFullScreened = document.fullscreenElement;\r\n\t\tif (isFullScreened) {\r\n\t\t\thandleNavCollapse(navContent, nav, innerNavButton, trigger);\r\n\t\t} else {\r\n\t\t\tnavContent.classList.remove('display-none');\r\n\t\t\tnavContent.classList.add('padding-inline-lg');\r\n\t\t\tnavContent.classList.add('padding-block-md');\r\n\t\t\tnav.dataset.isFullScreened = 'true';\r\n\t\t\tnav.style.overflowX = 'auto';\r\n\r\n\t\t\tvoid nav.requestFullscreen({ navigationUI: 'show' }).then(() => {\r\n\t\t\t\tinnerNavButton.classList.remove('display-none');\r\n\t\t\t\tinnerNavButton.focus();\r\n\t\t\t\tinnerNavButton.classList.add('burger-expanded');\r\n\t\t\t});\r\n\t\t}\r\n\t});\r\n}\r\n\r\nexport function handleNavCollapse(\r\n\tnavContent: HTMLElement,\r\n\tnav: HTMLElement,\r\n\tinnerNavButton: HTMLElement,\r\n\ttrigger: HTMLElement\r\n) {\r\n\tinnerNavButton.classList.add('display-none');\r\n\tinnerNavButton.classList.remove('burger-expanded');\r\n\tnavContent.classList.add('display-none');\r\n\tnav.dataset.isFullScreened = 'false';\r\n\tnavContent.classList.remove('padding-inline-lg');\r\n\tnavContent.classList.remove('padding-block-md');\r\n\r\n\tnav.style.cssText = '';\r\n\tvoid document.exitFullscreen().then(() => {\r\n\t\ttrigger.focus();\r\n\t});\r\n}\r\n"],"names":["a","$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","JSON","parse","__esModule","default","$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$49fdfce91965b93d","htmlClassList","document","documentElement","classList","docClass","remove","add","$d902694ff4349214$var$populateSubmittedFormData","formData","form","submittedFormDataExample","querySelector","dataMessage","stringify","fromEntries","firstChild","textContent","message","createElement","appendChild","$0ff9b3ba2ca1da31$var$snapScrollUpdating","$0ff9b3ba2ca1da31$var$updatePaginationState","parentElement","activeAnchor","Array","from","querySelectorAll","$48e0439ed1d493cd$var$nextId","$48e0439ed1d493cd$export$cfe7bad09682ff51","$63d6648ccf2da550$export$74d1e9f4105a478b","contentHasChanged","inputMaxLength","inputMinLength","inputRequired","notAuthenticated","notAuthorized","pleaseFixTheFollowingIssues","thereAreNoEditsToSubmit","tooManyRequests","weEncounteredAnUnexpectedError","$63d6648ccf2da550$export$eff824212e04ca3f","HTMLElement","constructor","submitting","initialData","FormData","toDispose","isDirty","commitTimeout","locStrings","validators","validateMinLength","validateRequired","validateMaxLength","commit","event","target","$63d6648ccf2da550$var$isValueElement","type","HTMLTextAreaElement","trim","HTMLInputElement","setDirty","canSave","isNew","closest","hideUnloadMessage","hasAttribute","noSubmit","connectedCallback","HTMLFormElement","getLocaleStrings","setAttribute","errorSummaryContainer","hidden","insertAdjacentElement","ownerDocument","readyState","addEventListener","subscribe","disconnectedCallback","dispose","assign","attributes","filter","startsWith","str","substring","replace","x","toUpperCase","listener","push","removeEventListener","initial","URLSearchParams","toString","current","handleEvent","handleSubmitEvent","handleUnloadEvent","clearValidationErrors","scheduleCommit","Error","navigate","href","$63d6648ccf2da550$export$7aa55fd9657ff73","navigationStep","location","search","includes","hash","state","history","pushState","title","pathname","reload","getAttribute","preventDefault","returnValue","currentTarget","showNoChangesMessage","validationErrorEvent","CustomEvent","detail","bubbles","dispatchEvent","isNavigating","$63d6648ccf2da550$var$setBusySubmitButton","result","validateForm","valid","url","$63d6648ccf2da550$var$handleSubmitButtonAction","submitter","HTMLButtonElement","formAction","action","params","URL","searchParams","headers","Headers","set","init","method","get","body","beforeSubmitEvent","callback","cancelable","cancelled","error","request","Request","response","fetch","ok","removeAttribute","errorAlert","errorList","getErrorAlert","errorText","innerText","status","focus","createErrorAlert","formLayout","alertId","className","alertText","id","append","lastElementChild","input","label","validity","valueMissing","customElements","localName","tooShort","minLength","length","tooLong","maxLength","displayValidity","scope","errors","innerHTML","customElements1","$63d6648ccf2da550$export$6fdbe88c041d855d","customElementList","elements","namedItem","forEach","element","contains","$63d6648ccf2da550$var$canValidate","isCustomElement","find","el","runBasicValidation","$63d6648ccf2da550$var$clearInputErrorBorder","$63d6648ccf2da550$export$e0ddcd48746f2dd9","$63d6648ccf2da550$export$2c9b3f539cb25b05","firstElementChild","clearValidationEvent","childElementCount","lastChild","$63d6648ccf2da550$export$236350842f3cd9bc","labels","nodeName","group","validator","child","ValidityState","isLoading","toggle","disabled","note","$63d6648ccf2da550$var$createErrorNote","$63d6648ccf2da550$export$52dd50fe747c85c8","after","$eb50081cb8c1c364$var$setScrollableAttrs","block","isHorizontallyScrollable","scrollWidth","clientWidth","isVerticallyScrollable","scrollHeight","clientHeight","tabIndex","$6affabdeba5460cf$var$handleFullscreen","main","getElementById","article","dataset","isFullScreened","style","cssText","fullscreenElement","exitFullscreen","overflow","display","overflowX","requestFullscreen","navigationUI","FormBehaviorElement","define","$97683cc1acd86126$var$layoutsClasses","$715792aaf7c0f6c4$export$12c591e78e1e6616","navContent","nav","innerNavButton","trigger","then","$f78667648d019a86$export$40f958b0338f176","prefersDarkTheme","matches","queryString","match","pl","decode","s","decodeURIComponent","undefined","urlParams","exec","$f78667648d019a86$export$4adfb56702530164","test","Element","themeToApply","$f78667648d019a86$export$dacf863dec39215c","i","findIndex","item","setTheme","dismissButton","dismissTarget","$4e0192595c049343$var$dismissElement","dismissAnimation","container","targetPopover","shadowRoot","activeElement","open","keyHandler","closePopovers","checkTarget","blurHandler","toLowerCase","memory","term","codeFilterInput","codeElt","split","results","line","join","iframe","warningIcon","prepend","capture","customEvent","Promise","resolve","snapScroll","snapScrollId","snapScrollNavItem","slide","scrollIntoView","behavior","inline","$0ff9b3ba2ca1da31$export$3f1703e6cdd6d4ee","slideContainer","slides","observer","IntersectionObserver","entries","isIntersecting","step","anchor","root","rootMargin","threshold","observe","selectors","headerTrigger","layoutToSet","setLayout","button","$97683cc1acd86126$var$setLayoutClass","layoutClass","scrollTo","top","getBoundingClientRect"],"version":3,"file":"index.f3906f68.js.map"}