@zanichelli/zanichelli-it-frontend-kit 1.4.0-RC2 → 1.4.0-RC3
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/dist/cjs/index-BLzQAHAI.js +1578 -0
- package/dist/cjs/index-BLzQAHAI.js.map +1 -0
- package/dist/cjs/index.cjs.js +5 -0
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/loader.cjs.js +15 -0
- package/dist/cjs/loader.cjs.js.map +1 -0
- package/dist/cjs/zanichelli-it-frontend-kit.cjs.js +27 -0
- package/dist/cjs/zanichelli-it-frontend-kit.cjs.js.map +1 -0
- package/dist/cjs/zanit-back-to-top.zanit-menubar.zanit-mobile-menubar.zanit-search-form.entry.cjs.js.map +1 -0
- package/dist/cjs/zanit-back-to-top_4.cjs.entry.js +1024 -0
- package/dist/cjs/zanit-back-to-top_4.cjs.entry.js.map +1 -0
- package/dist/collection/collection-manifest.json +15 -0
- package/dist/collection/components/back-to-top/back-to-top.css +16 -0
- package/dist/collection/components/back-to-top/back-to-top.js +130 -0
- package/dist/collection/components/back-to-top/back-to-top.js.map +1 -0
- package/dist/collection/components/menubar/menu/menu.css +95 -0
- package/dist/collection/components/menubar/menu/menu.js +38 -0
- package/dist/collection/components/menubar/menu/menu.js.map +1 -0
- package/dist/collection/components/menubar/menubar.css +170 -0
- package/dist/{zanichelli-it-frontend-kit/zanit-menubar.entry.js → collection/components/menubar/menubar.js} +203 -25
- package/dist/collection/components/menubar/menubar.js.map +1 -0
- package/dist/collection/components/menubar/mobile-menubar/mobile-menubar.css +122 -0
- package/{www/build/zanit-mobile-menubar.entry.js → dist/collection/components/menubar/mobile-menubar/mobile-menubar.js} +194 -24
- package/dist/collection/components/menubar/mobile-menubar/mobile-menubar.js.map +1 -0
- package/dist/collection/components/menubar/search-form/search-form.css +232 -0
- package/dist/{zanichelli-it-frontend-kit/zanit-search-form.entry.js → collection/components/menubar/search-form/search-form.js} +174 -110
- package/dist/collection/components/menubar/search-form/search-form.js.map +1 -0
- package/dist/collection/components/menubar/search-form/suggestions.js +85 -0
- package/dist/collection/components/menubar/search-form/suggestions.js.map +1 -0
- package/dist/collection/index.js +11 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/collection/utils/index.js +2 -0
- package/dist/collection/utils/index.js.map +1 -0
- package/dist/collection/utils/subjects.api.js +25 -0
- package/dist/collection/utils/subjects.api.js.map +1 -0
- package/dist/collection/utils/utils.js +25 -0
- package/dist/collection/utils/utils.js.map +1 -0
- package/dist/components/index.js +1335 -0
- package/dist/components/index.js.map +1 -0
- package/dist/{zanichelli-it-frontend-kit/zanit-mobile-menubar.entry.js → components/p-CmameXB-.js} +87 -12
- package/dist/components/p-CmameXB-.js.map +1 -0
- package/{www/build/zanit-search-form.entry.js → dist/components/p-DNk0AZSw.js} +92 -13
- package/dist/components/p-DNk0AZSw.js.map +1 -0
- package/dist/{zanichelli-it-frontend-kit/zanit-back-to-top.entry.js → components/zanit-back-to-top.js} +34 -10
- package/dist/components/zanit-back-to-top.js.map +1 -0
- package/{www/build/zanit-menubar.entry.js → dist/components/zanit-menubar.js} +57 -12
- package/dist/components/zanit-menubar.js.map +1 -0
- package/dist/components/zanit-mobile-menubar.js +9 -0
- package/dist/components/zanit-mobile-menubar.js.map +1 -0
- package/dist/components/zanit-search-form.js +9 -0
- package/dist/components/zanit-search-form.js.map +1 -0
- package/dist/esm/index-DSdvvVFj.js +1549 -0
- package/dist/esm/index-DSdvvVFj.js.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/loader.js +13 -0
- package/dist/esm/loader.js.map +1 -0
- package/dist/esm/zanichelli-it-frontend-kit.js +23 -0
- package/dist/esm/zanichelli-it-frontend-kit.js.map +1 -0
- package/dist/esm/zanit-back-to-top.zanit-menubar.zanit-mobile-menubar.zanit-search-form.entry.js.map +1 -0
- package/dist/esm/zanit-back-to-top_4.entry.js +1019 -0
- package/dist/esm/zanit-back-to-top_4.entry.js.map +1 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/zanichelli-it-frontend-kit/index.esm.js +0 -10
- package/dist/zanichelli-it-frontend-kit/index.esm.js.map +1 -1
- package/dist/zanichelli-it-frontend-kit/p-0f6b9e37.entry.js +2 -0
- package/dist/zanichelli-it-frontend-kit/p-0f6b9e37.entry.js.map +1 -0
- package/dist/zanichelli-it-frontend-kit/p-DSdvvVFj.js +3 -0
- package/dist/zanichelli-it-frontend-kit/p-DSdvvVFj.js.map +1 -0
- package/dist/zanichelli-it-frontend-kit/zanichelli-it-frontend-kit.css +1 -993
- package/dist/zanichelli-it-frontend-kit/zanichelli-it-frontend-kit.esm.js +1 -49
- package/dist/zanichelli-it-frontend-kit/zanichelli-it-frontend-kit.esm.js.map +1 -1
- package/dist/zanichelli-it-frontend-kit/zanit-back-to-top.zanit-menubar.zanit-mobile-menubar.zanit-search-form.entry.esm.js.map +1 -0
- package/package.json +1 -1
- package/www/build/index.esm.js +0 -10
- package/www/build/index.esm.js.map +1 -1
- package/www/build/p-0f6b9e37.entry.js +2 -0
- package/www/build/p-0f6b9e37.entry.js.map +1 -0
- package/www/build/p-43c395dc.css +1 -0
- package/www/build/p-9134b2b7.js +2 -0
- package/www/build/p-DSdvvVFj.js +3 -0
- package/www/build/p-DSdvvVFj.js.map +1 -0
- package/www/build/zanichelli-it-frontend-kit.css +1 -993
- package/www/build/zanichelli-it-frontend-kit.esm.js +1 -49
- package/www/build/zanichelli-it-frontend-kit.esm.js.map +1 -1
- package/www/build/zanit-back-to-top.zanit-menubar.zanit-mobile-menubar.zanit-search-form.entry.esm.js.map +1 -0
- package/www/index.html +2 -11
- package/dist/zanichelli-it-frontend-kit/index-DPw_TAEB.js +0 -4170
- package/dist/zanichelli-it-frontend-kit/index-DPw_TAEB.js.map +0 -1
- package/dist/zanichelli-it-frontend-kit/menu-BsP3cOc_.js +0 -46
- package/dist/zanichelli-it-frontend-kit/menu-BsP3cOc_.js.map +0 -1
- package/dist/zanichelli-it-frontend-kit/subjects.api-BRhngFD0.js +0 -54
- package/dist/zanichelli-it-frontend-kit/subjects.api-BRhngFD0.js.map +0 -1
- package/dist/zanichelli-it-frontend-kit/zanit-back-to-top.entry.esm.js.map +0 -1
- package/dist/zanichelli-it-frontend-kit/zanit-back-to-top.entry.js.map +0 -1
- package/dist/zanichelli-it-frontend-kit/zanit-menubar.entry.esm.js.map +0 -1
- package/dist/zanichelli-it-frontend-kit/zanit-menubar.entry.js.map +0 -1
- package/dist/zanichelli-it-frontend-kit/zanit-mobile-menubar.entry.esm.js.map +0 -1
- package/dist/zanichelli-it-frontend-kit/zanit-mobile-menubar.entry.js.map +0 -1
- package/dist/zanichelli-it-frontend-kit/zanit-search-form.entry.esm.js.map +0 -1
- package/dist/zanichelli-it-frontend-kit/zanit-search-form.entry.js.map +0 -1
- package/www/build/index-DPw_TAEB.js +0 -4170
- package/www/build/index-DPw_TAEB.js.map +0 -1
- package/www/build/menu-BsP3cOc_.js +0 -46
- package/www/build/menu-BsP3cOc_.js.map +0 -1
- package/www/build/subjects.api-BRhngFD0.js +0 -54
- package/www/build/subjects.api-BRhngFD0.js.map +0 -1
- package/www/build/zanit-back-to-top.entry.esm.js.map +0 -1
- package/www/build/zanit-back-to-top.entry.js +0 -64
- package/www/build/zanit-back-to-top.entry.js.map +0 -1
- package/www/build/zanit-menubar.entry.esm.js.map +0 -1
- package/www/build/zanit-menubar.entry.js.map +0 -1
- package/www/build/zanit-mobile-menubar.entry.esm.js.map +0 -1
- package/www/build/zanit-mobile-menubar.entry.js.map +0 -1
- package/www/build/zanit-search-form.entry.esm.js.map +0 -1
- package/www/build/zanit-search-form.entry.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["backToTopCss","ZanitBackTop","resizeObserver","mutationObserver","showFab","currentPageHeight","isMobile","pageMinHeight","scrollMinHeight","handleScroll","this","updateFabVisibility","handleResize","newHeight","document","body","scrollHeight","connectedCallback","ResizeObserver","observe","MutationObserver","childList","subtree","mobileMediaQuery","window","matchMedia","matches","onchange","mql","disconnectedCallback","disconnect","scrollY","scroll","scrollTo","top","behavior","render","h","Host","key","class","hidden","onClick","name","containsTarget","ancestor","event","composedPath","filter","el","some","contains","moveFocus","current","next","tabIndex","focus","preventScroll","isArrowUpKey","isArrowDownKey","isTabKey","isEscKey","DEFAULT_GROUP_KEY","DEFAULT_GROUP","id","label","getGroupedItems","items","groups","reduce","grouped","item","itemGroup","find","group","push","sort","a","b","Menu","controlledBy","currentPath","onItemKeyDown","length","isActive","includes","role","undefined","map","highlight","href","active","onKeyDown","target","SearchEnv","S3_SHOP_URL","dev","test","prod","async","getSubjectsByArea","searchEnv","response","fetch","ok","Error","status","json","err","console","error","menubarCss","menuCss","ZanitMenubar","openMenu","openNavbar","loading","data","searchQuery","PROD","searchArea","timerId","parseData","URL","fetchData","Promise","JSON","parse","Array","isArray","every","url","onItemsChange","initTabindex","onCurrentChange","split","Boolean","handleOutsideClick","host","handleKeydown","preventDefault","menuTriggerId","setTimeout","menuTrigger","shadowRoot","getElementById","handleMouseover","clearTimeout","handleMouseout","handleFocusout","relatedTarget","querySelector","cause","querySelectorAll","forEach","menubar","index","setAttribute","menuItems","menuItem","navbarItems","navbarItem","showMenu","getParentMenubarElements","itemEl","from","closest","focusPreviousItem","menubarElements","currentIndex","indexOf","prevItem","ariaHasPopup","focusNextItem","nextItem","handleItemKeydown","stopPropagation","firstItem","lastItem","pop","openItemMenu","getPreviousGroup","groupContainer","getNextGroup","firstMenuItem","handleMenuKeydown","itemElement","currentGroup","nextGroup","getAttribute","focusedItem","nextGroupItems","prevGroup","prevGroupItems","_","Fragment","onPointerOver","width","height","onResetSearch","subitem","mobileMenubarCss","ZanitMobileMenubar","lastCurrent","parentItem","menuType","open","setupData","parent","menuItemsElement","toggleMenu","type","imageAlt","link","AREA_LABELS","AREA_ORDER","Object","keys","buildSuggestions","query","subjectsByArea","selectedArea","matchingSubjectAreas","findSubjectAreas","hasSubject","subject","toUpperCase","suggestions","buildWordSuggestion","orderedSubjectAreas","area","getAreaOrder","buildSubjectSuggestion","subjectArea","user_query","buildId","buildLabel","aria_label","buildAriaLabel","buildUrl","q","buildDetail","materia","string","c","charCodeAt","toString","join","params","URLSearchParams","isSubject","cleanedQuery","cleanSearch","entries","subjects","toLowerCase","s","replace","searchFormCss","ZanitSearchForm","formElement","timer","showSearchbar","_searchQuery","activeSuggestion","showSuggestions","onSearchQueryChange","openSearchbar","resetSuggestions","onSearchAreaChange","onShowSearchbarChange","onShowSuggestionsChange","search","resetSearch","handleEsc","handleTab","searchbarInput","resetSearchQuery","emit","handleInputChange","value","updateSuggestions","trim","onSearchSubmit","suggestion","submitSuggestionSearch","searchEv","defaultPrevented","submit","ev","location","handleSuggestionsNav","options","o","nextId","firstId","lastId","currOption","renderSuggestions","renderHeading","e","k","innerHTML","searchbar","ref","method","action","onSubmit","onReset","disabled","placeholder","required","autocomplete","onInput"],"sources":["src/components/back-to-top/back-to-top.css?tag=zanit-back-to-top&encapsulation=scoped","src/components/back-to-top/back-to-top.tsx","src/utils/utils.ts","src/components/menubar/menu/menu.tsx","src/utils/subjects.api.ts","src/components/menubar/menubar.css?tag=zanit-menubar&encapsulation=shadow","src/components/menubar/menu/menu.css?tag=zanit-menubar&encapsulation=shadow","src/components/menubar/menubar.tsx","src/components/menubar/mobile-menubar/mobile-menubar.css?tag=zanit-mobile-menubar&encapsulation=shadow","src/components/menubar/menu/menu.css?tag=zanit-mobile-menubar&encapsulation=shadow","src/components/menubar/mobile-menubar/mobile-menubar.tsx","src/components/menubar/search-form/suggestions.ts","src/components/menubar/search-form/search-form.css?tag=zanit-search-form&encapsulation=shadow","src/components/menubar/search-form/search-form.tsx"],"sourcesContent":[":host {\n opacity: 1;\n transition: all 0.2s linear;\n visibility: visible;\n}\n\n:host.hidden {\n opacity: 0;\n visibility: hidden;\n}\n\n:host .z-fab {\n --color-primary01: var(--gray950);\n\n outline: 1px solid var(--color-white);\n}\n","import { Component, Element, Host, Listen, Prop, State, h } from '@stencil/core';\n\n/**\n * Back to top floating action button component.\n * Appears on scroll, given a min height for both scroll height and page height.\n */\n@Component({\n tag: 'zanit-back-to-top',\n styleUrls: ['back-to-top.css'],\n shadow: false,\n scoped: true,\n})\nexport class ZanitBackTop {\n private resizeObserver: ResizeObserver;\n private mutationObserver: MutationObserver;\n\n @Element() host: HTMLZanitBackToTopElement;\n\n /** Indicates whether the back-to-top button is visible and usable. */\n @State()\n showFab: boolean = false;\n\n /** Indicates the current height of the page. */\n @State()\n currentPageHeight: number;\n\n /** Indicates if the viewport is mobile. */\n @State()\n isMobile: boolean = false;\n\n /** Min page height from which the back-to-top button must appear. */\n @Prop()\n pageMinHeight: number = 1600;\n\n /** Min scroll height from which the back-to-top button must appear. */\n @Prop()\n scrollMinHeight: number = 800;\n\n @Listen('scroll', { target: 'window', passive: true })\n handleScroll() {\n this.updateFabVisibility();\n }\n\n private handleResize = () => {\n const newHeight = document.body.scrollHeight;\n if (newHeight !== this.currentPageHeight) {\n this.currentPageHeight = newHeight;\n this.updateFabVisibility();\n }\n };\n\n connectedCallback() {\n this.currentPageHeight = document.body.scrollHeight;\n this.resizeObserver = new ResizeObserver(this.handleResize);\n this.resizeObserver.observe(document.body);\n this.mutationObserver = new MutationObserver(this.handleResize);\n this.mutationObserver.observe(document.body, { childList: true, subtree: true });\n this.updateFabVisibility();\n\n const mobileMediaQuery = window.matchMedia('(width < 768px)');\n this.isMobile = mobileMediaQuery.matches;\n mobileMediaQuery.onchange = (mql) => {\n this.isMobile = mql.matches;\n };\n }\n\n disconnectedCallback() {\n this.resizeObserver.disconnect();\n this.mutationObserver.disconnect();\n }\n\n private updateFabVisibility() {\n this.showFab = this.currentPageHeight > this.pageMinHeight && window.scrollY > this.scrollMinHeight;\n }\n\n private scroll() {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n\n render() {\n return (\n <Host\n class={{ hidden: !this.showFab }}\n aria-hidden={this.showFab ? 'false' : 'true'}\n >\n <button\n class={{ 'z-fab': true, 'z-fab-extended': !this.isMobile }}\n onClick={() => this.scroll()}\n >\n <z-icon name=\"back-top\" />\n <span>Torna su</span>\n </button>\n </Host>\n );\n }\n}\n","/**\n * Check if an element contains an event target by checking its composedPath.\n * Useful when an event target may come from a component's shadow DOM.\n */\nexport const containsTarget = (ancestor: HTMLElement, event: Event) => {\n return event\n .composedPath()\n .filter((el) => el !== document && el !== window.window)\n .some((el) => ancestor.contains(el as HTMLElement));\n};\n\n/** Move the focus to `next` element, set tabindex to 0 for `next` and -1 to `current`. */\nexport const moveFocus = (current: HTMLElement, next: HTMLElement) => {\n current.tabIndex = -1;\n next.tabIndex = 0;\n next.focus({ preventScroll: true });\n};\n\n/** Check if event key is ArrowUp */\nexport const isArrowUpKey = (event: KeyboardEvent) => event.key === 'ArrowUp';\n\n/** Check if event key is ArrowDown */\nexport const isArrowDownKey = (event: KeyboardEvent) => event.key === 'ArrowDown';\n\n/** Check if event key is Tab */\nexport const isTabKey = (event: KeyboardEvent) => event.key === 'Tab';\n\n/** Check if event key is Escape */\nexport const isEscKey = (event: KeyboardEvent) => event.key === 'Escape';\n","import { FunctionalComponent, h } from '@stencil/core';\nimport { MenuItem } from '../../../utils';\n\n/**\n * Menu of items that can be grouped.\n * @member {string} controlledBy - The HTML id of the element that controls the menu.\n * @member {MenuItem[]} items - The items to show in the menu.\n * @member {string[]} currentPath - Path of current item.\n * @member {function} onItemKeyDown - The function to call when a key is pressed from a menuitem.\n */\nexport interface MenuProps {\n controlledBy?: string;\n items?: MenuItem[];\n currentPath?: string[];\n onItemKeyDown?: (event: KeyboardEvent) => void;\n}\n\nconst DEFAULT_GROUP_KEY = 'default';\nconst DEFAULT_GROUP = {\n id: DEFAULT_GROUP_KEY,\n label: DEFAULT_GROUP_KEY,\n};\n\n/** Get the items grouped by their group. */\nconst getGroupedItems = (items: MenuItem[]) => {\n const groups = items.reduce<{ group: MenuProps['items'][number]['group']; items: MenuItem[] }[]>((grouped, item) => {\n const itemGroup = grouped.find(({ group }) => group.id === (item.group?.id || DEFAULT_GROUP.id));\n if (!itemGroup) {\n grouped.push({ group: item.group ?? DEFAULT_GROUP, items: [item] });\n } else {\n itemGroup.items.push(item);\n }\n\n return grouped;\n }, []);\n\n // Sort to keep default group at the end\n return groups.sort((a, b) => (a.group.id === DEFAULT_GROUP_KEY ? 1 : b.group.id === DEFAULT_GROUP_KEY ? -1 : 0));\n};\n\n/**\n * Floating menu component. It shows a list of items that can be grouped.\n */\nexport const Menu: FunctionalComponent<MenuProps> = ({ controlledBy, items, currentPath = [], onItemKeyDown }) => {\n if (!items?.length) {\n return null;\n }\n\n const groups = getGroupedItems(items);\n\n const isActive = (item: MenuItem) => currentPath.includes(controlledBy) && currentPath.includes(item.id);\n\n return (\n <div\n class=\"menu-wrapper\"\n role=\"none\"\n >\n <div\n class=\"menu\"\n aria-labelledby={controlledBy ?? undefined}\n role=\"menu\"\n >\n {groups.map(({ group, items }) => (\n <div class={{ group: true, highlight: items.some((item) => item.highlight) }}>\n {group.id !== DEFAULT_GROUP_KEY ? (\n <div\n class=\"group-name\"\n id={group.id}\n >\n {group.label}\n </div>\n ) : groups.length > 1 ? (\n // empty div to keep the same height as the other groups\n <div class=\"group-name\" />\n ) : null}\n <ul\n class=\"menu-list\"\n role=\"group\"\n aria-labelledby={group.id !== DEFAULT_GROUP_KEY ? group.id : undefined}\n >\n {items.map((item) => (\n <li role=\"none\">\n {item.href && (\n <a\n class={{\n 'menu-item': true,\n 'active': isActive(item),\n }}\n href={item.href}\n role=\"menuitem\"\n tabIndex={-1}\n aria-current={isActive(item) ? 'page' : 'false'}\n onKeyDown={(event) => onItemKeyDown(event)}\n target={item.target}\n >\n {item.label}\n </a>\n )}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n );\n};\n","export enum SearchEnv {\n DEV = 'dev',\n TEST = 'test',\n PROD = 'prod',\n}\n\nconst S3_SHOP_URL: Record<string, string> = {\n dev: 'https://zanichelli-shop-dev.s3.eu-west-1.amazonaws.com',\n test: 'https://zanichelli-shop-test.s3.eu-west-1.amazonaws.com',\n prod: 'https://zanichelli-shop.s3.eu-west-1.amazonaws.com',\n};\n\nexport async function getSubjectsByArea(searchEnv: SearchEnv): Promise<Record<string, string[]>> {\n try {\n const response = await fetch(`${S3_SHOP_URL[searchEnv]}/categories.json`);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}`);\n }\n return await response.json();\n } catch (err) {\n console.error('Error fetching subjects:', err);\n return {};\n }\n}\n",":host {\n --zanit-menubar-max-width: ;\n --zanit-menubar-top-offset: ;\n\n position: relative;\n z-index: 2;\n display: flex;\n width: 100%;\n background-color: #fff;\n color: var(--gray900);\n font-family: var(--font-family-sans);\n}\n\n:host,\n*,\n::before,\n::after {\n box-sizing: border-box;\n}\n\n*:focus:focus-visible {\n box-shadow: var(--shadow-focus-primary);\n outline: none;\n}\n\nul {\n padding: 0;\n margin: 0;\n list-style: none;\n}\n\na {\n color: var(--gray900);\n cursor: pointer;\n text-decoration: none;\n}\n\nbutton {\n all: unset;\n cursor: pointer;\n}\n\n:host nav {\n width: 100%;\n}\n\n.shadow-wrapper {\n position: relative;\n z-index: 1;\n display: flex;\n width: 100%;\n}\n\n.shadow-wrapper::after {\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n background: transparent;\n box-shadow: var(--shadow-1);\n content: '';\n pointer-events: none;\n}\n\n.width-limiter {\n position: relative;\n display: flex;\n width: 100%;\n max-width: var(--zanit-menubar-max-width, 1366px);\n margin: 0 auto;\n}\n\n.shadow-wrapper + .shadow-wrapper {\n z-index: 0;\n}\n\n.sub-menubar > ul {\n gap: 28px;\n}\n\n.width-limiter > ul,\n.sub-menubar > ul {\n position: relative;\n z-index: 3;\n display: flex;\n width: 100%;\n align-items: center;\n padding: 0 var(--grid-margin);\n margin-right: auto;\n margin-left: auto;\n gap: 20px;\n}\n\n.shadow-wrapper > .width-limiter,\n.shadow-wrapper > ul {\n width: 100%;\n max-width: var(--zanit-menubar-max-width, 1366px);\n}\n\nul.menubar {\n height: 3rem;\n padding-right: 0;\n}\n\n.menubar z-ghost-loading {\n display: block;\n width: 120px;\n height: 1.25rem;\n}\n\n/* separator bar */\n.menubar > li[role='separator'] {\n width: 1px;\n height: 1.25rem;\n background-color: #000;\n}\n\n.menubar-item {\n position: relative;\n display: flex;\n align-items: center;\n padding: 14px 0;\n font-size: 1rem;\n gap: 8px;\n line-height: 1.25rem;\n}\n\n.menubar .menubar-item {\n text-transform: uppercase;\n}\n\n.menubar-item [data-text] {\n display: flex;\n flex-direction: column;\n}\n\n.menubar-item.active > [data-text],\n.menubar-item:hover > [data-text],\n.menubar-item:focus:focus-visible > [data-text] {\n font-weight: var(--font-bd);\n}\n\n/* To avoid size changes in the element, when it is hovered and becomes bold,\nwe put the same text already bold with height 0, so as to always occupy the maximum necessary width. */\n.menubar-item > [data-text]::after {\n height: 0;\n content: attr(data-text) / '';\n font-weight: var(--font-bd);\n letter-spacing: normal;\n pointer-events: none;\n user-select: none;\n visibility: hidden;\n}\n\n/* active item bottom border */\n.sub-menubar .menubar-item.active::after {\n position: absolute;\n z-index: -1;\n bottom: 0;\n left: -4px;\n width: calc(100% + 8px); /* the border is 4px per side larger than its container */\n height: 4px;\n background-color: var(--red500);\n content: '';\n}\n\nzanit-search-form {\n margin-left: auto;\n}\n",".menu-wrapper {\n width: 100%;\n background-color: #fff;\n}\n\n.menu {\n position: relative;\n display: flex;\n width: 100%;\n flex-direction: column;\n gap: 32px 0;\n}\n\n.menu .group {\n display: flex;\n flex-direction: column;\n}\n\n.menu .group .group-name {\n border-bottom: 1px solid currentcolor;\n margin-bottom: 4px;\n color: var(--red500);\n font-size: 0.875rem;\n font-weight: var(--font-md);\n}\n\n.menu .group .menu-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.menu .group .menu-list .menu-item {\n display: block;\n border-bottom: 2px solid transparent;\n font-size: 0.875rem;\n font-weight: var(--font-md);\n}\n\n.menu .menu-list .menu-item.active,\n.menu .menu-list .menu-item:hover {\n border-bottom-color: var(--red500);\n}\n\n.menu .group.highlight .menu-list .menu-item {\n font-size: 1rem;\n}\n\n@media (width >= 768px) {\n .menu-wrapper {\n position: absolute;\n top: 100%;\n left: 0;\n display: flex;\n justify-content: center;\n box-shadow: var(--shadow-1);\n }\n\n .menu {\n display: grid;\n width: 100%;\n max-width: var(--zanit-menubar-max-width, 1366px);\n padding: 16px var(--grid-margin);\n gap: 0 24px;\n grid-auto-columns: minmax(0, max-content);\n grid-auto-flow: column;\n grid-template-rows: minmax(0, max-content) max-content;\n }\n\n .menu .group {\n display: grid;\n grid-row: 1 / -1;\n grid-template-columns: 1fr;\n grid-template-rows: subgrid;\n }\n\n @supports not (grid-template-rows: subgrid) {\n .menu .group {\n grid-template-rows: repeat(auto-fit, minmax(0, max-content));\n }\n }\n\n .menu .group .group-name {\n border: none;\n margin-bottom: 16px;\n }\n\n .menu .group .menu-list .menu-item {\n font-size: 1rem;\n }\n\n .menu .group.highlight .menu-list .menu-item {\n font-size: 1.5rem;\n }\n}\n","import { Component, Element, Fragment, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { MenubarItem, containsTarget, moveFocus } from '../../utils';\nimport { Menu } from './menu/menu';\nimport { SearchEnv } from '../../utils/subjects.api';\n\n/**\n * Main menubar component. Each item can have a menu with subitems\n * When a main menubar item is the current active one, a sub-menubar is shown and each subitem can have a menu with subitems.\n * @cssprop {--zanit-menubar-max-width} Maximum width of the menubar.\n */\n@Component({\n tag: 'zanit-menubar',\n styleUrls: ['menubar.css', 'menu/menu.css'],\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ZanitMenubar {\n @Element() host: HTMLZanitMenubarElement;\n\n /** Menubar items extracted from `data`. */\n @State()\n items: MenubarItem[] = [];\n\n /** ID of the currently open menu. */\n @State()\n openMenu: string | undefined = undefined;\n\n /** ID of the item to show the subitems navbar for. */\n @State()\n openNavbar: string | undefined = undefined;\n\n /** IDs of the current prop */\n @State()\n currentPath: string[] = [];\n\n @State()\n isMobile: boolean = false;\n\n @State()\n loading: boolean = false;\n\n /** The data to build the menu (as an array of `MenubarItem` or a JSON array) or the url to fetch to retrieve it. */\n @Prop()\n data: Promise<MenubarItem[]> | MenubarItem[] | URL | string;\n\n /** Path of the current item. */\n @Prop()\n current: string | undefined = undefined;\n\n /** Initial search query. */\n @Prop({ mutable: true })\n searchQuery: string | undefined = undefined;\n\n /** Environment for search suggestions */\n @Prop() searchEnv: SearchEnv = SearchEnv.PROD;\n\n /** Search area (e.g. \"SCUOLA\", \"UNIVERSITÀ\", \"DIZIONARI\"). */\n @Prop() searchArea?: string | undefined;\n\n private timerId: number;\n\n /** Setup the list of items. */\n @Watch('data')\n async parseData(data: typeof this.data) {\n if (!data) {\n return;\n }\n\n if (data instanceof URL) {\n this.items = await this.fetchData(data);\n } else if (data instanceof Promise) {\n this.loading = true;\n this.items = await data;\n this.loading = false;\n } else if (typeof data === 'string') {\n try {\n this.items = JSON.parse(data);\n if (!Array.isArray(this.items) || !this.items?.every((item) => item satisfies MenubarItem)) {\n throw new Error('Expected an array of MenubarItem objects.');\n }\n } catch {\n let url: URL;\n try {\n url = new URL(data);\n } catch {\n throw new Error('Invalid string provided for `data` property: not a valid url or JSON.');\n }\n\n this.items = await this.fetchData(url);\n }\n } else if (Array.isArray(data) && data.every((item) => item satisfies MenubarItem)) {\n this.items = data;\n } else {\n throw new Error(\n 'Invalid `data` property value. Expected an url, a JSON or an array/promise of MenubarItem objects.'\n );\n }\n }\n\n @Watch('items')\n onItemsChange() {\n this.initTabindex();\n }\n\n @Watch('current')\n onCurrentChange() {\n this.currentPath = this.current?.split('/').filter(Boolean) || [];\n }\n\n async connectedCallback() {\n const mobileMediaQuery = window.matchMedia('(width < 768px)');\n this.isMobile = mobileMediaQuery.matches;\n mobileMediaQuery.onchange = (mql) => {\n this.isMobile = mql.matches;\n this.initTabindex();\n this.openMenu = undefined;\n };\n await this.parseData(this.data);\n this.onCurrentChange();\n this.initTabindex();\n }\n\n /** Close any open menu when clicking outside. */\n @Listen('click', { target: 'document', passive: true })\n handleOutsideClick(event: MouseEvent) {\n if (!this.openMenu || containsTarget(this.host, event)) {\n return;\n }\n\n this.openMenu = undefined;\n }\n\n /** Close any open menu when pressing Escape or Tab.\n * Uses document-level listener to ensure Escape works from any focus location within the menu.\n */\n @Listen('keydown', { target: 'document', passive: true })\n handleKeydown(event: KeyboardEvent) {\n switch (event.key) {\n case 'Escape': {\n if (this.openMenu) {\n event.preventDefault();\n // Return focus to the menu trigger after closing\n const menuTriggerId = this.openMenu;\n this.openMenu = undefined;\n // Use setTimeout(0) to defer focus until after Stencil's render cycle completes\n setTimeout(() => {\n const menuTrigger = this.host.shadowRoot.getElementById(menuTriggerId);\n if (menuTrigger) {\n menuTrigger.focus();\n }\n }, 0);\n }\n break;\n }\n case 'Tab':\n this.openMenu = undefined;\n break;\n }\n }\n\n @Listen('mouseover', { passive: true })\n handleMouseover() {\n clearTimeout(this.timerId);\n }\n\n /**\n * Automatically close any open menu on mouseout after with a little delay.\n * The delay is useful to avoid immediate closing when the pointer briefly leaves the component.\n */\n @Listen('mouseout', { passive: true })\n handleMouseout(event: MouseEvent) {\n this.timerId = window.setTimeout(() => {\n if (!this.openMenu || containsTarget(this.host, event)) {\n return;\n }\n\n this.openMenu = undefined;\n }, 500);\n }\n\n /** Close the menu when it loses focus. */\n @Listen('focusout', { passive: true })\n handleFocusout(event: FocusEvent) {\n const relatedTarget = event.relatedTarget as HTMLElement;\n if (!this.openMenu || this.host.shadowRoot.querySelector('.menu')?.contains(relatedTarget)) {\n return;\n }\n\n this.openMenu = undefined;\n }\n\n /** Fetch data from passed URL. */\n private async fetchData(url: URL) {\n try {\n this.loading = true;\n const data = await (await fetch(url)).json();\n this.loading = false;\n if (!Array.isArray(data) || !data.every((item) => item satisfies MenubarItem)) {\n throw new Error('Invalid data structure. Expected an array of MenuItem objects.');\n }\n\n return data as MenubarItem[];\n } catch (error) {\n this.loading = false;\n console.error('Error fetching menubar data:', error);\n throw new Error('Failed to fetch menubar data from the provided URL.', { cause: error });\n }\n }\n\n /** Initialize tabindex on menuitems of menubars, setting -1 to all but the first one. */\n private initTabindex() {\n setTimeout(() => {\n this.host.shadowRoot.querySelectorAll('[role=\"menubar\"]')?.forEach((menubar) => {\n menubar\n .querySelectorAll('[role=\"menuitem\"]')\n ?.forEach((item, index) => item.setAttribute('tabindex', index === 0 ? '0' : '-1'));\n });\n }, 100);\n }\n\n /** Indicates whether the element has to be highlighted by checking whether it is set as current or one of its descendants is. */\n private isActive(item: MenubarItem) {\n if (this.currentPath.length === 0) {\n return false;\n }\n\n if (this.currentPath.includes(item.id)) {\n return true;\n }\n\n if (item.menuItems?.length) {\n return item.menuItems.some((menuItem) => menuItem.id === this.current);\n }\n\n if (item.navbarItems?.length) {\n const isActive = item.navbarItems.some((navbarItem) => this.isActive(navbarItem));\n if (isActive) {\n return true;\n }\n }\n\n return false;\n }\n\n /** Opens the menu associated with the menubar `item`, if any. */\n private showMenu(item: MenubarItem) {\n this.openMenu = undefined; // close any open menu first\n if (!item.menuItems?.length) {\n return;\n }\n\n this.openMenu = item.id;\n }\n\n /** Get all elements with `menuitem` role inside parent's `menubar`. * */\n private getParentMenubarElements(itemEl: HTMLElement) {\n return Array.from(\n itemEl?.closest('[role=\"menubar\"]')?.querySelectorAll(':scope > li a[role=\"menuitem\"]') ?? []\n ) as HTMLElement[];\n }\n\n /** Move the focus to the previous menubar item, or the last one. Then open its menu if any other menu was open. */\n private focusPreviousItem(itemEl: HTMLElement) {\n this.openMenu = undefined; // close any open menu first\n const menubarElements = this.getParentMenubarElements(itemEl);\n const currentIndex = menubarElements.indexOf(itemEl);\n const prevItem = menubarElements[(currentIndex - 1 + menubarElements.length) % menubarElements.length]; // get previous item or last one\n moveFocus(itemEl, prevItem);\n // open the item's menu if any other menu was open\n if (prevItem.ariaHasPopup === 'true' && this.openMenu) {\n this.openMenu = prevItem.id;\n }\n }\n\n /** Move the focus to the next menubar item, or the first one. Then open its menu if any other menu was open. */\n private focusNextItem(itemEl: HTMLElement) {\n this.openMenu = undefined; // close any open menu first\n const menubarElements = this.getParentMenubarElements(itemEl);\n const currentIndex = menubarElements.indexOf(itemEl);\n const nextItem = menubarElements[(currentIndex + 1) % menubarElements.length]; // get next item or first one\n moveFocus(itemEl, nextItem);\n // open the item's menu if any other menu was open\n if (nextItem.ariaHasPopup === 'true' && this.openMenu) {\n this.openMenu = nextItem.id;\n }\n }\n\n /** Handles keyboard navigation on menubar items. */\n private handleItemKeydown(event: KeyboardEvent, item: MenubarItem) {\n const target = event.target as HTMLElement;\n switch (event.key) {\n case 'Home': {\n event.preventDefault();\n event.stopPropagation();\n const firstItem = this.getParentMenubarElements(target)[0];\n moveFocus(target, firstItem);\n break;\n }\n case 'End': {\n event.preventDefault();\n event.stopPropagation();\n const lastItem = this.getParentMenubarElements(target).pop();\n moveFocus(target, lastItem);\n break;\n }\n case 'ArrowUp': {\n if (!item.menuItems?.length) {\n break;\n }\n event.preventDefault();\n event.stopPropagation();\n this.openMenu = item.id;\n // focus last item of the menu\n setTimeout(() => {\n const menuItems = Array.from(\n this.host.shadowRoot.querySelectorAll(`[aria-labelledby=${item.id}] [role=\"menuitem\"]`)\n ) as HTMLElement[];\n moveFocus(target, menuItems[menuItems.length - 1]);\n }, 100);\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n event.stopPropagation();\n this.focusNextItem(target);\n break;\n }\n case 'ArrowDown': {\n if (!item.menuItems?.length) {\n break;\n }\n\n this.openItemMenu(item);\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n event.stopPropagation();\n this.focusPreviousItem(target);\n break;\n }\n case ' ': {\n event.preventDefault();\n event.stopPropagation();\n if (this.openMenu === item.id) {\n this.openMenu = undefined;\n break;\n } else if (item.menuItems?.length) {\n this.openItemMenu(item);\n break;\n }\n }\n }\n }\n\n /** Get the previous element with `role=group`. */\n private getPreviousGroup(groupContainer: HTMLElement) {\n const groups = Array.from(\n groupContainer?.closest('[role=\"menu\"]')?.querySelectorAll('[role=\"group\"]') ?? []\n ) as HTMLElement[];\n const currentIndex = groups.indexOf(groupContainer);\n\n return groups[currentIndex - 1];\n }\n\n /** Get the next element with `role=group`. */\n private getNextGroup(groupContainer: HTMLElement) {\n const groups = Array.from(\n groupContainer?.closest('[role=\"menu\"]')?.querySelectorAll('[role=\"group\"]') ?? []\n ) as HTMLElement[];\n const currentIndex = groups.indexOf(groupContainer);\n\n return groups[currentIndex + 1];\n }\n\n private openItemMenu(item: MenubarItem) {\n this.openMenu = item.id;\n setTimeout(() => {\n // focus first item of the menu\n const firstMenuItem = this.host.shadowRoot.querySelector(\n `[aria-labelledby=${item.id}] [role=\"menuitem\"]`\n ) as HTMLElement;\n firstMenuItem.tabIndex = 0;\n firstMenuItem.focus({ preventScroll: true });\n }, 100);\n }\n\n /** Handles keyboard navigation events from `Menu` component. */\n private handleMenuKeydown(event: KeyboardEvent) {\n const itemElement = event.target as HTMLElement;\n const items = Array.from(\n itemElement.closest('[role=\"menu\"]')?.querySelectorAll('[role=\"menuitem\"]') ?? []\n ) as HTMLElement[];\n const currentIndex = items.indexOf(itemElement);\n switch (event.key) {\n case 'ArrowUp': {\n event.preventDefault();\n event.stopPropagation();\n const prevItem = items[currentIndex - 1] || items[items.length - 1];\n moveFocus(itemElement, prevItem);\n break;\n }\n // Move the focus to the first item of the next group if any, otherwise move it to the next menubar item\n case 'ArrowRight': {\n event.preventDefault();\n event.stopPropagation();\n const currentGroup = itemElement.closest('[role=group]') as HTMLElement;\n const nextGroup = this.getNextGroup(currentGroup);\n if (!nextGroup) {\n itemElement.tabIndex = -1;\n const menuTriggerId = itemElement.closest('[role=\"menu\"][aria-labelledby]').getAttribute('aria-labelledby');\n const focusedItem = this.host.shadowRoot.getElementById(menuTriggerId);\n this.focusNextItem(focusedItem);\n break;\n }\n\n const nextGroupItems = (nextGroup.querySelectorAll('[role=\"menuitem\"]') ?? []) as HTMLElement[];\n moveFocus(itemElement, nextGroupItems[0]);\n break;\n }\n case 'ArrowDown': {\n event.preventDefault();\n event.stopPropagation();\n const nextItem = items[currentIndex + 1] || items[0];\n moveFocus(itemElement, nextItem);\n break;\n }\n // Move the focus to the first item of the previous group if any, otherwise move it to the previous menubar item\n case 'ArrowLeft': {\n event.preventDefault();\n event.stopPropagation();\n const currentGroup = itemElement.closest('[role=group]') as HTMLElement;\n const prevGroup = this.getPreviousGroup(currentGroup);\n if (!prevGroup) {\n itemElement.tabIndex = -1;\n const menuTriggerId = itemElement.closest('[role=\"menu\"][aria-labelledby]').getAttribute('aria-labelledby');\n const focusedItem = this.host.shadowRoot.getElementById(menuTriggerId);\n this.focusPreviousItem(focusedItem);\n break;\n }\n\n const prevGroupItems = (prevGroup.querySelectorAll('[role=\"menuitem\"]') ?? []) as HTMLElement[];\n moveFocus(itemElement, prevGroupItems[0]);\n break;\n }\n case 'Home':\n // Move to the first menu item\n event.preventDefault();\n event.stopPropagation();\n moveFocus(itemElement, items[0]);\n break;\n case 'End':\n // Move to the last menu item\n event.preventDefault();\n event.stopPropagation();\n moveFocus(itemElement, items[items.length - 1]);\n break;\n }\n }\n\n render() {\n if (this.isMobile) {\n return (\n <zanit-mobile-menubar\n items={this.items}\n currentPath={this.currentPath}\n searchQuery={this.searchQuery}\n loading={this.loading}\n searchArea={this.searchArea}\n searchEnv={this.searchEnv}\n />\n );\n }\n\n return (\n <nav aria-label=\"Zanichelli.it\">\n <div class=\"shadow-wrapper\">\n <div class=\"width-limiter\">\n <ul\n class=\"menubar\"\n role=\"menubar\"\n aria-label=\"Zanichelli.it\"\n >\n {this.loading &&\n [...new Array(4)].map((_, index) => (\n <Fragment>\n <li role=\"none\">\n <div class=\"menubar-item\">\n <z-ghost-loading></z-ghost-loading>\n </div>\n </li>\n {index < 3 && <li role=\"separator\"></li>}\n </Fragment>\n ))}\n {this.items?.map((item, index) => (\n <Fragment>\n <li role=\"none\">\n <a\n class={{\n 'menubar-item': true,\n 'active': this.isActive(item),\n }}\n href={item.href}\n id={item.id}\n role=\"menuitem\"\n tabIndex={-1}\n aria-expanded={\n item.menuItems?.length ? (this.openMenu === item.id ? 'true' : 'false') : undefined\n }\n aria-haspopup={item.menuItems?.length ? 'true' : 'false'}\n aria-current={this.current.includes(item.id) ? 'page' : 'false'}\n onPointerOver={() => this.showMenu(item)}\n onKeyDown={(event) => this.handleItemKeydown(event, item)}\n target={item.target}\n >\n <span data-text={item.label}>{item.label}</span>\n {item.menuItems?.length > 0 && (\n <z-icon\n name={this.openMenu === item.id ? 'chevron-up' : 'chevron-down'}\n width=\"0.875rem\"\n height=\"0.875rem\"\n />\n )}\n </a>\n </li>\n {index < this.items?.length - 1 && <li role=\"separator\"></li>}\n </Fragment>\n ))}\n </ul>\n <zanit-search-form\n searchQuery={this.searchQuery}\n searchArea={this.searchArea}\n searchEnv={this.searchEnv}\n onResetSearch={() => (this.searchQuery = undefined)}\n />\n </div>\n\n {this.items.map(\n (item) =>\n this.openMenu === item.id && (\n <Menu\n controlledBy={item.id}\n items={item.menuItems}\n currentPath={this.currentPath}\n onItemKeyDown={(event) => this.handleMenuKeydown(event)}\n />\n )\n )}\n </div>\n\n {this.items\n ?.filter((item) => this.isActive(item))\n .map(\n (item) =>\n item.navbarItems?.length && (\n <nav\n class={{ 'sub-menubar': true, 'shadow-wrapper': true }}\n aria-label={`Sezioni: ${item.label}`}\n >\n <ul role=\"menubar\">\n {item.navbarItems.map((subitem) => (\n <Fragment>\n <li role=\"none\">\n <a\n class={{\n 'menubar-item': true,\n 'active': this.isActive(subitem),\n }}\n href={subitem.href}\n id={subitem.id}\n role=\"menuitem\"\n tabIndex={-1}\n aria-haspopup={subitem.menuItems?.length ? 'true' : 'false'}\n aria-expanded={\n subitem.menuItems?.length ? (this.openMenu === subitem.id ? 'true' : 'false') : undefined\n }\n aria-current={this.current.includes(subitem.id) ? 'page' : 'false'}\n onPointerOver={() => this.showMenu(subitem)}\n onKeyDown={(event) => this.handleItemKeydown(event, subitem)}\n target={item.target}\n >\n <span>{subitem.label}</span>\n {subitem.menuItems?.length > 0 && (\n <z-icon\n name={this.openMenu === subitem.id ? 'chevron-up' : 'chevron-down'}\n width=\"0.75rem\"\n height=\"0.75rem\"\n />\n )}\n </a>\n </li>\n </Fragment>\n ))}\n </ul>\n {item.navbarItems.map(\n (subitem) =>\n this.openMenu === subitem.id && (\n <Menu\n controlledBy={subitem.id}\n items={subitem.menuItems}\n currentPath={this.currentPath}\n onItemKeyDown={(event) => this.handleMenuKeydown(event)}\n />\n )\n )}\n </nav>\n )\n )}\n </nav>\n );\n }\n}\n",":host {\n position: relative;\n z-index: 2;\n display: block;\n width: 100%;\n max-width: 100%;\n height: 3rem;\n background-color: #fff;\n color: var(--gray900);\n fill: var(--gray900);\n font-family: var(--font-family-sans);\n}\n\n:host,\n*,\n::before,\n::after {\n box-sizing: border-box;\n}\n\n*:focus:focus-visible {\n box-shadow: var(--shadow-focus-primary);\n outline: none;\n}\n\nul {\n padding: 0;\n margin: 0;\n list-style: none;\n}\n\na {\n color: var(--gray900);\n cursor: pointer;\n text-decoration: none;\n}\n\nbutton {\n all: unset;\n cursor: pointer;\n}\n\nnav {\n display: flex;\n width: 100%;\n align-items: center;\n padding-left: var(--grid-margin);\n gap: 8px;\n}\n\nnav::after {\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n background: transparent;\n box-shadow: var(--shadow-1);\n content: '';\n pointer-events: none;\n}\n\nz-logo {\n margin: 8px 0;\n}\n\n.mobile-menu {\n position: absolute;\n top: 100%;\n left: 0;\n display: flex;\n overflow: auto;\n width: 100%;\n max-height: calc(100vh - 48px - var(--zanit-menubar-top-offset, 0px));\n flex-direction: column;\n padding: 16px var(--grid-margin) 32px;\n background-color: #fff;\n box-shadow: var(--shadow-2);\n gap: 8px;\n}\n\n.mobile-menu li {\n width: 100%;\n}\n\n.mobile-menu .items-container {\n display: flex;\n min-height: 256px;\n flex-direction: column;\n gap: 8px;\n}\n\n.mobile-menu .items-container z-ghost-loading {\n width: 40%;\n height: 1.2rem;\n}\n\n.mobile-menu .items-container .menubar-item {\n display: block;\n width: 100%;\n padding: 8px 0;\n font-size: 1rem;\n text-align: left;\n}\n\n.mobile-menu .items-container li:not(:last-child) .menubar-item {\n border-bottom: 1px solid #000;\n}\n\n[role='menuitem'].parent {\n display: flex;\n width: fit-content;\n align-items: center;\n padding: 0;\n border: none;\n font-size: 0.875rem;\n gap: 8px;\n}\n\nzanit-search-form {\n margin-left: auto;\n}\n",".menu-wrapper {\n width: 100%;\n background-color: #fff;\n}\n\n.menu {\n position: relative;\n display: flex;\n width: 100%;\n flex-direction: column;\n gap: 32px 0;\n}\n\n.menu .group {\n display: flex;\n flex-direction: column;\n}\n\n.menu .group .group-name {\n border-bottom: 1px solid currentcolor;\n margin-bottom: 4px;\n color: var(--red500);\n font-size: 0.875rem;\n font-weight: var(--font-md);\n}\n\n.menu .group .menu-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.menu .group .menu-list .menu-item {\n display: block;\n border-bottom: 2px solid transparent;\n font-size: 0.875rem;\n font-weight: var(--font-md);\n}\n\n.menu .menu-list .menu-item.active,\n.menu .menu-list .menu-item:hover {\n border-bottom-color: var(--red500);\n}\n\n.menu .group.highlight .menu-list .menu-item {\n font-size: 1rem;\n}\n\n@media (width >= 768px) {\n .menu-wrapper {\n position: absolute;\n top: 100%;\n left: 0;\n display: flex;\n justify-content: center;\n box-shadow: var(--shadow-1);\n }\n\n .menu {\n display: grid;\n width: 100%;\n max-width: var(--zanit-menubar-max-width, 1366px);\n padding: 16px var(--grid-margin);\n gap: 0 24px;\n grid-auto-columns: minmax(0, max-content);\n grid-auto-flow: column;\n grid-template-rows: minmax(0, max-content) max-content;\n }\n\n .menu .group {\n display: grid;\n grid-row: 1 / -1;\n grid-template-columns: 1fr;\n grid-template-rows: subgrid;\n }\n\n @supports not (grid-template-rows: subgrid) {\n .menu .group {\n grid-template-rows: repeat(auto-fit, minmax(0, max-content));\n }\n }\n\n .menu .group .group-name {\n border: none;\n margin-bottom: 16px;\n }\n\n .menu .group .menu-list .menu-item {\n font-size: 1rem;\n }\n\n .menu .group.highlight .menu-list .menu-item {\n font-size: 1.5rem;\n }\n}\n","import { Component, Element, h, Listen, Prop, State, Watch } from '@stencil/core';\nimport { MenubarItem, MenuItem } from '../../../utils';\nimport { Menu } from '../menu/menu';\nimport { containsTarget, moveFocus } from '../../../utils';\nimport { SearchEnv } from '../../../utils/subjects.api';\n\n/** Mobile menubar component. */\n@Component({\n tag: 'zanit-mobile-menubar',\n styleUrls: ['mobile-menubar.css', '../menu/menu.css'],\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class ZanitMobileMenubar {\n @Element() host: HTMLZanitMobileMenubarElement;\n\n /** IDs path of the current item. */\n @Prop() currentPath: string[] = [];\n\n /** Menubar items. */\n @Prop() items: MenubarItem[] = [];\n\n /** Initial search query. */\n @Prop({ mutable: true }) searchQuery: string | undefined = undefined;\n\n /** Whether the menubar is loading the data. */\n @Prop() loading: boolean = false;\n\n /** Environment for search suggestions */\n @Prop() searchEnv: SearchEnv = SearchEnv.PROD;\n\n /** Search area (e.g. \"SCUOLA\", \"UNIVERSITÀ\", \"DIZIONARI\"). */\n @Prop() searchArea?: string | undefined;\n\n /** Last active item ID. */\n @State() lastCurrent: string | undefined = undefined;\n @State() parentItem: MenubarItem | undefined = undefined;\n @State() menuItems: MenubarItem[] | MenuItem[] | undefined = undefined;\n /** Whether the items to render come from a menubar or a menu. */\n @State() menuType: 'menubar' | 'menu' | undefined = undefined;\n @State() open: boolean;\n\n @Watch('items')\n @Watch('currentPath')\n onItemsChange() {\n this.lastCurrent = this.currentPath?.length ? this.currentPath[this.currentPath.length - 1] : undefined;\n this.setupData(this.items);\n }\n\n /**\n * Find the current item and take its parent, `menuItems` or the `navbarItems`.\n */\n private setupData(items: MenubarItem[], parent?: MenubarItem) {\n // If no current item is defined, we show all items\n if (this.lastCurrent === undefined) {\n this.parentItem = undefined;\n this.menuType = 'menubar';\n this.menuItems = items;\n return;\n }\n\n for (const item of items) {\n if (item.id === this.lastCurrent) {\n this.parentItem = parent;\n this.menuType = item.menuItems?.length ? 'menu' : 'menubar';\n this.menuItems = item.menuItems || item.navbarItems;\n return;\n }\n\n if (\n this.currentPath.length > 1 &&\n item.id === this.currentPath[this.currentPath.length - 2] &&\n item.menuItems?.some(({ id }) => id === this.lastCurrent)\n ) {\n this.parentItem = item;\n this.menuType = item.menuItems?.length ? 'menu' : 'menubar';\n this.menuItems = item.menuItems || item.navbarItems;\n return;\n }\n\n if (item.navbarItems?.length) {\n this.setupData(item.navbarItems, item);\n }\n }\n }\n\n private get menuItemsElement() {\n return Array.from(this.host.shadowRoot.querySelectorAll('[role=\"menuitem\"]')) as HTMLElement[];\n }\n\n /** Initialize tabindex on menuitems, setting -1 to all but the first one. */\n private initTabindex() {\n this.menuItemsElement.forEach((item, index) => item.setAttribute('tabindex', index === 0 ? '0' : '-1'));\n }\n\n private toggleMenu() {\n if (this.open) {\n this.open = false;\n } else {\n this.open = true;\n setTimeout(() => {\n this.initTabindex();\n this.menuItemsElement[0]?.focus({ preventScroll: true });\n }, 200);\n }\n }\n\n /** Handles keyboard navigation on mobile menu. */\n private handleItemKeydown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowUp': {\n event.preventDefault();\n event.stopPropagation();\n const items = this.menuItemsElement;\n const currentIndex = items.indexOf(event.target as HTMLElement);\n const prevItem = items[(currentIndex - 1 + items.length) % items.length];\n moveFocus(items[currentIndex], prevItem);\n break;\n }\n case 'ArrowDown': {\n event.preventDefault();\n event.stopPropagation();\n const items = this.menuItemsElement;\n const currentIndex = items.indexOf(event.target as HTMLElement);\n const nextItem = items[(currentIndex + 1) % items.length];\n moveFocus(items[currentIndex], nextItem);\n break;\n }\n case 'Home': {\n event.preventDefault();\n event.stopPropagation();\n moveFocus(event.target as HTMLElement, this.menuItemsElement[0]);\n break;\n }\n case 'End': {\n event.preventDefault();\n event.stopPropagation();\n moveFocus(event.target as HTMLElement, this.menuItemsElement.pop());\n break;\n }\n }\n }\n\n connectedCallback() {\n this.lastCurrent = this.currentPath?.length ? this.currentPath[this.currentPath.length - 1] : undefined;\n this.setupData(this.items);\n }\n\n /** Close the menu when clicking outside. */\n @Listen('click', { target: 'document', passive: true })\n handleOutsideClick(event: MouseEvent) {\n if (containsTarget(this.host, event)) {\n return;\n }\n\n this.open = false;\n }\n\n /** Close the menu when pressing Escape or Tab. */\n @Listen('keydown', { passive: true })\n handleKeydown(event: KeyboardEvent) {\n switch (event.key) {\n case 'Escape':\n this.open = false;\n break;\n case 'Tab':\n if (containsTarget(this.host, event)) {\n break;\n }\n\n this.open = false;\n break;\n }\n }\n\n /** Close the menu when the focus goes out. */\n @Listen('focusin', { target: 'document', passive: true })\n handleFocusout(event: FocusEvent) {\n if (containsTarget(this.host, event)) {\n return;\n }\n\n this.open = false;\n }\n\n render() {\n return (\n <nav aria-label=\"Zanichelli.it\">\n <button\n class=\"burger-button\"\n type=\"button\"\n aria-expanded={this.open ? 'true' : 'false'}\n aria-controls=\"mobile-menu\"\n aria-label={this.open ? 'Chiudi menù' : 'Apri menù'}\n onClick={() => this.toggleMenu()}\n >\n <z-icon\n name={this.open ? 'multiply' : 'burger-menu'}\n width=\"1.5rem\"\n height=\"1.5rem\"\n ></z-icon>\n </button>\n\n <z-logo\n imageAlt=\"Logo Zanichelli\"\n link=\"/\"\n height={32}\n width={126}\n ></z-logo>\n\n <zanit-search-form\n searchQuery={this.searchQuery}\n onResetSearch={() => (this.searchQuery = undefined)}\n searchArea={this.searchArea}\n searchEnv={this.searchEnv}\n />\n\n {this.open && (\n <ul\n class=\"mobile-menu\"\n role=\"menubar\"\n >\n {!this.loading && this.currentPath && this.currentPath.length > 0 && (\n <li role=\"none\">\n <a\n class=\"parent\"\n href={this.parentItem?.href ?? '/'}\n id={this.parentItem?.id ?? undefined}\n role=\"menuitem\"\n tabIndex={-1}\n onKeyDown={(event) => this.handleItemKeydown(event)}\n target={this.parentItem?.target}\n >\n <z-icon\n name=\"arrow-left\"\n width=\"0.5rem\"\n height=\"0.5rem\"\n ></z-icon>\n <span>\n {/* Show the 'Home' label if the current item is a root child. */}\n {this.parentItem?.label || 'Home'}\n </span>\n </a>\n </li>\n )}\n\n {this.loading ? (\n <div\n class=\"items-container\"\n role=\"none\"\n >\n {[...new Array(4)].map(() => (\n <li role=\"none\">\n <div\n class=\"menubar-item\"\n role=\"none\"\n >\n <z-ghost-loading></z-ghost-loading>\n </div>\n </li>\n ))}\n </div>\n ) : this.menuType === 'menu' ? (\n <Menu\n items={this.menuItems}\n controlledBy={this.parentItem?.id}\n currentPath={this.currentPath}\n onItemKeyDown={(event) => this.handleItemKeydown(event)}\n />\n ) : (\n this.menuItems?.length > 0 && (\n <div\n class=\"items-container\"\n role=\"none\"\n >\n {this.menuItems.map((item) => (\n <li role=\"none\">\n <a\n class={{\n 'menu-item': this.menuType === 'menu',\n 'menubar-item': this.menuType === 'menubar',\n }}\n href={item.href}\n id={item.id}\n role=\"menuitem\"\n aria-current={this.lastCurrent === item.id ? 'page' : 'false'}\n tabIndex={-1}\n onKeyDown={(event) => this.handleItemKeydown(event)}\n target={item.target}\n >\n <span data-text={item.label}>{item.label}</span>\n </a>\n </li>\n ))}\n </div>\n )\n )}\n </ul>\n )}\n </nav>\n );\n }\n}\n","enum AREA_LABELS {\n SCUOLA = 'Scuola',\n UNIVERSITÀ = 'Università',\n GIURIDICO = 'Giuridico',\n DIZIONARI = 'Dizionari',\n SAGGISTICA = 'Saggistica',\n}\n\nconst AREA_ORDER = Object.keys(AREA_LABELS);\n\nexport type SearchSuggestion = {\n id: string;\n label: string;\n aria_label: string;\n url: string;\n user_query: string;\n query?: string;\n area?: string;\n subject?: string;\n};\n\nexport function buildSuggestions(\n query: string,\n subjectsByArea: Record<string, string[]>,\n selectedArea?: string\n): SearchSuggestion[] {\n const matchingSubjectAreas = findSubjectAreas(query, subjectsByArea);\n const hasSubject = matchingSubjectAreas.length > 0;\n const subject = hasSubject ? query.toUpperCase() : undefined;\n\n const suggestions: SearchSuggestion[] = [];\n\n if (selectedArea) suggestions.push(buildWordSuggestion(query, selectedArea));\n\n suggestions.push(buildWordSuggestion(query));\n\n if (hasSubject) {\n if (selectedArea) {\n const orderedSubjectAreas = [\n ...matchingSubjectAreas.filter((area) => area === selectedArea),\n ...matchingSubjectAreas\n .filter((area) => area !== selectedArea)\n .sort((a, b) => getAreaOrder(a) - getAreaOrder(b)),\n ];\n orderedSubjectAreas.forEach((area) => suggestions.push(buildSubjectSuggestion(query, area, subject)));\n } else {\n matchingSubjectAreas\n .sort((a, b) => getAreaOrder(a) - getAreaOrder(b))\n .forEach((subjectArea) => suggestions.push(buildSubjectSuggestion(query, subjectArea, subject)));\n }\n }\n\n return suggestions;\n}\n\nconst buildWordSuggestion = (user_query: string, area?: string): SearchSuggestion => {\n return {\n id: buildId(`word-${user_query}-${area}`),\n label: buildLabel(user_query, area),\n aria_label: buildAriaLabel(user_query, area, false),\n url: buildUrl({ q: user_query, ...(area ? { area } : {}), user_query }),\n ...buildDetail(user_query, user_query, area),\n };\n};\n\nconst buildSubjectSuggestion = (user_query: string, area: string, subject: string): SearchSuggestion => {\n return {\n id: buildId(`subj-${user_query}-${area}-${subject}`),\n label: buildLabel(user_query, area),\n aria_label: buildAriaLabel(user_query, area, true),\n url: buildUrl({ area, materia: subject, user_query }),\n ...buildDetail(user_query, undefined, area, subject),\n };\n};\n\nconst buildId = (string: string) =>\n string\n .split('')\n .map((c) => c.charCodeAt(0).toString(16))\n .join('');\n\nconst buildUrl = (params: Record<string, string>): string => {\n return `ricerca?${new URLSearchParams(params).toString()}`;\n};\n\nconst buildDetail = (user_query: string, query?: string, area?: string, subject?: string) => ({\n user_query,\n ...(query ? { query } : {}),\n ...(area ? { area } : {}),\n ...(subject ? { subject } : {}),\n});\n\nconst buildLabel = (user_query: string, area?: string) => {\n return `<mark>${user_query}</mark> in <strong>${area ? `${AREA_LABELS[area] ?? area}` : `tutto il sito`}</strong>`;\n};\n\nconst buildAriaLabel = (user_query: string, area?: string, isSubject: boolean = false) => {\n return `Cerca la ${isSubject ? `materia` : `parola`} ${user_query} ${area ? `nel catalogo ${AREA_LABELS[area] ?? area}` : `in tutto il sito`}`;\n};\n\nfunction findSubjectAreas(query: string, subjectsByArea: Record<string, string[]>): string[] {\n const cleanedQuery = cleanSearch(query);\n return Object.entries(subjectsByArea)\n .filter(([, subjects]) => subjects.some((subject) => subject.toLowerCase() === cleanedQuery))\n .map(([area]) => area);\n}\n\n/** Clear search string: lowercase, remove multiple spaces */\nconst cleanSearch = (s: string) => s.toLowerCase().replace(/\\s+/g, ' ');\n\nconst getAreaOrder = (area: string) => {\n const index = AREA_ORDER.indexOf(area);\n return index >= 0 ? index : 100;\n};\n",":host,\n*,\n::before,\n::after {\n box-sizing: border-box;\n}\n\n*:focus:focus-visible {\n box-shadow: var(--shadow-focus-primary);\n outline: none;\n}\n\nbutton {\n all: unset;\n cursor: pointer;\n}\n\n.searchbar {\n --searchbar-button-x-padding: 14px;\n --searchbar-button-icon-width: 1.75rem;\n\n /* button horizontal padding + icon size + left border */\n --closed-searchbar-width: calc((var(--searchbar-button-x-padding) * 2) + var(--searchbar-button-icon-width) + 1px);\n\n position: absolute;\n z-index: 5;\n top: 0;\n right: 0;\n display: flex;\n width: var(--closed-searchbar-width);\n height: 3rem;\n justify-content: flex-end;\n transition: width 0.4s ease-in-out;\n}\n\n.searchbar.searchbar-open {\n width: 100%;\n}\n\n.searchbar .input-wrapper {\n display: flex;\n overflow: hidden;\n width: 100%;\n align-items: center;\n padding: 8px;\n padding-left: var(--grid-margin);\n background-color: #fff;\n gap: 8px;\n transition-duration: 0.4s;\n transition-property: padding-right, padding-left, width;\n transition-timing-function: ease-in-out;\n}\n\n.searchbar:not(.searchbar-open) .input-wrapper {\n overflow: hidden;\n width: 0;\n padding: 0;\n}\n\n.searchbar button[type='reset'] {\n --z-icon-width: 1rem;\n --z-icon-height: 1rem;\n\n display: flex;\n align-items: center;\n cursor: pointer;\n}\n\n.searchbar input {\n z-index: 1;\n width: 100%;\n height: 100%;\n padding: 0;\n border: none;\n background-color: #fff;\n font-family: var(--font-family-sans);\n font-size: 1rem;\n}\n\n.searchbar.searchbar-open input:first-child {\n padding-left: 4px;\n margin-left: -4px; /* per evitare che la focus shadow vada fuori dallo schermo */\n}\n\n.searchbar input[type='search']::-webkit-search-cancel-button,\n.searchbar input[type='search']::-webkit-search-decoration {\n appearance: none;\n}\n\n.searchbar input::placeholder {\n color: var(--gray500);\n}\n\n.searchbar .searchbar-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 10px var(--searchbar-button-x-padding);\n border-left: 1px solid #000;\n background: var(--zanit-accent-color);\n font-family: inherit;\n font-size: inherit;\n gap: 64px;\n line-height: 1;\n}\n\n.searchbar .searchbar-button:focus-visible {\n z-index: 1;\n}\n\n.searchbar-button z-icon {\n --z-icon-width: var(--searchbar-button-icon-width);\n --z-icon-height: var(--searchbar-button-icon-width);\n}\n\n.suggestions-wrapper {\n position: absolute;\n z-index: 4;\n top: 3rem;\n left: 50%;\n width: 100vw;\n border-top: 1px solid var(--gray200);\n margin-left: -50vw;\n background: #fff;\n box-shadow: var(--shadow-1);\n}\n\n.suggestions-wrapper.hidden {\n display: none;\n}\n\n.suggestions {\n display: flex;\n width: 100%;\n flex-direction: column;\n align-items: stretch;\n padding: var(--space-unit);\n margin: 0 auto;\n}\n\n.suggestion-head {\n padding: calc(var(--space-unit) * 0.75) var(--space-unit);\n color: var(--gray700);\n font-size: 0.875rem;\n font-weight: var(--font-md);\n line-height: 1.125rem;\n}\n\n.suggestion {\n display: flex;\n padding: calc(var(--space-unit) * 0.75) var(--space-unit);\n color: var(--gray900);\n cursor: pointer;\n font-size: 1rem;\n gap: var(--space-unit);\n line-height: 1.5rem;\n}\n\n.suggestion:hover,\n.suggestion[aria-selected='true'] {\n background: var(--gray100);\n}\n\n.suggestion strong {\n font-weight: var(--font-bd);\n}\n\n.suggestion mark {\n background-color: var(--red50);\n}\n\n.suggestion z-icon {\n --z-icon-height: 1.125rem;\n\n margin-top: 0.125rem;\n}\n\n.suggestions z-divider {\n margin: var(--space-unit) 0;\n}\n\n@media (width < 1152px) {\n .searchbar .searchbar-button > .searchbar-button-label {\n display: none;\n }\n}\n\n@media (width >= 768px) {\n .searchbar {\n --searchbar-button-x-padding: 16px;\n --searchbar-button-icon-width: 2rem;\n }\n\n .searchbar .input-wrapper {\n gap: 14px;\n }\n\n .searchbar button[type='reset'] {\n --z-icon-width: 1.5rem;\n --z-icon-height: 1.5rem;\n }\n\n .searchbar input,\n .searchbar .searchbar-button {\n font-size: 1.5rem;\n }\n\n .searchbar .searchbar-button {\n padding: 8px var(--searchbar-button-x-padding);\n }\n\n .suggestions {\n padding: var(--space-unit) calc(var(--space-unit) * 2);\n }\n}\n\n@media (width >= 1152px) {\n .searchbar {\n --closed-searchbar-width: 190px;\n }\n}\n\n@media (width >= 1366px) {\n .searchbar .searchbar-button {\n border-right: 1px solid #000;\n }\n\n .suggestions {\n max-width: 1366px;\n padding: var(--space-unit) calc(var(--space-unit) * 3);\n }\n}\n","import { Component, Element, Event, EventEmitter, h, Host, Listen, Prop, State, Watch } from '@stencil/core';\nimport { containsTarget, isArrowDownKey, isArrowUpKey, isEscKey, isTabKey, SearchEvent } from '../../../utils';\nimport { getSubjectsByArea, SearchEnv } from '../../../utils/subjects.api';\nimport { buildSuggestions, SearchSuggestion } from './suggestions';\n\n@Component({\n tag: 'zanit-search-form',\n styleUrl: 'search-form.css',\n shadow: true,\n})\nexport class ZanitSearchForm {\n private formElement: HTMLFormElement;\n private subjectsByArea: Record<string, string[]> = {};\n private timer: NodeJS.Timeout;\n\n @Element() host: HTMLZanitSearchFormElement;\n\n /** Indicates whether the searchbar is visible and usable. */\n @State()\n showSearchbar: boolean = false;\n\n /** Search query to apply. */\n @State()\n _searchQuery: string | undefined = undefined;\n\n /** Search suggestions to show in the autocomplete dropdown. */\n @State() suggestions: SearchSuggestion[] = [];\n\n /** Active suggestion - used for keyboard navigation */\n @State() activeSuggestion: string = '';\n\n /** Show suggestions list */\n @State() showSuggestions: boolean = false;\n\n /** Initial search query */\n @Prop({ mutable: true })\n searchQuery: string | undefined = undefined;\n\n /** Environment for search suggestions */\n @Prop() searchEnv: SearchEnv = SearchEnv.PROD;\n\n /** Search area (e.g. \"SCUOLA\", \"UNIVERSITÀ\", \"DIZIONARI\"). */\n @Prop() searchArea?: string | undefined;\n\n @Watch('searchQuery')\n onSearchQueryChange() {\n this._searchQuery = this.searchQuery;\n if (this.searchQuery) {\n this.openSearchbar();\n }\n this.resetSuggestions();\n }\n\n @Watch('searchArea')\n onSearchAreaChange() {\n this.resetSuggestions();\n }\n\n @Watch('showSearchbar')\n onShowSearchbarChange() {\n if (!this.showSearchbar) {\n this.showSuggestions = false;\n }\n }\n\n @Watch('showSuggestions')\n onShowSuggestionsChange() {\n this.activeSuggestion = '';\n }\n\n /** Emitted on search form submission. */\n @Event({ cancelable: true }) search: EventEmitter<SearchEvent>;\n\n @Event() resetSearch: EventEmitter<void>;\n\n async connectedCallback() {\n this.subjectsByArea = await getSubjectsByArea(this.searchEnv);\n this.showSearchbar = !!this.searchQuery;\n this._searchQuery = this.searchQuery;\n }\n\n /** Close open searchbar when clicking outside. */\n @Listen('click', { target: 'document', passive: true })\n handleOutsideClick(event: MouseEvent) {\n if (this.showSearchbar && this.host && !containsTarget(this.host, event)) {\n this.showSearchbar = false;\n }\n }\n\n /** Close the searchbar/suggestions when pressing Escape. */\n @Listen('keydown', { passive: true })\n handleEsc(event: KeyboardEvent) {\n if (!isEscKey(event)) {\n return;\n }\n\n if (this.showSuggestions) {\n this.showSuggestions = false;\n } else {\n this.showSearchbar = false;\n }\n }\n\n /** Close the searchbar/suggestions when pressing Tab. */\n @Listen('keyup', { target: 'document', passive: true })\n handleTab(event: KeyboardEvent) {\n if (!isTabKey(event)) {\n return;\n }\n\n this.showSuggestions = false;\n\n if (!containsTarget(this.host, event)) {\n this.showSearchbar = false;\n }\n }\n\n private openSearchbar() {\n this.showSearchbar = true;\n setTimeout(() => {\n const searchbarInput = this.host.shadowRoot.querySelector('#searchbar-input') as HTMLInputElement;\n searchbarInput.focus({ preventScroll: true });\n }, 500);\n }\n\n private resetSearchQuery() {\n this.searchQuery = undefined;\n this.resetSearch.emit();\n }\n\n private resetSuggestions() {\n this.suggestions = [];\n this.showSuggestions = false;\n }\n\n private handleInputChange(event: InputEvent) {\n this._searchQuery = (event.target as HTMLInputElement).value;\n if (!this._searchQuery) {\n this.searchQuery = undefined;\n }\n\n this.updateSuggestions();\n }\n\n private updateSuggestions() {\n clearTimeout(this.timer);\n\n const query = (this._searchQuery || '').trim();\n\n if (query.length < 3) {\n this.resetSuggestions();\n return;\n }\n\n this.timer = setTimeout(() => {\n this.resetSuggestions();\n this.suggestions = buildSuggestions(query, this.subjectsByArea, this.searchArea?.toUpperCase());\n this.showSuggestions = true;\n }, 300);\n }\n\n private onSearchSubmit(event: Event) {\n event.preventDefault();\n if (!this._searchQuery) {\n return;\n }\n\n if (this.activeSuggestion) {\n const suggestion = this.suggestions.find((s) => s.id === this.activeSuggestion);\n if (suggestion) {\n this.submitSuggestionSearch(suggestion);\n this.showSuggestions = false;\n return;\n }\n }\n\n this.showSearchbar = false;\n\n const searchEv = this.search.emit({ query: this._searchQuery, area: this.searchArea });\n // do not submit the form if the event default behavior was prevented\n if (searchEv.defaultPrevented) {\n return;\n }\n\n this.formElement.submit();\n }\n\n private submitSuggestionSearch(suggestion: SearchSuggestion) {\n const ev = this.search.emit({\n user_query: suggestion.user_query,\n query: suggestion.query,\n area: suggestion.area,\n subject: suggestion.subject,\n });\n if (!ev.defaultPrevented) {\n window.location.href = suggestion.url;\n }\n }\n\n private handleSuggestionsNav(event: KeyboardEvent) {\n if (!isArrowDownKey(event) && !isArrowUpKey(event)) {\n return;\n }\n\n if (!this.suggestions.length) {\n return;\n }\n\n const options = this.suggestions.map((o) => o.id);\n\n if (!options.length) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n if (!this.showSuggestions) {\n this.showSuggestions = true;\n }\n\n let nextId = null;\n const firstId = options[0];\n const lastId = options[options.length - 1];\n const currOption = options.indexOf(this.activeSuggestion);\n if (currOption < 0) {\n nextId = isArrowDownKey(event) ? firstId : lastId;\n } else {\n if (isArrowDownKey(event)) {\n nextId = options[currOption + 1] || lastId;\n } else {\n nextId = options[currOption - 1] || firstId;\n }\n }\n this.activeSuggestion = nextId;\n }\n\n private renderSuggestions() {\n const renderHeading = (label: string, key: string) => (\n <span\n key={key}\n class=\"suggestion-head\"\n aria-hidden=\"true\"\n >\n {label}\n </span>\n );\n\n return (\n <div\n class={{ 'suggestions-wrapper': true, 'hidden': !this.showSuggestions || !this.suggestions.length }}\n onPointerOver={(e) => e.preventDefault()}\n >\n <div\n id=\"search-suggestions\"\n class=\"suggestions\"\n role=\"listbox\"\n aria-label=\"Seleziona tra i suggerimenti\"\n >\n {this.suggestions.map((suggestion, k) => {\n const items = [];\n\n if (k === 0) {\n items.push(renderHeading('Cerca la parola', 'word-head'));\n } else if (suggestion.subject && !this.suggestions[k - 1].subject) {\n items.push(<z-divider aria-hidden=\"true\" />);\n items.push(renderHeading('Cerca la materia', 'subj-head'));\n }\n\n items.push(\n <span\n key={k}\n id={suggestion.id}\n class=\"suggestion\"\n role=\"option\"\n aria-label={suggestion.aria_label}\n aria-selected={this.activeSuggestion === suggestion.id ? 'true' : undefined}\n onClick={() => this.submitSuggestionSearch(suggestion)}\n >\n <z-icon name=\"left-magnifying-glass\" />\n <span\n aria-hidden=\"true\"\n innerHTML={suggestion.label}\n />\n </span>\n );\n\n return items;\n })}\n </div>\n </div>\n );\n }\n\n render() {\n return (\n <Host>\n <form\n class={{ 'searchbar': true, 'searchbar-open': this.showSearchbar }}\n ref={(el) => (this.formElement = el)}\n role=\"search\"\n aria-label=\"Cerca nel sito\"\n method=\"get\"\n action=\"/ricerca\"\n onSubmit={(event) => this.onSearchSubmit(event)}\n onReset={() => this.resetSearchQuery()}\n >\n {!!this.searchArea && (\n <input\n type=\"hidden\"\n name=\"area\"\n value={this.searchArea}\n />\n )}\n\n <div\n class=\"input-wrapper\"\n role=\"none\"\n >\n {this.searchQuery && (\n <button\n type=\"reset\"\n aria-label=\"Svuota campo di ricerca\"\n disabled={!this.showSearchbar}\n aria-hidden={!this.showSearchbar ? 'true' : undefined}\n tabIndex={!this.showSearchbar ? -1 : 0}\n >\n <z-icon name=\"multiply-circled\" />\n </button>\n )}\n <input\n id=\"searchbar-input\"\n name=\"q\"\n type=\"search\"\n disabled={!this.showSearchbar}\n placeholder=\"Cerca per parola chiave o ISBN\"\n value={this.searchQuery}\n required\n autocomplete=\"off\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded={this.showSuggestions ? 'true' : 'false'}\n aria-controls=\"search-suggestions\"\n aria-activedescendant={this.activeSuggestion}\n aria-label=\"Cerca per parola chiave o ISBN\"\n aria-hidden={!this.showSearchbar ? 'true' : undefined}\n tabIndex={!this.showSearchbar ? -1 : 0}\n onInput={(event) => this.handleInputChange(event)}\n onKeyDown={(e) => {\n // INFO: prevent ESC from clearing input\n if (isEscKey(e)) {\n e.preventDefault();\n }\n\n this.handleSuggestionsNav(e);\n }}\n />\n </div>\n\n <button\n class=\"searchbar-button\"\n aria-label={this.showSearchbar ? 'Esegui ricerca' : 'Apri il campo di ricerca'}\n aria-controls=\"searchbar-input\"\n type={this.showSearchbar ? 'submit' : 'button'}\n onClick={() => this.openSearchbar()}\n >\n {this.showSearchbar ? null : <span class=\"searchbar-button-label\">Cerca</span>}\n <z-icon name=\"search\"></z-icon>\n </button>\n </form>\n\n {this.renderSuggestions()}\n </Host>\n );\n }\n}\n"],"mappings":"uEAAA,MAAMA,EAAe,wQ,MCYRC,EAAY,M,yBACfC,eACAC,iB,0BAMRC,QAAmB,MAInBC,kBAIAC,SAAoB,MAIpBC,cAAwB,KAIxBC,gBAA0B,IAG1B,YAAAC,GACEC,KAAKC,qB,CAGCC,aAAe,KACrB,MAAMC,EAAYC,SAASC,KAAKC,aAChC,GAAIH,IAAcH,KAAKL,kBAAmB,CACxCK,KAAKL,kBAAoBQ,EACzBH,KAAKC,qB,GAIT,iBAAAM,GACEP,KAAKL,kBAAoBS,SAASC,KAAKC,aACvCN,KAAKR,eAAiB,IAAIgB,eAAeR,KAAKE,cAC9CF,KAAKR,eAAeiB,QAAQL,SAASC,MACrCL,KAAKP,iBAAmB,IAAIiB,iBAAiBV,KAAKE,cAClDF,KAAKP,iBAAiBgB,QAAQL,SAASC,KAAM,CAAEM,UAAW,KAAMC,QAAS,OACzEZ,KAAKC,sBAEL,MAAMY,EAAmBC,OAAOC,WAAW,mBAC3Cf,KAAKJ,SAAWiB,EAAiBG,QACjCH,EAAiBI,SAAYC,IAC3BlB,KAAKJ,SAAWsB,EAAIF,OAAO,C,CAI/B,oBAAAG,GACEnB,KAAKR,eAAe4B,aACpBpB,KAAKP,iBAAiB2B,Y,CAGhB,mBAAAnB,GACND,KAAKN,QAAUM,KAAKL,kBAAoBK,KAAKH,eAAiBiB,OAAOO,QAAUrB,KAAKF,e,CAG9E,MAAAwB,GACNR,OAAOS,SAAS,CAAEC,IAAK,EAAGC,SAAU,U,CAGtC,MAAAC,GACE,OACEC,EAACC,EACC,CAAAC,IAAA,2CAAAC,MAAO,CAAEC,QAAS/B,KAAKN,SAAS,cACnBM,KAAKN,QAAU,QAAU,QAEtCiC,EACE,UAAAE,IAAA,2CAAAC,MAAO,CAAE,QAAS,KAAM,kBAAmB9B,KAAKJ,UAChDoC,QAAS,IAAMhC,KAAKsB,UAEpBK,EAAQ,UAAAE,IAAA,2CAAAI,KAAK,aACbN,EAAqB,QAAAE,IAAA,yD,aCtFxB,MAAMK,EAAiB,CAACC,EAAuBC,IAC7CA,EACJC,eACAC,QAAQC,GAAOA,IAAOnC,UAAYmC,IAAOzB,OAAOA,SAChD0B,MAAMD,GAAOJ,EAASM,SAASF,KAI7B,MAAMG,EAAY,CAACC,EAAsBC,KAC9CD,EAAQE,UAAW,EACnBD,EAAKC,SAAW,EAChBD,EAAKE,MAAM,CAAEC,cAAe,MAAO,EAI9B,MAAMC,EAAgBZ,GAAyBA,EAAMP,MAAQ,UAG7D,MAAMoB,EAAkBb,GAAyBA,EAAMP,MAAQ,YAG/D,MAAMqB,EAAYd,GAAyBA,EAAMP,MAAQ,MAGzD,MAAMsB,EAAYf,GAAyBA,EAAMP,MAAQ,SCXhE,MAAMuB,EAAoB,UAC1B,MAAMC,EAAgB,CACpBC,GAAIF,EACJG,MAAOH,GAIT,MAAMI,EAAmBC,IACvB,MAAMC,EAASD,EAAME,QAA4E,CAACC,EAASC,KACzG,MAAMC,EAAYF,EAAQG,MAAK,EAAGC,WAAYA,EAAMV,MAAQO,EAAKG,OAAOV,IAAMD,EAAcC,MAC5F,IAAKQ,EAAW,CACdF,EAAQK,KAAK,CAAED,MAAOH,EAAKG,OAASX,EAAeI,MAAO,CAACI,I,KACtD,CACLC,EAAUL,MAAMQ,KAAKJ,E,CAGvB,OAAOD,CAAO,GACb,IAGH,OAAOF,EAAOQ,MAAK,CAACC,EAAGC,IAAOD,EAAEH,MAAMV,KAAOF,EAAoB,EAAIgB,EAAEJ,MAAMV,KAAOF,GAAoB,EAAK,GAAG,EAM3G,MAAMiB,EAAuC,EAAGC,eAAcb,QAAOc,cAAc,GAAIC,oBAC5F,IAAKf,GAAOgB,OAAQ,CAClB,OAAO,I,CAGT,MAAMf,EAASF,EAAgBC,GAE/B,MAAMiB,EAAYb,GAAmBU,EAAYI,SAASL,IAAiBC,EAAYI,SAASd,EAAKP,IAErG,OACE3B,EAAA,OACEG,MAAM,eACN8C,KAAK,QAELjD,EACE,OAAAG,MAAM,OAAM,kBACKwC,GAAgBO,UACjCD,KAAK,QAEJlB,EAAOoB,KAAI,EAAGd,QAAOP,WACpB9B,EAAA,OAAKG,MAAO,CAAEkC,MAAO,KAAMe,UAAWtB,EAAMjB,MAAMqB,GAASA,EAAKkB,cAC7Df,EAAMV,KAAOF,EACZzB,EAAA,OACEG,MAAM,aACNwB,GAAIU,EAAMV,IAETU,EAAMT,OAEPG,EAAOe,OAAS,EAElB9C,EAAK,OAAAG,MAAM,eACT,KACJH,EACE,MAAAG,MAAM,YACN8C,KAAK,QAAO,kBACKZ,EAAMV,KAAOF,EAAoBY,EAAMV,GAAKuB,WAE5DpB,EAAMqB,KAAKjB,GACVlC,EAAA,MAAIiD,KAAK,QACNf,EAAKmB,MACJrD,EACE,KAAAG,MAAO,CACL,YAAa,KACbmD,OAAUP,EAASb,IAErBmB,KAAMnB,EAAKmB,KACXJ,KAAK,WACL/B,UAAU,EACI,eAAA6B,EAASb,GAAQ,OAAS,QACxCqB,UAAY9C,GAAUoC,EAAcpC,GACpC+C,OAAQtB,EAAKsB,QAEZtB,EAAKN,eASlB,ECxGV,IAAY6B,GAAZ,SAAYA,GACVA,EAAA,aACAA,EAAA,eACAA,EAAA,cACD,EAJD,CAAYA,MAIX,KAED,MAAMC,EAAsC,CAC1CC,IAAK,yDACLC,KAAM,0DACNC,KAAM,sDAGDC,eAAeC,EAAkBC,GACtC,IACE,MAAMC,QAAiBC,MAAM,GAAGR,EAAYM,sBAC5C,IAAKC,EAASE,GAAI,CAChB,MAAM,IAAIC,MAAM,QAAQH,EAASI,S,CAEnC,aAAaJ,EAASK,M,CACtB,MAAOC,GACPC,QAAQC,MAAM,2BAA4BF,GAC1C,MAAO,E,CAEX,CCvBA,MAAMG,EAAa,u/DCAnB,MAAMC,EAAU,k6C,MCiBHC,EAAY,M,mDAKvB9C,MAAuB,GAIvB+C,SAA+B3B,UAI/B4B,WAAiC5B,UAIjCN,YAAwB,GAGxB3E,SAAoB,MAGpB8G,QAAmB,MAInBC,KAIAhE,QAA8BkC,UAI9B+B,YAAkC/B,UAG1Bc,UAAuBP,EAAUyB,KAGjCC,WAEAC,QAIR,eAAMC,CAAUL,GACd,IAAKA,EAAM,CACT,M,CAGF,GAAIA,aAAgBM,IAAK,CACvBjH,KAAKyD,YAAczD,KAAKkH,UAAUP,E,MAC7B,GAAIA,aAAgBQ,QAAS,CAClCnH,KAAK0G,QAAU,KACf1G,KAAKyD,YAAckD,EACnB3G,KAAK0G,QAAU,K,MACV,UAAWC,IAAS,SAAU,CACnC,IACE3G,KAAKyD,MAAQ2D,KAAKC,MAAMV,GACxB,IAAKW,MAAMC,QAAQvH,KAAKyD,SAAWzD,KAAKyD,OAAO+D,OAAO3D,GAASA,IAA6B,CAC1F,MAAM,IAAIkC,MAAM,4C,EAElB,MACA,IAAI0B,EACJ,IACEA,EAAM,IAAIR,IAAIN,E,CACd,MACA,MAAM,IAAIZ,MAAM,wE,CAGlB/F,KAAKyD,YAAczD,KAAKkH,UAAUO,E,OAE/B,GAAIH,MAAMC,QAAQZ,IAASA,EAAKa,OAAO3D,GAASA,IAA6B,CAClF7D,KAAKyD,MAAQkD,C,KACR,CACL,MAAM,IAAIZ,MACR,qG,EAMN,aAAA2B,GACE1H,KAAK2H,c,CAIP,eAAAC,GACE5H,KAAKuE,YAAcvE,KAAK2C,SAASkF,MAAM,KAAKvF,OAAOwF,UAAY,E,CAGjE,uBAAMvH,GACJ,MAAMM,EAAmBC,OAAOC,WAAW,mBAC3Cf,KAAKJ,SAAWiB,EAAiBG,QACjCH,EAAiBI,SAAYC,IAC3BlB,KAAKJ,SAAWsB,EAAIF,QACpBhB,KAAK2H,eACL3H,KAAKwG,SAAW3B,SAAS,QAErB7E,KAAKgH,UAAUhH,KAAK2G,MAC1B3G,KAAK4H,kBACL5H,KAAK2H,c,CAKP,kBAAAI,CAAmB3F,GACjB,IAAKpC,KAAKwG,UAAYtE,EAAelC,KAAKgI,KAAM5F,GAAQ,CACtD,M,CAGFpC,KAAKwG,SAAW3B,S,CAOlB,aAAAoD,CAAc7F,GACZ,OAAQA,EAAMP,KACZ,IAAK,SAAU,CACb,GAAI7B,KAAKwG,SAAU,CACjBpE,EAAM8F,iBAEN,MAAMC,EAAgBnI,KAAKwG,SAC3BxG,KAAKwG,SAAW3B,UAEhBuD,YAAW,KACT,MAAMC,EAAcrI,KAAKgI,KAAKM,WAAWC,eAAeJ,GACxD,GAAIE,EAAa,CACfA,EAAYvF,O,IAEb,E,CAEL,K,CAEF,IAAK,MACH9C,KAAKwG,SAAW3B,UAChB,M,CAKN,eAAA2D,GACEC,aAAazI,KAAK+G,Q,CAQpB,cAAA2B,CAAetG,GACbpC,KAAK+G,QAAUjG,OAAOsH,YAAW,KAC/B,IAAKpI,KAAKwG,UAAYtE,EAAelC,KAAKgI,KAAM5F,GAAQ,CACtD,M,CAGFpC,KAAKwG,SAAW3B,SAAS,GACxB,I,CAKL,cAAA8D,CAAevG,GACb,MAAMwG,EAAgBxG,EAAMwG,cAC5B,IAAK5I,KAAKwG,UAAYxG,KAAKgI,KAAKM,WAAWO,cAAc,UAAUpG,SAASmG,GAAgB,CAC1F,M,CAGF5I,KAAKwG,SAAW3B,S,CAIV,eAAMqC,CAAUO,GACtB,IACEzH,KAAK0G,QAAU,KACf,MAAMC,cAAoBd,MAAM4B,IAAMxB,OACtCjG,KAAK0G,QAAU,MACf,IAAKY,MAAMC,QAAQZ,KAAUA,EAAKa,OAAO3D,GAASA,IAA6B,CAC7E,MAAM,IAAIkC,MAAM,iE,CAGlB,OAAOY,C,CACP,MAAOP,GACPpG,KAAK0G,QAAU,MACfP,QAAQC,MAAM,+BAAgCA,GAC9C,MAAM,IAAIL,MAAM,sDAAuD,CAAE+C,MAAO1C,G,EAK5E,YAAAuB,GACNS,YAAW,KACTpI,KAAKgI,KAAKM,WAAWS,iBAAiB,qBAAqBC,SAASC,IAClEA,EACGF,iBAAiB,sBAChBC,SAAQ,CAACnF,EAAMqF,IAAUrF,EAAKsF,aAAa,WAAYD,IAAU,EAAI,IAAM,OAAM,GACrF,GACD,I,CAIG,QAAAxE,CAASb,GACf,GAAI7D,KAAKuE,YAAYE,SAAW,EAAG,CACjC,OAAO,K,CAGT,GAAIzE,KAAKuE,YAAYI,SAASd,EAAKP,IAAK,CACtC,OAAO,I,CAGT,GAAIO,EAAKuF,WAAW3E,OAAQ,CAC1B,OAAOZ,EAAKuF,UAAU5G,MAAM6G,GAAaA,EAAS/F,KAAOtD,KAAK2C,S,CAGhE,GAAIkB,EAAKyF,aAAa7E,OAAQ,CAC5B,MAAMC,EAAWb,EAAKyF,YAAY9G,MAAM+G,GAAevJ,KAAK0E,SAAS6E,KACrE,GAAI7E,EAAU,CACZ,OAAO,I,EAIX,OAAO,K,CAID,QAAA8E,CAAS3F,GACf7D,KAAKwG,SAAW3B,UAChB,IAAKhB,EAAKuF,WAAW3E,OAAQ,CAC3B,M,CAGFzE,KAAKwG,SAAW3C,EAAKP,E,CAIf,wBAAAmG,CAAyBC,GAC/B,OAAOpC,MAAMqC,KACXD,GAAQE,QAAQ,qBAAqBb,iBAAiB,mCAAqC,G,CAKvF,iBAAAc,CAAkBH,GACxB1J,KAAKwG,SAAW3B,UAChB,MAAMiF,EAAkB9J,KAAKyJ,yBAAyBC,GACtD,MAAMK,EAAeD,EAAgBE,QAAQN,GAC7C,MAAMO,EAAWH,GAAiBC,EAAe,EAAID,EAAgBrF,QAAUqF,EAAgBrF,QAC/F/B,EAAUgH,EAAQO,GAElB,GAAIA,EAASC,eAAiB,QAAUlK,KAAKwG,SAAU,CACrDxG,KAAKwG,SAAWyD,EAAS3G,E,EAKrB,aAAA6G,CAAcT,GACpB1J,KAAKwG,SAAW3B,UAChB,MAAMiF,EAAkB9J,KAAKyJ,yBAAyBC,GACtD,MAAMK,EAAeD,EAAgBE,QAAQN,GAC7C,MAAMU,EAAWN,GAAiBC,EAAe,GAAKD,EAAgBrF,QACtE/B,EAAUgH,EAAQU,GAElB,GAAIA,EAASF,eAAiB,QAAUlK,KAAKwG,SAAU,CACrDxG,KAAKwG,SAAW4D,EAAS9G,E,EAKrB,iBAAA+G,CAAkBjI,EAAsByB,GAC9C,MAAMsB,EAAS/C,EAAM+C,OACrB,OAAQ/C,EAAMP,KACZ,IAAK,OAAQ,CACXO,EAAM8F,iBACN9F,EAAMkI,kBACN,MAAMC,EAAYvK,KAAKyJ,yBAAyBtE,GAAQ,GACxDzC,EAAUyC,EAAQoF,GAClB,K,CAEF,IAAK,MAAO,CACVnI,EAAM8F,iBACN9F,EAAMkI,kBACN,MAAME,EAAWxK,KAAKyJ,yBAAyBtE,GAAQsF,MACvD/H,EAAUyC,EAAQqF,GAClB,K,CAEF,IAAK,UAAW,CACd,IAAK3G,EAAKuF,WAAW3E,OAAQ,CAC3B,K,CAEFrC,EAAM8F,iBACN9F,EAAMkI,kBACNtK,KAAKwG,SAAW3C,EAAKP,GAErB8E,YAAW,KACT,MAAMgB,EAAY9B,MAAMqC,KACtB3J,KAAKgI,KAAKM,WAAWS,iBAAiB,oBAAoBlF,EAAKP,0BAEjEZ,EAAUyC,EAAQiE,EAAUA,EAAU3E,OAAS,GAAG,GACjD,KACH,K,CAEF,IAAK,aAAc,CACjBrC,EAAM8F,iBACN9F,EAAMkI,kBACNtK,KAAKmK,cAAchF,GACnB,K,CAEF,IAAK,YAAa,CAChB,IAAKtB,EAAKuF,WAAW3E,OAAQ,CAC3B,K,CAGFzE,KAAK0K,aAAa7G,GAClB,K,CAEF,IAAK,YAAa,CAChBzB,EAAM8F,iBACN9F,EAAMkI,kBACNtK,KAAK6J,kBAAkB1E,GACvB,K,CAEF,IAAK,IAAK,CACR/C,EAAM8F,iBACN9F,EAAMkI,kBACN,GAAItK,KAAKwG,WAAa3C,EAAKP,GAAI,CAC7BtD,KAAKwG,SAAW3B,UAChB,K,MACK,GAAIhB,EAAKuF,WAAW3E,OAAQ,CACjCzE,KAAK0K,aAAa7G,GAClB,K,IAOA,gBAAA8G,CAAiBC,GACvB,MAAMlH,EAAS4D,MAAMqC,KACnBiB,GAAgBhB,QAAQ,kBAAkBb,iBAAiB,mBAAqB,IAElF,MAAMgB,EAAerG,EAAOsG,QAAQY,GAEpC,OAAOlH,EAAOqG,EAAe,E,CAIvB,YAAAc,CAAaD,GACnB,MAAMlH,EAAS4D,MAAMqC,KACnBiB,GAAgBhB,QAAQ,kBAAkBb,iBAAiB,mBAAqB,IAElF,MAAMgB,EAAerG,EAAOsG,QAAQY,GAEpC,OAAOlH,EAAOqG,EAAe,E,CAGvB,YAAAW,CAAa7G,GACnB7D,KAAKwG,SAAW3C,EAAKP,GACrB8E,YAAW,KAET,MAAM0C,EAAgB9K,KAAKgI,KAAKM,WAAWO,cACzC,oBAAoBhF,EAAKP,yBAE3BwH,EAAcjI,SAAW,EACzBiI,EAAchI,MAAM,CAAEC,cAAe,MAAO,GAC3C,I,CAIG,iBAAAgI,CAAkB3I,GACxB,MAAM4I,EAAc5I,EAAM+C,OAC1B,MAAM1B,EAAQ6D,MAAMqC,KAClBqB,EAAYpB,QAAQ,kBAAkBb,iBAAiB,sBAAwB,IAEjF,MAAMgB,EAAetG,EAAMuG,QAAQgB,GACnC,OAAQ5I,EAAMP,KACZ,IAAK,UAAW,CACdO,EAAM8F,iBACN9F,EAAMkI,kBACN,MAAML,EAAWxG,EAAMsG,EAAe,IAAMtG,EAAMA,EAAMgB,OAAS,GACjE/B,EAAUsI,EAAaf,GACvB,K,CAGF,IAAK,aAAc,CACjB7H,EAAM8F,iBACN9F,EAAMkI,kBACN,MAAMW,EAAeD,EAAYpB,QAAQ,gBACzC,MAAMsB,EAAYlL,KAAK6K,aAAaI,GACpC,IAAKC,EAAW,CACdF,EAAYnI,UAAW,EACvB,MAAMsF,EAAgB6C,EAAYpB,QAAQ,kCAAkCuB,aAAa,mBACzF,MAAMC,EAAcpL,KAAKgI,KAAKM,WAAWC,eAAeJ,GACxDnI,KAAKmK,cAAciB,GACnB,K,CAGF,MAAMC,EAAkBH,EAAUnC,iBAAiB,sBAAwB,GAC3ErG,EAAUsI,EAAaK,EAAe,IACtC,K,CAEF,IAAK,YAAa,CAChBjJ,EAAM8F,iBACN9F,EAAMkI,kBACN,MAAMF,EAAW3G,EAAMsG,EAAe,IAAMtG,EAAM,GAClDf,EAAUsI,EAAaZ,GACvB,K,CAGF,IAAK,YAAa,CAChBhI,EAAM8F,iBACN9F,EAAMkI,kBACN,MAAMW,EAAeD,EAAYpB,QAAQ,gBACzC,MAAM0B,EAAYtL,KAAK2K,iBAAiBM,GACxC,IAAKK,EAAW,CACdN,EAAYnI,UAAW,EACvB,MAAMsF,EAAgB6C,EAAYpB,QAAQ,kCAAkCuB,aAAa,mBACzF,MAAMC,EAAcpL,KAAKgI,KAAKM,WAAWC,eAAeJ,GACxDnI,KAAK6J,kBAAkBuB,GACvB,K,CAGF,MAAMG,EAAkBD,EAAUvC,iBAAiB,sBAAwB,GAC3ErG,EAAUsI,EAAaO,EAAe,IACtC,K,CAEF,IAAK,OAEHnJ,EAAM8F,iBACN9F,EAAMkI,kBACN5H,EAAUsI,EAAavH,EAAM,IAC7B,MACF,IAAK,MAEHrB,EAAM8F,iBACN9F,EAAMkI,kBACN5H,EAAUsI,EAAavH,EAAMA,EAAMgB,OAAS,IAC5C,M,CAIN,MAAA/C,GACE,GAAI1B,KAAKJ,SAAU,CACjB,OACE+B,EACE,wBAAA8B,MAAOzD,KAAKyD,MACZc,YAAavE,KAAKuE,YAClBqC,YAAa5G,KAAK4G,YAClBF,QAAS1G,KAAK0G,QACdI,WAAY9G,KAAK8G,WACjBnB,UAAW3F,KAAK2F,W,CAKtB,OACEhE,EAAA,oBAAgB,iBACdA,EAAK,OAAAG,MAAM,kBACTH,EAAK,OAAAG,MAAM,iBACTH,EACE,MAAAG,MAAM,UACN8C,KAAK,UAAS,aACH,iBAEV5E,KAAK0G,SACJ,IAAI,IAAIY,MAAM,IAAIxC,KAAI,CAAC0G,EAAGtC,IACxBvH,EAAC8J,EAAQ,KACP9J,EAAI,MAAAiD,KAAK,QACPjD,EAAK,OAAAG,MAAM,gBACTH,EAAA,0BAGHuH,EAAQ,GAAKvH,EAAI,MAAAiD,KAAK,iBAG5B5E,KAAKyD,OAAOqB,KAAI,CAACjB,EAAMqF,IACtBvH,EAAC8J,EAAQ,KACP9J,EAAI,MAAAiD,KAAK,QACPjD,EAAA,KACEG,MAAO,CACL,eAAgB,KAChBmD,OAAUjF,KAAK0E,SAASb,IAE1BmB,KAAMnB,EAAKmB,KACX1B,GAAIO,EAAKP,GACTsB,KAAK,WACL/B,UAAU,EAER,gBAAAgB,EAAKuF,WAAW3E,OAAUzE,KAAKwG,WAAa3C,EAAKP,GAAK,OAAS,QAAWuB,UAE7D,gBAAAhB,EAAKuF,WAAW3E,OAAS,OAAS,QAAO,eAC1CzE,KAAK2C,QAAQgC,SAASd,EAAKP,IAAM,OAAS,QACxDoI,cAAe,IAAM1L,KAAKwJ,SAAS3F,GACnCqB,UAAY9C,GAAUpC,KAAKqK,kBAAkBjI,EAAOyB,GACpDsB,OAAQtB,EAAKsB,QAEbxD,EAAA,oBAAiBkC,EAAKN,OAAQM,EAAKN,OAClCM,EAAKuF,WAAW3E,OAAS,GACxB9C,EACE,UAAAM,KAAMjC,KAAKwG,WAAa3C,EAAKP,GAAK,aAAe,eACjDqI,MAAM,WACNC,OAAO,eAKd1C,EAAQlJ,KAAKyD,OAAOgB,OAAS,GAAK9C,EAAA,MAAIiD,KAAK,kBAIlDjD,EAAA,qBACEiF,YAAa5G,KAAK4G,YAClBE,WAAY9G,KAAK8G,WACjBnB,UAAW3F,KAAK2F,UAChBkG,cAAe,IAAO7L,KAAK4G,YAAc/B,aAI5C7E,KAAKyD,MAAMqB,KACTjB,GACC7D,KAAKwG,WAAa3C,EAAKP,IACrB3B,EAAC0C,EAAI,CACHC,aAAcT,EAAKP,GACnBG,MAAOI,EAAKuF,UACZ7E,YAAavE,KAAKuE,YAClBC,cAAgBpC,GAAUpC,KAAK+K,kBAAkB3I,QAM1DpC,KAAKyD,OACFnB,QAAQuB,GAAS7D,KAAK0E,SAASb,KAChCiB,KACEjB,GACCA,EAAKyF,aAAa7E,QAChB9C,EACE,OAAAG,MAAO,CAAE,cAAe,KAAM,iBAAkB,MACpC,yBAAY+B,EAAKN,SAE7B5B,EAAA,MAAIiD,KAAK,WACNf,EAAKyF,YAAYxE,KAAKgH,GACrBnK,EAAC8J,EAAQ,KACP9J,EAAI,MAAAiD,KAAK,QACPjD,EAAA,KACEG,MAAO,CACL,eAAgB,KAChBmD,OAAUjF,KAAK0E,SAASoH,IAE1B9G,KAAM8G,EAAQ9G,KACd1B,GAAIwI,EAAQxI,GACZsB,KAAK,WACL/B,UAAU,EACK,gBAAAiJ,EAAQ1C,WAAW3E,OAAS,OAAS,QAAO,gBAEzDqH,EAAQ1C,WAAW3E,OAAUzE,KAAKwG,WAAasF,EAAQxI,GAAK,OAAS,QAAWuB,UAAS,eAE7E7E,KAAK2C,QAAQgC,SAASmH,EAAQxI,IAAM,OAAS,QAC3DoI,cAAe,IAAM1L,KAAKwJ,SAASsC,GACnC5G,UAAY9C,GAAUpC,KAAKqK,kBAAkBjI,EAAO0J,GACpD3G,OAAQtB,EAAKsB,QAEbxD,EAAO,YAAAmK,EAAQvI,OACduI,EAAQ1C,WAAW3E,OAAS,GAC3B9C,EAAA,UACEM,KAAMjC,KAAKwG,WAAasF,EAAQxI,GAAK,aAAe,eACpDqI,MAAM,UACNC,OAAO,kBAQpB/H,EAAKyF,YAAYxE,KACfgH,GACC9L,KAAKwG,WAAasF,EAAQxI,IACxB3B,EAAC0C,EAAI,CACHC,aAAcwH,EAAQxI,GACtBG,MAAOqI,EAAQ1C,UACf7E,YAAavE,KAAKuE,YAClBC,cAAgBpC,GAAUpC,KAAK+K,kBAAkB3I,U,4JC1lB3E,MAAM2J,EAAmB,2+CCAzB,MAAMzF,EAAU,k6C,MCcH0F,EAAkB,M,mDAIrBzH,YAAwB,GAGxBd,MAAuB,GAGNmD,YAAkC/B,UAGnD6B,QAAmB,MAGnBf,UAAuBP,EAAUyB,KAGjCC,WAGCmF,YAAkCpH,UAClCqH,WAAsCrH,UACtCuE,UAAoDvE,UAEpDsH,SAA2CtH,UAC3CuH,KAIT,aAAA1E,GACE1H,KAAKiM,YAAcjM,KAAKuE,aAAaE,OAASzE,KAAKuE,YAAYvE,KAAKuE,YAAYE,OAAS,GAAKI,UAC9F7E,KAAKqM,UAAUrM,KAAKyD,M,CAMd,SAAA4I,CAAU5I,EAAsB6I,GAEtC,GAAItM,KAAKiM,cAAgBpH,UAAW,CAClC7E,KAAKkM,WAAarH,UAClB7E,KAAKmM,SAAW,UAChBnM,KAAKoJ,UAAY3F,EACjB,M,CAGF,IAAK,MAAMI,KAAQJ,EAAO,CACxB,GAAII,EAAKP,KAAOtD,KAAKiM,YAAa,CAChCjM,KAAKkM,WAAaI,EAClBtM,KAAKmM,SAAWtI,EAAKuF,WAAW3E,OAAS,OAAS,UAClDzE,KAAKoJ,UAAYvF,EAAKuF,WAAavF,EAAKyF,YACxC,M,CAGF,GACEtJ,KAAKuE,YAAYE,OAAS,GAC1BZ,EAAKP,KAAOtD,KAAKuE,YAAYvE,KAAKuE,YAAYE,OAAS,IACvDZ,EAAKuF,WAAW5G,MAAK,EAAGc,QAASA,IAAOtD,KAAKiM,cAC7C,CACAjM,KAAKkM,WAAarI,EAClB7D,KAAKmM,SAAWtI,EAAKuF,WAAW3E,OAAS,OAAS,UAClDzE,KAAKoJ,UAAYvF,EAAKuF,WAAavF,EAAKyF,YACxC,M,CAGF,GAAIzF,EAAKyF,aAAa7E,OAAQ,CAC5BzE,KAAKqM,UAAUxI,EAAKyF,YAAazF,E,GAKvC,oBAAY0I,GACV,OAAOjF,MAAMqC,KAAK3J,KAAKgI,KAAKM,WAAWS,iBAAiB,qB,CAIlD,YAAApB,GACN3H,KAAKuM,iBAAiBvD,SAAQ,CAACnF,EAAMqF,IAAUrF,EAAKsF,aAAa,WAAYD,IAAU,EAAI,IAAM,O,CAG3F,UAAAsD,GACN,GAAIxM,KAAKoM,KAAM,CACbpM,KAAKoM,KAAO,K,KACP,CACLpM,KAAKoM,KAAO,KACZhE,YAAW,KACTpI,KAAK2H,eACL3H,KAAKuM,iBAAiB,IAAIzJ,MAAM,CAAEC,cAAe,MAAO,GACvD,I,EAKC,iBAAAsH,CAAkBjI,GACxB,OAAQA,EAAMP,KACZ,IAAK,UAAW,CACdO,EAAM8F,iBACN9F,EAAMkI,kBACN,MAAM7G,EAAQzD,KAAKuM,iBACnB,MAAMxC,EAAetG,EAAMuG,QAAQ5H,EAAM+C,QACzC,MAAM8E,EAAWxG,GAAOsG,EAAe,EAAItG,EAAMgB,QAAUhB,EAAMgB,QACjE/B,EAAUe,EAAMsG,GAAeE,GAC/B,K,CAEF,IAAK,YAAa,CAChB7H,EAAM8F,iBACN9F,EAAMkI,kBACN,MAAM7G,EAAQzD,KAAKuM,iBACnB,MAAMxC,EAAetG,EAAMuG,QAAQ5H,EAAM+C,QACzC,MAAMiF,EAAW3G,GAAOsG,EAAe,GAAKtG,EAAMgB,QAClD/B,EAAUe,EAAMsG,GAAeK,GAC/B,K,CAEF,IAAK,OAAQ,CACXhI,EAAM8F,iBACN9F,EAAMkI,kBACN5H,EAAUN,EAAM+C,OAAuBnF,KAAKuM,iBAAiB,IAC7D,K,CAEF,IAAK,MAAO,CACVnK,EAAM8F,iBACN9F,EAAMkI,kBACN5H,EAAUN,EAAM+C,OAAuBnF,KAAKuM,iBAAiB9B,OAC7D,K,GAKN,iBAAAlK,GACEP,KAAKiM,YAAcjM,KAAKuE,aAAaE,OAASzE,KAAKuE,YAAYvE,KAAKuE,YAAYE,OAAS,GAAKI,UAC9F7E,KAAKqM,UAAUrM,KAAKyD,M,CAKtB,kBAAAsE,CAAmB3F,GACjB,GAAIF,EAAelC,KAAKgI,KAAM5F,GAAQ,CACpC,M,CAGFpC,KAAKoM,KAAO,K,CAKd,aAAAnE,CAAc7F,GACZ,OAAQA,EAAMP,KACZ,IAAK,SACH7B,KAAKoM,KAAO,MACZ,MACF,IAAK,MACH,GAAIlK,EAAelC,KAAKgI,KAAM5F,GAAQ,CACpC,K,CAGFpC,KAAKoM,KAAO,MACZ,M,CAMN,cAAAzD,CAAevG,GACb,GAAIF,EAAelC,KAAKgI,KAAM5F,GAAQ,CACpC,M,CAGFpC,KAAKoM,KAAO,K,CAGd,MAAA1K,GACE,OACEC,EAAA,OAAAE,IAAA,wDAAgB,iBACdF,EAAA,UAAAE,IAAA,2CACEC,MAAM,gBACN2K,KAAK,SACU,gBAAAzM,KAAKoM,KAAO,OAAS,QACtB,8BACF,aAAApM,KAAKoM,KAAO,cAAgB,YACxCpK,QAAS,IAAMhC,KAAKwM,cAEpB7K,EACE,UAAAE,IAAA,2CAAAI,KAAMjC,KAAKoM,KAAO,WAAa,cAC/BT,MAAM,SACNC,OAAO,YAIXjK,EAAA,UAAAE,IAAA,2CACE6K,SAAS,kBACTC,KAAK,IACLf,OAAQ,GACRD,MAAO,MAGThK,EAAA,qBAAAE,IAAA,2CACE+E,YAAa5G,KAAK4G,YAClBiF,cAAe,IAAO7L,KAAK4G,YAAc/B,UACzCiC,WAAY9G,KAAK8G,WACjBnB,UAAW3F,KAAK2F,YAGjB3F,KAAKoM,MACJzK,EAAA,MAAAE,IAAA,2CACEC,MAAM,cACN8C,KAAK,YAEH5E,KAAK0G,SAAW1G,KAAKuE,aAAevE,KAAKuE,YAAYE,OAAS,GAC9D9C,EAAI,MAAAE,IAAA,2CAAA+C,KAAK,QACPjD,EACE,KAAAE,IAAA,2CAAAC,MAAM,SACNkD,KAAMhF,KAAKkM,YAAYlH,MAAQ,IAC/B1B,GAAItD,KAAKkM,YAAY5I,IAAMuB,UAC3BD,KAAK,WACL/B,UAAU,EACVqC,UAAY9C,GAAUpC,KAAKqK,kBAAkBjI,GAC7C+C,OAAQnF,KAAKkM,YAAY/G,QAEzBxD,EACE,UAAAE,IAAA,2CAAAI,KAAK,aACL0J,MAAM,SACNC,OAAO,WAETjK,EAEG,QAAAE,IAAA,4CAAA7B,KAAKkM,YAAY3I,OAAS,UAMlCvD,KAAK0G,QACJ/E,EAAA,OACEG,MAAM,kBACN8C,KAAK,QAEJ,IAAI,IAAI0C,MAAM,IAAIxC,KAAI,IACrBnD,EAAI,MAAAiD,KAAK,QACPjD,EAAA,OACEG,MAAM,eACN8C,KAAK,QAELjD,EAAmC,6BAKzC3B,KAAKmM,WAAa,OACpBxK,EAAC0C,EACC,CAAAZ,MAAOzD,KAAKoJ,UACZ9E,aAActE,KAAKkM,YAAY5I,GAC/BiB,YAAavE,KAAKuE,YAClBC,cAAgBpC,GAAUpC,KAAKqK,kBAAkBjI,KAGnDpC,KAAKoJ,WAAW3E,OAAS,GACvB9C,EAAA,OACEG,MAAM,kBACN8C,KAAK,QAEJ5E,KAAKoJ,UAAUtE,KAAKjB,GACnBlC,EAAA,MAAIiD,KAAK,QACPjD,EAAA,KACEG,MAAO,CACL,YAAa9B,KAAKmM,WAAa,OAC/B,eAAgBnM,KAAKmM,WAAa,WAEpCnH,KAAMnB,EAAKmB,KACX1B,GAAIO,EAAKP,GACTsB,KAAK,WACS,eAAA5E,KAAKiM,cAAgBpI,EAAKP,GAAK,OAAS,QACtDT,UAAU,EACVqC,UAAY9C,GAAUpC,KAAKqK,kBAAkBjI,GAC7C+C,OAAQtB,EAAKsB,QAEbxD,EAAA,oBAAiBkC,EAAKN,OAAQM,EAAKN,a,2ICnS3D,IAAKqJ,GAAL,SAAKA,GACHA,EAAA,mBACAA,EAAA,2BACAA,EAAA,yBACAA,EAAA,yBACAA,EAAA,0BACD,EAND,CAAKA,MAMJ,KAED,MAAMC,EAAaC,OAAOC,KAAKH,G,SAafI,EACdC,EACAC,EACAC,GAEA,MAAMC,EAAuBC,EAAiBJ,EAAOC,GACrD,MAAMI,EAAaF,EAAqB3I,OAAS,EACjD,MAAM8I,EAAUD,EAAaL,EAAMO,cAAgB3I,UAEnD,MAAM4I,EAAkC,GAExC,GAAIN,EAAcM,EAAYxJ,KAAKyJ,EAAoBT,EAAOE,IAE9DM,EAAYxJ,KAAKyJ,EAAoBT,IAErC,GAAIK,EAAY,CACd,GAAIH,EAAc,CAChB,MAAMQ,EAAsB,IACvBP,EAAqB9K,QAAQsL,GAASA,IAAST,OAC/CC,EACA9K,QAAQsL,GAASA,IAAST,IAC1BjJ,MAAK,CAACC,EAAGC,IAAMyJ,EAAa1J,GAAK0J,EAAazJ,MAEnDuJ,EAAoB3E,SAAS4E,GAASH,EAAYxJ,KAAK6J,EAAuBb,EAAOW,EAAML,K,KACtF,CACLH,EACGlJ,MAAK,CAACC,EAAGC,IAAMyJ,EAAa1J,GAAK0J,EAAazJ,KAC9C4E,SAAS+E,GAAgBN,EAAYxJ,KAAK6J,EAAuBb,EAAOc,EAAaR,K,EAI5F,OAAOE,CACT,CAEA,MAAMC,EAAsB,CAACM,EAAoBJ,KACxC,CACLtK,GAAI2K,EAAQ,QAAQD,KAAcJ,KAClCrK,MAAO2K,EAAWF,EAAYJ,GAC9BO,WAAYC,EAAeJ,EAAYJ,EAAM,OAC7CnG,IAAK4G,EAAS,CAAEC,EAAGN,KAAgBJ,EAAO,CAAEA,QAAS,GAAKI,kBACvDO,EAAYP,EAAYA,EAAYJ,KAI3C,MAAME,EAAyB,CAACE,EAAoBJ,EAAcL,KACzD,CACLjK,GAAI2K,EAAQ,QAAQD,KAAcJ,KAAQL,KAC1ChK,MAAO2K,EAAWF,EAAYJ,GAC9BO,WAAYC,EAAeJ,EAAYJ,EAAM,MAC7CnG,IAAK4G,EAAS,CAAET,OAAMY,QAASjB,EAASS,kBACrCO,EAAYP,EAAYnJ,UAAW+I,EAAML,KAIhD,MAAMU,EAAWQ,GACfA,EACG5G,MAAM,IACN/C,KAAK4J,GAAMA,EAAEC,WAAW,GAAGC,SAAS,MACpCC,KAAK,IAEV,MAAMR,EAAYS,GACT,WAAW,IAAIC,gBAAgBD,GAAQF,aAGhD,MAAML,EAAc,CAACP,EAAoBf,EAAgBW,EAAeL,KAAgB,CACtFS,gBACIf,EAAQ,CAAEA,SAAU,MACpBW,EAAO,CAAEA,QAAS,MAClBL,EAAU,CAAEA,WAAY,KAG9B,MAAMW,EAAa,CAACF,EAAoBJ,IAC/B,SAASI,uBAAgCJ,EAAO,GAAGhB,EAAYgB,IAASA,IAAS,2BAG1F,MAAMQ,EAAiB,CAACJ,EAAoBJ,EAAeoB,EAAqB,QACvE,YAAYA,EAAY,UAAY,YAAYhB,KAAcJ,EAAO,gBAAgBhB,EAAYgB,IAASA,IAAS,qBAG5H,SAASP,EAAiBJ,EAAeC,GACvC,MAAM+B,EAAeC,EAAYjC,GACjC,OAAOH,OAAOqC,QAAQjC,GACnB5K,QAAO,EAAC,CAAG8M,KAAcA,EAAS5M,MAAM+K,GAAYA,EAAQ8B,gBAAkBJ,MAC9EnK,KAAI,EAAE8I,KAAUA,GACrB,CAGA,MAAMsB,EAAeI,GAAcA,EAAED,cAAcE,QAAQ,OAAQ,KAEnE,MAAM1B,EAAgBD,IACpB,MAAM1E,EAAQ2D,EAAW7C,QAAQ4D,GACjC,OAAO1E,GAAS,EAAIA,EAAQ,GAAG,EChHjC,MAAMsG,EAAgB,+/G,MCUTC,EAAe,M,6FAClBC,YACAxC,eAA2C,GAC3CyC,M,0BAMRC,cAAyB,MAIzBC,aAAmChL,UAG1B4I,YAAkC,GAGlCqC,iBAA2B,GAG3BC,gBAA2B,MAIpCnJ,YAAkC/B,UAG1Bc,UAAuBP,EAAUyB,KAGjCC,WAGR,mBAAAkJ,GACEhQ,KAAK6P,aAAe7P,KAAK4G,YACzB,GAAI5G,KAAK4G,YAAa,CACpB5G,KAAKiQ,e,CAEPjQ,KAAKkQ,kB,CAIP,kBAAAC,GACEnQ,KAAKkQ,kB,CAIP,qBAAAE,GACE,IAAKpQ,KAAK4P,cAAe,CACvB5P,KAAK+P,gBAAkB,K,EAK3B,uBAAAM,GACErQ,KAAK8P,iBAAmB,E,CAIGQ,OAEpBC,YAET,uBAAMhQ,GACJP,KAAKkN,qBAAuBxH,EAAkB1F,KAAK2F,WACnD3F,KAAK4P,gBAAkB5P,KAAK4G,YAC5B5G,KAAK6P,aAAe7P,KAAK4G,W,CAK3B,kBAAAmB,CAAmB3F,GACjB,GAAIpC,KAAK4P,eAAiB5P,KAAKgI,OAAS9F,EAAelC,KAAKgI,KAAM5F,GAAQ,CACxEpC,KAAK4P,cAAgB,K,EAMzB,SAAAY,CAAUpO,GACR,IAAKe,EAASf,GAAQ,CACpB,M,CAGF,GAAIpC,KAAK+P,gBAAiB,CACxB/P,KAAK+P,gBAAkB,K,KAClB,CACL/P,KAAK4P,cAAgB,K,EAMzB,SAAAa,CAAUrO,GACR,IAAKc,EAASd,GAAQ,CACpB,M,CAGFpC,KAAK+P,gBAAkB,MAEvB,IAAK7N,EAAelC,KAAKgI,KAAM5F,GAAQ,CACrCpC,KAAK4P,cAAgB,K,EAIjB,aAAAK,GACNjQ,KAAK4P,cAAgB,KACrBxH,YAAW,KACT,MAAMsI,EAAiB1Q,KAAKgI,KAAKM,WAAWO,cAAc,oBAC1D6H,EAAe5N,MAAM,CAAEC,cAAe,MAAO,GAC5C,I,CAGG,gBAAA4N,GACN3Q,KAAK4G,YAAc/B,UACnB7E,KAAKuQ,YAAYK,M,CAGX,gBAAAV,GACNlQ,KAAKyN,YAAc,GACnBzN,KAAK+P,gBAAkB,K,CAGjB,iBAAAc,CAAkBzO,GACxBpC,KAAK6P,aAAgBzN,EAAM+C,OAA4B2L,MACvD,IAAK9Q,KAAK6P,aAAc,CACtB7P,KAAK4G,YAAc/B,S,CAGrB7E,KAAK+Q,mB,CAGC,iBAAAA,GACNtI,aAAazI,KAAK2P,OAElB,MAAM1C,GAASjN,KAAK6P,cAAgB,IAAImB,OAExC,GAAI/D,EAAMxI,OAAS,EAAG,CACpBzE,KAAKkQ,mBACL,M,CAGFlQ,KAAK2P,MAAQvH,YAAW,KACtBpI,KAAKkQ,mBACLlQ,KAAKyN,YAAcT,EAAiBC,EAAOjN,KAAKkN,eAAgBlN,KAAK8G,YAAY0G,eACjFxN,KAAK+P,gBAAkB,IAAI,GAC1B,I,CAGG,cAAAkB,CAAe7O,GACrBA,EAAM8F,iBACN,IAAKlI,KAAK6P,aAAc,CACtB,M,CAGF,GAAI7P,KAAK8P,iBAAkB,CACzB,MAAMoB,EAAalR,KAAKyN,YAAY1J,MAAMuL,GAAMA,EAAEhM,KAAOtD,KAAK8P,mBAC9D,GAAIoB,EAAY,CACdlR,KAAKmR,uBAAuBD,GAC5BlR,KAAK+P,gBAAkB,MACvB,M,EAIJ/P,KAAK4P,cAAgB,MAErB,MAAMwB,EAAWpR,KAAKsQ,OAAOM,KAAK,CAAE3D,MAAOjN,KAAK6P,aAAcjC,KAAM5N,KAAK8G,aAEzE,GAAIsK,EAASC,iBAAkB,CAC7B,M,CAGFrR,KAAK0P,YAAY4B,Q,CAGX,sBAAAH,CAAuBD,GAC7B,MAAMK,EAAKvR,KAAKsQ,OAAOM,KAAK,CAC1B5C,WAAYkD,EAAWlD,WACvBf,MAAOiE,EAAWjE,MAClBW,KAAMsD,EAAWtD,KACjBL,QAAS2D,EAAW3D,UAEtB,IAAKgE,EAAGF,iBAAkB,CACxBvQ,OAAO0Q,SAASxM,KAAOkM,EAAWzJ,G,EAI9B,oBAAAgK,CAAqBrP,GAC3B,IAAKa,EAAeb,KAAWY,EAAaZ,GAAQ,CAClD,M,CAGF,IAAKpC,KAAKyN,YAAYhJ,OAAQ,CAC5B,M,CAGF,MAAMiN,EAAU1R,KAAKyN,YAAY3I,KAAK6M,GAAMA,EAAErO,KAE9C,IAAKoO,EAAQjN,OAAQ,CACnB,M,CAGFrC,EAAM8F,iBACN9F,EAAMkI,kBAEN,IAAKtK,KAAK+P,gBAAiB,CACzB/P,KAAK+P,gBAAkB,I,CAGzB,IAAI6B,EAAS,KACb,MAAMC,EAAUH,EAAQ,GACxB,MAAMI,EAASJ,EAAQA,EAAQjN,OAAS,GACxC,MAAMsN,EAAaL,EAAQ1H,QAAQhK,KAAK8P,kBACxC,GAAIiC,EAAa,EAAG,CAClBH,EAAS3O,EAAeb,GAASyP,EAAUC,C,KACtC,CACL,GAAI7O,EAAeb,GAAQ,CACzBwP,EAASF,EAAQK,EAAa,IAAMD,C,KAC/B,CACLF,EAASF,EAAQK,EAAa,IAAMF,C,EAGxC7R,KAAK8P,iBAAmB8B,C,CAGlB,iBAAAI,GACN,MAAMC,EAAgB,CAAC1O,EAAe1B,IACpCF,EACE,QAAAE,IAAKA,EACLC,MAAM,kBAAiB,cACX,QAEXyB,GAIL,OACE5B,EAAA,OACEG,MAAO,CAAE,sBAAuB,KAAMC,QAAW/B,KAAK+P,kBAAoB/P,KAAKyN,YAAYhJ,QAC3FiH,cAAgBwG,GAAMA,EAAEhK,kBAExBvG,EACE,OAAA2B,GAAG,qBACHxB,MAAM,cACN8C,KAAK,UAAS,aACH,gCAEV5E,KAAKyN,YAAY3I,KAAI,CAACoM,EAAYiB,KACjC,MAAM1O,EAAQ,GAEd,GAAI0O,IAAM,EAAG,CACX1O,EAAMQ,KAAKgO,EAAc,kBAAmB,a,MACvC,GAAIf,EAAW3D,UAAYvN,KAAKyN,YAAY0E,EAAI,GAAG5E,QAAS,CACjE9J,EAAMQ,KAAKtC,EAAA,2BAAuB,UAClC8B,EAAMQ,KAAKgO,EAAc,mBAAoB,a,CAG/CxO,EAAMQ,KACJtC,EACE,QAAAE,IAAKsQ,EACL7O,GAAI4N,EAAW5N,GACfxB,MAAM,aACN8C,KAAK,SAAQ,aACDsM,EAAW/C,WAAU,gBAClBnO,KAAK8P,mBAAqBoB,EAAW5N,GAAK,OAASuB,UAClE7C,QAAS,IAAMhC,KAAKmR,uBAAuBD,IAE3CvP,EAAQ,UAAAM,KAAK,0BACbN,EACc,6BACZyQ,UAAWlB,EAAW3N,UAK5B,OAAOE,CAAK,K,CAOtB,MAAA/B,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,QAAAE,IAAA,2CACEC,MAAO,CAAEuQ,UAAa,KAAM,iBAAkBrS,KAAK4P,eACnD0C,IAAM/P,GAAQvC,KAAK0P,YAAcnN,EACjCqC,KAAK,SACM,8BACX2N,OAAO,MACPC,OAAO,WACPC,SAAWrQ,GAAUpC,KAAKiR,eAAe7O,GACzCsQ,QAAS,IAAM1S,KAAK2Q,sBAEjB3Q,KAAK8G,YACNnF,EAAA,SAAAE,IAAA,2CACE4K,KAAK,SACLxK,KAAK,OACL6O,MAAO9Q,KAAK8G,aAIhBnF,EAAA,OAAAE,IAAA,2CACEC,MAAM,gBACN8C,KAAK,QAEJ5E,KAAK4G,aACJjF,EAAA,UAAAE,IAAA,2CACE4K,KAAK,QACM,uCACXkG,UAAW3S,KAAK4P,cACH,eAAC5P,KAAK4P,cAAgB,OAAS/K,UAC5ChC,UAAW7C,KAAK4P,eAAgB,EAAK,GAErCjO,EAAA,UAAAE,IAAA,2CAAQI,KAAK,sBAGjBN,EACE,SAAAE,IAAA,2CAAAyB,GAAG,kBACHrB,KAAK,IACLwK,KAAK,SACLkG,UAAW3S,KAAK4P,cAChBgD,YAAY,iCACZ9B,MAAO9Q,KAAK4G,YACZiM,SAAQ,KACRC,aAAa,MACblO,KAAK,WACa,2BAAM,gBACT5E,KAAK+P,gBAAkB,OAAS,QACjC,qCAAoB,wBACX/P,KAAK8P,iBAAgB,aACjC,iCAAgC,eAC7B9P,KAAK4P,cAAgB,OAAS/K,UAC5ChC,UAAW7C,KAAK4P,eAAgB,EAAK,EACrCmD,QAAU3Q,GAAUpC,KAAK6Q,kBAAkBzO,GAC3C8C,UAAYgN,IAEV,GAAI/O,EAAS+O,GAAI,CACfA,EAAEhK,gB,CAGJlI,KAAKyR,qBAAqBS,EAAE,KAKlCvQ,EAAA,UAAAE,IAAA,2CACEC,MAAM,mBAAkB,aACZ9B,KAAK4P,cAAgB,iBAAmB,2BACtC,kCACdnD,KAAMzM,KAAK4P,cAAgB,SAAW,SACtC5N,QAAS,IAAMhC,KAAKiQ,iBAEnBjQ,KAAK4P,cAAgB,KAAOjO,EAAA,QAAMG,MAAM,0BAAqC,SAC9EH,EAAA,UAAAE,IAAA,2CAAQI,KAAK,aAIhBjC,KAAKgS,oB","ignoreList":[]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
const e="zanichelli-it-frontend-kit";const t={hydratedSelectorName:"hydrated",lazyLoad:true,updatable:true};const i=()=>{};const l=":root{--font-md:500}.title-1,.title-2,.title-3,.title-4,.title-5,.title-6,.title-1-rg,.title-2-rg,.title-3-rg,.title-4-rg,.title-5-rg,.title-6-rg,.title-1-lt,.title-2-lt,.title-3-lt,.title-4-lt,.title-5-lt,.title-6-lt,.title-1-sb,.title-2-sb,.title-3-sb,.title-4-sb,.title-5-sb,.title-6-sb,.title-1-bd,.title-2-bd,.title-3-bd,.title-4-bd,.title-5-bd,.title-6-bd,.title-1-md,.title-2-md,.title-3-md,.title-4-md,.title-5-md,.title-6-md{font-family:var(--font-family-serif);font-weight:var(--font-rg)}.title-1-lt,.title-2-lt,.title-3-lt,.title-4-lt,.title-5-lt,.title-6-lt,.heading-1-lt,.heading-2-lt,.heading-3-lt,.heading-4-lt,.body-1-lt,.body-2-lt,.body-3-lt,.body-4-lt,.body-5-lt,.body-6-lt,.body-7-lt,.interactive-1-lt,.interactive-2-lt{font-weight:var(--font-lt)}.title-1-md,.title-2-md,.title-3-md,.title-4-md,.title-5-md,.title-6-md,.heading-1-md,.heading-2-md,.heading-3-md,.heading-4-md,.body-1-md,.body-2-md,.body-3-md,.body-4-md,.body-5-md,.body-6-md,.body-7-md,.interactive-1-md,.interactive-2-md{font-weight:var(--font-md)}.title-1-rg,.title-2-rg,.title-3-rg,.title-4-rg,.title-5-rg,.title-6-rg,.heading-1-rg,.heading-2-rg,.heading-3-rg,.heading-4-rg,.body-1-rg,.body-2-rg,.body-3-rg,.body-4-rg,.body-5-rg,.body-6-rg,.body-7-rg,.interactive-1-rg,.interactive-2-rg{font-weight:var(--font-rg)}.title-1-sb,.title-2-sb,.title-3-sb,.title-4-sb,.title-5-sb,.title-6-sb,.heading-1-sb,.heading-2-sb,.heading-3-sb,.heading-4-sb,.body-2-sb,.body-3-sb,.body-4-sb,.body-5-sb,.body-6-sb,.body-7-sb,.interactive-1-sb,.interactive-2-sb{font-weight:var(--font-sb)}.title-1-bd,.title-2-bd,.title-3-bd,.title-4-bd,.title-5-bd,.title-6-bd,.heading-1-bd,.heading-2-bd,.heading-3-bd,.heading-4-bd,.body-1-bd,.body-2-bd,.body-3-bd,.body-4-bd,.body-5-bd,.body-6-bd,.body-7-bd,.interactive-1-bd,.interactive-2-bd{font-weight:var(--font-bd)}.font-lt{font-weight:var(--font-lt)}.font-rg{font-weight:var(--font-rg)}.font-md{font-weight:var(--font-md)}.font-sb{font-weight:var(--font-sb)}.font-bd{font-weight:var(--font-bd)}.font-it{font-style:italic}.font-serif{font-family:var(--font-family-serif)}.font-sans{font-family:var(--font-family-sans)}.title-1,.title-1-sb,.title-1-bd,.title-1-rg,.title-1-lt,.title-1-md{font-size:72px;line-height:80px}.title-2,.title-2-sb,.title-2-bd,.title-2-rg,.title-2-lt,.title-2-md{font-size:48px;line-height:52px}.title-3,.title-3-sb,.title-3-bd,.title-3-rg,.title-3-lt,.title-3-md{font-size:2rem;line-height:2.75rem;}.title-4,.title-4-sb,.title-4-bd,.title-4-rg,.title-4-lt,.title-4-md{font-size:1.75rem;line-height:2rem;}.title-5,.title-5-sb,.title-5-bd,.title-5-rg,.title-5-lt,.title-5-md{font-size:1.5rem;line-height:1.75rem;}.title-6,.title-6-sb,.title-6-bd,.title-6-rg,.title-6-lt,.title-6-md{font-size:1.25rem;line-height:1.75rem;}.heading-1,.heading-1-sb,.heading-1-bd,.heading-1-rg,.heading-1-lt,.heading-1-md{font-size:2rem;line-height:2.75rem;}.heading-2,.heading-2-sb,.heading-2-bd,.heading-2-rg,.heading-2-lt,.heading-2-md{font-size:1.75rem;line-height:2rem;}.heading-3,.heading-3-sb,.heading-3-bd,.heading-3-rg,.heading-3-lt,.heading-3-md{font-size:1.5rem;line-height:1.75rem;}.heading-4,.heading-4-sb,.heading-4-bd,.heading-4-rg,.heading-4-lt,.heading-4-md{font-size:1.125rem;line-height:1.375rem;}.body-1,.body-1-sb,.body-1-bd,.body-1-rg,.body-1-lt,.body-1-md{font-size:1.5rem;line-height:2rem;}.body-2,.body-2-sb,.body-2-bd,.body-2-rg,.body-2-lt,.body-2-md{font-size:1.25rem;line-height:1.75rem;}.body-3,.body-3-sb,.body-3-bd,.body-3-rg,.body-3-lt,.body-3-md{font-size:1.125rem;line-height:1.5rem;}.body-4,.body-4-sb,.body-4-bd,.body-4-rg,.body-4-lt,.body-4-md{font-size:1rem;line-height:1.5rem;}.body-5,.body-5-sb,.body-5-bd,.body-5-rg,.body-5-lt,.body-5-md{font-size:0.875rem;line-height:1.125rem;}.body-6,.body-6-sb,.body-6-bd,.body-6-rg,.body-6-lt,.body-6-md{font-size:0.75rem;line-height:1rem;}.body-7,.body-7-sb,.body-7-bd,.body-7-rg,.body-7-lt,.body-7-md{font-size:0.625rem;line-height:0.875rem;}.interactive-1,.interactive-1-sb,.interactive-1-bd,.interactive-1-rg,.interactive-1-lt,.interactive-1-md{font-size:1rem;line-height:1.5rem;}.interactive-2,.interactive-2-sb,.interactive-2-bd,.interactive-2-rg,.interactive-2-lt,.interactive-2-md{font-size:0.875rem;line-height:1.125rem;}@media (width < 768px){.mobile-title-1,.mobile-title-1-sb,.mobile-title-1-bd,.mobile-title-1-rg,.mobile-title-1-lt,.mobile-title-1-md{font-size:4.5rem;line-height:5rem;}.mobile-title-2,.mobile-title-2-sb,.mobile-title-2-bd,.mobile-title-2-rg,.mobile-title-2-lt,.mobile-title-2-md{font-size:3rem;line-height:3.25rem;}.mobile-title-3,.mobile-title-3-sb,.mobile-title-3-bd,.mobile-title-3-rg,.mobile-title-3-lt,.mobile-title-3-md{font-size:2rem;line-height:2.75rem;}.mobile-title-4,.mobile-title-4-sb,.mobile-title-4-bd,.mobile-title-4-rg,.mobile-title-4-lt,.mobile-title-4-md{font-size:1.75rem;line-height:2rem;}.mobile-title-5,.mobile-title-5-sb,.mobile-title-5-bd,.mobile-title-5-rg,.mobile-title-5-lt,.mobile-title-5-md{font-size:1.5rem;line-height:1.75rem;}.mobile-title-6,.mobile-title-6-sb,.mobile-title-6-bd,.mobile-title-6-rg,.mobile-title-6-lt,.mobile-title-6-md{font-size:1.25rem;line-height:1.75rem;}.mobile-heading-1,.mobile-heading-1-sb,.mobile-heading-1-bd,.mobile-heading-1-rg,.mobile-heading-1-lt,.mobile-heading-1-md{font-size:2rem;line-height:2.75rem;}.mobile-heading-2,.mobile-heading-2-sb,.mobile-heading-2-bd,.mobile-heading-2-rg,.mobile-heading-2-lt,.mobile-heading-2-md{font-size:1.75rem;line-height:2rem;}.mobile-heading-3,.mobile-heading-3-sb,.mobile-heading-3-bd,.mobile-heading-3-rg,.mobile-heading-3-lt,.mobile-heading-3-md{font-size:1.5rem;line-height:1.75rem;}.mobile-heading-4,.mobile-heading-4-sb,.mobile-heading-4-bd,.mobile-heading-4-rg,.mobile-heading-4-lt,.mobile-heading-4-md{font-size:1.125rem;line-height:1.375rem;}.mobile-body-1,.mobile-body-1-sb,.mobile-body-1-bd,.mobile-body-1-rg,.mobile-body-1-lt,.mobile-body-1-md{font-size:1.5rem;line-height:2rem;}.mobile-body-2,.mobile-body-2-sb,.mobile-body-2-bd,.mobile-body-2-rg,.mobile-body-2-lt,.mobile-body-2-md{font-size:1.25rem;line-height:1.75rem;}.mobile-body-3,.mobile-body-3-sb,.mobile-body-3-bd,.mobile-body-3-rg,.mobile-body-3-lt,.mobile-body-3-md{font-size:1.125rem;line-height:1.5rem;}.mobile-body-4,.mobile-body-4-sb,.mobile-body-4-bd,.mobile-body-4-rg,.mobile-body-4-lt,.mobile-body-4-md{font-size:1rem;line-height:1.5rem;}.mobile-body-5,.mobile-body-5-sb,.mobile-body-5-bd,.mobile-body-5-rg,.mobile-body-5-lt,.mobile-body-5-md{font-size:0.875rem;line-height:1.125rem;}.mobile-body-6,.mobile-body-6-sb,.mobile-body-6-bd,.mobile-body-6-rg,.mobile-body-6-lt,.mobile-body-6-md{font-size:0.75rem;line-height:1rem;}.mobile-body-7,.mobile-body-7-sb,.mobile-body-7-bd,.mobile-body-7-rg,.mobile-body-7-lt,.mobile-body-7-md{font-size:0.625rem;line-height:0.875rem;}.mobile-interactive-1,.mobile-interactive-1-sb,.mobile-interactive-1-bd,.mobile-interactive-1-rg,.mobile-interactive-1-lt,.mobile-interactive-1-md{font-size:1rem;line-height:1.5rem;}.mobile-interactive-2,.mobile-interactive-2-sb,.mobile-interactive-2-bd,.mobile-interactive-2-rg,.mobile-interactive-2-lt,.mobile-interactive-2-md{font-size:0.875rem;line-height:1.125rem;}}@media (width >= 768px) and (width < 1152px){.tablet-title-1,.tablet-title-1-sb,.tablet-title-1-bd,.tablet-title-1-rg,.tablet-title-1-lt,.tablet-title-1-md{font-size:4.5rem;line-height:5rem;}.tablet-title-2,.tablet-title-2-sb,.tablet-title-2-bd,.tablet-title-2-rg,.tablet-title-2-lt,.tablet-title-2-md{font-size:3rem;line-height:3.25rem;}.tablet-title-3,.tablet-title-3-sb,.tablet-title-3-bd,.tablet-title-3-rg,.tablet-title-3-lt,.tablet-title-3-md{font-size:2rem;line-height:2.75rem;}.tablet-title-4,.tablet-title-4-sb,.tablet-title-4-bd,.tablet-title-4-rg,.tablet-title-4-lt,.tablet-title-4-md{font-size:1.75rem;line-height:2rem;}.tablet-title-5,.tablet-title-5-sb,.tablet-title-5-bd,.tablet-title-5-rg,.tablet-title-5-lt,.tablet-title-5-md{font-size:1.5rem;line-height:1.75rem;}.tablet-title-6,.tablet-title-6-sb,.tablet-title-6-bd,.tablet-title-6-rg,.tablet-title-6-lt,.tablet-title-6-md{font-size:1.25rem;line-height:1.75rem;}.tablet-heading-1,.tablet-heading-1-sb,.tablet-heading-1-bd,.tablet-heading-1-rg,.tablet-heading-1-lt,.tablet-heading-1-md{font-size:2rem;line-height:2.75rem;}.tablet-heading-2,.tablet-heading-2-sb,.tablet-heading-2-bd,.tablet-heading-2-rg,.tablet-heading-2-lt,.tablet-heading-2-md{font-size:1.75rem;line-height:2rem;}.tablet-heading-3,.tablet-heading-3-sb,.tablet-heading-3-bd,.tablet-heading-3-rg,.tablet-heading-3-lt,.tablet-heading-3-md{font-size:1.5rem;line-height:1.75rem;}.tablet-heading-4,.tablet-heading-4-sb,.tablet-heading-4-bd,.tablet-heading-4-rg,.tablet-heading-4-lt,.tablet-heading-4-md{font-size:1.125rem;line-height:1.375rem;}.tablet-body-1,.tablet-body-1-sb,.tablet-body-1-bd,.tablet-body-1-rg,.tablet-body-1-lt,.tablet-body-1-md{font-size:1.5rem;line-height:2rem;}.tablet-body-2,.tablet-body-2-sb,.tablet-body-2-bd,.tablet-body-2-rg,.tablet-body-2-lt,.tablet-body-2-md{font-size:1.25rem;line-height:1.75rem;}.tablet-body-3,.tablet-body-3-sb,.tablet-body-3-bd,.tablet-body-3-rg,.tablet-body-3-lt,.tablet-body-3-md{font-size:1.125rem;line-height:1.5rem;}.tablet-body-4,.tablet-body-4-sb,.tablet-body-4-bd,.tablet-body-4-rg,.tablet-body-4-lt,.tablet-body-4-md{font-size:1rem;line-height:1.5rem;}.tablet-body-5,.tablet-body-5-sb,.tablet-body-5-bd,.tablet-body-5-rg,.tablet-body-5-lt,.tablet-body-5-md{font-size:0.875rem;line-height:1.125rem;}.tablet-body-6,.tablet-body-6-sb,.tablet-body-6-bd,.tablet-body-6-rg,.tablet-body-6-lt,.tablet-body-6-md{font-size:0.75rem;line-height:1rem;}.tablet-body-7,.tablet-body-7-sb,.tablet-body-7-bd,.tablet-body-7-rg,.tablet-body-7-lt,.tablet-body-7-md{font-size:0.625rem;line-height:0.875rem;}.tablet-interactive-1,.tablet-interactive-1-sb,.tablet-interactive-1-bd,.tablet-interactive-1-rg,.tablet-interactive-1-lt,.tablet-interactive-1-md{font-size:1rem;line-height:1.5rem;}.tablet-interactive-2,.tablet-interactive-2-sb,.tablet-interactive-2-bd,.tablet-interactive-2-rg,.tablet-interactive-2-lt,.tablet-interactive-2-md{font-size:0.875rem;line-height:1.125rem;}}@media (width >= 1152px){.desktop-title-1,.desktop-title-1-sb,.desktop-title-1-bd,.desktop-title-1-rg,.desktop-title-1-lt,.desktop-title-1-md{font-size:4.5rem;line-height:5rem;}.desktop-title-2,.desktop-title-2-sb,.desktop-title-2-bd,.desktop-title-2-rg,.desktop-title-2-lt,.desktop-title-2-md{font-size:3rem;line-height:3.25rem;}.desktop-title-3,.desktop-title-3-sb,.desktop-title-3-bd,.desktop-title-3-rg,.desktop-title-3-lt,.desktop-title-3-md{font-size:2rem;line-height:2.75rem;}.desktop-title-4,.desktop-title-4-sb,.desktop-title-4-bd,.desktop-title-4-rg,.desktop-title-4-lt,.desktop-title-4-md{font-size:1.75rem;line-height:2rem;}.desktop-title-5,.desktop-title-5-sb,.desktop-title-5-bd,.desktop-title-5-rg,.desktop-title-5-lt,.desktop-title-5-md{font-size:1.5rem;line-height:1.75rem;}.desktop-title-6,.desktop-title-6-sb,.desktop-title-6-bd,.desktop-title-6-rg,.desktop-title-6-lt,.desktop-title-6-md{font-size:1.25rem;line-height:1.75rem;}.desktop-heading-1,.desktop-heading-1-sb,.desktop-heading-1-bd,.desktop-heading-1-rg,.desktop-heading-1-lt,.desktop-heading-1-md{font-size:2rem;line-height:2.75rem;}.desktop-heading-2,.desktop-heading-2-sb,.desktop-heading-2-bd,.desktop-heading-2-rg,.desktop-heading-2-lt,.desktop-heading-2-md{font-size:1.75rem;line-height:2rem;}.desktop-heading-3,.desktop-heading-3-sb,.desktop-heading-3-bd,.desktop-heading-3-rg,.desktop-heading-3-lt,.desktop-heading-3-md{font-size:1.5rem;line-height:1.75rem;}.desktop-heading-4,.desktop-heading-4-sb,.desktop-heading-4-bd,.desktop-heading-4-rg,.desktop-heading-4-lt,.desktop-heading-4-md{font-size:1.125rem;line-height:1.375rem;}.desktop-body-1,.desktop-body-1-sb,.desktop-body-1-bd,.desktop-body-1-rg,.desktop-body-1-lt,.desktop-body-1-md{font-size:1.5rem;line-height:2rem;}.desktop-body-2,.desktop-body-2-sb,.desktop-body-2-bd,.desktop-body-2-rg,.desktop-body-2-lt,.desktop-body-2-md{font-size:1.25rem;line-height:1.75rem;}.desktop-body-3,.desktop-body-3-sb,.desktop-body-3-bd,.desktop-body-3-rg,.desktop-body-3-lt,.desktop-body-3-md{font-size:1.125rem;line-height:1.5rem;}.desktop-body-4,.desktop-body-4-sb,.desktop-body-4-bd,.desktop-body-4-rg,.desktop-body-4-lt,.desktop-body-4-md{font-size:1rem;line-height:1.5rem;}.desktop-body-5,.desktop-body-5-sb,.desktop-body-5-bd,.desktop-body-5-rg,.desktop-body-5-lt,.desktop-body-5-md{font-size:0.875rem;line-height:1.125rem;}.desktop-body-6,.desktop-body-6-sb,.desktop-body-6-bd,.desktop-body-6-rg,.desktop-body-6-lt,.desktop-body-6-md{font-size:0.75rem;line-height:1rem;}.desktop-body-7,.desktop-body-7-sb,.desktop-body-7-bd,.desktop-body-7-rg,.desktop-body-7-lt,.desktop-body-7-md{font-size:0.625rem;line-height:0.875rem;}.desktop-interactive-1,.desktop-interactive-1-sb,.desktop-interactive-1-bd,.desktop-interactive-1-rg,.desktop-interactive-1-lt,.desktop-interactive-1-md{font-size:1rem;line-height:1.5rem;}.desktop-interactive-2,.desktop-interactive-2-sb,.desktop-interactive-2-bd,.desktop-interactive-2-rg,.desktop-interactive-2-lt,.desktop-interactive-2-md{font-size:0.875rem;line-height:1.125rem;}}z-button.zanit-button{--color-primary01:var(--red500);--color-hover-primary:var(--red800);--color-pressed-primary:var(--red400);--color-button-secondary:transparent;--color-primary02:transparent;--color-primary03:transparent}z-button.zanit-button-dark{--color-primary01:var(--gray950);--color-hover-primary:#000;--color-pressed-primary:var(--gray950);--color-button-secondary:transparent;--color-primary02:transparent;--color-primary03:transparent}:root{--zanit-accent-color:#ffe74c;--shadow-focus-primary:0 0 0 2px #fff, 0 0 2px 5px var(--gray950)}.zanit-link,.zanit-link-inverse{color:currentcolor;font-family:inherit;text-decoration:underline solid 12% var(--red500);text-underline-offset:28%}.zanit-link-inverse{color:var(--color-text-inverse);text-decoration-color:var(--color-text-inverse)}";var o=Object.defineProperty;var n=(e,t)=>{for(var i in t)o(e,i,{get:t[i],enumerable:true})};var r=(e,t)=>{var i;const l=t.t;const o=Object.entries((i=l.i)!=null?i:{});o.map((([i,[l]])=>{if(l&31||l&32){const l=e[i];const o=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),i);Object.defineProperty(e,i,{get(){return o.get.call(this)},set(e){o.set.call(this,e)},configurable:true,enumerable:true});e[i]=t.l.has(i)?t.l.get(i):l}}))};var d=e=>{if(e.__stencil__getHostRef){return e.__stencil__getHostRef()}return void 0};var s=(e,t)=>{e.__stencil__getHostRef=()=>t;t.o=e;{r(e,t)}};var b=(e,t)=>{const i={m:0,$hostElement$:e,t,l:new Map};{i.h=new Promise((e=>i.v=e));e["s-p"]=[];e["s-rc"]=[]}const l=i;e.__stencil__getHostRef=()=>l;return l};var a=(e,t)=>t in e;var m=(e,t)=>(0,console.error)(e,t);var f=new Map;var h=(e,t,i)=>{const l=e.p.replace(/-/g,"_");const o=e.u;if(!o){return void 0}const n=f.get(o);if(n){return n[l]}
|
|
2
|
+
/*!__STENCIL_STATIC_IMPORT_SWITCH__*/return import(`./${o}.entry.js${""}`).then((e=>{{f.set(o,e)}return e[l]}),(e=>{m(e,t.$hostElement$)}))};var c=new Map;var g="sty-id";var y="{visibility:hidden}.hydrated{visibility:inherit}";var v="slot-fb{display:contents}slot-fb[hidden]{display:none}";var p=typeof window!=="undefined"?window:{};var u={m:0,k:"",jmp:e=>e(),raf:e=>requestAnimationFrame(e),ael:(e,t,i,l)=>e.addEventListener(t,i,l),rel:(e,t,i,l)=>e.removeEventListener(t,i,l),ce:(e,t)=>new CustomEvent(e,t)};var k=(()=>{var e;let t=false;try{(e=p.document)==null?void 0:e.addEventListener("e",null,Object.defineProperty({},"passive",{get(){t=true}}))}catch(e){}return t})();var z=e=>Promise.resolve(e);var w=(()=>{try{new CSSStyleSheet;return typeof(new CSSStyleSheet).replaceSync==="function"}catch(e){}return false})();var $=false;var S=[];var j=[];var x=(e,t)=>i=>{e.push(i);if(!$){$=true;if(t&&u.m&4){C(E)}else{u.raf(E)}}};var O=e=>{for(let t=0;t<e.length;t++){try{e[t](performance.now())}catch(e){m(e)}}e.length=0};var E=()=>{O(S);{O(j);if($=S.length>0){u.raf(E)}}};var C=e=>z().then(e);var M=x(j,true);var N=e=>e!=null&&e!==void 0;var P=e=>{e=typeof e;return e==="object"||e==="function"};function U(e){var t,i,l;return(l=(i=(t=e.head)==null?void 0:t.querySelector('meta[name="csp-nonce"]'))==null?void 0:i.getAttribute("content"))!=null?l:void 0}var R=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");var D={};n(D,{err:()=>A,map:()=>F,ok:()=>W,unwrap:()=>L,unwrapErr:()=>H});var W=e=>({isOk:true,isErr:false,value:e});var A=e=>({isOk:false,isErr:true,value:e});function F(e,t){if(e.isOk){const i=t(e.value);if(i instanceof Promise){return i.then((e=>W(e)))}else{return W(i)}}if(e.isErr){const t=e.value;return A(t)}throw"should never get here"}var L=e=>{if(e.isOk){return e.value}else{throw e.value}};var H=e=>{if(e.isErr){return e.value}else{throw e.value}};function T(e){const t=this.attachShadow({mode:"open",delegatesFocus:!!(e.m&16)});if(w){const e=new CSSStyleSheet;e.replaceSync(l);t.adoptedStyleSheets.push(e)}}var I=(e,t="")=>{{return()=>{}}};var V=(e,t)=>{{return()=>{}}};var q=(e,t,...i)=>{let l=null;let o=null;let n=false;let r=false;const d=[];const s=t=>{for(let i=0;i<t.length;i++){l=t[i];if(Array.isArray(l)){s(l)}else if(l!=null&&typeof l!=="boolean"){if(n=typeof e!=="function"&&!P(l)){l=String(l)}if(n&&r){d[d.length-1].$+=l}else{d.push(n?G(null,l):l)}r=n}}};s(i);if(t){if(t.key){o=t.key}{const e=t.className||t.class;if(e){t.class=typeof e!=="object"?e:Object.keys(e).filter((t=>e[t])).join(" ")}}}if(typeof e==="function"){return e(t===null?{}:t,d,B)}const b=G(e,null);b.S=t;if(d.length>0){b.j=d}{b.O=o}return b};var G=(e,t)=>{const i={m:0,C:e,$:t,M:null,j:null};{i.S=null}{i.O=null}return i};var Y={};var _=e=>e&&e.C===Y;var B={forEach:(e,t)=>e.map(J).forEach(t),map:(e,t)=>e.map(J).map(t).map(K)};var J=e=>({vattrs:e.S,vchildren:e.j,vkey:e.O,vname:e.N,vtag:e.C,vtext:e.$});var K=e=>{if(typeof e.vtag==="function"){const t={...e.vattrs};if(e.vkey){t.key=e.vkey}if(e.vname){t.name=e.vname}return q(e.vtag,t,...e.vchildren||[])}const t=G(e.vtag,e.vtext);t.S=e.vattrs;t.j=e.vchildren;t.O=e.vkey;t.N=e.vname;return t};var Q=e=>{const t=R(e);return new RegExp(`(^|[^@]|@(?!supports\\s+selector\\s*\\([^{]*?${t}))(${t}\\b)`,"g")};Q("::slotted");Q(":host");Q(":host-context");var X=(e,t)=>{if(e!=null&&!P(e)){if(t&4){return e==="false"?false:e===""||!!e}if(t&2){return typeof e==="string"?parseFloat(e):typeof e==="number"?e:NaN}if(t&1){return String(e)}return e}return e};var Z=e=>d(e).$hostElement$;var ee=(e,t,i)=>{const l=Z(e);return{emit:e=>te(l,t,{bubbles:true,composed:true,cancelable:true,detail:e})}};var te=(e,t,i)=>{const l=u.ce(t,i);e.dispatchEvent(l);return l};var ie=new WeakMap;var le=(e,t,i)=>{let l=c.get(e);if(w&&i){l=l||new CSSStyleSheet;if(typeof l==="string"){l=t}else{l.replaceSync(t)}}else{l=t}c.set(e,l)};var oe=(e,t,i)=>{var l;const o=re(t);const n=c.get(o);if(!p.document){return o}e=e.nodeType===11?e:p.document;if(n){if(typeof n==="string"){e=e.head||e;let i=ie.get(e);let r;if(!i){ie.set(e,i=new Set)}if(!i.has(o)){{r=document.querySelector(`[${g}="${o}"]`)||p.document.createElement("style");r.innerHTML=n;const i=(l=u.P)!=null?l:U(p.document);if(i!=null){r.setAttribute("nonce",i)}if(!(t.m&1)){if(e.nodeName==="HEAD"){const t=e.querySelectorAll("link[rel=preconnect]");const i=t.length>0?t[t.length-1].nextSibling:e.querySelector("style");e.insertBefore(r,(i==null?void 0:i.parentNode)===e?i:null)}else if("host"in e){if(w){const t=new CSSStyleSheet;t.replaceSync(n);e.adoptedStyleSheets=[t,...e.adoptedStyleSheets]}else{const t=e.querySelector("style");if(t){t.innerHTML=n+t.innerHTML}else{e.prepend(r)}}}else{e.append(r)}}if(t.m&1){e.insertBefore(r,null)}}if(t.m&4){r.innerHTML+=v}if(i){i.add(o)}}}else if(!e.adoptedStyleSheets.includes(n)){e.adoptedStyleSheets=[...e.adoptedStyleSheets,n]}}return o};var ne=e=>{const t=e.t;const i=e.$hostElement$;const l=t.m;const o=I("attachStyles",t.p);const n=oe(i.shadowRoot?i.shadowRoot:i.getRootNode(),t);if(l&10){i["s-sc"]=n;i.classList.add(n+"-h")}o()};var re=(e,t)=>"sc-"+e.p;var de=(e,t,i,l,o,n,r)=>{if(i===l){return}let d=a(e,t);let s=t.toLowerCase();if(t==="class"){const t=e.classList;const o=be(i);let n=be(l);{t.remove(...o.filter((e=>e&&!n.includes(e))));t.add(...n.filter((e=>e&&!o.includes(e))))}}else if(t==="key");else if(t==="ref"){if(l){l(e)}}else if(!d&&t[0]==="o"&&t[1]==="n"){if(t[2]==="-"){t=t.slice(3)}else if(a(p,s)){t=s.slice(2)}else{t=s[2]+t.slice(3)}if(i||l){const o=t.endsWith(ae);t=t.replace(me,"");if(i){u.rel(e,t,i,o)}if(l){u.ael(e,t,l,o)}}}else{const r=P(l);if((d||r&&l!==null)&&true){try{if(!e.tagName.includes("-")){const o=l==null?"":l;if(t==="list"){d=false}else if(i==null||e[t]!=o){if(typeof e.__lookupSetter__(t)==="function"){e[t]=o}else{e.setAttribute(t,o)}}}else if(e[t]!==l){e[t]=l}}catch(e){}}if(l==null||l===false){if(l!==false||e.getAttribute(t)===""){{e.removeAttribute(t)}}}else if((!d||n&4||o)&&!r&&e.nodeType===1){l=l===true?"":l;{e.setAttribute(t,l)}}}};var se=/\s/;var be=e=>{if(typeof e==="object"&&e&&"baseVal"in e){e=e.baseVal}if(!e||typeof e!=="string"){return[]}return e.split(se)};var ae="Capture";var me=new RegExp(ae+"$");var fe=(e,t,i,l)=>{const o=t.M.nodeType===11&&t.M.host?t.M.host:t.M;const n=e&&e.S||{};const r=t.S||{};{for(const e of he(Object.keys(n))){if(!(e in r)){de(o,e,n[e],void 0,i,t.m)}}}for(const e of he(Object.keys(r))){de(o,e,n[e],r[e],i,t.m)}};function he(e){return e.includes("ref")?[...e.filter((e=>e!=="ref")),"ref"]:e}var ce;var ge;var ye=false;var ve=(e,t,i)=>{const l=t.j[i];let o=0;let n;let r;if(l.$!==null){n=l.M=p.document.createTextNode(l.$)}else{if(!p.document){throw new Error("You are trying to render a Stencil component in an environment that doesn't support the DOM. Make sure to populate the [`window`](https://developer.mozilla.org/en-US/docs/Web/API/Window/window) object before rendering a component.")}n=l.M=p.document.createElement(l.C);{fe(null,l,ye)}if(N(ce)&&n["s-si"]!==ce){n.classList.add(n["s-si"]=ce)}if(l.j){for(o=0;o<l.j.length;++o){r=ve(e,l,o);if(r){n.appendChild(r)}}}}n["s-hn"]=ge;return n};var pe=(e,t,i,l,o,n)=>{let r=e;let d;if(r.shadowRoot&&r.tagName===ge){r=r.shadowRoot}for(;o<=n;++o){if(l[o]){d=ve(null,i,o);if(d){l[o].M=d;Se(r,d,t)}}}};var ue=(e,t,i)=>{for(let l=t;l<=i;++l){const t=e[l];if(t){const e=t.M;$e(t);if(e){e.remove()}}}};var ke=(e,t,i,l,o=false)=>{let n=0;let r=0;let d=0;let s=0;let b=t.length-1;let a=t[0];let m=t[b];let f=l.length-1;let h=l[0];let c=l[f];let g;let y;while(n<=b&&r<=f){if(a==null){a=t[++n]}else if(m==null){m=t[--b]}else if(h==null){h=l[++r]}else if(c==null){c=l[--f]}else if(ze(a,h,o)){we(a,h,o);a=t[++n];h=l[++r]}else if(ze(m,c,o)){we(m,c,o);m=t[--b];c=l[--f]}else if(ze(a,c,o)){we(a,c,o);Se(e,a.M,m.M.nextSibling);a=t[++n];c=l[--f]}else if(ze(m,h,o)){we(m,h,o);Se(e,m.M,a.M);m=t[--b];h=l[++r]}else{d=-1;{for(s=n;s<=b;++s){if(t[s]&&t[s].O!==null&&t[s].O===h.O){d=s;break}}}if(d>=0){y=t[d];if(y.C!==h.C){g=ve(t&&t[r],i,d)}else{we(y,h,o);t[d]=void 0;g=y.M}h=l[++r]}else{g=ve(t&&t[r],i,r);h=l[++r]}if(g){{Se(a.M.parentNode,g,a.M)}}}}if(n>b){pe(e,l[f+1]==null?null:l[f+1].M,i,l,r,f)}else if(r>f){ue(t,n,b)}};var ze=(e,t,i=false)=>{if(e.C===t.C){if(!i){return e.O===t.O}if(i&&!e.O&&t.O){e.O=t.O}return true}return false};var we=(e,i,l=false)=>{const o=i.M=e.M;const n=e.j;const r=i.j;const d=i.$;if(d===null){{fe(e,i,ye)}if(n!==null&&r!==null){ke(o,n,i,r,l)}else if(r!==null){if(e.$!==null){o.textContent=""}pe(o,null,i,r,0,r.length-1)}else if(!l&&t.updatable&&n!==null){ue(n,0,n.length-1)}}else if(e.$!==d){o.data=d}};var $e=e=>{{e.S&&e.S.ref&&e.S.ref(null);e.j&&e.j.map($e)}};var Se=(e,t,i)=>{if(typeof t["s-sn"]==="string"&&!!t["s-sr"]&&!!t["s-cr"]){je(t["s-cr"],t,e,t.parentElement)}{return e==null?void 0:e.insertBefore(t,i)}};function je(e,t,i,l){var o,n;let r;if(e&&typeof t["s-sn"]==="string"&&!!t["s-sr"]&&e.parentNode&&e.parentNode["s-sc"]&&(r=t["s-si"]||e.parentNode["s-sc"])){const e=t["s-sn"];const d=t["s-hn"];(o=i.classList)==null?void 0:o.add(r+"-s");if(l&&((n=l.classList)==null?void 0:n.contains(r+"-s"))){let t=(l.__childNodes||l.childNodes)[0];let i=false;while(t){if(t["s-sn"]!==e&&t["s-hn"]===d&&!!t["s-sr"]){i=true;break}t=t.nextSibling}if(!i)l.classList.remove(r+"-s")}}}var xe=(e,t,i=false)=>{const l=e.$hostElement$;const o=e.U||G(null,null);const n=_(t);const r=n?t:q(null,null,t);ge=l.tagName;if(i&&r.S){for(const e of Object.keys(r.S)){if(l.hasAttribute(e)&&!["key","ref","style","class"].includes(e)){r.S[e]=l[e]}}}r.C=null;r.m|=4;e.U=r;r.M=o.M=l.shadowRoot||l;{ce=l["s-sc"]}we(o,r,i)};var Oe=(e,t)=>{if(t&&!e.R&&t["s-p"]){const i=t["s-p"].push(new Promise((l=>e.R=()=>{t["s-p"].splice(i-1,1);l()})))}};var Ee=(e,t)=>{{e.m|=16}if(e.m&4){e.m|=512;return}Oe(e,e.D);const i=()=>Ce(e,t);return M(i)};var Ce=(e,t)=>{const i=e.$hostElement$;const l=I("scheduleUpdate",e.t.p);const o=e.o;if(!o){throw new Error(`Can't render component <${i.tagName.toLowerCase()} /> with invalid Stencil runtime! Make sure this imported component is compiled with a \`externalRuntime: true\` flag. For more information, please refer to https://stenciljs.com/docs/custom-elements#externalruntime`)}let n;if(t){{e.m|=256;if(e.W){e.W.map((([e,t])=>We(o,e,t,i)));e.W=void 0}}n=We(o,"componentWillLoad",void 0,i)}else{n=We(o,"componentWillUpdate",void 0,i)}n=Me(n,(()=>We(o,"componentWillRender",void 0,i)));l();return Me(n,(()=>Pe(e,o,t)))};var Me=(e,t)=>Ne(e)?e.then(t).catch((e=>{console.error(e);t()})):t();var Ne=e=>e instanceof Promise||e&&e.then&&typeof e.then==="function";var Pe=async(e,t,i)=>{var l;const o=e.$hostElement$;const n=I("update",e.t.p);const r=o["s-rc"];if(i){ne(e)}const d=I("render",e.t.p);{Ue(e,t,o,i)}if(r){r.map((e=>e()));o["s-rc"]=void 0}d();n();{const t=(l=o["s-p"])!=null?l:[];const i=()=>Re(e);if(t.length===0){i()}else{Promise.all(t).then(i);e.m|=4;t.length=0}}};var Ue=(e,t,i,l)=>{try{t=t.render();{e.m&=-17}{e.m|=2}{{{xe(e,t,l)}}}}catch(t){m(t,e.$hostElement$)}return null};var Re=e=>{const t=e.t.p;const i=e.$hostElement$;const l=I("postUpdate",t);const o=e.o;const n=e.D;We(o,"componentDidRender",void 0,i);if(!(e.m&64)){e.m|=64;{Ae(i)}We(o,"componentDidLoad",void 0,i);l();{e.v(i);if(!n){De()}}}else{We(o,"componentDidUpdate",void 0,i);l()}{if(e.R){e.R();e.R=void 0}if(e.m&512){C((()=>Ee(e,false)))}e.m&=-517}};var De=t=>{C((()=>te(p,"appload",{detail:{namespace:e}})))};var We=(e,t,i,l)=>{if(e&&e[t]){try{return e[t](i)}catch(e){m(e,l)}}return void 0};var Ae=e=>{var i;return e.classList.add((i=t.hydratedSelectorName)!=null?i:"hydrated")};var Fe=(e,t)=>d(e).l.get(t);var Le=(e,t,i,l)=>{const o=d(e);if(!o){throw new Error(`Couldn't find host element for "${l.p}" as it is unknown to this Stencil runtime. This usually happens when integrating a 3rd party Stencil component with another Stencil component or application. Please reach out to the maintainers of the 3rd party Stencil component or report this on the Stencil Discord server (https://chat.stenciljs.com) or comment on this similar [GitHub issue](https://github.com/stenciljs/core/issues/5457).`)}const n=o.$hostElement$;const r=o.l.get(t);const s=o.m;const b=o.o;i=X(i,l.i[t][0]);const a=Number.isNaN(r)&&Number.isNaN(i);const f=i!==r&&!a;if((!(s&8)||r===void 0)&&f){o.l.set(t,i);if(b){if(l.A&&s&128){const e=l.A[t];if(e){e.map((e=>{try{b[e](i,r,t)}catch(e){m(e,n)}}))}}if((s&(2|16))===2){if(b.componentShouldUpdate){if(b.componentShouldUpdate(i,r,t)===false){return}}Ee(o,false)}}}};var He=(e,i,l)=>{var o,n;const r=e.prototype;if(i.i||(i.A||e.watchers)){if(e.watchers&&!i.A){i.A=e.watchers}const s=Object.entries((o=i.i)!=null?o:{});s.map((([e,[t]])=>{if(t&31||l&2&&t&32){const{get:o,set:n}=Object.getOwnPropertyDescriptor(r,e)||{};if(o)i.i[e][0]|=2048;if(n)i.i[e][0]|=4096;if(l&1||!o){Object.defineProperty(r,e,{get(){{if((i.i[e][0]&2048)===0){return Fe(this,e)}const t=d(this);const l=t?t.o:r;if(!l)return;return l[e]}},configurable:true,enumerable:true})}Object.defineProperty(r,e,{set(o){const r=d(this);if(n){const l=t&32?this[e]:r.$hostElement$[e];if(typeof l==="undefined"&&r.l.get(e)){o=r.l.get(e)}else if(!r.l.get(e)&&l){r.l.set(e,l)}n.apply(this,[X(o,t)]);o=t&32?this[e]:r.$hostElement$[e];Le(this,e,o,i);return}{if((l&1)===0||(i.i[e][0]&4096)===0){Le(this,e,o,i);if(l&1&&!r.o){r.h.then((()=>{if(i.i[e][0]&4096&&r.o[e]!==r.l.get(e)){r.o[e]=o}}))}return}const n=()=>{const l=r.o[e];if(!r.l.get(e)&&l){r.l.set(e,l)}r.o[e]=X(o,t);Le(this,e,r.o[e],i)};if(r.o){n()}else{r.h.then((()=>n()))}}}})}}));if(l&1){const l=new Map;r.attributeChangedCallback=function(e,o,n){u.jmp((()=>{var s;const b=l.get(e);if(this.hasOwnProperty(b)&&t.lazyLoad){n=this[b];delete this[b]}else if(r.hasOwnProperty(b)&&typeof this[b]==="number"&&this[b]==n){return}else if(b==null){const t=d(this);const l=t==null?void 0:t.m;if(l&&!(l&8)&&l&128&&n!==o){const l=t.o;const r=(s=i.A)==null?void 0:s[e];r==null?void 0:r.forEach((t=>{if(l[t]!=null){l[t].call(l,n,o,e)}}))}return}const a=Object.getOwnPropertyDescriptor(r,b);n=n===null&&typeof this[b]==="boolean"?false:n;if(n!==this[b]&&(!a.get||!!a.set)){this[b]=n}}))};e.observedAttributes=Array.from(new Set([...Object.keys((n=i.A)!=null?n:{}),...s.filter((([e,t])=>t[0]&15)).map((([e,t])=>{const i=t[1]||e;l.set(i,e);return i}))]))}}return e};var Te=async(e,t,i,l)=>{let o;if((t.m&32)===0){t.m|=32;const l=i.u;if(l){const l=h(i,t);if(l&&"then"in l){const e=V();o=await l;e()}else{o=l}if(!o){throw new Error(`Constructor for "${i.p}#${t.F}" was not found`)}if(!o.isProxied){{i.A=o.watchers}He(o,i,2);o.isProxied=true}const n=I("createInstance",i.p);{t.m|=8}try{new o(t)}catch(t){m(t,e)}{t.m&=-9}{t.m|=128}n();Ie(t.o,e)}else{o=e.constructor;const i=e.localName;customElements.whenDefined(i).then((()=>t.m|=128))}if(o&&o.style){let e;if(typeof o.style==="string"){e=o.style}const t=re(i);if(!c.has(t)){const l=I("registerStyles",i.p);le(t,e,!!(i.m&1));l()}}}const n=t.D;const r=()=>Ee(t,true);if(n&&n["s-rc"]){n["s-rc"].push(r)}else{r()}};var Ie=(e,t)=>{{We(e,"connectedCallback",void 0,t)}};var Ve=e=>{if((u.m&1)===0){const t=d(e);const i=t.t;const l=I("connectedCallback",i.p);if(!(t.m&1)){t.m|=1;{let i=e;while(i=i.parentNode||i.host){if(i["s-p"]){Oe(t,t.D=i);break}}}if(i.i){Object.entries(i.i).map((([t,[i]])=>{if(i&31&&e.hasOwnProperty(t)){const i=e[t];delete e[t];e[t]=i}}))}{Te(e,t,i)}}else{Be(e,t,i.L);if(t==null?void 0:t.o){Ie(t.o,e)}else if(t==null?void 0:t.h){t.h.then((()=>Ie(t.o,e)))}}l()}};var qe=(e,t)=>{{We(e,"disconnectedCallback",void 0,t||e)}};var Ge=async e=>{if((u.m&1)===0){const t=d(e);{if(t.H){t.H.map((e=>e()));t.H=void 0}}if(t==null?void 0:t.o){qe(t.o,e)}else if(t==null?void 0:t.h){t.h.then((()=>qe(t.o,e)))}}if(ie.has(e)){ie.delete(e)}if(e.shadowRoot&&ie.has(e.shadowRoot)){ie.delete(e.shadowRoot)}};var Ye=(e,t={})=>{var i;if(!p.document){console.warn("Stencil: No document found. Skipping bootstrapping lazy components.");return}const l=I();const o=[];const n=t.exclude||[];const r=p.customElements;const s=p.document.head;const a=s.querySelector("meta[charset]");const m=p.document.createElement("style");const f=[];let h;let c=true;Object.assign(u,t);u.k=new URL(t.resourcesUrl||"./",p.document.baseURI).href;let g=false;e.map((e=>{e[1].map((t=>{var i;const l={m:t[0],p:t[1],i:t[2],L:t[3]};if(l.m&4){g=true}{l.i=t[2]}{l.L=t[3]}{l.A=(i=t[4])!=null?i:{}}const s=l.p;const a=class extends HTMLElement{constructor(e){super(e);this.hasRegisteredEventListeners=false;e=this;b(e,l);if(l.m&1){{if(!e.shadowRoot){T.call(e,l)}else{if(e.shadowRoot.mode!=="open"){throw new Error(`Unable to re-use existing shadow root for ${l.p}! Mode is set to ${e.shadowRoot.mode} but Stencil only supports open shadow roots.`)}}}}}connectedCallback(){const e=d(this);if(!this.hasRegisteredEventListeners){this.hasRegisteredEventListeners=true;Be(this,e,l.L)}if(h){clearTimeout(h);h=null}if(c){f.push(this)}else{u.jmp((()=>Ve(this)))}}disconnectedCallback(){u.jmp((()=>Ge(this)));u.raf((()=>{var e;const t=d(this);const i=f.findIndex((e=>e===this));if(i>-1){f.splice(i,1)}if(((e=t==null?void 0:t.U)==null?void 0:e.M)instanceof Node&&!t.U.M.isConnected){delete t.U.M}}))}componentOnReady(){return d(this).h}};l.u=e[0];if(!n.includes(s)&&!r.get(s)){o.push(s);r.define(s,He(a,l,1))}}))}));if(o.length>0){if(g){m.textContent+=v}{m.textContent+=o.sort()+y}if(m.innerHTML.length){m.setAttribute("data-styles","");const e=(i=u.P)!=null?i:U(p.document);if(e!=null){m.setAttribute("nonce",e)}s.insertBefore(m,a?a.nextSibling:s.firstChild)}}c=false;if(f.length){f.map((e=>e.connectedCallback()))}else{{u.jmp((()=>h=setTimeout(De,30)))}}l()};var _e=(e,t)=>t;var Be=(e,t,i,l)=>{if(i&&p.document){i.map((([i,l,o])=>{const n=Ke(p.document,e,i);const r=Je(t,o);const d=Qe(i);u.ael(n,l,r,d);(t.H=t.H||[]).push((()=>u.rel(n,l,r,d)))}))}};var Je=(e,t)=>i=>{var l;try{{if(e.m&256){(l=e.o)==null?void 0:l[t](i)}else{(e.W=e.W||[]).push([t,i])}}}catch(t){m(t,e.$hostElement$)}};var Ke=(e,t,i)=>{if(i&4){return e}if(i&8){return p}return t};var Qe=e=>k?{passive:(e&1)!==0,capture:(e&2)!==0}:(e&2)!==0;var Xe=e=>u.P=e;export{_e as F,Y as H,Z as a,Ye as b,ee as c,i as g,q as h,z as p,s as r,Xe as s};
|
|
3
|
+
//# sourceMappingURL=p-DSdvvVFj.js.map
|