@pnx-mixtape/mxds 0.1.0-rc.4 → 0.1.0-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/create-mxds-component/SKILL.md +77 -0
- package/DESIGN.md +595 -0
- package/README.md +2 -3
- package/dist/build/accordion.entry.js +2 -1
- package/dist/build/autocomplete.entry.js +1 -1
- package/dist/build/back-to-top.css +1 -0
- package/dist/build/back-to-top.entry.js +1 -0
- package/dist/build/base.css +1 -1
- package/dist/build/button.css +1 -1
- package/dist/build/card.css +1 -1
- package/dist/build/chunks/Accordion-Bqe8vTNR.js +44 -0
- package/dist/build/chunks/AccordionGroup-BYtoAFxg.js +47 -0
- package/dist/build/chunks/AccordionMobile-D517oXYZ.js +26 -0
- package/dist/build/chunks/Autocomplete-kRo8RNbC.js +135 -0
- package/dist/build/chunks/BackToTop-4M-Wl7z3.js +64 -0
- package/dist/build/chunks/ClosableAlert-CZ114JsL.js +55 -0
- package/dist/build/chunks/CookieConsent-wd8gQ2Oe.js +18 -0
- package/dist/build/chunks/Dialog-DoYcGqhW.js +48 -0
- package/dist/build/chunks/DropMenu-CSTZq0Zt.js +68 -0
- package/dist/build/chunks/FeedbackForm-BsL7fv8s.js +64 -0
- package/dist/build/chunks/Gallery-DqJPujX5.js +165 -0
- package/dist/build/chunks/GlobalToggle-7H3F1Wvc.js +82 -0
- package/dist/build/chunks/InPageNavigation-D7m3IN89.js +86 -0
- package/dist/build/chunks/Navigation-CRModT40.js +142 -0
- package/dist/build/chunks/Popover-CiTAftNU.js +30 -0
- package/dist/build/chunks/Sticky-C1H8MNqK.js +51 -0
- package/dist/build/chunks/Tabs-BJD3kABL.js +160 -0
- package/dist/build/chunks/Translate-yAgySwet.js +46 -0
- package/dist/build/chunks/cookie-compliance-CG6x-TcV.js +119 -0
- package/dist/build/chunks/enums-BrHxPZZ_.js +36 -0
- package/dist/build/chunks/polyfills-D-qh1a_2.js +33 -0
- package/dist/build/chunks/utilities-B9mNRs7V.js +255 -0
- package/dist/build/content-block.css +1 -1
- package/dist/build/cookie-consent.entry.js +1 -1
- package/dist/build/dialog.entry.js +1 -1
- package/dist/build/drop-menu.entry.js +1 -1
- package/dist/build/elements.js +147 -1
- package/dist/build/feedback-form.css +1 -0
- package/dist/build/feedback-form.entry.js +1 -0
- package/dist/build/filters.entry.js +145 -1
- package/dist/build/form.css +1 -1
- package/dist/build/gallery.entry.js +1 -1
- package/dist/build/global-alert.entry.js +1 -1
- package/dist/build/header.css +1 -1
- package/dist/build/header.entry.js +1 -1
- package/dist/build/icon.css +1 -1
- package/dist/build/in-page-navigation.entry.js +1 -1
- package/dist/build/navigation.css +1 -1
- package/dist/build/navigation.entry.js +1 -1
- package/dist/build/pagination.css +1 -1
- package/dist/build/popover.entry.js +1 -1
- package/dist/build/react.js +2291 -1
- package/dist/build/side-navigation.css +1 -1
- package/dist/build/sidebar.css +1 -1
- package/dist/build/sticky.entry.js +1 -1
- package/dist/build/tabs.entry.js +1 -1
- package/dist/build/translate.css +1 -0
- package/dist/build/translate.entry.js +1 -0
- package/dist/build/utility-list.entry.js +53 -1
- package/dist/types/Component/BackToTop/BackToTop.d.ts +20 -0
- package/dist/types/Component/BackToTop/BackToTop.d.ts.map +1 -0
- package/dist/types/Component/BackToTop/Elements/BackToTop.d.ts +27 -0
- package/dist/types/Component/BackToTop/Elements/BackToTop.d.ts.map +1 -0
- package/dist/types/Component/BackToTop/back-to-top.entry.d.ts +2 -0
- package/dist/types/Component/BackToTop/back-to-top.entry.d.ts.map +1 -0
- package/dist/types/Component/DropMenu/DropMenu.d.ts +2 -1
- package/dist/types/Component/DropMenu/DropMenu.d.ts.map +1 -1
- package/dist/types/Component/Navigation/Elements/Navigation.d.ts +2 -3
- package/dist/types/Component/Navigation/Elements/Navigation.d.ts.map +1 -1
- package/dist/types/Component/SideNavigation/Components/SideNavigationTree.d.ts +3 -3
- package/dist/types/Component/SideNavigation/Components/SideNavigationTree.d.ts.map +1 -1
- package/dist/types/Component/SideNavigation/SideNavigation.d.ts +3 -1
- package/dist/types/Component/SideNavigation/SideNavigation.d.ts.map +1 -1
- package/dist/types/Component/Tabs/Components/TabDropMenu.d.ts.map +1 -1
- package/dist/types/Component/Tabs/Elements/Tabs.d.ts.map +1 -1
- package/dist/types/Component/Translate/Elements/Translate.d.ts +23 -0
- package/dist/types/Component/Translate/Elements/Translate.d.ts.map +1 -0
- package/dist/types/Component/Translate/Translate.d.ts +37 -0
- package/dist/types/Component/Translate/Translate.d.ts.map +1 -0
- package/dist/types/Component/Translate/languages.d.ts +11 -0
- package/dist/types/Component/Translate/languages.d.ts.map +1 -0
- package/dist/types/Component/Translate/translate.entry.d.ts +2 -0
- package/dist/types/Component/Translate/translate.entry.d.ts.map +1 -0
- package/dist/types/Form/FeedbackForm/Elements/FeedbackForm.d.ts +37 -0
- package/dist/types/Form/FeedbackForm/Elements/FeedbackForm.d.ts.map +1 -0
- package/dist/types/Form/FeedbackForm/FeedbackForm.d.ts +36 -0
- package/dist/types/Form/FeedbackForm/FeedbackForm.d.ts.map +1 -0
- package/dist/types/Form/FeedbackForm/feedback-form.entry.d.ts +2 -0
- package/dist/types/Form/FeedbackForm/feedback-form.entry.d.ts.map +1 -0
- package/dist/types/Utility/Elements/google-translate-widget.d.ts +91 -0
- package/dist/types/Utility/Elements/google-translate-widget.d.ts.map +1 -0
- package/dist/types/Utility/utilities.d.ts +2 -0
- package/dist/types/Utility/utilities.d.ts.map +1 -1
- package/dist/types/elements.d.ts +3 -0
- package/dist/types/elements.d.ts.map +1 -1
- package/dist/types/enums.d.ts +3 -1
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/react.d.ts +3 -0
- package/dist/types/react.d.ts.map +1 -1
- package/dist/types/tokens.d.ts +1 -0
- package/dist/types/tokens.d.ts.map +1 -1
- package/docs/API.md +1215 -0
- package/docs/CSSGuidelines.md +893 -0
- package/docs/CodeQuality.md +940 -0
- package/docs/ComponentArchitecture.md +714 -0
- package/docs/Contributing.md +626 -0
- package/docs/MemoryManagement.md +598 -0
- package/docs/Migrations.md +6 -0
- package/docs/README.md +100 -0
- package/docs/Security.md +444 -0
- package/docs/Testing.md +739 -0
- package/docs/Troubleshooting.md +674 -0
- package/package.json +9 -6
- package/src/Atom/Button/Button.tsx +1 -1
- package/src/Atom/Button/__snapshots__/Button.stories.tsx.snap +2 -2
- package/src/Atom/Button/_buttons.css +1 -0
- package/src/Atom/Icon/README.md +1 -1
- package/src/Atom/Icon/_icon.css +1 -0
- package/src/Atom/Icon/images/thumb.svg +1 -0
- package/src/Atom/Link/_links.css +1 -0
- package/src/Atom/Media/__snapshots__/Media.stories.ts.snap +4 -9
- package/src/Atom/Media/media.twig +4 -5
- package/src/Component/BackToTop/BackToTop.stories.ts +127 -0
- package/src/Component/BackToTop/BackToTop.stories.tsx +53 -0
- package/src/Component/BackToTop/BackToTop.tsx +120 -0
- package/src/Component/BackToTop/Elements/BackToTop.ts +119 -0
- package/src/Component/BackToTop/README.md +164 -0
- package/src/Component/BackToTop/__snapshots__/BackToTop.stories.ts.snap +24 -0
- package/src/Component/BackToTop/__snapshots__/BackToTop.stories.tsx.snap +3 -0
- package/src/Component/BackToTop/back-to-top.css +70 -0
- package/src/Component/BackToTop/back-to-top.entry.js +1 -0
- package/src/Component/BackToTop/back-to-top.twig +26 -0
- package/src/Component/Card/Components/CardContent.tsx +1 -1
- package/src/Component/Card/Components/CardMedia.tsx +1 -1
- package/src/Component/Card/__snapshots__/Card.stories.tsx.snap +3 -3
- package/src/Component/Card/card.css +1 -1
- package/src/Component/Carousel/Carousel.stories.ts +66 -36
- package/src/Component/Carousel/__snapshots__/Carousel.stories.tsx.snap +5 -5
- package/src/Component/ContentBlock/Components/ContentBlockMedia.tsx +1 -1
- package/src/Component/ContentBlock/content-block.css +1 -1
- package/src/Component/DropMenu/DropMenu.stories.ts +21 -2
- package/src/Component/DropMenu/DropMenu.tsx +14 -4
- package/src/Component/DropMenu/__snapshots__/DropMenu.stories.ts.snap +3 -3
- package/src/Component/DropMenu/__snapshots__/DropMenu.stories.tsx.snap +2 -2
- package/src/Component/DropMenu/drop-menu.twig +7 -1
- package/src/Component/HeroBanner/__snapshots__/HeroBanner.stories.tsx.snap +1 -1
- package/src/Component/InPageNavigation/__snapshots__/InPageNavigation.stories.ts.snap +48 -13
- package/src/Component/InPageNavigation/in-page-navigation.twig +4 -6
- package/src/Component/ListItem/Components/ListItemMedia.tsx +1 -1
- package/src/Component/Navigation/Elements/Navigation.ts +25 -29
- package/src/Component/Navigation/README.md +11 -10
- package/src/Component/Navigation/__snapshots__/Navigation.stories.ts.snap +8 -8
- package/src/Component/Navigation/_navigation-dropdown.css +9 -11
- package/src/Component/Navigation/_navigation-mega.css +5 -11
- package/src/Component/Navigation/_navigation.css +5 -3
- package/src/Component/Navigation/menu.twig +1 -1
- package/src/Component/Navigation/navigation.twig +0 -1
- package/src/Component/Pagination/Pagination.stories.ts +57 -27
- package/src/Component/Pagination/pagination.css +16 -7
- package/src/Component/Popover/__snapshots__/Popover.stories.tsx.snap +3 -3
- package/src/Component/SideNavigation/Components/SideNavigationTree.tsx +68 -24
- package/src/Component/SideNavigation/README.md +78 -32
- package/src/Component/SideNavigation/SideNavigation.stories.ts +41 -2
- package/src/Component/SideNavigation/SideNavigation.stories.tsx +31 -0
- package/src/Component/SideNavigation/SideNavigation.tsx +13 -3
- package/src/Component/SideNavigation/__snapshots__/SideNavigation.stories.ts.snap +87 -3
- package/src/Component/SideNavigation/__snapshots__/SideNavigation.stories.tsx.snap +2 -0
- package/src/Component/SideNavigation/side-navigation.css +3 -3
- package/src/Component/SideNavigation/side-navigation.twig +10 -3
- package/src/Component/Tabs/Components/TabDropMenu.tsx +7 -1
- package/src/Component/Tabs/Elements/Tabs.ts +13 -3
- package/src/Component/Tabs/Tabs.stories.ts +33 -12
- package/src/Component/Tabs/Tabs.stories.tsx +28 -14
- package/src/Component/Tabs/__snapshots__/Tabs.stories.ts.snap +3 -3
- package/src/Component/Tabs/__snapshots__/Tabs.stories.tsx.snap +2 -2
- package/src/Component/Translate/Elements/Translate.ts +76 -0
- package/src/Component/Translate/README.md +285 -0
- package/src/Component/Translate/Translate.stories.ts +87 -0
- package/src/Component/Translate/Translate.stories.tsx +77 -0
- package/src/Component/Translate/Translate.tsx +213 -0
- package/src/Component/Translate/__snapshots__/Translate.stories.ts.snap +18 -0
- package/src/Component/Translate/__snapshots__/Translate.stories.tsx.snap +3 -0
- package/src/Component/Translate/languages.ts +39 -0
- package/src/Component/Translate/translate.css +62 -0
- package/src/Component/Translate/translate.entry.js +1 -0
- package/src/Component/Translate/translate.twig +44 -0
- package/src/Form/Autocomplete/Autocomplete.stories.tsx +2 -1
- package/src/Form/FeedbackForm/Elements/FeedbackForm.ts +122 -0
- package/src/Form/FeedbackForm/FeedbackForm.stories.ts +99 -0
- package/src/Form/FeedbackForm/FeedbackForm.stories.tsx +73 -0
- package/src/Form/FeedbackForm/FeedbackForm.tsx +196 -0
- package/src/Form/FeedbackForm/README.md +233 -0
- package/src/Form/FeedbackForm/__snapshots__/FeedbackForm.stories.ts.snap +125 -0
- package/src/Form/FeedbackForm/__snapshots__/FeedbackForm.stories.tsx.snap +5 -0
- package/src/Form/FeedbackForm/feedback-form.css +74 -0
- package/src/Form/FeedbackForm/feedback-form.entry.js +1 -0
- package/src/Form/FeedbackForm/feedback-form.twig +80 -0
- package/src/Form/form.css +17 -19
- package/src/Introduction.mdx +1 -1
- package/src/Layout/Footer/__snapshots__/Footer.stories.ts.snap +3 -3
- package/src/Layout/Header/Components/GlobalToggle.tsx +1 -1
- package/src/Layout/Header/Header.stories.ts +53 -48
- package/src/Layout/Header/Header.stories.tsx +35 -22
- package/src/Layout/Header/Header.tsx +2 -2
- package/src/Layout/Header/__snapshots__/Header.stories.ts.snap +18 -14
- package/src/Layout/Header/__snapshots__/Header.stories.tsx.snap +2 -2
- package/src/Layout/Header/_toggles.css +7 -7
- package/src/Layout/Page/__snapshots__/Page.stories.tsx.snap +1 -1
- package/src/Layout/Sidebar/sidebar.css +10 -3
- package/src/Utility/Elements/google-translate-widget.ts +293 -0
- package/src/Utility/global.d.ts +4 -0
- package/src/Utility/utilities.ts +2 -0
- package/src/_custom-media.css +2 -0
- package/src/elements.ts +3 -0
- package/src/enums.ts +2 -0
- package/src/react.ts +3 -0
- package/src/tokens.js +1 -0
- package/dist/build/chunks/Accordion-GN0sME4W.js +0 -1
- package/dist/build/chunks/AccordionGroup-Bzqp5__q.js +0 -1
- package/dist/build/chunks/AccordionMobile-DG5jSe8Q.js +0 -1
- package/dist/build/chunks/Autocomplete-B4RtkAyh.js +0 -1
- package/dist/build/chunks/ClosableAlert-DEhj8Nxm.js +0 -1
- package/dist/build/chunks/CookieConsent-BkCMRVST.js +0 -1
- package/dist/build/chunks/Dialog-Haahn-Yn.js +0 -1
- package/dist/build/chunks/DropMenu-1baQc8Yc.js +0 -1
- package/dist/build/chunks/Gallery-D8NGXy2Q.js +0 -1
- package/dist/build/chunks/GlobalToggle-B52fdBQu.js +0 -1
- package/dist/build/chunks/InPageNavigation-Dyn2TR-N.js +0 -1
- package/dist/build/chunks/Navigation-hOrfLq7h.js +0 -1
- package/dist/build/chunks/Popover-Cxg-s5Jn.js +0 -1
- package/dist/build/chunks/Sticky-BGCuuEJK.js +0 -1
- package/dist/build/chunks/Tabs-DYy1YTdU.js +0 -15
- package/dist/build/chunks/cookie-compliance-Bbm-0vpj.js +0 -1
- package/dist/build/chunks/enums-DLV_1NAf.js +0 -1
- package/dist/build/chunks/polyfills-C7pRt54M.js +0 -1
- package/dist/build/chunks/utilities-_Bq3TxAQ.js +0 -1
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Drives Google's "Website Translator" widget from custom UI, instead
|
|
3
|
+
* of Google's own default banner. Shared, framework-agnostic logic consumed
|
|
4
|
+
* identically by `Component/Translate`'s Web Component and its React
|
|
5
|
+
* component (the "singleton delegation" pattern also used by
|
|
6
|
+
* `CookieCompliance`).
|
|
7
|
+
*
|
|
8
|
+
* This is the only mxds utility that loads a third-party runtime script
|
|
9
|
+
* (`translate.google.com`) — see the Translate README's "Google Translate
|
|
10
|
+
* quirks" section for the caveats that come with that.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { createElement } from "../utilities"
|
|
14
|
+
|
|
15
|
+
const DEFAULT_SCRIPT_URL = "https://translate.google.com/translate_a/element.js?cb=translateInit"
|
|
16
|
+
const DEFAULT_STORAGE_KEY = "googtrans"
|
|
17
|
+
const MOUNT_ID = "mx-translate-google-element"
|
|
18
|
+
|
|
19
|
+
export type GoogleTranslateWidgetNoticeConfig = {
|
|
20
|
+
/** Where to insert the notice. Defaults to the top of `<body>` if omitted. */
|
|
21
|
+
anchorSelector?: string
|
|
22
|
+
/** Insertion position relative to the anchor (standard `insertAdjacentElement` positions). Defaults to `afterend` when `anchorSelector` is set, `afterbegin` otherwise. */
|
|
23
|
+
position?: InsertPosition
|
|
24
|
+
/** Copy shown once a non-default language is active. */
|
|
25
|
+
content: string
|
|
26
|
+
/** Copy shown instead, on a blocked path. */
|
|
27
|
+
blockedContent?: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type GoogleTranslateWidgetConfig = {
|
|
31
|
+
defaultLanguage: string
|
|
32
|
+
blockedPaths?: string[]
|
|
33
|
+
scriptUrl?: string
|
|
34
|
+
storageKey?: string
|
|
35
|
+
/**
|
|
36
|
+
* Updates the trigger's visible language code + `aria-label` to reflect the active language.
|
|
37
|
+
* On by default — pass `false` to keep the trigger static instead (e.g. always "Language"),
|
|
38
|
+
* which some sites prefer.
|
|
39
|
+
*/
|
|
40
|
+
updateTriggerLabel?: boolean
|
|
41
|
+
/**
|
|
42
|
+
* Notice banner shown once translated — entirely opt-in, omit to never create one. Created via
|
|
43
|
+
* JS (not pre-rendered) specifically so it can be inserted elsewhere on the page — e.g. below a
|
|
44
|
+
* header that only has room for the trigger itself, rather than wherever `<mx-translate>` is
|
|
45
|
+
* placed in the DOM.
|
|
46
|
+
*/
|
|
47
|
+
notice?: GoogleTranslateWidgetNoticeConfig
|
|
48
|
+
onOpen?: () => void
|
|
49
|
+
onClose?: () => void
|
|
50
|
+
onLanguageChange?: (code: string) => void
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export default class GoogleTranslateWidget {
|
|
54
|
+
root: HTMLElement
|
|
55
|
+
config: Required<Pick<GoogleTranslateWidgetConfig, "defaultLanguage">> &
|
|
56
|
+
Required<
|
|
57
|
+
Pick<
|
|
58
|
+
GoogleTranslateWidgetConfig,
|
|
59
|
+
"blockedPaths" | "scriptUrl" | "storageKey" | "updateTriggerLabel"
|
|
60
|
+
>
|
|
61
|
+
> &
|
|
62
|
+
Pick<GoogleTranslateWidgetConfig, "notice" | "onOpen" | "onClose" | "onLanguageChange">
|
|
63
|
+
controller?: AbortController
|
|
64
|
+
/** The most recently requested language — lets a slow/earlier `driveSelect` call notice it's been superseded and skip applying a stale value. */
|
|
65
|
+
pendingCode?: string
|
|
66
|
+
noticeEl?: HTMLElement
|
|
67
|
+
blockedNoticeEl?: HTMLElement
|
|
68
|
+
|
|
69
|
+
constructor(root: HTMLElement, config: GoogleTranslateWidgetConfig) {
|
|
70
|
+
this.root = root
|
|
71
|
+
// Per-field ?? rather than a blanket `...config` spread — an explicit
|
|
72
|
+
// `undefined` value (e.g. an unset optional React prop passed straight
|
|
73
|
+
// through) would otherwise silently overwrite these defaults.
|
|
74
|
+
this.config = {
|
|
75
|
+
defaultLanguage: config.defaultLanguage,
|
|
76
|
+
blockedPaths: config.blockedPaths ?? [],
|
|
77
|
+
scriptUrl: config.scriptUrl ?? DEFAULT_SCRIPT_URL,
|
|
78
|
+
storageKey: config.storageKey ?? DEFAULT_STORAGE_KEY,
|
|
79
|
+
updateTriggerLabel: config.updateTriggerLabel ?? true,
|
|
80
|
+
notice: config.notice,
|
|
81
|
+
onOpen: config.onOpen,
|
|
82
|
+
onClose: config.onClose,
|
|
83
|
+
onLanguageChange: config.onLanguageChange,
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
init(): void {
|
|
88
|
+
this.controller = new AbortController()
|
|
89
|
+
window.addEventListener("pageshow", this.handlePageshow, { signal: this.controller.signal })
|
|
90
|
+
|
|
91
|
+
const stored = this.getStoredLanguage()
|
|
92
|
+
if (!stored || stored === this.config.defaultLanguage) return
|
|
93
|
+
|
|
94
|
+
this.updateActiveItem(stored)
|
|
95
|
+
if (this.config.updateTriggerLabel) this.updateTriggerLabel(stored)
|
|
96
|
+
this.updateNotice(stored)
|
|
97
|
+
if (!this.isPathBlocked()) {
|
|
98
|
+
this.pendingCode = stored
|
|
99
|
+
this.loadScript()
|
|
100
|
+
.then(() => this.driveSelect(stored))
|
|
101
|
+
.catch(() => {})
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
destroy(): void {
|
|
106
|
+
this.controller?.abort()
|
|
107
|
+
this.noticeEl?.remove()
|
|
108
|
+
this.blockedNoticeEl?.remove()
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** Called when the consumer chooses a language from the menu. */
|
|
112
|
+
setLanguage(code: string): void {
|
|
113
|
+
this.updateActiveItem(code)
|
|
114
|
+
if (this.config.updateTriggerLabel) this.updateTriggerLabel(code)
|
|
115
|
+
this.updateNotice(code)
|
|
116
|
+
|
|
117
|
+
if (this.isPathBlocked()) return
|
|
118
|
+
|
|
119
|
+
this.persist(code)
|
|
120
|
+
this.pendingCode = code
|
|
121
|
+
this.loadScript()
|
|
122
|
+
.then(() => this.driveSelect(code))
|
|
123
|
+
.catch(() => {})
|
|
124
|
+
this.config.onLanguageChange?.(code)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
getCurrentLanguage(): string {
|
|
128
|
+
return this.getStoredLanguage() ?? this.config.defaultLanguage
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
isPathBlocked(pathname: string = window.location.pathname): boolean {
|
|
132
|
+
return this.config.blockedPaths.some(path => pathname.startsWith(path))
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
private getStoredLanguage(): string | null {
|
|
136
|
+
try {
|
|
137
|
+
// Google's own format: "/<source>/<target>".
|
|
138
|
+
return window.localStorage.getItem(this.config.storageKey)?.split("/")[2] || null
|
|
139
|
+
} catch {
|
|
140
|
+
return null
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
private persist(code: string): void {
|
|
145
|
+
try {
|
|
146
|
+
window.localStorage.setItem(this.config.storageKey, `/${this.config.defaultLanguage}/${code}`)
|
|
147
|
+
} catch {
|
|
148
|
+
// Storage unavailable (private browsing, quota) — selection still applies this page view.
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
private getLanguageItem(code: string): HTMLAnchorElement | null {
|
|
153
|
+
return this.root.querySelector<HTMLAnchorElement>(`[data-language="${code}"]`)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
private updateActiveItem(code: string): void {
|
|
157
|
+
this.root.querySelectorAll<HTMLAnchorElement>("[data-language]").forEach(item => {
|
|
158
|
+
if (item.dataset.language === code) item.setAttribute("aria-current", "true")
|
|
159
|
+
else item.removeAttribute("aria-current")
|
|
160
|
+
})
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private updateTriggerLabel(code: string): void {
|
|
164
|
+
const trigger = this.root.querySelector<HTMLButtonElement>("[popovertarget]")
|
|
165
|
+
if (!trigger) return
|
|
166
|
+
const label = trigger.dataset.label || "Language"
|
|
167
|
+
const languageLabel = this.getLanguageItem(code)?.textContent?.trim() ?? code
|
|
168
|
+
trigger.setAttribute("aria-label", `${label}: ${languageLabel}, ${code.toUpperCase()}`)
|
|
169
|
+
const codeEl = trigger.querySelector(".mx-translate__code")
|
|
170
|
+
if (codeEl) codeEl.textContent = code.toUpperCase()
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Creates the notice element(s) via JS, on first use, and inserts them at the configured
|
|
175
|
+
* anchor point — which may be anywhere on the page, not necessarily near `<mx-translate>`
|
|
176
|
+
* itself (e.g. the trigger lives in the header, but the notice should appear below it, or at
|
|
177
|
+
* the top of the page). Matches the original bond_theme implementation's approach.
|
|
178
|
+
*
|
|
179
|
+
* Styled as a (non-dismissible) `GlobalAlert` — a site-wide banner is the right fit for "this
|
|
180
|
+
* page is machine-translated", not a page-scoped `InPageAlert`. There's no close button and no
|
|
181
|
+
* `<mx-closable-alert>` wrapper; it reappears for as long as the active language warrants it,
|
|
182
|
+
* same as the rest of this component's state.
|
|
183
|
+
*/
|
|
184
|
+
private createNotice(): void {
|
|
185
|
+
if (!this.config.notice || this.noticeEl) return
|
|
186
|
+
const { anchorSelector, position, content, blockedContent } = this.config.notice
|
|
187
|
+
const anchor = anchorSelector ? document.querySelector(anchorSelector) : document.body
|
|
188
|
+
if (!anchor) return
|
|
189
|
+
const resolvedPosition: InsertPosition =
|
|
190
|
+
position ?? (anchorSelector ? "afterend" : "afterbegin")
|
|
191
|
+
|
|
192
|
+
this.noticeEl = createElement(
|
|
193
|
+
`<div class="mx-global-alert mx-global-alert--light mx-page mx-translate__notice" role="status" aria-live="polite" aria-atomic="true" data-translate-notice hidden><div class="mx-global-alert__inner"><div class="mx-global-alert__content">${content}</div></div></div>`,
|
|
194
|
+
) as HTMLElement
|
|
195
|
+
if (this.noticeEl) anchor.insertAdjacentElement(resolvedPosition, this.noticeEl)
|
|
196
|
+
|
|
197
|
+
if (blockedContent) {
|
|
198
|
+
this.blockedNoticeEl = createElement(
|
|
199
|
+
`<div class="mx-global-alert mx-global-alert--critical mx-page mx-translate__notice" role="alert" aria-live="assertive" aria-atomic="true" data-translate-notice-blocked hidden><div class="mx-global-alert__inner"><div class="mx-global-alert__content">${blockedContent}</div></div></div>`,
|
|
200
|
+
) as HTMLElement
|
|
201
|
+
if (this.blockedNoticeEl) anchor.insertAdjacentElement(resolvedPosition, this.blockedNoticeEl)
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
private updateNotice(code: string): void {
|
|
206
|
+
if (!this.config.notice) return
|
|
207
|
+
this.createNotice()
|
|
208
|
+
const isTranslated = code !== this.config.defaultLanguage
|
|
209
|
+
const blocked = this.isPathBlocked()
|
|
210
|
+
this.noticeEl?.toggleAttribute("hidden", !(isTranslated && !blocked))
|
|
211
|
+
this.blockedNoticeEl?.toggleAttribute("hidden", !(isTranslated && blocked))
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
private loadScript(): Promise<void> {
|
|
215
|
+
if (window.mxTranslateScriptPromise) return window.mxTranslateScriptPromise
|
|
216
|
+
|
|
217
|
+
window.mxTranslateScriptPromise = new Promise((resolve, reject) => {
|
|
218
|
+
window.translateInit = () => {
|
|
219
|
+
// oxlint-disable-next-line no-new -- side-effecting Google API: renders into the mount point, returns nothing useful
|
|
220
|
+
new window.google.translate.TranslateElement(
|
|
221
|
+
{ pageLanguage: this.config.defaultLanguage, autoDisplay: false },
|
|
222
|
+
this.getMountPoint(),
|
|
223
|
+
)
|
|
224
|
+
resolve()
|
|
225
|
+
}
|
|
226
|
+
const script = document.createElement("script")
|
|
227
|
+
script.src = this.config.scriptUrl
|
|
228
|
+
script.addEventListener("error", () => reject(new Error("Failed to load Google Translate")))
|
|
229
|
+
document.body.appendChild(script)
|
|
230
|
+
})
|
|
231
|
+
|
|
232
|
+
return window.mxTranslateScriptPromise
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
private getMountPoint(): string {
|
|
236
|
+
let mount = document.getElementById(MOUNT_ID)
|
|
237
|
+
if (!mount) {
|
|
238
|
+
mount = document.createElement("div")
|
|
239
|
+
mount.id = MOUNT_ID
|
|
240
|
+
mount.style.display = "none"
|
|
241
|
+
document.body.appendChild(mount)
|
|
242
|
+
}
|
|
243
|
+
return MOUNT_ID
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Waits for Google's own hidden `<select>` to exist *and* contain an `<option>` for `code` —
|
|
248
|
+
* both are populated asynchronously after `TranslateElement` construction, on Google's own
|
|
249
|
+
* timeline. Setting `select.value` to a code with no matching `<option>` yet is a silent DOM
|
|
250
|
+
* no-op (the assignment is simply ignored), so waiting for only the `<select>` itself isn't
|
|
251
|
+
* enough — that's what let `driveSelect` silently fail to translate.
|
|
252
|
+
*/
|
|
253
|
+
private waitForComboBoxOption(code: string, attempts = 20): Promise<HTMLSelectElement | null> {
|
|
254
|
+
return new Promise(resolve => {
|
|
255
|
+
const check = (remaining: number): void => {
|
|
256
|
+
const select = document.querySelector<HTMLSelectElement>(".goog-te-combo")
|
|
257
|
+
if (select?.querySelector(`option[value="${code}"]`)) {
|
|
258
|
+
resolve(select)
|
|
259
|
+
return
|
|
260
|
+
}
|
|
261
|
+
if (remaining <= 0) {
|
|
262
|
+
resolve(null)
|
|
263
|
+
return
|
|
264
|
+
}
|
|
265
|
+
setTimeout(() => check(remaining - 1), 100)
|
|
266
|
+
}
|
|
267
|
+
check(attempts)
|
|
268
|
+
})
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
private async driveSelect(code: string): Promise<void> {
|
|
272
|
+
const select = await this.waitForComboBoxOption(code)
|
|
273
|
+
// A newer selection arrived while this one was still waiting on the combo box — drop it
|
|
274
|
+
// rather than applying a stale value and firing a `change` event out of order.
|
|
275
|
+
if (this.pendingCode !== code) return
|
|
276
|
+
if (!select) return
|
|
277
|
+
select.value = code
|
|
278
|
+
select.dispatchEvent(new Event("change"))
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/** Google's translator instance doesn't survive the back/forward cache — re-inject on restore. */
|
|
282
|
+
private handlePageshow = (event: PageTransitionEvent): void => {
|
|
283
|
+
if (!event.persisted) return
|
|
284
|
+
window.mxTranslateScriptPromise = undefined
|
|
285
|
+
|
|
286
|
+
const stored = this.getStoredLanguage()
|
|
287
|
+
if (!stored || stored === this.config.defaultLanguage || this.isPathBlocked()) return
|
|
288
|
+
this.pendingCode = stored
|
|
289
|
+
this.loadScript()
|
|
290
|
+
.then(() => this.driveSelect(stored))
|
|
291
|
+
.catch(() => {})
|
|
292
|
+
}
|
|
293
|
+
}
|
package/src/Utility/global.d.ts
CHANGED
|
@@ -14,6 +14,10 @@ declare global {
|
|
|
14
14
|
}
|
|
15
15
|
CookieCompliance?: CookieCompliance
|
|
16
16
|
once?: (name: string, selector: string, context?: any) => NodeListOf<HTMLElement>
|
|
17
|
+
// Google's Website Translator widget — see Utility/Elements/google-translate-widget.ts
|
|
18
|
+
google?: any
|
|
19
|
+
translateInit?: () => void
|
|
20
|
+
mxTranslateScriptPromise?: Promise<void>
|
|
17
21
|
}
|
|
18
22
|
}
|
|
19
23
|
|
package/src/Utility/utilities.ts
CHANGED
|
@@ -7,6 +7,8 @@ export { default as DisclosureWidget } from "./Elements/disclosure-widget"
|
|
|
7
7
|
export type { DisclosureWidgetEvent } from "./Elements/disclosure-widget"
|
|
8
8
|
export { default as Keyboard } from "./Elements/keyboard"
|
|
9
9
|
export { default as CookieCompliance } from "./Elements/cookie-compliance"
|
|
10
|
+
export { default as GoogleTranslateWidget } from "./Elements/google-translate-widget"
|
|
11
|
+
export type { GoogleTranslateWidgetConfig } from "./Elements/google-translate-widget"
|
|
10
12
|
export { default as IntersectionLoader } from "./Elements/io-loader"
|
|
11
13
|
export { default as BreakpointLoader } from "./Elements/breakpoint-loader"
|
|
12
14
|
export { validators }
|
package/src/_custom-media.css
CHANGED
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
@custom-media --global-nav-down (width < token("breakpoint.globalNav"));
|
|
20
20
|
@custom-media --collapse-card-up (width >= token("breakpoint.collapsedCard"));
|
|
21
21
|
@custom-media --collapse-card-down (token("breakpoint.xxs") < width < token("breakpoint.collapsedCard"));
|
|
22
|
+
@custom-media --sidebar-up (width >= token("breakpoint.globalNav"));
|
|
23
|
+
@custom-media --sidebar-down (width < token("breakpoint.globalNav"));
|
|
22
24
|
|
|
23
25
|
/* Util media queries */
|
|
24
26
|
@custom-media --touch (pointer: fine);
|
package/src/elements.ts
CHANGED
|
@@ -14,4 +14,7 @@ export { default as Carousel } from "./Component/Carousel/Elements/Carousel"
|
|
|
14
14
|
export { default as Autocomplete } from "./Form/Autocomplete/Elements/Autocomplete"
|
|
15
15
|
export { default as CookieConsent } from "./Component/CookieConsent/Elements/CookieConsent"
|
|
16
16
|
export { default as Gallery } from "./Component/Gallery/Elements/Gallery"
|
|
17
|
+
export { default as BackToTop } from "./Component/BackToTop/Elements/BackToTop"
|
|
18
|
+
export { default as FeedbackForm } from "./Form/FeedbackForm/Elements/FeedbackForm"
|
|
19
|
+
export { default as Translate } from "./Component/Translate/Elements/Translate"
|
|
17
20
|
export * from "./Utility/utilities"
|
package/src/enums.ts
CHANGED
package/src/react.ts
CHANGED
|
@@ -89,11 +89,14 @@ export { default as CookieConsent } from "./Component/CookieConsent/CookieConsen
|
|
|
89
89
|
export { default as Gallery } from "./Component/Gallery/Gallery"
|
|
90
90
|
export { default as GalleryTrigger } from "./Component/Gallery/Components/GalleryTrigger"
|
|
91
91
|
export { default as ProgressIndicator } from "./Component/ProgressIndicator/ProgressIndicator"
|
|
92
|
+
export { default as BackToTop } from "./Component/BackToTop/BackToTop"
|
|
93
|
+
export { default as Translate } from "./Component/Translate/Translate"
|
|
92
94
|
export { default as FormSearch } from "./Form/Search/FormSearch"
|
|
93
95
|
export { default as Autocomplete } from "./Form/Autocomplete/Autocomplete"
|
|
94
96
|
export { default as CheckboxCard } from "./Form/CheckboxCard/CheckboxCard"
|
|
95
97
|
export { default as RadioCard } from "./Form/RadioCard/RadioCard"
|
|
96
98
|
export { default as OneTimeCode } from "./Form/OneTimeCode/OneTimeCode"
|
|
99
|
+
export { default as FeedbackForm } from "./Form/FeedbackForm/FeedbackForm"
|
|
97
100
|
export { default as Masthead } from "./Layout/Masthead/Masthead"
|
|
98
101
|
export { default as Sidebar } from "./Layout/Sidebar/Sidebar"
|
|
99
102
|
export { default as Footer } from "./Layout/Footer/Footer"
|
package/src/tokens.js
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as e}from"./utilities-_Bq3TxAQ.js";var t=class extends HTMLElement{internals_;controller;constructor(){super(),this.internals_=this.attachInternals(),this.controller=new AbortController}connectedCallback(){if(!this.details||!this.trigger)return;let{signal:e}=this.controller;document.addEventListener(`beforeprint`,this.handleOpen,{signal:e}),document.addEventListener(`afterprint`,this.handleClose,{signal:e}),this.handleHash(),document.addEventListener(`hashchange`,this.handleHash,{signal:e})}disconnectedCallback(){this.controller.abort()}handleOpen=()=>{this.details&&(this.details.open=!0)};handleClose=()=>{this.details&&(this.details.open=!1)};handleHash=()=>{let{hash:e}=window.location;e&&e===`#${this.details?.id}`&&this.handleOpen()};get details(){let e=this.querySelector(`details`);if(!e)throw Error(`${this.localName} must contain a <details> element.`);return e.id=e.id||this.generatedId(),e}get trigger(){let e=this.querySelector(`summary`);if(!e)throw Error(`${this.localName} must contain a <summary> element.`);return e}generatedId=()=>{let t=this.trigger?.textContent?.trim();return t?e(t):``}};customElements.get(`mx-accordion`)||customElements.define(`mx-accordion`,t);export{t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=class extends HTMLElement{internals_;controller;constructor(){super(),this.internals_=this.attachInternals(),this.controller=new AbortController}connectedCallback(){if(!this.accordions||!this.expandTrigger||!this.collapseTrigger)return;this.handleToggle();let{signal:e}=this.controller;this.addEventListener(`click`,this.handleClick,{signal:e}),this.accordions.forEach(t=>t.addEventListener(`toggle`,this.handleToggle,{signal:e}))}disconnectedCallback(){this.controller.abort()}handleClick=({target:e})=>{e===this.expandTrigger&&this.handleExpand(),e===this.collapseTrigger&&this.handleCollapse()};handleExpand=()=>{this.accordions.forEach(e=>e.open=!0),this.expandTrigger.disabled=!0,this.collapseTrigger.disabled=!1};handleCollapse=()=>{this.accordions.forEach(e=>e.open=!1),this.expandTrigger.disabled=!1,this.collapseTrigger.disabled=!0};handleToggle=()=>{this.expandTrigger.disabled=[...this.accordions].every(e=>e.open===!0),this.collapseTrigger.disabled=[...this.accordions].every(e=>e.open!==!0)};get accordions(){let e=this.querySelectorAll(`details`);if(!e.length)throw Error(`${this.localName} must contain at least one <details> element.`);return e}get expandTrigger(){let e=this.querySelector(`button[data-expand]`);if(!e)throw Error(`${this.localName} must contain a <button data-expand> element.`);return e}get collapseTrigger(){let e=this.querySelector(`button[data-collapse]`);if(!e)throw Error(`${this.localName} must contain a <button data-collapse> element.`);return e}};customElements.get(`mx-accordion-group`)||customElements.define(`mx-accordion-group`,e);export{e as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./Accordion-GN0sME4W.js";var t=class extends e{mq;toggleAttribute;constructor(){super(),this.mq=this.getAttribute(`mq`)||`(max-width: 720px)`}connectedCallback(){super.connectedCallback(),this.handleBreakpoint(this.breakpoint);let{signal:e}=this.controller;this.breakpoint.addEventListener(`change`,this.handleBreakpoint,{signal:e})}disconnectedCallback(){this.controller.abort()}handleBreakpoint=({matches:e})=>{this.details&&this.details.toggleAttribute(`open`,!e)};get breakpoint(){return window.matchMedia(this.mq)}};customElements.get(`mx-accordionmobile`)||customElements.define(`mx-accordionmobile`,t);export{t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=class extends HTMLElement{internals_;controller;observer;activeOption;constructor(){super(),this.internals_=this.attachInternals(),this.controller=new AbortController,this.activeOption=null}connectedCallback(){if(!this.input||!this.listbox||!this.status)return;let{signal:e}=this.controller;this.input.addEventListener(`input`,this.handleInput,{signal:e}),this.input.addEventListener(`keydown`,this.handleKeydown,{signal:e}),this.input.addEventListener(`focus`,this.handleFocus,{signal:e}),this.input.addEventListener(`blur`,this.handleBlur,{signal:e}),this.listbox.addEventListener(`mousedown`,this.handleListboxMousedown,{signal:e}),this.listbox.addEventListener(`click`,this.handleOptionClick,{signal:e}),this.observer=new MutationObserver(this.handleOptionsChange),this.observer.observe(this.listbox,{childList:!0})}disconnectedCallback(){this.controller.abort(),this.observer?.disconnect()}handleOptionsChange=()=>{this.activeOption&&!this.options.includes(this.activeOption)&&this.setActive(null),this.updateVisibility()};handleInput=()=>{this.setActive(null),this.dispatchSearch(),this.updateVisibility()};handleFocus=()=>{this.updateVisibility()};handleBlur=()=>{this.close()};handleListboxMousedown=e=>{e.preventDefault()};handleKeydown=e=>{if(!this.isOpen){(e.key===`ArrowDown`||e.key===`ArrowUp`)&&(e.preventDefault(),this.updateVisibility());return}switch(e.key){case`ArrowDown`:e.preventDefault(),this.moveActive(1);break;case`ArrowUp`:e.preventDefault(),this.moveActive(-1);break;case`Home`:e.preventDefault(),this.setActive(this.visibleOptions[0]??null);break;case`End`:e.preventDefault(),this.setActive(this.visibleOptions.at(-1)??null);break;case`Enter`:if(!this.activeOption)return;e.preventDefault(),this.select(this.activeOption);break;case`Escape`:e.preventDefault(),this.close()}};handleOptionClick=e=>{let t=e.target.closest(`[role="option"]`);t&&this.select(t)};dispatchSearch(){let e=new CustomEvent(`mx-autocomplete-search`,{bubbles:!0,detail:{query:this.input.value.trim()}});this.dispatchEvent(e)}updateVisibility(){let e=this.input.value.trim().length>0,t=this.visibleOptions.length,n=e&&t>0;this.listbox.hidden=!n,this.input.setAttribute(`aria-expanded`,String(n)),this.status.textContent=e?t===0?this.noResultsLabel:`${t} result${t===1?``:`s`} available`:``}moveActive(e){let t=this.visibleOptions;if(t.length===0)return;let n=((this.activeOption?t.indexOf(this.activeOption):-1)+e+t.length)%t.length;this.setActive(t[n])}setActive(e){this.activeOption?.setAttribute(`aria-selected`,`false`),this.activeOption=e,e?.setAttribute(`aria-selected`,`true`),this.input.setAttribute(`aria-activedescendant`,e?.id??``),e?.scrollIntoView({block:`nearest`})}select(e){let t=e.textContent??``;this.input.value=t,this.close(),this.input.focus();let n=new CustomEvent(`mx-autocomplete-select`,{bubbles:!0,detail:{value:e.dataset.value??t,label:t}});this.dispatchEvent(n)}close(){this.listbox.hidden=!0,this.input.setAttribute(`aria-expanded`,`false`),this.status.textContent=``,this.setActive(null)}get isOpen(){return!this.listbox.hidden}get noResultsLabel(){return this.dataset.noResultsLabel||`No results found`}get control(){let e=this.querySelector(`[data-control]`);if(!e)throw Error(`${this.localName} must contain a [data-control] element.`);return e}get input(){let e=this.control.querySelector(`input[role="combobox"]`);if(!e)throw Error(`${this.localName} must contain an <input role="combobox">.`);return e}get listbox(){let e=this.querySelector(`[role="listbox"]`);if(!e)throw Error(`${this.localName} must contain a [role="listbox"] element.`);return e}get status(){let e=this.querySelector(`[data-autocomplete-status]`);if(!e)throw Error(`${this.localName} must contain a [data-autocomplete-status] element.`);return e}get options(){return Array.from(this.listbox.querySelectorAll(`[role="option"]`))}get visibleOptions(){return this.options.filter(e=>!e.hidden)}get pending(){return this.control.getAttribute(`aria-busy`)===`true`}set pending(e){this.control.setAttribute(`aria-busy`,String(e))}};customElements.get(`mx-autocomplete`)||customElements.define(`mx-autocomplete`,e);export{e as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as e,t}from"./utilities-_Bq3TxAQ.js";var n=class extends HTMLElement{internals_;controller;constructor(){super(),this.internals_=this.attachInternals(),this.controller=new AbortController}connectedCallback(){if(!this.container)return;if(this.id=this.id||this.generatedId(),this.localStorage){this.controller.abort(),this.remove();return}let{signal:e}=this.controller;this.close?.addEventListener(`click`,this.handleClose,{signal:e})}disconnectedCallback(){this.controller.abort(),this.close.remove()}handleClose=()=>{this.controller.abort(),this.remove(),this.localStorage=`true`,document.body?.focus?.();let e=new CustomEvent(`GlobalAlert-close`,{bubbles:!0,cancelable:!0,detail:{id:this.id,target:this}});this.dispatchEvent(e)};get localStorage(){return localStorage.getItem(this.id)}set localStorage(e){localStorage.setItem(this.id,e)}get container(){let e=this.querySelector(`[data-container]`);if(!e)throw Error(`${this.localName} must contain a [data-container] element.`);return e}get close(){let e=this.querySelector(`.mx-icon--close`);return e||(e=t(`<button class="mx-icon mx-icon--close" aria-controls="${this.id}" aria-label="Close GlobalAlert" type="button"></button>`),this.container.appendChild(e)),e}generatedId(){let t=`mx-alert-${Math.floor(Math.random()*1e4)}`;return e(t,20)}};customElements.get(`mx-closable-alert`)||customElements.define(`mx-closable-alert`,n);export{n as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./cookie-compliance-Bbm-0vpj.js";var t=class extends HTMLElement{internals_;compliance;constructor(){super(),this.internals_=this.attachInternals()}connectedCallback(){this.compliance=new e(this),this.compliance.init()}disconnectedCallback(){this.compliance?.destroy()}};customElements.get(`mx-cookie-consent`)||customElements.define(`mx-cookie-consent`,t);export{t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,r as t}from"./utilities-_Bq3TxAQ.js";var n=class extends HTMLElement{internals_;controller;scrollLockClass=`body--scroll-lock`;constructor(){super(),this.internals_=this.attachInternals(),this.controller=new AbortController}connectedCallback(){if(!this.dialog)return;let{signal:n}=this.controller;this.openBtns?.forEach(e=>e.addEventListener(`click`,this.handleOpen,{signal:n})),this.closeBtns?.forEach(e=>e.addEventListener(`click`,this.handleClose,{signal:n})),document.addEventListener(`click`,t=>{this.dialog?.open&&e(t,this.dialog,this.handleClose,[...this.openBtns,...this.closeBtns])},{signal:n}),document.addEventListener(`keydown`,e=>{this.dialog?.open&&t(e,this.handleClose)},{signal:n})}disconnectedCallback(){this.dialog&&(typeof this.dialog.close==`function`&&this.dialog.close(),this.openBtns?.forEach(e=>e.setAttribute(`aria-expanded`,`false`)),this.isModal&&document.body.classList.remove(this.scrollLockClass),this.controller.abort())}handleOpen=e=>{this.dialog&&(e.preventDefault(),typeof this.dialog.show==`function`&&(this.isModal?this.dialog.showModal():this.dialog.show()),this.openBtns?.forEach(e=>e.setAttribute(`aria-expanded`,`true`)),this.isModal&&document.body.classList.add(this.scrollLockClass))};handleClose=()=>{this.dialog&&(typeof this.dialog.close==`function`&&this.dialog.close(),this.openBtns?.forEach(e=>e.setAttribute(`aria-expanded`,`false`)),this.isModal&&document.body.classList.remove(this.scrollLockClass))};get dialog(){let e=this.querySelector(`dialog`);if(!e)throw Error(`${this.localName} must contain a <dialog> element.`);return e}get openBtns(){let e=document.querySelectorAll(`[href="#${this.id}"], [aria-controls="${this.id}"]`);return e?.forEach(e=>{e.setAttribute(`aria-controls`,this.id)}),e}get closeBtns(){return this.querySelectorAll(`button[data-close]`)}get isModal(){return this.hasAttribute(`data-modal`)}};customElements.get(`mx-dialog`)||customElements.define(`mx-dialog`,n);export{n as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./Popover-Cxg-s5Jn.js";var t=class extends e{controller;closeOnClick;constructor(){super(),this.controller=new AbortController}async connectedCallback(){if(await super.connectedCallback(),!this.container||!this.trigger)return;this.closeOnClick=this.hasAttribute(`closeonclick`);let{signal:e}=this.controller;document.addEventListener(`click`,e=>{let t=e.target,n=t.closest(`a, button`);(t===this.container||[...this.items].includes(n))&&(this.handleSelect(e),e.preventDefault())},{signal:e}),document.addEventListener(`keydown`,e=>{let{target:t,key:n}=e,r=[...this.items];if(t===this.container||r.includes(t))switch(n){case`Enter`:e.preventDefault(),this.handleSelect(e);break;case`ArrowDown`:case`ArrowRight`:e.preventDefault(),this.moveFocus(t,1);break;case`ArrowUp`:case`ArrowLeft`:e.preventDefault(),this.moveFocus(t,-1);break;case`Home`:e.preventDefault(),r[0].focus();break;case`End`:e.preventDefault(),r.at(-1).focus()}},{signal:e})}disconnectedCallback(){this.controller.abort()}handleSelect=e=>{let t=e.target;this.items?.forEach(e=>{e instanceof HTMLButtonElement&&e.setAttribute(`aria-checked`,String(e===t))});let n=new CustomEvent(`drop-menu-select`,{bubbles:!0,cancelable:!0,detail:{event:e,target:t}});this.container.dispatchEvent(n),this.closeOnClick&&this.container.togglePopover()};moveFocus=(e,t)=>{let n=[...this.items],r=n.indexOf(e);if(r===-1)return;let i=r;for(let e=0;e<n.length&&(i=(i+t+n.length)%n.length,n[i].getAttribute(`tabindex`)===`-1`);e+=1);n[i]?.focus()};get items(){return this.container.querySelectorAll(`a, button`)}};customElements.get(`mx-dropmenu`)||customElements.define(`mx-dropmenu`,t);export{t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./cookie-compliance-Bbm-0vpj.js";import{t}from"./utilities-_Bq3TxAQ.js";import{t as n}from"./Dialog-Haahn-Yn.js";var r=class extends HTMLElement{internals_;controller;debounced;loop;paginationType;activePage;itemMap;iO;rO;mO;ioTimeout;constructor(){super(),this.internals_=this.attachInternals(),this.controller=new AbortController}connectedCallback(){if(!this.track)return;this.buttons&&(this.buttons.hidden=!1),this.activePage=0,this.track.scrollLeft=0,this.debounced=null,this.loop=this.hasAttribute(`loop`);let{signal:e}=this.controller;this.prev&&(this.prev.disabled=!0,this.prev.addEventListener(`click`,()=>this.handleNavigation(this.activePage-1),{signal:e})),this.next&&this.next.addEventListener(`click`,()=>this.handleNavigation(this.activePage+1),{signal:e}),this.track.addEventListener(`scroll`,this.handleScroll,{signal:e}),this.pagination&&(this.paginationType=this.pagination.getAttribute(`data-pagination`),this.pagination.addEventListener(`click`,this.handlePagination,{signal:e})),Array.from(this.track.children).forEach((e,t)=>{e.setAttribute(`data-index`,String(t))});let t=this.track.querySelectorAll(`[data-index]`);this.itemMap=/* @__PURE__ */ new Map,this.iO=new IntersectionObserver(e=>{e.forEach(({target:e,intersectionRatio:t})=>{let n=e;t>.5?(n.removeAttribute(`inert`),n.setAttribute(`aria-hidden`,`false`),this.itemMap.set(n,!0)):(n.setAttribute(`inert`,``),n.setAttribute(`aria-hidden`,`true`),this.itemMap.set(n,!1))})},{root:this.track,threshold:.5}),t.forEach(e=>this.iO.observe(e)),this.rO=new ResizeObserver(e=>{e.forEach(()=>this.handleOverflow())}),this.rO.observe(this.track),this.mO=new MutationObserver(e=>{e.forEach(()=>this.handleOverflow())}),this.mO.observe(this.track,{childList:!0})}disconnectedCallback(){this.controller.abort(),this.mO.disconnect(),this.iO.disconnect(),this.rO.disconnect(),clearTimeout(this.debounced),clearTimeout(this.ioTimeout)}handleNavigation=(e,t=`arrow`)=>{let n=e>this.activePage,r=this.loop&&this.next.hasAttribute(`data-restart`);if(e===0||r&&n&&t===`arrow`){this.activePage=0,this.items[0].scrollIntoView({inline:`start`,block:`nearest`}),this.next.removeAttribute(`data-restart`);return}this.activePage=e,this.items[this.visibleCount*e].scrollIntoView({inline:`start`,block:`nearest`}),r&&!n&&this.next.removeAttribute(`data-restart`);let i=new CustomEvent(`carousel-slide`,{bubbles:!0,cancelable:!0,detail:{page:this.activePage,type:t}});this.dispatchEvent(i)};handleDisabled=()=>{let e=!1;if(this.prev&&(this.prev.disabled=this.track.scrollLeft<200),(this.next||this.pagination)&&(e=Math.round(this.track.scrollLeft)>=Math.round(this.track.scrollWidth-this.track.offsetWidth)),this.next&&(this.loop?e&&this.next.setAttribute(`data-restart`,``):this.next.disabled=e),this.pagination){let t=Math.round(this.track.offsetLeft+this.track.scrollLeft);if(e)this.activePage=this.pageStartItems.length-1;else{let e=0,n=1/0;this.pageStartItems.forEach((r,i)=>{let a=Math.abs(Math.round(r.offsetLeft)-t);a<n&&(n=a,e=i)}),this.activePage=e}this.pagination.querySelectorAll(`button`).forEach(e=>{let t=e.getAttribute(`data-index`);if(!t)return;let n=parseInt(t,10)===this.activePage;e.disabled=n,n?e.setAttribute(`aria-current`,`page`):e.removeAttribute(`aria-current`)})}};handleScroll=()=>{clearTimeout(this.debounced),this.debounced=setTimeout(this.handleDisabled,this.pagination?100:200)};handleOverflow=()=>{let{scrollWidth:e,clientWidth:t}=this.track,n=e>t;this.track.classList.toggle(`overflowing`,n),n?(this.pagination&&(this.ioTimeout=setTimeout(this.buildPagination,200)),this.track.setAttribute(`tabindex`,`0`)):this.track.removeAttribute(`tabindex`)};buildPagination=()=>{if(!this.pagination.hidden){let e=this.pagination.querySelectorAll(`button`);if(e.length===this.pageStartItems.length)return;e.forEach(e=>e.remove())}let e=Array.from({length:this.pageStartItems.length}).fill(null);if(e.length<=0)return;e.forEach((n,r)=>{let i=r+1,a=t(`<button type="button" data-index="${r}" aria-label="Page ${i}">${i}</button>`);this.pagination.append(a),e[r]=a});let n=e[0];n.disabled=!0,n.setAttribute(`aria-current`,`page`),this.pagination.hidden=!1};handlePagination=t=>{let n=t.target.getAttribute(`data-index`);if(!n||!e.integer(n,0))return;let r=parseInt(n,10);this.handleNavigation(r,`pagination`)};get track(){let e=this.querySelector(`[data-track]`);if(!e)throw Error(`${this.localName} must contain an element with [data-track].`);return e}get buttons(){return this.querySelector(`[data-buttons]`)}get prev(){return this.buttons?.querySelector(`.mx-carousel__prev`)}get next(){return this.buttons?.querySelector(`.mx-carousel__next`)}get pagination(){return this.querySelector(`[data-pagination]`)}get items(){return[...this.itemMap.keys()]}get visibleCount(){return[...this.itemMap.values()].filter(e=>e).length}get pageStartItems(){return[...this.items].filter((e,t)=>t%this.visibleCount===0)}};customElements.get(`mx-carousel`)||customElements.define(`mx-carousel`,r);var i=class extends n{connectedCallback(){if(super.connectedCallback(),!this.dialog)return;let{signal:e}=this.controller;this.openBtns?.forEach(t=>t.addEventListener(`click`,()=>this.scrollToTrigger(t),{signal:e}))}scrollToTrigger=e=>{let t=e.dataset.galleryIndex??`0`,n=this.carousel?.track?.querySelector(`[data-index="${t}"]`);n&&(n.removeAttribute(`inert`),n.scrollIntoView({inline:`start`,block:`nearest`}))};get carousel(){return this.querySelector(`mx-carousel`)}};customElements.get(`mx-gallery`)||customElements.define(`mx-gallery`,i);export{r as n,i as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{l as e}from"./utilities-_Bq3TxAQ.js";import{createFocusTrap as t}from"focus-trap";var n=class extends HTMLElement{internals_;controller;widget;focusTrap;controls;mq;triggerText;isOpen=!1;closeIconClass=`mx-icon--close`;menuIconClass=`mx-icon--menu`;searchIconClass=`mx-icon--search`;backgroundClass=`mx-background--primary`;scrollLockClass=`body--scroll-lock`;isSearch;hideOther=!0;otherTrigger;rafId;focusTrapTimeout;constructor(){super(),this.internals_=this.attachInternals(),this.controller=new AbortController,this.mq=this.getAttribute(`mq`)||`(max-width: 720px)`}connectedCallback(){if(!this.trigger||!this.target)return;this.trigger.getAttribute(`hideOther`)===`false`&&(this.hideOther=!1),this.isSearch=this.controls.includes(`search`),this.otherTrigger=document.querySelector(this.isSearch?`.${this.menuIconClass}`:`.${this.searchIconClass}`),this.widget=new e(this.trigger,this.target),this.widget.init(),this.focusTrap=t(this.target,{escapeDeactivates:!1,setReturnFocus:this.trigger,allowOutsideClick:!0,onActivate:()=>document.body.classList.add(this.scrollLockClass),onDeactivate:()=>document.body.classList.remove(this.scrollLockClass),checkCanFocusTrap:([e])=>new Promise(t=>{this.focusTrapTimeout=setTimeout(()=>{this.rafId&&=(cancelAnimationFrame(this.rafId),null),t()},2e3);let n=()=>{getComputedStyle(e).visibility===`hidden`?this.rafId=requestAnimationFrame(n):(this.focusTrapTimeout&&=(clearTimeout(this.focusTrapTimeout),null),this.rafId=null,t())};this.rafId=requestAnimationFrame(n)})});let{signal:n}=this.controller;this.handleBreakpoint(this.breakpoint),this.breakpoint.addEventListener(`change`,this.handleBreakpoint,{signal:n}),document.addEventListener(`keydown`,this.handleKeyDown,{signal:n})}disconnectedCallback(){this.widget.detach(),this.controller.abort(),this.rafId&&=(cancelAnimationFrame(this.rafId),null),this.focusTrapTimeout&&=(clearTimeout(this.focusTrapTimeout),null),this.focusTrap.deactivate(),document.body.classList.remove(this.scrollLockClass)}handleBreakpoint=({matches:e})=>{if(!this.trigger)return;let{signal:t}=this.controller;e?(this.widget.attach(),this.target.setAttribute(`inert`,``),this.trigger.addEventListener(`disclosure-toggle`,this.handleDisclosure,{signal:t})):(this.widget.detach(),this.target.removeAttribute(`inert`),document.body.classList.remove(this.scrollLockClass),this.trigger.removeEventListener(`disclosure-toggle`,this.handleDisclosure),this.focusTrap.deactivate())};handleDisclosure=async({detail:e})=>{let{isOpen:t}=e,n=t?`Open`:`Close`,r=t?`Close`:`Open`;if(this.trigger.textContent=this.triggerText.replace(n,r),t)try{await this.focusTrap.activate()}catch{}else this.focusTrap.deactivate();t&&this.hideOther&&this.otherTrigger&&this.otherTrigger.getAttribute(`aria-expanded`)===`true`&&this.otherTrigger.click(),this.trigger.classList.toggle(this.isSearch?this.searchIconClass:this.menuIconClass),this.trigger.classList.toggle(this.closeIconClass),this.target.classList.toggle(this.backgroundClass),this.trigger.removeAttribute(`no-focus`),this.isOpen=t};handleKeyDown=e=>{this.isOpen&&e.key===`Escape`&&this.widget.handleToggle()};get trigger(){let e=this.querySelector(`:scope > button`),t=e.getAttribute(`aria-controls`);if(!e||!t)throw Error(`${this.localName} must contain a <button aria-controls="element-to-trigger"> element.`);return e.removeAttribute(`disabled`),this.controls=t,this.triggerText=e.textContent,e}get target(){let e=document.querySelector(`div[id="${this.controls}"]`);if(!e)throw Error(`${this.localName} must contain a target <div id="${this.controls}">.`);return e.classList.remove(`global-nav-up-only`),e}get breakpoint(){return window.matchMedia(this.mq)}};customElements.get(`mx-global-toggle`)||customElements.define(`mx-global-toggle`,n);export{n as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as e,t}from"./utilities-_Bq3TxAQ.js";var n=class extends HTMLElement{internals_;controller;headingLevels;title;titleClass=`is-excluded mx-heading--m`;items;active;constructor(){super(),this.internals_=this.attachInternals(),this.controller=new AbortController,this.headingLevels=this.dataset?.levels||`h2`,this.title=this.dataset?.title||`On this page`,this.items=[]}connectedCallback(){if(!this.menu||!this.headings)return;if(this.links.length)this.links.forEach(e=>{let t=this.container.querySelector(e.hash);t&&this.items.push({link:e,heading:t})});else{let e=t(`<h2 class="${this.titleClass}">${this.title}</h2>`);this.nav.insertBefore(e,this.menu);let n={};this.headings.forEach(e=>{let t=this.generateListItem(e),r=this.generateAnchor(e,n);this.items.push({link:r,heading:e}),t.appendChild(r),this.menu?.appendChild(t)})}let{signal:e}=this.controller;this.menu.addEventListener(`click`,e=>{let{target:t}=e;t instanceof HTMLAnchorElement&&this.handleClick(t)},{signal:e})}disconnectedCallback(){this.menu&&this.headings&&(this.menu.textContent=``,this.items=[],this.controller.abort())}handleClick=e=>{this.active=this.items.find(t=>t.link===e),this.links&&this.active&&(this.links.forEach(e=>e.classList.remove(`is-active`)),this.active.link.classList.add(`is-active`))};get menu(){let e=this.querySelector(`ul, ol`);if(e)return e;if(!this.nav)throw Error(`${this.localName} must contain a <nav> element.`);if(this.items?.length===0&&this.headings?.length===0)return null;let t=document.createElement(`ul`);return this.nav.appendChild(t),t}get nav(){return this.querySelector(`nav`)}get container(){let e=this.getAttribute(`data-content`);if(!e)throw Error(`${this.localName} must have a [data-content] attribute that contains the content selector.`);return this.closest(e)||this.parentElement.querySelector(e)||document.querySelector(e)}get headings(){return this.container?.querySelectorAll(`:is(${this.headingLevels}):not(.is-excluded)`)}get links(){return this.menu?.querySelectorAll(`a`)}generatedId(t,n){let r=t?.textContent?.trim();if(!r)return``;let i=e(r),a=n[i]??0;return n[i]=a+1,a>0?`${i}-${a}`:i}generateAnchor(e,n){let{textContent:r,id:i}=e,a=e.getAttribute(`data-in-page-navigation-title`)||r,o=i||this.generatedId(e,n);return i||(e.id=o),t(`<a href="#${o}"><span class="mx-icon mx-icon--chevron-right"></span><span>${a}</span></a>`)}generateListItem(e){let{tagName:n}=e;return t(`<li class="mx-in-page-navigation__level--${n.toLowerCase()}"></li>`)}};customElements.get(`mx-in-page-navigation`)||customElements.define(`mx-in-page-navigation`,n);export{n as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{l as e,s as t}from"./utilities-_Bq3TxAQ.js";var n=class{constructor(){window.Mixtape=window.Mixtape||{},window.Mixtape.Popups=window.Mixtape.Popups||[],window.Mixtape.Menu=window.Mixtape.Menu||{}}attachPopup=(e,t)=>{window.Mixtape.Popups.push({id:e,closefn:t})};detachPopup=e=>{window.Mixtape.Popups=window.Mixtape.Popups.filter(t=>t.id!==e)};attachMenu=(e,t)=>{window.Mixtape.Menu={context:e,items:t}};detachMenu=()=>{window.Mixtape.Menu=null};getNextFocusableMenuItem=(e,t=!1)=>t?e===0?window.Mixtape.Menu.items.length-1:e-1:window.Mixtape.Menu.items.length>e+1?e+1:0;moveFocus=(e,t=!1)=>{if(!window.Mixtape.Menu.items)return;let n=0;window.Mixtape.Menu.items.forEach((t,r)=>{t===e&&(n=r)});let r=this.getNextFocusableMenuItem(n,t),i=window.Mixtape.Menu.items[r].getAttribute(`tabindex`);if(i!==`-1`)window.Mixtape.Menu.items[r].focus();else{for(;i===`-1`;)r=this.getNextFocusableMenuItem(r,t),i=window.Mixtape.Menu.items[r].getAttribute(`tabindex`);window.Mixtape.Menu.items[r].focus()}window.Mixtape.Menu.active=r};handleGlobalClick=({target:e})=>{let t=window.Mixtape.Popups?window.Mixtape.Popups[window.Mixtape.Popups.length-1]:null;if(t&&t.id){let n=document.querySelector(`#${t.id}`).parentElement;if(n&&(e===n||n?.contains(e)))return;t.closefn()}};handleGlobalKeydown=e=>{let t=window.Mixtape.Popups?window.Mixtape.Popups[window.Mixtape.Popups.length-1]:null,n=e.target;switch(e.key){case`Escape`:t&&t.closefn();break;case`ArrowDown`:case`ArrowRight`:window.Mixtape.Menu?.items&&(e.preventDefault(),this.moveFocus(n));break;case`ArrowUp`:case`ArrowLeft`:window.Mixtape.Menu?.items&&(e.preventDefault(),this.moveFocus(n,!0))}};attachEventListeners=e=>{window.addEventListener(`click`,this.handleGlobalClick,{signal:e}),window.addEventListener(`keydown`,this.handleGlobalKeydown,{signal:e})}},r=class extends HTMLElement{internals_;controller;keyboard;subNavs;flyout;edgeCheck;mq;iO;constructor(){super(),this.internals_=this.attachInternals(),this.controller=new AbortController,this.flyout=this.hasAttribute(`flyout`)}connectedCallback(){let{signal:r}=this.controller;this.keyboard=new n,this.keyboard.attachEventListeners(r),this.addEventListener(`focusin`,()=>{this.keyboard.attachMenu(this,this.links)}),this.addEventListener(`focusout`,()=>{this.keyboard.detachMenu()}),this.lists.length&&(this.subNavs=/* @__PURE__ */ new Map,this.lists.forEach((n,r)=>{let i=n.closest(`li`),a=i.querySelector(`:scope > a`),o=t(`subnav-${r}-${a.textContent}`,30),s=i.querySelector(`:scope > button.mx-nav__toggle`);if(i&&a&&s){let t=`list-label-${o}`;a.setAttribute(`id`,t),n.setAttribute(`id`,o),n.setAttribute(`aria-labelledby`,t);let r=new e(s,n);r.init(),this.subNavs.set(o,{item:i,trigger:s,list:n,link:a,widget:r})}}),this.addEventListener(`disclosure-toggle`,this.handleDisclosure),this.flyout&&(this.edgeCheck=this.hasAttribute(`edgeCheck`),this.mq=this.getAttribute(`mq`)||`(min-width: 720px)`,this.handleBreakpoint(this.breakpoint),this.breakpoint.addEventListener(`change`,this.handleBreakpoint,{signal:r})))}disconnectedCallback(){this.controller.abort(),this.subNavs?.forEach(e=>e.widget.detach()),this.iO?.disconnect()}handleDisclosure=({detail:e})=>{let{isOpen:t,id:n}=e,{item:r}=this.subNavs.get(n);r.classList.toggle(`mx-nav--open`),t?this.keyboard.attachPopup(n,this.handleCloseAny):this.keyboard.detachPopup(n)};handleCloseAny=()=>{this.subNavs?.forEach(({widget:e})=>{e&&e.isOpen&&e.handleToggle()})};handleFlyout=e=>{let t=e.target.closest(`li`);if(!t)return;let n=t.querySelector(`:scope > ul`);n&&this.subNavs?.forEach(({widget:e,list:t})=>{e&&(e.isOpen&&e.handleToggle(),t.id===n.id&&e.handleToggle())})};handleBreakpoint=({matches:e})=>{let{signal:t}=this.controller;e?(this.addEventListener(`mouseover`,this.handleFlyout,{signal:t}),this.addEventListener(`mouseleave`,this.handleCloseAny,{signal:t}),this.edgeCheck&&this.handleEdgeCheck()):(this.removeEventListener(`mouseover`,this.handleFlyout),this.removeEventListener(`mouseleave`,this.handleCloseAny))};handleEdgeCheck(){let e=window.innerWidth;this.iO=new IntersectionObserver((t,n)=>{t.forEach(({boundingClientRect:t,target:r})=>{e<t.right&&r.classList.add(`mx-nav--reverse`),n.unobserve(r)})}),this.subNavs?.forEach(({list:e})=>{this.iO.observe(e),e.querySelectorAll(`ul`)?.forEach(e=>this.iO.observe(e))})}get links(){let e=this.querySelectorAll(`a`);if(!e.length)throw Error(`${this.localName} must links`);return e}get lists(){return this.querySelectorAll(`li > ul`)}get breakpoint(){return window.matchMedia(this.mq)}};customElements.get(`mx-nav`)||customElements.define(`mx-nav`,r);export{n,r as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=class extends HTMLElement{internals_;polyfills;constructor(){super(),this.internals_=this.attachInternals()}async connectedCallback(){if(this.container&&this.trigger&&(!(`anchorName`in document.documentElement.style)||!(`popover`in HTMLElement.prototype))){let{default:e}=await import(`./polyfills-C7pRt54M.js`);this.polyfills=new e(this.container)}}disconnectedCallback(){this.polyfills?.destroy()}get container(){let e=this.querySelector(`[popover]`);if(!e)throw Error(`${this.localName} must contain a <div popover> element.`);return e}get trigger(){let e=this.querySelector(`[popovertarget=${this.container?.id}]`);if(!e)throw Error(`${this.localName} must contain a <button popovertarget="${this.container.id}">`);return e}};customElements.get(`mx-popover`)||customElements.define(`mx-popover`,e);export{e as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./utilities-_Bq3TxAQ.js";var t=class extends HTMLElement{internals_;iO;rO;offsetPropName;root=null;rootMargin=`0px 0px 0px 0px`;thresholds=[0];constructor(){super(),this.internals_=this.attachInternals()}connectedCallback(){this.offsetPropName=this.getAttribute(`offsetpropname`)||`--sticky-offset`;let e={root:this.root,rootMargin:this.rootMargin,thresholds:this.thresholds};this.iO=new IntersectionObserver(([{boundingClientRect:t}])=>{let n=t.y<0;this.classList.toggle(`is-stuck`,n);let r=new CustomEvent(`sticky-toggle`,{bubbles:!0,cancelable:!0,detail:{isSticky:n,options:e,target:this}});this.dispatchEvent(r)},e),this.iO.observe(this.trigger),this.offsetPropName&&(this.rO=new ResizeObserver(e=>{e.forEach(({borderBoxSize:e})=>{let[{blockSize:t}]=e;document.body.style.setProperty(this.offsetPropName,`${t.toFixed(1)}px`)})}),this.rO.observe(this))}disconnectedCallback(){this.iO.disconnect(),this.rO?.disconnect()}get trigger(){let t=this.querySelector(`.mx-sticky__trigger`);return t||(t=e(`<div class="mx-sticky__trigger"></div>`),this.insertAdjacentElement(`beforebegin`,t)),t}};customElements.get(`mx-sticky`)||customElements.define(`mx-sticky`,t);export{t};
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import{s as e,t}from"./utilities-_Bq3TxAQ.js";import{t as n}from"./DropMenu-1baQc8Yc.js";import{PopoverPlacementModifier as r}from"@pnx-mixtape/ids-shape";var i=class extends HTMLElement{internals_;controller;tabs;mq;locationHash;tabFocus=0;tabListClasses;dropTriggerClasses;dropMenuId;constructor(){super(),this.internals_=this.attachInternals(),this.controller=new AbortController,this.mq=this.getAttribute(`mq`)||`(max-width: 720px)`}connectedCallback(){if(!this.panels)return;this.locationHash=window.location.hash,this.tabFocus=0,this.tabs=/* @__PURE__ */ new Map,this.panels.forEach(e=>{let n=e.id,r=`<button type="button" role="tab" aria-controls="${n}" aria-selected="false">${e.getAttribute(`aria-label`)}</button>`,i=t(r);this.tabList.appendChild(i);let a=t(r);this.dropMenuMenu.appendChild(a),n&&e&&a&&this.tabs.set(n,{panel:e,tab:i,button:a})});let{signal:e}=this.controller;this.handleBreakpoint(this.breakpoint),this.breakpoint.addEventListener(`change`,this.handleBreakpoint,{signal:e});let n=this.locationHash?this.querySelector(this.locationHash):null;n?this.active=n.id:this.active||=this.panels[0].id}disconnectedCallback(){this.controller.abort()}handleBreakpoint=({matches:e})=>{let{signal:t}=this.controller;this.dropMenuTrigger.toggleAttribute(`hidden`,!e),this.tabList.toggleAttribute(`hidden`,e),e?(this.dropMenuMenu.addEventListener(`drop-menu-select`,this.handleDropMenuSelect,{signal:t}),this.tabList.removeEventListener(`click`,this.handleClick),this.tabList.removeEventListener(`keydown`,this.handleKeydown)):(this.tabList.addEventListener(`click`,this.handleClick,{signal:t}),this.tabList.addEventListener(`keydown`,this.handleKeydown,{signal:t}),this.dropMenuMenu.removeEventListener(`drop-menu-select`,this.handleDropMenuSelect))};handleKeydown=e=>{let{key:t,target:n}=e,r=[...this.triggers],i=r.indexOf(n);if(i===-1)return;let a=0;switch(t){case`ArrowRight`:a=(i+1)%r.length;break;case`ArrowLeft`:a=(i-1+r.length)%r.length;break;case`Home`:a=0;break;case`End`:a=r.length-1;break;default:return}e.preventDefault(),e.stopPropagation(),r[a].focus()};handleClick=e=>{let t=e.target;if(!(t instanceof HTMLButtonElement))return;e.preventDefault();let n=t.getAttribute(`aria-controls`);this.handleTabChange(n)};handleDropMenuSelect=e=>{let t=e.detail.target;if(!(t instanceof HTMLButtonElement))return;let n=t.getAttribute(`aria-controls`);this.handleTabChange(n)};handleTabChange=e=>{this.active=e,this.handleUrlParams(e);let{panel:t,tab:n,button:r}=this.tabs.get(e);t.focus({preventScroll:!0});let i=new CustomEvent(`tab-toggle`,{bubbles:!0,cancelable:!0,detail:{id:e,tab:n,button:r,panel:t}});this.dispatchEvent(i)};get dropMenu(){let i=this.querySelector(`mx-dropmenu`);if(i)return i;this.dropTriggerClasses=this.getAttribute(`dropTriggerClasses`)||`mx-button mx-icon mx-icon--chevron-down mx-icon--end`,this.dropMenuId=this.id||e(`tab-drop-menu`);let a=`${this.dropMenuId}-target`,o=new n;o.setAttribute(`closeOnClick`,`true`);let s=t(`<button
|
|
2
|
-
id="${a}"
|
|
3
|
-
class="mx-popover__trigger ${this.dropTriggerClasses}"
|
|
4
|
-
popovertarget="${this.dropMenuId}"
|
|
5
|
-
style="anchor-name: --${this.dropMenuId}"
|
|
6
|
-
hidden
|
|
7
|
-
></button>`),c=t(`<div
|
|
8
|
-
class="mx-popover mx-drop-menu"
|
|
9
|
-
id="${this.dropMenuId}"
|
|
10
|
-
aria-describedby="${a}"
|
|
11
|
-
style="position-anchor: --${this.dropMenuId}"
|
|
12
|
-
data-placement="${r.BOTTOM_START}"
|
|
13
|
-
popover
|
|
14
|
-
role="tablist"
|
|
15
|
-
></div>`);return o.append(s,c),this.prepend(o),o}get dropMenuMenu(){return this.dropMenu.querySelector(`[popover][role="tablist"]`)}get dropMenuTrigger(){return this.dropMenu.querySelector(`[popovertarget]`)}get tabList(){this.tabListClasses=this.getAttribute(`tabListClasses`)||`mx-tabs__list`;let e=this.querySelector(`[role="tablist"]:not([popover])`);if(e)return e;let n=t(`<div class="${this.tabListClasses}" role="tablist" hidden></div>`);return this.prepend(n),n}get triggers(){let e=this.tabList.querySelectorAll(`[role="tab"]`);if(!e.length)throw Error(`${this.localName} must contain [role="tab"]`);return e}get panels(){let e=this.querySelectorAll(`[data-tab]`);if(!e.length)throw Error(`${this.localName} must contain [data-tab]`);return e.forEach(e=>{e.setAttribute(`role`,`tabpanel`),e.setAttribute(`tabindex`,`-1`),e.setAttribute(`aria-label`,e.getAttribute(`data-tab`))}),e}get active(){return this.querySelector(`[aria-selected="true"]`)}get breakpoint(){return window.matchMedia(this.mq)}set active(e){this.tabs.forEach(({tab:t,button:n,panel:r},i)=>{i===e?(t.setAttribute(`aria-selected`,`true`),n.setAttribute(`aria-selected`,`true`),t.setAttribute(`tabindex`,`0`),r.removeAttribute(`inert`),this.dropMenuTrigger.textContent=t.textContent):(t.setAttribute(`aria-selected`,`false`),n.setAttribute(`aria-selected`,`false`),t.setAttribute(`tabindex`,`-1`),r.setAttribute(`inert`,``))})}handleUrlParams=e=>{let t=new URLSearchParams(window.location.search);t.get(`tab`)!==e&&(t.set(`tab`,e),window.history.replaceState({},``,`${window.location.pathname}?${t.toString()}`))}};customElements.get(`mx-tabs`)||customElements.define(`mx-tabs`,i);export{i as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"js-cookie";var t={url:(e,t=[`http:`,`https:`])=>{try{let n=new URL(e);return t.includes(n.protocol)}catch{return!1}},email:e=>typeof e==`string`&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),number:(e,t,n)=>{let r=Number(e);return!(isNaN(r)||t!==void 0&&r<t||n!==void 0&&r>n)},integer:(e,t,n)=>{let r=Number(e);return!(isNaN(r)||!Number.isInteger(r)||t!==void 0&&r<t||n!==void 0&&r>n)},string:(e,t,n)=>!(typeof e!=`string`||t!==void 0&&e.length<t||n!==void 0&&e.length>n),notEmpty:e=>typeof e==`string`&&e.trim().length>0,pattern:(e,t)=>typeof e==`string`&&(t.lastIndex=0,t.test(e)),oneOf:(e,t)=>t.includes(e),array:(e,t,n)=>!(!Array.isArray(e)||t!==void 0&&e.length<t||n!==void 0&&e.length>n),json:e=>{if(typeof e!=`string`)return!1;try{return JSON.parse(e),!0}catch{return!1}},date:(e,t,n)=>{let r=e instanceof Date?e:new Date(e);return!(isNaN(r.getTime())||t&&r<t||n&&r>n)},hexColor:e=>typeof e==`string`&&/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(e)},n=class n{banner;acceptBtn;moreBtn;rejectBtn;controller;bots;cookieName;waitRemove;trackingCookiesNames;hostname;timeout;defaultCookieSettings;constructor(e){this.banner=e,this.acceptBtn=e.querySelector(`[data-cookie-accept]`),this.moreBtn=e.querySelector(`[data-cookie-more]`),this.rejectBtn=e.querySelector(`[data-cookie-reject]`),this.controller=new AbortController,this.bots=/bot|crawler|spider|crawling/i,this.cookieName=`has-cookie-consent`;let n=this.banner.dataset.waitRemove;this.waitRemove=n&&t.integer(n,0)?parseInt(n,10):0,this.trackingCookiesNames=[`__utma`,`__utmb`,`__utmc`,`__utmt`,`__utmv`,`__utmz`,`_ga`,`_gat`,`_gid`]}init=()=>{this.hostname=document.location.hostname.replace(/^www\./,``),this.defaultCookieSettings={path:`/`,expires:365,sameSite:`Lax`};let e=this.bots.test(navigator.userAgent),t=navigator.doNotTrack||navigator.msDoNotTrack||window.doNotTrack;if(e||!(t==null||t&&t!==`yes`&&t!==1&&t!==`1`)||this.hasConsent()===!1){this.removeBanner(0);return}this.hasConsent()!==!0&&this.showBanner()};showBanner=()=>{let{signal:e}=this.controller;this.banner.removeAttribute(`inert`),this.moreBtn&&this.moreBtn.addEventListener(`click`,()=>this.deleteCookie(),{signal:e}),this.acceptBtn&&this.acceptBtn.addEventListener(`click`,this.accept,{signal:e}),this.rejectBtn&&this.rejectBtn.addEventListener(`click`,this.reject,{signal:e}),window.CookieCompliance=this};reject=()=>{this.removeBanner(this.waitRemove),this.setCookie(`false`),this.trackingCookiesNames.forEach(e=>this.deleteCookie(e))};accept=()=>{this.removeBanner(this.waitRemove),this.setCookie(`true`)};hasConsent=()=>{let t=e.get(this.cookieName);return t===`true`||t!==`false`&&null};setCookie=t=>{e.set(this.cookieName,t,this.defaultCookieSettings),e.set(this.cookieName,t,{domain:`.${this.hostname}`,...this.defaultCookieSettings})};deleteCookie=(t=this.cookieName)=>{e.remove(t,this.defaultCookieSettings),e.remove(t,{domain:`.${this.hostname}`,...this.defaultCookieSettings})};removeBanner=e=>{this.timeout=setTimeout(()=>{this.banner&&this.banner.parentNode&&(this.banner.parentNode.removeChild(this.banner),this.destroy())},e)};destroy(){clearTimeout(this.timeout),this.controller.abort(),this.controller=new AbortController,window.CookieCompliance===this&&(window.CookieCompliance=void 0)}static create({context:e=null}={}){let[t]=window.once(`cookie-compliance`,`#cookie-compliance`,e||document);if(t){let e=new n(t);e.init(),window.CookieCompliance=e}}};export{t as n,n as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=[],t=400,n=/* @__PURE__ */ function(e){return e.LEFT=`left`,e.RIGHT=`right`,e}({}),r=/* @__PURE__ */ function(e){return e.DIV=`div`,e.LI=`li`,e.ARTICLE=`article`,e.ASIDE=`aside`,e.SECTION=`section`,e}({}),i=/* @__PURE__ */ function(e){return e.P=`p`,e.DIV=`div`,e.STRONG=`strong`,e.ITALIC=`em`,e}({}),a=/* @__PURE__ */ function(e){return e.HEADLINE=`mx-headline`,e.EYEBROW=`mx-text--eyebrow`,e.EMBELLISHED=`mx-text--embellished`,e.RESET=`mx-spacing--reset`,e.RESETTOP=`mx-spacing--top-reset`,e.RESETBOTTOM=`mx-spacing--bottom-reset`,e}({}),o=/* @__PURE__ */ function(e){return e.SECTION=`mx-text--eyebrow`,e.EMBELLISHED=`mx-text--embellished`,e.XXXL=`mx-text--xxxl`,e.XXL=`mx-text--xxl`,e.XL=`mx-text--xl`,e.L=`mx-text--l`,e.M=`mx-text--m`,e.S=`mx-text--s`,e.XS=`mx-text--xs`,e.LEDE=`mx-text--lede`,e.META=`mx-text--meta`,e.PRIMARY=`mx-text--primary`,e.ACCENT=`mx-text--accent`,e.ALT=`mx-text--alt`,e}({}),s=/* @__PURE__ */ function(e){return e.NOTES=`mx-list--notes`,e.REFS=`mx-list--refs`,e.STATS=`mx-list--stats`,e.COLUMNS=`mx-list--columns`,e.SUMMARY=`mx-list--summary`,e}({}),c=/* @__PURE__ */ function(e){return e.ARROW_DOWN=`arrow-down`,e.ARROW_LEFT=`arrow-left`,e.ARROW_UP=`arrow-up`,e.ARROW_RIGHT=`arrow-right`,e.CHEVRON_DOWN=`chevron-down`,e.CHEVRON_LEFT=`chevron-left`,e.CHEVRON_RIGHT=`chevron-right`,e.CHEVRON_UP=`chevron-up`,e.BLUESKY=`bluesky`,e.CLOSE=`close`,e.COLLAPSE=`collapse`,e.DOWNLOAD=`download`,e.DRUPAL=`drupal`,e.ERROR=`error`,e.EXPAND=`expand`,e.EXTERNAL=`external-link`,e.FACEBOOK=`facebook`,e.GOOGLE=`google`,e.INFO=`info`,e.FILE=`file`,e.INSTAGRAM=`instagram`,e.LINKEDIN=`linkedin`,e.MASTODON=`mastodon`,e.MENU=`menu`,e.SEARCH=`search`,e.SUCCESS=`success`,e.TWITTER=`twitter`,e.WARNING=`warning`,e.YOUTUBE=`youtube`,e.EMAIL=`email`,e.HEART=`heart-selected`,e.EMPTY_HEART=`heart-unselected`,e.LINK=`link`,e.LOCK=`lock`,e.LOGIN=`login`,e.MORE=`more`,e.EDIT=`pencil`,e.PHONE=`phone`,e.PIN=`pin`,e.PRINT=`print`,e.RESTART=`restart`,e.STAR=`star-selected`,e.EMPTY_STAR=`star-unselected`,e.TICK=`tick`,e.TRASH=`trash`,e.USER=`user`,e.SHARE=`share`,e.QUESTION=`question`,e}({}),l=/* @__PURE__ */ function(e){return e.NARROW=`narrow`,e.FEATURE=`feature`,e.FULL=`full`,e}({}),u=/* @__PURE__ */ function(e){return e.FLOW=`flow`,e.GROUP=`group`,e}({}),d=/* @__PURE__ */ function(e){return e.DEFAULT=``,e.REVERSE=`sidebar-rev`,e.REVERSE_L=`sidebar-rev-lg`,e}({}),f=/* @__PURE__ */ function(e){return e.PRIMARY=`primary`,e.ACCENT=`accent`,e.ALT=`alt`,e.REVERSE=`reverse`,e.RESET=`reset`,e.BOX=`box`,e.IMAGE=`image`,e}({}),p=/* @__PURE__ */ function(e){return e.FLUSH=`flush`,e.STRIPED=`striped`,e.SMALL=`small`,e.BORDERED=`bordered`,e}({}),m=/* @__PURE__ */ function(e){return e.DEFAULT=`default`,e.VALID=`valid`,e.INVALID=`invalid`,e}({}),h=/* @__PURE__ */ function(e){return e.INFO=`info`,e.SUCCESS=`success`,e.WARNING=`warning`,e.ERROR=`error`,e.FEATURED=`featured`,e}({}),g=/* @__PURE__ */ function(e){return e.DEFAULT=`default`,e.CENTERED=`centered`,e.LINED=`lined`,e}({}),_=/* @__PURE__ */ function(e){return e.TWITTER=`twitter`,e.FACEBOOK=`facebook`,e.LINKEDIN=`linkedin`,e}({});export{o as _,e as a,c,u as d,d as f,h as g,p as h,t as i,s as l,g as m,r as n,m as o,_ as p,f as r,a as s,n as t,l as u,i as v};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e,t=class{constructor(e){this.popover=e,this.trigger=document.querySelector(`[popovertarget="${e.getAttribute(`id`)}"]`),this.init()}init=async()=>{this.trigger&&this.popover&&(this.supportsPopover()||await this.ensurePopoverPolyfill(),this.supportsAnchor()||(this.controller=new AbortController,this.popover.addEventListener(`toggle`,this.positionPopover,{signal:this.controller.signal})))};supportsAnchor=()=>`anchorName`in document.documentElement.style;supportsPopover=()=>`popover`in HTMLElement.prototype;ensurePopoverPolyfill=()=>(e||=import(`@oddbird/popover-polyfill`),e);positionPopover=async({newState:e})=>{if(e===`open`){let{computePosition:e,flip:t,shift:n}=await import(`@floating-ui/dom`);requestAnimationFrame(()=>{e(this.trigger,this.popover,{placement:this.placement||`top`,middleware:[t({padding:10}),n({padding:10})]}).then(({x:e,y:t})=>{this.popover.style.insetInlineStart=`${e}px`,this.popover.style.insetBlockStart=`${t}px`})})}};destroy(){this.controller.abort()}get placement(){return this.popover.getAttribute(`data-placement`)}};export{t as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./cookie-compliance-Bbm-0vpj.js";var t=class{options;context;trigger;element;id;isOpen;attached;constructor(e,t,n,r=document){if(!e)throw Error(`toggle is required.`);if(!t)throw Error(`element is required.`);let i={attribute:`inert`,shouldPreventDefault:!0,setInitialAttribute:!0,clickEvent:`click`};this.options={...i,...n},this.context=r||document,this.trigger=e,this.element=t,this.id=this.element.id||this.generatedId()}init=()=>{if(Object.prototype.hasOwnProperty.call(this.trigger,`disclosureWidget`))return;let{attribute:e,setInitialAttribute:t}=this.options;this.trigger.disclosureWidget=this,t&&this.element.setAttribute(e,``),this.attach()};handleToggle=()=>{let{attribute:e,setInitialAttribute:t}=this.options;this.element.toggleAttribute(e);let n=this.element.hasAttribute(e);this.isOpen=t?!n:n,this.trigger.setAttribute(`aria-expanded`,String(this.isOpen));let r=new CustomEvent(`disclosure-toggle`,{bubbles:!0,cancelable:!0,detail:{isOpen:this.isOpen,id:this.id,options:this.options,target:this.element}});this.trigger.dispatchEvent(r)};handleMouse=e=>{let{currentTarget:t,type:n,relatedTarget:r}=e;if(n===`mouseover`||n===`mouseout`){let e=this.trigger.parentNode;if(e!==t||e.contains(r))return}else if(this.trigger!==t)return;let{shouldPreventDefault:i}=this.options;this.handleToggle(),i&&(e.preventDefault(),e.stopPropagation())};handleKeyboard=e=>{let{key:t,target:n}=e;if(this.trigger!==n)return;let{isOpen:r}=this,{shouldPreventDefault:i}=this.options;switch(t){case`ArrowDown`:case`Enter`:r||this.handleToggle(),i&&(e.preventDefault(),e.stopPropagation());break;case`ArrowUp`:case`Escape`:r&&this.handleToggle(),i&&(e.preventDefault(),e.stopPropagation())}};attach=()=>{if(this.attached)return;let{clickEvent:e}=this.options;if(e===`mouseover`){let e=this.trigger.parentNode;e.addEventListener(`mouseover`,this.handleMouse),e.addEventListener(`mouseout`,this.handleMouse)}else this.trigger.addEventListener(`click`,this.handleMouse);this.trigger.addEventListener(`keydown`,this.handleKeyboard),this.trigger.setAttribute(`aria-expanded`,`false`),this.trigger.hasAttribute(`aria-controls`)||this.trigger.setAttribute(`aria-controls`,this.id),this.attached=!0};detach=()=>{if(!this.attached)return;this.isOpen&&this.handleToggle();let{clickEvent:e}=this.options;if(e===`mouseover`){let e=this.trigger.parentNode;e.removeEventListener(`mouseover`,this.handleMouse),e.removeEventListener(`mouseout`,this.handleMouse)}else this.trigger.removeEventListener(`click`,this.handleMouse);this.trigger.removeEventListener(`keydown`,this.handleKeyboard),this.trigger.removeAttribute(`aria-expanded`),this.attached=!1};generatedId=()=>{let e=this.trigger?.textContent?.trim();return e?n(e):``}},n=(t,n=20)=>{if(!e.notEmpty(t))return``;let r=t.toLowerCase().trim().replace(/\s+/g,`-`).replace(/[^-a-z0-9]/g,``).replace(/[\n\r]+|[\s]{2,}/g,``);return[...[,,,,,,].keys()].forEach(()=>{r.charAt(0).match(/[a-z]/g)||(r=r.substring(1))}),e.integer(n,1)&&(r=r.substring(0,n)),r},r=t=>e.notEmpty(t)?t.trim().replace(/(?:^\w|[A-Z]|\b\w|\s+)/g,(e,t)=>+e==0?``:t===0?e.toLowerCase():e.toUpperCase()).replace(/[^\w\s]/gi,``):``,i=(e,t)=>{if(typeof e!=`string`||!e||!Array.isArray(t))return!1;try{let{hostname:n}=new URL(e);return window.location.hostname===n||t.includes(n)}catch{return!1}},a=e=>{try{return new DOMParser().parseFromString(e,`text/html`).body.firstElementChild}catch{return null}},o=(e,t=!1,n=!1)=>{let r=new ResizeObserver(i=>{i.forEach(({contentBoxSize:i,borderBoxSize:a})=>{let[{inlineSize:o,blockSize:s}]=n?i:a;e.style.setProperty(`--inline-size`,`${o.toFixed(1)}px`),e.style.setProperty(`--block-size`,`${s.toFixed(1)}px`),t&&r.unobserve(e)})});r.observe(e)},s=(e,t,n,r=[])=>{let{target:i,clientY:a,clientX:o}=e,s=i instanceof HTMLOptionElement||i instanceof HTMLSelectElement;if((r?.filter(e=>e===i||e.contains(i))).length||s)return;let c=new IntersectionObserver(([{boundingClientRect:e}])=>{let{top:t,height:r,width:i,left:s}=e;t<=a&&a<=t+r&&s<=o&&o<=s+i||n(),c.disconnect()});c.observe(t)},c=(e,t)=>{let{key:n}=e;n===`Escape`&&t()},l=(e,t)=>{if(Object.hasOwn(window,`Drupal`)&&Object.hasOwn(Drupal,`behaviors`)){Drupal.behaviors[t]={attach:e};return}window.addEventListener(`DOMContentLoaded`,e.bind(document,document))};export{i as a,r as c,s as i,t as l,o as n,l as o,c as r,n as s,a as t};
|