@almoamendev/ngx-md3 0.3.7 → 0.3.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"almoamendev-ngx-md3.mjs","sources":["../../../projects/ngx-md3/src/lib/styles/typography/type-display.ts","../../../projects/ngx-md3/src/lib/styles/typography/type-headline.ts","../../../projects/ngx-md3/src/lib/styles/typography/type-title.ts","../../../projects/ngx-md3/src/lib/styles/typography/type-body.ts","../../../projects/ngx-md3/src/lib/styles/typography/type-label.ts","../../../projects/ngx-md3/src/lib/foundations/layout.service.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet/side-sheet-ref.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet/side-sheet.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet/side-sheet.html","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet/side-sheet-stack.ts","../../../projects/ngx-md3/src/lib/components/sheets/sheets.service.ts","../../../projects/ngx-md3/src/lib/foundations/scaffold/scaffold.ts","../../../projects/ngx-md3/src/lib/foundations/scaffold/scaffold.html","../../../projects/ngx-md3/src/lib/foundations/scaffold-bar.ts","../../../projects/ngx-md3/src/lib/foundations/scaffold-rail.ts","../../../projects/ngx-md3/src/lib/foundations/scaffold-pane.ts","../../../projects/ngx-md3/src/lib/foundations/grid.ts","../../../projects/ngx-md3/src/lib/foundations/grid-item.ts","../../../projects/ngx-md3/src/lib/components/common/input-element.ts","../../../projects/ngx-md3/src/lib/components/common/state-component.ts","../../../projects/ngx-md3/src/lib/components/common/icon-element.ts","../../../projects/ngx-md3/src/lib/components/common/material-icon/material-icon.ts","../../../projects/ngx-md3/src/lib/components/common/material-icon/material-icon.html","../../../projects/ngx-md3/src/lib/components/common/divider.ts","../../../projects/ngx-md3/src/lib/components/common/badge.ts","../../../projects/ngx-md3/src/lib/components/common/avatar.ts","../../../projects/ngx-md3/src/lib/interfaces/button-context.interface.ts","../../../projects/ngx-md3/src/lib/components/buttons/button/button.ts","../../../projects/ngx-md3/src/lib/components/buttons/button/button.html","../../../projects/ngx-md3/src/lib/components/buttons/floating-action-button/floating-action-button.ts","../../../projects/ngx-md3/src/lib/components/buttons/floating-action-button/floating-action-button.html","../../../projects/ngx-md3/src/lib/components/buttons/icon-button/icon-button.ts","../../../projects/ngx-md3/src/lib/components/buttons/icon-button/icon-button.html","../../../projects/ngx-md3/src/lib/components/buttons/split-button/split-button.ts","../../../projects/ngx-md3/src/lib/components/buttons/split-button/split-button.html","../../../projects/ngx-md3/src/lib/components/buttons/button-group/button-group.ts","../../../projects/ngx-md3/src/lib/components/buttons/button-group/button-group.html","../../../projects/ngx-md3/src/lib/components/card/card.ts","../../../projects/ngx-md3/src/lib/components/card/card.html","../../../projects/ngx-md3/src/lib/components/carousel/carousel-arrangement.ts","../../../projects/ngx-md3/src/lib/components/carousel/carousel-keylines.ts","../../../projects/ngx-md3/src/lib/components/carousel/carousel-item/carousel-item.ts","../../../projects/ngx-md3/src/lib/components/carousel/carousel-item/carousel-item.html","../../../projects/ngx-md3/src/lib/components/carousel/carousel.ts","../../../projects/ngx-md3/src/lib/components/carousel/carousel.html","../../../projects/ngx-md3/src/lib/components/chips/chips.ts","../../../projects/ngx-md3/src/lib/components/chips/chips.html","../../../projects/ngx-md3/src/lib/components/selection-controls/checkbox/checkbox.ts","../../../projects/ngx-md3/src/lib/components/selection-controls/checkbox/checkbox.html","../../../projects/ngx-md3/src/lib/components/selection-controls/radio-button/radio-button.ts","../../../projects/ngx-md3/src/lib/components/selection-controls/radio-button/radio-button.html","../../../projects/ngx-md3/src/lib/components/selection-controls/switch/switch.ts","../../../projects/ngx-md3/src/lib/components/selection-controls/switch/switch.html","../../../projects/ngx-md3/src/lib/components/slider/slider.ts","../../../projects/ngx-md3/src/lib/components/slider/slider.html","../../../projects/ngx-md3/src/lib/components/list/list.ts","../../../projects/ngx-md3/src/lib/components/list/list.html","../../../projects/ngx-md3/src/lib/components/list/list-item/list-item.ts","../../../projects/ngx-md3/src/lib/components/list/list-item/list-item.html","../../../projects/ngx-md3/src/lib/components/list/list-leading/list-leading.ts","../../../projects/ngx-md3/src/lib/components/list/list-leading/list-leading.html","../../../projects/ngx-md3/src/lib/components/list/list-slot.ts","../../../projects/ngx-md3/src/lib/components/loading-and-progress/loading-indicator/loading-indicator.ts","../../../projects/ngx-md3/src/lib/components/loading-and-progress/loading-indicator/loading-indicator.html","../../../projects/ngx-md3/src/lib/components/loading-and-progress/linear-progress-indicator/linear-progress-indicator.ts","../../../projects/ngx-md3/src/lib/components/loading-and-progress/linear-progress-indicator/linear-progress-indicator.html","../../../projects/ngx-md3/src/lib/components/loading-and-progress/circular-progress-indicator/circular-progress-indicator.ts","../../../projects/ngx-md3/src/lib/components/loading-and-progress/circular-progress-indicator/circular-progress-indicator.html","../../../projects/ngx-md3/src/lib/components/app-bar/app-bar-logo.ts","../../../projects/ngx-md3/src/lib/components/app-bar/app-bar.ts","../../../projects/ngx-md3/src/lib/components/app-bar/app-bar.html","../../../projects/ngx-md3/src/lib/components/navigations/navigation-item/navigation-item.ts","../../../projects/ngx-md3/src/lib/components/navigations/navigation-item/navigation-item.html","../../../projects/ngx-md3/src/lib/components/navigations/navigation-group/navigation-group.ts","../../../projects/ngx-md3/src/lib/components/navigations/navigation-group/navigation-group.html","../../../projects/ngx-md3/src/lib/components/navigations/navigation-rail/navigation-rail.ts","../../../projects/ngx-md3/src/lib/components/navigations/navigation-rail/navigation-rail.html","../../../projects/ngx-md3/src/lib/components/navigations/navigation-bar/navigation-bar.ts","../../../projects/ngx-md3/src/lib/components/navigations/navigation-bar/navigation-bar.html","../../../projects/ngx-md3/src/lib/components/text-field/text-field.ts","../../../projects/ngx-md3/src/lib/components/text-field/text-field.html","../../../projects/ngx-md3/src/lib/components/text-field/supporting-text.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog-ref.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog.html","../../../projects/ngx-md3/src/lib/components/dialog/full-screen-dialog/full-screen-dialog.ts","../../../projects/ngx-md3/src/lib/components/dialog/full-screen-dialog/full-screen-dialog.html","../../../projects/ngx-md3/src/lib/components/dialog/dialog.service.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog-header/dialog-header.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog-header/dialog-header.html","../../../projects/ngx-md3/src/lib/components/dialog/dialog-body/dialog-body.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog-body/dialog-body.html","../../../projects/ngx-md3/src/lib/components/dialog/dialog-actions/dialog-actions.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog-actions/dialog-actions.html","../../../projects/ngx-md3/src/lib/components/dialog/full-screen-dialog-header/full-screen-dialog-header.ts","../../../projects/ngx-md3/src/lib/components/dialog/full-screen-dialog-header/full-screen-dialog-header.html","../../../projects/ngx-md3/src/lib/components/menu/menu-ref.ts","../../../projects/ngx-md3/src/lib/components/menu/menu.ts","../../../projects/ngx-md3/src/lib/components/menu/menu.html","../../../projects/ngx-md3/src/lib/components/menu/menu.service.ts","../../../projects/ngx-md3/src/lib/components/menu/menu-group/menu-group.ts","../../../projects/ngx-md3/src/lib/components/menu/menu-group/menu-group.html","../../../projects/ngx-md3/src/lib/components/menu/menu-item/menu-item.ts","../../../projects/ngx-md3/src/lib/components/menu/menu-item/menu-item.html","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-header/side-sheet-header.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-header/side-sheet-header.html","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-body/side-sheet-body.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-body/side-sheet-body.html","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-actions/side-sheet-actions.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-actions/side-sheet-actions.html","../../../projects/ngx-md3/src/lib/components/snackbar/snackbar-ref.ts","../../../projects/ngx-md3/src/lib/components/snackbar/snackbar.ts","../../../projects/ngx-md3/src/lib/components/snackbar/snackbar.html","../../../projects/ngx-md3/src/lib/components/snackbar/snackbar.service.ts","../../../projects/ngx-md3/src/lib/index.ts","../../../projects/ngx-md3/src/almoamendev-ngx-md3.ts"],"sourcesContent":["import { booleanAttribute, Directive, effect, ElementRef, input } from '@angular/core';\nimport { TextColor } from '../../types/text-color.type';\nimport { TextSize } from '../../types/text-size.type';\n\n@Directive({\n selector: 'md3-type-display, [md3-type-display]',\n host: {\n 'class': 'md3-text-display',\n '[class.md3-emphasized]': 'emphasized()',\n }\n})\nexport class TypeDisplay {\n public size = input<TextSize | 'default'>('default');\n public color = input<TextColor | 'default'>('default');\n public emphasized = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n constructor(public el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-text-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.color();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { booleanAttribute, Directive, effect, ElementRef, input } from '@angular/core';\nimport { TextColor } from '../../types/text-color.type';\nimport { TextSize } from '../../types/text-size.type';\n\n@Directive({\n selector: 'md3-type-headline, [md3-type-headline]',\n host: {\n 'class': 'md3-text-headline',\n '[class.md3-emphasized]': 'emphasized()',\n }\n})\nexport class TypeHeadline {\n public size = input<TextSize | 'default'>('default');\n public color = input<TextColor | 'default'>('default');\n public emphasized = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n constructor(public el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-text-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.color();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { booleanAttribute, Directive, effect, ElementRef, input } from '@angular/core';\nimport { TextColor } from '../../types/text-color.type';\nimport { TextSize } from '../../types/text-size.type';\n\n@Directive({\n selector: 'md3-type-title, [md3-type-title]',\n host: {\n 'class': 'md3-text-title',\n '[class.md3-emphasized]': 'emphasized()',\n }\n})\nexport class TypeTitle {\n public size = input<TextSize | 'default'>('default');\n public color = input<TextColor | 'default'>('default');\n public emphasized = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n constructor(public el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-text-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.color();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { booleanAttribute, Directive, effect, ElementRef, input } from '@angular/core';\nimport { TextColor } from '../../types/text-color.type';\nimport { TextSize } from '../../types/text-size.type';\n\n@Directive({\n selector: 'md3-type-body, [md3-type-body]',\n host: {\n 'class': 'md3-text-body',\n '[class.md3-emphasized]': 'emphasized()',\n }\n})\nexport class TypeBody {\n public size = input<TextSize | 'default'>('default');\n public color = input<TextColor | 'default'>('default');\n public emphasized = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n constructor(public el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-text-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.color();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { booleanAttribute, Directive, effect, ElementRef, input } from '@angular/core';\nimport { TextColor } from '../../types/text-color.type';\nimport { TextSize } from '../../types/text-size.type';\n\n@Directive({\n selector: 'md3-type-label, [md3-type-label]',\n host: {\n 'class': 'md3-text-label',\n '[class.md3-emphasized]': 'emphasized()',\n }\n})\nexport class TypeLabel {\n public size = input<TextSize | 'default'>('default');\n public color = input<TextColor | 'default'>('default');\n public emphasized = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n constructor(public el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-text-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.color();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter, fromEvent, map, startWith, Subscription } from 'rxjs';\nimport { ViewportWidth } from '../types/viewport-width.type';\nimport { ViewportHeight } from '../types/viewport-height.type';\n\nexport type Md3NavigationMode = 'none' | 'navigation-bar' | 'navigation-rail' | 'standard-drawer' | 'modal-drawer';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LayoutService {\n private readonly document = inject(DOCUMENT);\n private readonly breakpointObserver = inject(BreakpointObserver);\n // Optional — LayoutService (and anything built on Scaffold) shouldn't\n // hard-require the Router, only benefit from it when it's present.\n private readonly router = inject(Router, { optional: true });\n\n private readonly widthQueries: Record<ViewportWidth, string> = {\n 'compact': '(max-width: 37.499em)', // < 600\n 'medium': '(min-width: 37.5em) and (max-width: 52.499em)', // 600-839\n 'expanded': '(min-width: 52.5em) and (max-width: 74.999em)', // 840-1199\n 'large': '(min-width: 75em) and (max-width: 99.999em)', // 1200-1599\n 'extra-large': '(min-width: 100em)' // >=1600\n } as const;\n\n private readonly heightQueries: Record<ViewportHeight, string> = {\n 'compact': '(max-height: 29.999em)',\n 'medium': '(min-height: 30em) and (max-height: 56.249em)',\n 'expanded': '(min-height: 56.25em)'\n } as const;\n\n private mainPaneSub?: Subscription;\n private mainPaneEl?: HTMLElement;\n private panesContainerResizeObserver?: ResizeObserver;\n private panesContainerResizeListener?: () => void;\n\n readonly mainScrollTop = signal<number>(0);\n readonly mainIsScrolled = computed<boolean>(() => this.mainScrollTop() > 0);\n\n /**\n * Distance, in pixels, between the viewport bottom and the bottom edge of\n * the scaffold's .md3-panes-container — i.e. whatever the bottom scaffold\n * bar (nav bar) currently reserves, or 0 when there is none. Overlay-based\n * components anchored to the viewport bottom (like Snackbar) read this so\n * they never render lower than the panes container.\n */\n readonly bottomInset = signal<number>(0);\n\n public readonly viewport = toSignal(\n fromEvent(window, 'resize').pipe(\n startWith(null),\n map(() => ({\n width: window.innerWidth,\n height: window.innerHeight\n }))\n ),\n {\n initialValue: {\n width: window.innerWidth,\n height: window.innerHeight\n }\n }\n );\n\n public readonly widthClass = toSignal(\n this.breakpointObserver.observe(Object.values(this.widthQueries)).pipe(\n map((state): ViewportWidth => {\n if (state.breakpoints[this.widthQueries.compact]) {\n return 'compact';\n }\n\n if (state.breakpoints[this.widthQueries.medium]) {\n return 'medium';\n }\n\n if (state.breakpoints[this.widthQueries.expanded]) {\n return 'expanded';\n }\n\n if (state.breakpoints[this.widthQueries.large]) {\n return 'large';\n }\n\n return 'extra-large';\n })\n ),\n { initialValue: 'expanded' as ViewportWidth }\n );\n\n public readonly heightClass = toSignal(\n this.breakpointObserver.observe(Object.values(this.heightQueries)).pipe(\n map((state): ViewportHeight => {\n if (state.breakpoints[this.heightQueries.compact]) {\n return 'compact';\n }\n\n if (state.breakpoints[this.heightQueries.medium]) {\n return 'medium';\n }\n\n return 'expanded';\n })\n ),\n { initialValue: 'expanded' as ViewportHeight }\n );\n\n public readonly direction = signal<'ltr' | 'rtl'>(\n (this.document.documentElement.dir as 'ltr' | 'rtl') || 'ltr'\n );\n\n public readonly isCompact = computed(() => this.widthClass() === 'compact');\n public readonly isMedium = computed(() => this.widthClass() === 'medium');\n public readonly isExpanded = computed(() => this.widthClass() === 'expanded');\n public readonly isLarge = computed(() => this.widthClass() === 'large');\n public readonly isExtraLarge = computed(() => this.widthClass() === 'extra-large');\n\n public readonly isPortrait = computed(() => {\n const viewport = this.viewport();\n return viewport.height >= viewport.width;\n });\n\n public readonly isLandscape = computed(() => !this.isPortrait());\n\n public readonly preferredNavigationMode = computed(() => {\n switch (this.widthClass()) {\n case 'compact':\n return 'navigation-bar';\n\n case 'medium':\n return 'navigation-rail';\n\n case 'expanded':\n case 'large':\n case 'extra-large':\n return 'standard-drawer';\n }\n });\n\n public darkMode = signal<boolean>(true);\n\n constructor() {\n effect(() => {\n const darkMode = this.darkMode();\n this.document.body.classList.toggle('md-scheme-dark', darkMode);\n this.document.body.classList.toggle('md-scheme-light', !darkMode);\n });\n\n // Reset the scaffold's main pane to the top after every completed\n // navigation — otherwise a scrolled-down list page leaves the next\n // page's content scrolled down too, since the pane itself never\n // remounts on route change.\n this.router?.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntilDestroyed(),\n )\n .subscribe(() => this.scrollMainPaneToTop());\n }\n\n public setDirection(direction: 'ltr' | 'rtl'): void {\n this.document.documentElement.dir = direction;\n this.direction.set(direction);\n }\n\n private scrollMainPaneToTop(): void {\n this.mainPaneEl?.scrollTo({ top: 0 });\n this.mainScrollTop.set(0);\n }\n\n public registerMainPane(element: HTMLElement): void {\n this.mainPaneSub?.unsubscribe();\n this.mainPaneEl = element;\n\n const update = () => {\n const scrollTop = element.scrollTop;\n\n this.mainScrollTop.set(scrollTop);\n };\n\n update();\n\n this.mainPaneSub = new Subscription();\n\n element.addEventListener('scroll', update, { passive: true });\n\n this.mainPaneSub.add(() => {\n element.removeEventListener('scroll', update);\n });\n }\n\n public unregisterMainPane(element: HTMLElement): void {\n this.mainPaneSub?.unsubscribe();\n this.mainPaneSub = undefined;\n\n if (this.mainPaneEl === element) {\n this.mainPaneEl = undefined;\n }\n\n this.mainScrollTop.set(0);\n }\n\n public registerPanesContainer(element: HTMLElement): void {\n this.unregisterPanesContainer();\n\n const update = () => {\n const rect = element.getBoundingClientRect();\n this.bottomInset.set(Math.max(0, Math.round(window.innerHeight - rect.bottom)));\n };\n\n update();\n\n this.panesContainerResizeObserver = new ResizeObserver(update);\n this.panesContainerResizeObserver.observe(element);\n\n this.panesContainerResizeListener = update;\n window.addEventListener('resize', update, { passive: true });\n }\n\n public unregisterPanesContainer(): void {\n this.panesContainerResizeObserver?.disconnect();\n this.panesContainerResizeObserver = undefined;\n\n if (this.panesContainerResizeListener) {\n window.removeEventListener('resize', this.panesContainerResizeListener);\n this.panesContainerResizeListener = undefined;\n }\n\n this.bottomInset.set(0);\n }\n}\n","import { ComponentRef, InjectionToken, Type } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { SideSheetConfig, SideSheetContainer, SideSheetSide, SideSheetType } from '../../../interfaces/side-sheet-config.interface';\nimport { SideSheet } from './side-sheet';\n\nexport const SIDE_SHEET_DATA = new InjectionToken<unknown>('MD3_SIDE_SHEET_DATA');\nexport const SIDE_SHEET_CONFIG = new InjectionToken<SideSheetConfig>('MD3_SIDE_SHEET_CONFIG');\nexport const SIDE_SHEET_COMPONENT = new InjectionToken<Type<unknown>>('MD3_SIDE_SHEET_COMPONENT');\n\nconst SIDE_SHEET_EXIT_ANIMATION_FALLBACK_MS = 300;\n\nexport class SideSheetRef<T = unknown, R = unknown> {\n private readonly closed = new Subject<R | undefined>();\n private isClosed = false;\n private isHidden = false;\n private sheetComponentRef?: ComponentRef<SideSheet>;\n\n public componentInstance?: T;\n public sheetInstance?: SideSheetContainer;\n\n constructor(\n public readonly side: SideSheetSide,\n private readonly onClosed: () => void,\n ) {\n }\n\n public attachSheetComponentRef(sheetComponentRef: ComponentRef<SideSheet>): void {\n this.sheetComponentRef = sheetComponentRef;\n this.sheetInstance = sheetComponentRef.instance as SideSheetContainer;\n }\n\n public setSide(side: SideSheetSide): void {\n this.sheetComponentRef?.instance?.side.set(side);\n }\n\n public setSheetType(type: SideSheetType): void {\n this.sheetComponentRef?.instance?.sheetType.set(type);\n }\n\n public setInset(isInset: boolean): void {\n this.sheetComponentRef?.instance?.isInset.set(isInset);\n }\n\n public setDivider(showDivider: boolean): void {\n this.sheetComponentRef?.instance?.showDivider.set(showDivider);\n }\n\n public hide(): void {\n this.isHidden = true;\n this.sheetInstance?.setHidden(true);\n }\n\n public show(): void {\n this.isHidden = false;\n this.sheetInstance?.setHidden(false);\n this.sheetInstance?.showSheet(true);\n }\n\n public close(result?: R): void {\n if (this.isClosed) {\n return;\n }\n\n this.isClosed = true;\n this.startCloseAnimation().then(() => {\n this.destroySheet();\n this.onClosed();\n this.closed.next(result);\n this.closed.complete();\n });\n }\n\n public dispose(result?: R): void {\n if (this.isClosed) {\n return;\n }\n\n this.isClosed = true;\n this.destroySheet();\n this.onClosed();\n this.closed.next(result);\n this.closed.complete();\n }\n\n public afterClosed(): Observable<R | undefined> {\n return this.closed.asObservable();\n }\n\n private destroySheet(): void {\n this.sheetComponentRef?.destroy();\n this.sheetComponentRef = undefined;\n this.sheetInstance = undefined;\n }\n\n private startCloseAnimation(): Promise<void> {\n const animatedElement = this.sheetInstance?.element;\n\n if (this.isHidden) {\n return Promise.resolve();\n }\n\n this.sheetInstance?.setHidden(false);\n this.sheetInstance?.showSheet(false);\n\n return new Promise((resolve) => {\n if (!animatedElement) {\n resolve();\n return;\n }\n\n let isResolved = false;\n const timeoutId = setTimeout(done, SIDE_SHEET_EXIT_ANIMATION_FALLBACK_MS);\n\n function done(): void {\n if (isResolved) {\n return;\n }\n\n isResolved = true;\n clearTimeout(timeoutId);\n animatedElement!.removeEventListener('transitionend', onTransitionEnd);\n resolve();\n }\n\n function onTransitionEnd(event: TransitionEvent): void {\n if (event.target === animatedElement) {\n done();\n }\n }\n\n animatedElement.addEventListener('transitionend', onTransitionEnd);\n });\n }\n}\n","import { CdkPortalOutlet, ComponentPortal } from '@angular/cdk/portal';\nimport { AfterContentInit, Component, ComponentRef, computed, effect, ElementRef, inject, Injector, signal, Type, ViewChild } from '@angular/core';\nimport { SIDE_SHEET_CONFIG, SideSheetRef } from './side-sheet-ref';\nimport { SideSheetConfig, SideSheetSide, SideSheetType } from '../../../interfaces/side-sheet-config.interface';\nimport { LayoutService } from '../../../foundations/layout.service';\n\n@Component({\n selector: 'md3-side-sheet',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: './side-sheet.html',\n styleUrl: './side-sheet.scss',\n host: {\n '[class.md3-active]': 'isActive()',\n '[class.md3-hidden]': 'isHidden()',\n '[class.md3-start]': 'side() === \"start\"',\n '[class.md3-end]': 'side() === \"end\"',\n '[class.md3-inset]': 'isInset()',\n '[class.md3-show-divider]': 'showDivider()',\n },\n})\nexport class SideSheet implements AfterContentInit {\n @ViewChild(CdkPortalOutlet, { static: true })\n private readonly portalOutlet!: CdkPortalOutlet;\n\n protected readonly config = inject<SideSheetConfig>(SIDE_SHEET_CONFIG, { optional: true }) ?? {};\n private readonly sideSheetRef = inject<SideSheetRef>(SideSheetRef, { optional: true });\n\n public readonly isActive = signal<boolean>(false);\n public readonly isHidden = signal<boolean>(false);\n public readonly side = signal<SideSheetSide>(this.config.side ?? 'end');\n public readonly sheetType = signal<SideSheetType>(this.config.type ?? 'default');\n public readonly isInset = signal<boolean>(this.config.inset ?? false);\n public readonly showDivider = signal<boolean>(this.config.divider ?? false);\n private readonly resolvedSheetType = computed<SideSheetType>(() => {\n if (this.layoutService.isMedium() || this.layoutService.isCompact()) {\n return 'modal';\n }\n \n return this.sheetType();\n });\n\n constructor(\n private layoutService: LayoutService,\n private el: ElementRef<HTMLElement>\n ) {\n effect((onCleanUp) => {\n const type = 'md3-style-' + this.resolvedSheetType();\n this.element.classList.add(type);\n\n onCleanUp(() => {\n this.element.classList.remove(type);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n ngAfterContentInit(): void {\n requestAnimationFrame(() => {\n this.showSheet(true);\n });\n }\n\n public showSheet(value: boolean): void {\n this.isActive.set(value);\n }\n\n public setHidden(value: boolean): void {\n this.isHidden.set(value);\n }\n\n public close(): void {\n this.sideSheetRef?.close();\n }\n\n public attachContent<T>(component: Type<T>, injector: Injector): ComponentRef<T> {\n const portal = new ComponentPortal(component, this.config.viewContainerRef ?? null, injector);\n\n return this.portalOutlet.attachComponentPortal(portal);\n }\n}\n","<div class=\"md3-side-sheet-scrim\" (click)=\"close()\"></div>\n<div class=\"md3-side-sheet-container\">\n <ng-template cdkPortalOutlet></ng-template>\n</div>\n","import { Component, ComponentRef, Injector, inputBinding, Type, ViewChild, ViewContainerRef } from '@angular/core';\nimport { SideSheet } from './side-sheet';\n\nexport interface SideSheetStackItem<T> {\n sheetComponentRef: ComponentRef<SideSheet>;\n contentComponentRef: ComponentRef<T>;\n}\n\n@Component({\n selector: 'md3-side-sheet-stack',\n template: '<ng-container #container></ng-container>',\n styles: [`\n :host {\n display: grid;\n min-width: 0;\n min-height: 0;\n height: 100%;\n }\n\n :host ::ng-deep md3-side-sheet {\n grid-area: 1 / 1;\n }\n `],\n})\nexport class SideSheetStack {\n @ViewChild('container', { read: ViewContainerRef, static: true })\n private readonly container!: ViewContainerRef;\n\n public createSheet<T>(component: Type<T>, injector: Injector): SideSheetStackItem<T> {\n const sheetComponentRef = this.container.createComponent(SideSheet, {\n injector: injector,\n });\n\n sheetComponentRef.changeDetectorRef.detectChanges();\n\n const contentComponentRef = sheetComponentRef.instance.attachContent(component, injector);\n\n sheetComponentRef.changeDetectorRef.detectChanges();\n\n return {\n sheetComponentRef,\n contentComponentRef,\n };\n }\n}\n","import { ComponentRef, inject, Injectable, Injector, Type } from '@angular/core';\nimport { CdkPortalOutlet, ComponentPortal } from '@angular/cdk/portal';\nimport { SideSheetStack } from './side-sheet/side-sheet-stack';\nimport {\n SIDE_SHEET_COMPONENT,\n SIDE_SHEET_CONFIG,\n SIDE_SHEET_DATA,\n SideSheetRef,\n} from './side-sheet/side-sheet-ref';\nimport { SideSheetConfig, SideSheetSide, SideSheetType } from '../../interfaces/side-sheet-config.interface';\n\ninterface ResolvedSideSheetConfig<D = unknown> extends SideSheetConfig<D> {\n data: D | undefined;\n bindDataToInputs: boolean;\n side: SideSheetSide;\n type: SideSheetType;\n inset: boolean;\n divider: boolean;\n closeExisting: boolean;\n injector: Injector;\n}\n\ninterface SideSheetOutletState<T = unknown, R = unknown> {\n outlet: CdkPortalOutlet;\n stackComponentRef: ComponentRef<SideSheetStack>;\n refs: SideSheetRef<T, R>[];\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SheetsService {\n private readonly injector = inject(Injector);\n\n /**\n * Outlets registered per side, from the page scaffold up to whatever took\n * them over last. Sheets always open in the outlet on top, so a full screen\n * dialog can host them while it is up and hand them back when it closes.\n */\n private readonly states = new Map<SideSheetSide, SideSheetOutletState[]>();\n\n public registerSideSheetOutlet(side: SideSheetSide, outlet: CdkPortalOutlet): void {\n const stack = this.getOutletStack(side);\n\n if (stack.some((state) => state.outlet === outlet)) {\n return;\n }\n\n if (outlet.hasAttached()) {\n outlet.detach();\n }\n\n const stackPortal = new ComponentPortal(SideSheetStack, null, this.injector);\n const stackComponentRef = outlet.attachComponentPortal(stackPortal);\n\n stack.push({\n outlet,\n stackComponentRef,\n refs: [],\n });\n }\n\n public unregisterSideSheetOutlet(side: SideSheetSide, outlet: CdkPortalOutlet): void {\n const stack = this.states.get(side);\n const index = stack?.findIndex((state) => state.outlet === outlet) ?? -1;\n\n if (!stack || index === -1) {\n return;\n }\n\n // Sheets opened in this outlet go with it, and the outlet underneath\n // becomes the one new sheets open in.\n this.disposeOutletState(stack[index]);\n stack.splice(index, 1);\n\n if (stack.length === 0) {\n this.states.delete(side);\n }\n }\n\n public openSideSheet<T = unknown, D = unknown, R = unknown>(\n component: Type<T>,\n config: SideSheetConfig<D> = {},\n ): SideSheetRef<T, R> {\n const sheetConfig = this.mergeConfig(config);\n const state = this.activeState(sheetConfig.side);\n\n if (!state) {\n throw new Error(`No ${sheetConfig.side} side sheet outlet is registered.`);\n }\n\n if (sheetConfig.closeExisting) {\n this.disposeSideSheetRefs(state);\n } else {\n this.getVisibleRef(state)?.hide();\n }\n\n const sheetRef = new SideSheetRef<T, R>(\n sheetConfig.side,\n () => this.removeSideSheetRef(state, sheetRef as SideSheetRef),\n );\n const injector = this.createInjector(component, sheetConfig, sheetRef);\n const { sheetComponentRef, contentComponentRef } = state.stackComponentRef.instance.createSheet(\n component,\n injector,\n );\n\n sheetRef.attachSheetComponentRef(sheetComponentRef);\n this.bindDataToInputs(contentComponentRef, sheetConfig);\n sheetRef.componentInstance = contentComponentRef.instance;\n state.refs.push(sheetRef as SideSheetRef);\n\n return sheetRef;\n }\n\n public closeSideSheet<R = unknown>(side: SideSheetSide = 'end', result?: R): void {\n this.getVisibleRef(this.activeState(side))?.close(result);\n }\n\n /** Outlet that sheets currently open in: the last one that registered. */\n private activeState(side: SideSheetSide): SideSheetOutletState | undefined {\n const stack = this.states.get(side);\n\n return stack?.[stack.length - 1];\n }\n\n private getOutletStack(side: SideSheetSide): SideSheetOutletState[] {\n const stack = this.states.get(side) ?? [];\n\n if (!this.states.has(side)) {\n this.states.set(side, stack);\n }\n\n return stack;\n }\n\n private mergeConfig<D>(config: SideSheetConfig<D>): ResolvedSideSheetConfig<D> {\n return {\n data: config.data,\n bindDataToInputs: config.bindDataToInputs ?? false,\n side: config.side ?? 'end',\n type: config.type ?? 'default',\n inset: config.inset ?? false,\n divider: config.divider ?? false,\n closeExisting: config.closeExisting ?? false,\n viewContainerRef: config.viewContainerRef,\n injector: config.injector ?? this.injector,\n };\n }\n\n private createInjector<T, D, R>(\n component: Type<T>,\n config: ResolvedSideSheetConfig<D>,\n sheetRef: SideSheetRef<T, R>,\n ): Injector {\n return Injector.create({\n parent: config.injector,\n providers: [\n { provide: SideSheetRef, useValue: sheetRef },\n { provide: SIDE_SHEET_DATA, useValue: config.data },\n { provide: SIDE_SHEET_CONFIG, useValue: config },\n { provide: SIDE_SHEET_COMPONENT, useValue: component },\n ],\n });\n }\n\n private bindDataToInputs<T, D>(\n componentRef: ComponentRef<T>,\n config: ResolvedSideSheetConfig<D>,\n ): void {\n if (!config.bindDataToInputs || !this.canBindDataToInputs(config.data)) {\n return;\n }\n\n Object.entries(config.data).forEach(([inputName, inputValue]) => {\n componentRef.setInput(inputName, inputValue);\n });\n }\n\n private canBindDataToInputs(data: unknown): data is Record<string, unknown> {\n return typeof data === 'object' && data !== null && !Array.isArray(data);\n }\n\n private disposeOutletState(state: SideSheetOutletState): void {\n this.disposeSideSheetRefs(state);\n\n if (state.outlet.hasAttached()) {\n state.outlet.detach();\n }\n }\n\n private disposeSideSheetRefs(state: SideSheetOutletState): void {\n const refs = [...state.refs];\n\n state.refs.length = 0;\n\n refs.forEach((ref) => {\n ref.dispose();\n });\n }\n\n private removeSideSheetRef(state: SideSheetOutletState, sheetRef: SideSheetRef): void {\n const index = state.refs.indexOf(sheetRef);\n\n if (index === -1) {\n return;\n }\n\n state.refs.splice(index, 1);\n this.getVisibleRef(state)?.show();\n }\n\n private getVisibleRef(state: SideSheetOutletState | undefined): SideSheetRef | undefined {\n if (!state || state.refs.length === 0) {\n return undefined;\n }\n\n return state.refs[state.refs.length - 1];\n }\n}\n","import { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { AfterViewInit, Component, ElementRef, inject, OnDestroy, viewChild } from '@angular/core';\nimport { SheetsService } from '../../components/sheets/sheets.service';\nimport { LayoutService } from '../layout.service';\n\n@Component({\n selector: 'md3-scaffold',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: './scaffold.html',\n styleUrl: './scaffold.scss',\n})\nexport class Scaffold implements AfterViewInit, OnDestroy {\n private startOutlet = viewChild('startOutlet', { read: CdkPortalOutlet });\n private endOutlet = viewChild('endOutlet', { read: CdkPortalOutlet });\n private panesContainer = viewChild<ElementRef<HTMLElement>>('panesContainer');\n private sheets = inject(SheetsService);\n private layout = inject(LayoutService);\n\n ngAfterViewInit(): void {\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n const panesContainer = this.panesContainer();\n\n if (startOutlet) {\n this.sheets.registerSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.registerSideSheetOutlet('end', endOutlet);\n }\n\n if (panesContainer) {\n this.layout.registerPanesContainer(panesContainer.nativeElement);\n }\n }\n\n ngOnDestroy(): void {\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n\n if (startOutlet) {\n this.sheets.unregisterSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.unregisterSideSheetOutlet('end', endOutlet);\n }\n\n this.layout.unregisterPanesContainer();\n }\n}\n","<ng-content select=\"[md3-scaffold-bar=top]\"></ng-content>\n<ng-content select=\"[md3-scaffold-rail=leading]\"></ng-content>\n\n<div class=\"md3-panes-container\" #panesContainer>\n <div class=\"md3-pane md3-pane-start\">\n <ng-content select=\"[md3-scaffold-pane=start]\"></ng-content>\n <ng-template #startOutlet cdkPortalOutlet></ng-template>\n </div>\n <div class=\"md3-pane md3-pane-main\">\n <ng-content select=\"[md3-scaffold-pane=main]\"></ng-content>\n </div>\n <div class=\"md3-pane md3-pane-end\">\n <ng-content select=\"[md3-scaffold-pane=end]\"></ng-content>\n <ng-template #endOutlet cdkPortalOutlet></ng-template>\n </div>\n</div>\n\n<ng-content select=\"[md3-scaffold-rail=trailing]\"></ng-content>\n<ng-content select=\"[md3-scaffold-bar=bottom]\"></ng-content>","import { Directive, input } from '@angular/core';\n\n@Directive({\n selector: '[md3-scaffold-bar]'\n})\nexport class ScaffoldBar {\n public region = input.required<'top' | 'bottom'>({\n alias: 'md3-scaffold-bar',\n });\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n selector: '[md3-scaffold-rail]'\n})\nexport class ScaffoldRail {\n public region = input.required<'leading' | 'trailing'>({\n alias: 'md3-scaffold-rail',\n });\n}\n","import { CdkScrollable } from '@angular/cdk/scrolling';\nimport { Directive, effect, ElementRef, input, OnDestroy } from '@angular/core';\nimport { LayoutService } from './layout.service';\n\n@Directive({\n selector: '[md3-scaffold-pane]',\n host: {\n class: 'md3-scrollable',\n },\n hostDirectives: [\n CdkScrollable,\n ],\n})\nexport class ScaffoldPane implements OnDestroy {\n public role = input.required<'main' | 'start' | 'end'>({\n alias: 'md3-scaffold-pane',\n });\n\n constructor(\n private el: ElementRef,\n private layout: LayoutService\n ) {\n effect(() => {\n if (this.role() == 'main') {\n this.layout.registerMainPane(this.el.nativeElement);\n } else {\n this.layout.unregisterMainPane(this.el.nativeElement);\n }\n });\n }\n\n ngOnDestroy(): void {\n if (this.role() == 'main') {\n this.layout.unregisterMainPane(this.el.nativeElement);\n }\n }\n}\n","import { computed, Directive, inject, input } from '@angular/core';\nimport { LayoutService } from './layout.service';\nimport { ViewportWidth } from '../types/viewport-width.type';\n\nconst GRID_COLUMNS_BY_WIDTH: Record<ViewportWidth, number> = {\n 'compact': 4,\n 'medium': 8,\n 'expanded': 8,\n 'large': 12,\n 'extra-large': 12,\n};\n\n@Directive({\n selector: 'md3-grid, [md3-grid]',\n host: {\n 'class': 'md3-grid',\n '[style.--md-grid-columns]': 'columns()',\n }\n})\nexport class Grid {\n private readonly layout = inject(LayoutService);\n\n // overrides the window-size-class column count when set — e.g. to simulate a screen size\n public readonly cols = input<number | undefined>(undefined, {\n alias: 'cols',\n });\n\n protected readonly columns = computed(() => this.cols() ?? GRID_COLUMNS_BY_WIDTH[this.layout.widthClass()]);\n}\n","import { computed, Directive, input, numberAttribute } from '@angular/core';\n\n@Directive({\n selector: 'md3-grid-item, [md3-grid-item]',\n host: {\n 'class': 'md3-grid-item',\n '[style.grid-column]': 'span()',\n }\n})\nexport class GridItem {\n public readonly colSpan = input(1, {\n alias: 'col-span',\n transform: numberAttribute,\n });\n\n protected readonly span = computed(() => `span ${this.colSpan()}`);\n}\n","import { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n selector: '[md3-input-element]',\n host: {\n 'class': 'md3-input-element'\n }\n})\nexport class InputElement {\n constructor(private el: ElementRef<HTMLInputElement>) { }\n\n public get nativeElement(): HTMLInputElement {\n return this.el.nativeElement;\n }\n}\n","import { Directive, effect, ElementRef, HostListener, Input, OnInit, Renderer2, signal } from '@angular/core';\n\n@Directive({\n selector: '[md3-state-component]',\n host: {\n class: 'md3-state-component',\n },\n})\nexport class StateComponent implements OnInit {\n private stateLayer?: HTMLDivElement;\n private stateLayerSignal = signal<boolean>(true);\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {\n effect(() => {\n if (this.stateLayerSignal()) {\n this.enable();\n } else {\n this.disable();\n }\n });\n }\n\n ngOnInit(): void {\n this.init();\n }\n\n private init(): void {\n if (!this.stateLayerSignal() || this.stateLayer) {\n return;\n }\n\n let layer = this.el.nativeElement.querySelector(\n ':scope > .md3-state-layer'\n ) as HTMLDivElement | null;\n\n if (!layer) {\n // Create the state layer and insert as the first child\n layer = this.renderer.createElement('div') as HTMLDivElement;\n this.renderer.addClass(layer, 'md3-state-layer');\n\n this.renderer.appendChild(\n this.el.nativeElement,\n layer\n );\n\n }\n\n this.stateLayer = layer;\n }\n\n public setStateLayer(value: boolean) {\n this.stateLayerSignal.set(value);\n }\n\n private enable(): void {\n this.el.nativeElement.classList.add('md3-state-component');\n this.init();\n }\n\n private disable(): void {\n this.el.nativeElement.classList.remove('md3-state-component');\n this.stateLayer?.remove();\n this.stateLayer = undefined;\n }\n\n @HostListener('pointerdown', ['$event'])\n onPointerDown(event: PointerEvent): void {\n if (!this.stateLayer) {\n return;\n }\n\n const rect = this.el.nativeElement.getBoundingClientRect();\n const w = Math.max(rect.width, rect.height);\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n\n this.stateLayer.style.setProperty('--ripple-w', `${w}px`);\n this.stateLayer.style.setProperty('--ripple-x', `${x}px`);\n this.stateLayer.style.setProperty('--ripple-y', `${y}px`);\n }\n}\n","import { Directive, ElementRef, input } from '@angular/core';\n\n@Directive({\n selector: '[md3-icon-element]',\n host: {\n 'class': 'md3-icon-element'\n }\n})\nexport class IconElement {\n public iconType = input<string | null>(null, {\n alias: 'md3-icon-element',\n });\n\n constructor(private el: ElementRef) { }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { Component, ElementRef, input, booleanAttribute, effect } from '@angular/core';\n\n@Component({\n selector: 'md3-icon',\n imports: [],\n templateUrl: './material-icon.html',\n styleUrl: './material-icon.scss',\n host: {\n '[class.md3-filled]': 'isFilled()',\n '[class.md3-bi-directional]': 'biDirectional()',\n },\n})\nexport class MaterialIcon {\n public iconVersion = input<'MaterialIcons' | 'MaterialSymbols'>('MaterialSymbols', {\n alias: 'icon-version',\n });\n public isFilled = input<boolean, unknown>(false, {\n alias: 'filled',\n transform: booleanAttribute\n });\n public iconStyle = input<'normal' | 'outlined' | 'rounded' | 'sharp' | 'two-tone'>('normal', {\n alias: 'icon-style',\n });\n public iconSize = input<48 | 36 | 24 | 18>(24, {\n alias: 'icon-size',\n });\n public biDirectional = input<boolean, unknown>(false, {\n alias: 'bi-directional',\n transform: booleanAttribute\n });\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const iconSize = 'md3-' + this.iconSize().toString();\n this.element.classList.add(iconSize);\n\n onCleanup(() => {\n this.element.classList.remove(iconSize);\n });\n });\n\n effect((onCleanup) => {\n let iconStyle = this.iconStyle() == 'normal' ? null : this.iconStyle();\n\n if (this.iconVersion() == 'MaterialSymbols') {\n this.element.classList.add('md3-symbol');\n\n if (iconStyle == 'two-tone') {\n iconStyle = null;\n }\n }\n\n if (iconStyle !== null) {\n this.element.classList.add('md3-' + iconStyle);\n }\n\n onCleanup(() => {\n this.element.classList.remove('md3-symbol', 'md3-' + iconStyle);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","<ng-content></ng-content>","import { Directive, input } from '@angular/core';\n\n@Directive({\n selector: 'md3-divider'\n})\nexport class Divider {\n public dividerType = input<string | null>(null, {\n alias: 'type',\n });\n}\n","import { booleanAttribute, Directive, ElementRef, input } from '@angular/core';\n\n@Directive({\n selector: 'md3-badge',\n host: {\n '[class.md3-small]': 'isSmall()',\n },\n})\nexport class Badge {\n public isSmall = input<boolean, unknown>(false, {\n alias: 'small',\n transform: booleanAttribute,\n });\n\n constructor(private el: ElementRef) {\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { Directive } from '@angular/core';\nimport { StateComponent } from './state-component';\n\n@Directive({\n selector: '[md3-avatar]',\n host: {\n 'class': 'md3-avatar',\n },\n hostDirectives: [\n StateComponent,\n ],\n})\nexport class Avatar {\n constructor() { }\n}\n","import { InjectionToken, Signal } from \"@angular/core\";\nimport { IconButtonWidth } from \"../types/icon-button-width.type\";\nimport { ButtonSize } from \"../types/button-size.type\";\nimport { SplitButtonType } from \"../types/split-button-type.type\";\nimport { ButtonGroupSelection } from \"../types/button-group-selection.type\";\n\nexport interface ButtonContext {\n buttonContextSize?: Signal<ButtonSize>;\n buttonContextType?: Signal<SplitButtonType>;\n buttonContextWidth?: Signal<IconButtonWidth>;\n buttonContextSquared?: Signal<boolean>;\n buttonContextExtended?: Signal<boolean>;\n buttonContextSelection?: Signal<ButtonGroupSelection>;\n}\n\nexport const MD3_BUTTON_CONTEXT = new InjectionToken<ButtonContext>('MD3_BUTTON_CONTEXT');","import { booleanAttribute, Component, computed, effect, ElementRef, HostListener, inject, input, model } from '@angular/core';\nimport { StateComponent } from '../../common/state-component';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { ButtonType } from '../../../types/button-type.type';\nimport { MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\n\n@Component({\n selector: 'button[md3-button], a[md3-button]',\n imports: [],\n templateUrl: './button.html',\n styleUrl: './button.scss',\n host: {\n '[class.md3-square]': 'effectiveSquared()',\n },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class Button {\n private context = inject(MD3_BUTTON_CONTEXT, { optional: true });\n \n @HostListener('click', ['$event']) onClick(event: Event): void {\n if (this.isSelected() === null) {\n return;\n }\n\n if (this.context?.buttonContextSelection?.() === 'single') {\n return;\n }\n\n this.isSelected.update((value) => {\n return !value;\n });\n }\n\n public buttonSize = input<ButtonSize>('small', {\n alias: 'button-size',\n });\n public buttonType = input<ButtonType>('filled', {\n alias: 'button-type',\n });\n public isSquared = input<boolean, unknown>(false, {\n alias: 'button-squared',\n transform: booleanAttribute,\n });\n public isSelected = model<boolean | null>(null, {\n alias: 'selected',\n });\n\n public effectiveSize = computed(() => this.context?.buttonContextSize?.() ?? this.buttonSize());\n public effectiveType = computed(() => this.context?.buttonContextType?.() ?? this.buttonType());\n public effectiveSquared = computed(() => this.context?.buttonContextSquared?.() ?? this.isSquared());\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-' + this.effectiveSize();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const type = 'md3-' + this.effectiveType();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect(() => {\n const toggle = this.isSelected() !== null;\n\n if (toggle) {\n this.element.classList.add('md3-toggle');\n this.element.classList.toggle('md3-selected', this.isSelected() ?? false);\n } else {\n this.element.classList.remove('md3-toggle', 'md3-selected');\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n public enableSelection() {\n this.isSelected.update((current) => {\n if (current !== null) {\n return current;\n }\n\n return false;\n });\n }\n}\n","<ng-content select=\"[md3-icon-element=leading]\"></ng-content>\n<div class=\"md3-label\">\n <ng-content></ng-content>\n</div>\n<ng-content select=\"[md3-icon-element=trailing]\"></ng-content>","import { booleanAttribute, Component, computed, effect, ElementRef, inject, input } from '@angular/core';\nimport { StateComponent } from '../../common/state-component';\nimport { FabType } from '../../../types/fab-type.type';\nimport { MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\nimport { FabSize } from '../../../types/fab-size.type';\n\n@Component({\n selector: 'button[md3-fab], a[md3-fab]',\n imports: [],\n templateUrl: './floating-action-button.html',\n styleUrl: './floating-action-button.scss',\n host: {\n '[class.md3-extended-fab]': 'effectiveExtended()',\n },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class FloatingActionButton {\n private context = inject(MD3_BUTTON_CONTEXT, { optional: true });\n \n public buttonSize = input<FabSize>('small', {\n alias: 'button-size',\n });\n public buttonType = input<FabType>('tonal-primary', {\n alias: 'button-type',\n });\n public isExtended = input<boolean, unknown>(false, {\n alias: 'extended',\n transform: booleanAttribute,\n });\n\n public effectiveSize = computed(() => this.context?.buttonContextSize?.() ?? this.buttonSize());\n public effectiveExtended = computed(() => this.context?.buttonContextExtended?.() ?? this.isExtended());\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const buttonSize = 'md3-' + this.effectiveSize();\n this.element.classList.add(buttonSize);\n\n onCleanup(() => {\n this.element.classList.remove(buttonSize);\n });\n });\n\n effect((onCleanup) => {\n const buttonType = 'md3-' + this.buttonType();\n this.element.classList.add(buttonType);\n\n onCleanup(() => {\n this.element.classList.remove(buttonType);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","<ng-content select=\"[md3-icon-element]\"></ng-content>\n<div class=\"md3-icon-label-space\"></div>\n<div class=\"md3-label\">\n <ng-content></ng-content>\n</div>","import { booleanAttribute, Component, computed, effect, ElementRef, HostListener, inject, input, model } from '@angular/core';\nimport { StateComponent } from '../../common/state-component';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { IconButtonType } from '../../../types/icon-button-type.type';\nimport { IconButtonWidth } from '../../../types/icon-button-width.type';\nimport { MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\n\n@Component({\n selector: 'button[md3-icon-button], a[md3-icon-button]',\n imports: [],\n templateUrl: './icon-button.html',\n styleUrl: './icon-button.scss',\n host: {\n '[class.md3-square]': 'effectiveSquared()',\n },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class IconButton {\n private context = inject(MD3_BUTTON_CONTEXT, { optional: true });\n \n @HostListener('click', ['$event']) onClick(event: Event): void {\n if (this.isSelected() === null) {\n return;\n }\n\n if (this.context?.buttonContextSelection?.() === 'single') {\n return;\n }\n\n this.isSelected.update((value) => {\n return !value;\n });\n }\n\n public buttonSize = input<ButtonSize>('small', {\n alias: 'button-size',\n });\n public buttonType = input<IconButtonType>('filled', {\n alias: 'button-type',\n });\n public buttonWidth = input<IconButtonWidth>('default', {\n alias: 'button-width',\n });\n public isSquared = input<boolean, unknown>(false, {\n alias: 'button-squared',\n transform: booleanAttribute\n });\n public isSelected = model<boolean | null>(null, {\n alias: 'selected',\n });\n\n public effectiveSize = computed(() => this.context?.buttonContextSize?.() ?? this.buttonSize());\n public effectiveType = computed(() => {\n const contextType = this.context?.buttonContextType?.();\n if (contextType) {\n return contextType == 'elevated' ? 'standard' : contextType;\n }\n \n return this.buttonType();\n });\n public effectiveWidth = computed(() => this.context?.buttonContextWidth?.() ?? this.buttonWidth());\n public effectiveSquared = computed(() => this.context?.buttonContextSquared?.() ?? this.isSquared());\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-' + this.effectiveSize();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const type = 'md3-' + this.effectiveType();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect((onCleanup) => {\n const width = 'md3-' + this.effectiveWidth();\n this.element.classList.add(width);\n\n onCleanup(() => {\n this.element.classList.remove(width);\n });\n });\n\n effect(() => {\n const toggle = this.isSelected() !== null;\n\n if (toggle) {\n this.element.classList.add('md3-toggle');\n this.element.classList.toggle('md3-selected', this.isSelected() ?? false);\n } else {\n this.element.classList.remove('md3-toggle', 'md3-selected');\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n public enableSelection() {\n this.isSelected.update((current) => {\n if (current !== null) {\n return current;\n }\n\n return false;\n });\n }\n}\n","<ng-content select=\"[md3-icon-element]\"></ng-content>\n<ng-content></ng-content>","import { booleanAttribute, Component, contentChild, contentChildren, effect, ElementRef, input, signal, Signal } from '@angular/core';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { SplitButtonType } from '../../../types/split-button-type.type';\nimport { Button } from '../button/button';\nimport { IconButton } from '../icon-button/icon-button';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\nimport { IconButtonWidth } from '../../../types/icon-button-width.type';\n\n@Component({\n selector: 'md3-split-button',\n imports: [\n ],\n templateUrl: './split-button.html',\n styleUrl: './split-button.scss',\n host: {\n 'role': 'group',\n },\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: SplitButton,\n },\n ],\n})\nexport class SplitButton implements ButtonContext {\n public buttonSize = input<ButtonSize>('small', {\n alias: 'button-size',\n });\n public buttonType = input<SplitButtonType>('filled', {\n alias: 'button-type',\n });\n\n public flipTrailingIcon = input<boolean, unknown>(true, {\n alias: 'flip-trailing-icon',\n transform: booleanAttribute,\n });\n\n private button = contentChild<Button>(Button);\n private iconButtons = contentChildren<IconButton>(IconButton);\n\n // context values\n buttonContextSize: Signal<ButtonSize> = this.buttonSize;\n buttonContextType: Signal<SplitButtonType> = this.buttonType;\n buttonContextWidth: Signal<IconButtonWidth> = signal('default');\n buttonContextSquared?: Signal<boolean> = signal(false);\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-' + this.buttonSize();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const type = 'md3-' + this.buttonType();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n \n effect(() => {\n this.button()?.isSelected.set(null);\n });\n \n effect(() => {\n this.iconButtons().forEach((iconButton) => {\n iconButton.isSelected.set(null);\n \n if (iconButton?.element.hasAttribute('md3-main-action')) {\n return;\n }\n\n iconButton.element.classList.toggle('md3-flip-icon', this.flipTrailingIcon());\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","<ng-content select=\"button[md3-button], button[md3-icon-button][md3-main-action], a[md3-button], a[md3-icon-button][md3-main-action]\"></ng-content>\n<ng-content select=\"button[md3-icon-button], a[md3-icon-button]\"></ng-content>","import { Component, contentChildren, effect, ElementRef, HostListener, input, InputSignal, Signal } from '@angular/core';\nimport { Button } from '../button/button';\nimport { IconButton } from '../icon-button/icon-button';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { ButtonGroupSelection } from '../../../types/button-group-selection.type';\nimport { ButtonGroupType } from '../../../types/button-group-type.type';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\n\n@Component({\n selector: 'md3-button-group',\n templateUrl: './button-group.html',\n styleUrl: './button-group.scss',\n host: {\n 'role': 'group',\n },\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: ButtonGroup,\n },\n ],\n})\nexport class ButtonGroup implements ButtonContext {\n @HostListener('click', ['$event']) onClick(event: PointerEvent): void {\n if (this.groupSelection() !== 'single') {\n return;\n }\n\n const selectedItem = this.findEventButton(event);\n\n if (!selectedItem) {\n return;\n }\n\n this.clearOtherSelections(selectedItem);\n selectedItem.isSelected.set(true);\n }\n \n public buttonSize: InputSignal<ButtonSize> = input<ButtonSize>('small', {\n alias: 'button-size',\n });\n public groupType: InputSignal<ButtonGroupType> = input<ButtonGroupType>('standard', {\n alias: 'group-type',\n });\n public groupSelection: InputSignal<ButtonGroupSelection> = input<ButtonGroupSelection>('none', {\n alias: 'selection',\n });\n\n private buttons = contentChildren<Button>(Button, { descendants: true });\n private iconButtons = contentChildren<IconButton>(IconButton, { descendants: true });\n \n // context values\n buttonContextSize: Signal<ButtonSize> = this.buttonSize;\n buttonContextSelection: Signal<ButtonGroupSelection> = this.groupSelection;\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-' + this.buttonSize();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const groupType = 'md3-' + this.groupType();\n this.element.classList.add(groupType);\n\n onCleanup(() => {\n this.element.classList.remove(groupType);\n });\n });\n\n effect(() => {\n const selection = this.groupSelection();\n\n if (selection == 'none') {\n this.allButtons().forEach((item) => {\n item.isSelected.set(null);\n });\n } else {\n this.allButtons().forEach((item) => {\n item.enableSelection();\n });\n\n if (selection == 'single') {\n this.normalizeSingleSelection();\n }\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n private findEventButton(event: PointerEvent): Button | IconButton | undefined {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return undefined;\n }\n\n return this.allButtons().find((item) => {\n return item.element.contains(target);\n });\n }\n\n private normalizeSingleSelection(): void {\n const selectedItem = this.allButtons().find((item) => {\n return item.isSelected();\n });\n\n if (selectedItem) {\n this.clearOtherSelections(selectedItem);\n }\n }\n\n private clearOtherSelections(selectedItem: Button | IconButton): void {\n this.allButtons().forEach((item) => {\n if (item != selectedItem) {\n item.isSelected.set(false);\n }\n });\n }\n\n private allButtons(): (Button | IconButton)[] {\n return [\n ...this.buttons(),\n ...this.iconButtons(),\n ];\n }\n}\n","<ng-content select=\"button[md3-button], button[md3-icon-button], a[md3-button], a[md3-icon-button]\"></ng-content>","import { AfterViewInit, booleanAttribute, Component, effect, ElementRef, input, signal } from '@angular/core';\nimport { StateComponent } from '../common/state-component';\nimport { CardType } from '../../types/card-type.type';\n\n@Component({\n selector: 'md3-card, button[md3-card], a[md3-card]',\n imports: [],\n templateUrl: './card.html',\n styleUrl: './card.scss',\n // host: {\n // tabindex: '0',\n // },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class Card implements AfterViewInit {\n public cardType = input<CardType>('elevated', {\n alias: 'card-type',\n });\n\n public isInteractive = input<boolean, unknown>(false, {\n alias: 'interactive',\n transform: booleanAttribute,\n });\n\n private isActionTag = signal<boolean>(false);\n\n constructor(\n private el: ElementRef,\n private state: StateComponent,\n ) {\n effect((onCleanup) => {\n const type = 'md3-' + this.cardType();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect(() => {\n if (this.isInteractive() || this.isActionTag()) {\n this.element.classList.add('md3-interactive');\n this.state.setStateLayer(true);\n\n if (!this.isActionTag()) {\n this.element.setAttribute('tabindex', '0');\n }\n } else {\n this.element.classList.remove('md3-interactive');\n this.state.setStateLayer(false);\n this.element.removeAttribute('tabindex');\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n ngAfterViewInit(): void {\n const tagName = this.element.tagName.toLowerCase();\n this.isActionTag.set(tagName != 'md3-card');\n }\n}\n","<ng-content></ng-content>\n","import { CarouselArrangement } from '../../interfaces/carousel-arrangement.interface';\nimport { CarouselStrategy, CarouselStrategyContext } from '../../interfaces/carousel-strategy.interface';\nimport { CarouselLayout } from '../../types/carousel-layout.type';\n\n/** Fraction of its own size a medium item may flex by to protect the large item's target size. */\nconst MEDIUM_FLEX = 0.1;\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * One candidate distribution, already fitted to the container.\n *\n * `cost` ranks candidates: lower is better. A candidate that cannot preserve the\n * large > medium > small ordering is invalid and never selected.\n */\ninterface Candidate extends CarouselArrangement {\n cost: number;\n}\n\n/**\n * Solves for the large item size given that medium items are always the mean of large and small.\n *\n * containerSize = largeSize * largeCount\n * + ((largeSize + smallSize) / 2) * mediumCount\n * + smallSize * smallCount\n */\nfunction solveLargeSize(\n containerSize: number,\n smallSize: number,\n smallCount: number,\n mediumCount: number,\n largeCount: number,\n): number {\n const smallContribution = (smallCount + mediumCount / 2) * smallSize;\n return (containerSize - smallContribution) / (largeCount + mediumCount / 2);\n}\n\n/**\n * Shrinks or grows a candidate until it exactly fills the container, disturbing the large items\n * as little as possible: small items absorb the difference first, then medium items flex, and\n * only what is left over changes the large size.\n */\nfunction fit(\n containerSize: number,\n targetLargeSize: number,\n smallSizeMin: number,\n smallSizeMax: number,\n smallCount: number,\n mediumCount: number,\n largeCount: number,\n targetSmallSize: number,\n priority: number,\n): Candidate {\n let smallSize = clamp(targetSmallSize, smallSizeMin, smallSizeMax);\n let largeSize = targetLargeSize;\n let mediumSize = (targetLargeSize + smallSize) / 2;\n\n const occupied = largeSize * largeCount + mediumSize * mediumCount + smallSize * smallCount;\n const delta = containerSize - occupied;\n\n if (smallCount > 0 && delta > 0) {\n smallSize += Math.min(delta / smallCount, smallSizeMax - smallSize);\n } else if (smallCount > 0 && delta < 0) {\n smallSize += Math.max(delta / smallCount, smallSizeMin - smallSize);\n }\n\n if (smallCount === 0) {\n smallSize = 0;\n }\n\n largeSize = solveLargeSize(containerSize, smallSize, smallCount, mediumCount, largeCount);\n mediumSize = (largeSize + smallSize) / 2;\n\n // Give the large items back as much of their target size as the medium items can spare.\n if (mediumCount > 0 && largeSize !== targetLargeSize) {\n const targetAdjustment = (targetLargeSize - largeSize) * largeCount;\n const availableFlex = mediumSize * MEDIUM_FLEX * mediumCount;\n const distribute = Math.min(Math.abs(targetAdjustment), availableFlex);\n const direction = targetAdjustment > 0 ? 1 : -1;\n\n mediumSize -= (direction * distribute) / mediumCount;\n largeSize += (direction * distribute) / largeCount;\n }\n\n return {\n largeSize,\n largeCount,\n mediumSize,\n mediumCount,\n smallSize,\n smallCount,\n cost: cost(targetLargeSize, largeSize, mediumSize, smallSize, largeCount, mediumCount, smallCount, priority),\n };\n}\n\nfunction isValid(\n largeSize: number,\n mediumSize: number,\n smallSize: number,\n largeCount: number,\n mediumCount: number,\n smallCount: number,\n): boolean {\n if (largeSize <= 0) {\n return false;\n }\n\n if (largeCount > 0 && smallCount > 0 && mediumCount > 0) {\n return largeSize > mediumSize && mediumSize > smallSize;\n }\n\n if (largeCount > 0 && smallCount > 0) {\n return largeSize > smallSize;\n }\n\n return true;\n}\n\nfunction cost(\n targetLargeSize: number,\n largeSize: number,\n mediumSize: number,\n smallSize: number,\n largeCount: number,\n mediumCount: number,\n smallCount: number,\n priority: number,\n): number {\n if (!isValid(largeSize, mediumSize, smallSize, largeCount, mediumCount, smallCount)) {\n return Number.POSITIVE_INFINITY;\n }\n\n // Prefer arrangements that appear earlier in the priority order and that leave the large\n // item closest to the size the consumer asked for.\n return Math.abs(targetLargeSize - largeSize) * priority;\n}\n\n/**\n * Fits every permutation of the supplied counts and returns the cheapest.\n *\n * Permutations are generated in priority order, so a zero-cost candidate is provably optimal\n * and ends the search early.\n */\nfunction findLowestCostArrangement(\n containerSize: number,\n targetLargeSize: number,\n targetSmallSize: number,\n smallSizeMin: number,\n smallSizeMax: number,\n smallCounts: number[],\n mediumCounts: number[],\n largeCounts: number[],\n): Candidate {\n let best: Candidate | undefined;\n let priority = 1;\n\n for (const largeCount of largeCounts) {\n for (const mediumCount of mediumCounts) {\n for (const smallCount of smallCounts) {\n const candidate = fit(\n containerSize,\n targetLargeSize,\n smallSizeMin,\n smallSizeMax,\n smallCount,\n mediumCount,\n largeCount,\n targetSmallSize,\n priority,\n );\n\n if (!best || candidate.cost < best.cost) {\n best = candidate;\n\n if (best.cost === 0) {\n return best;\n }\n }\n\n priority++;\n }\n }\n }\n\n // Every permutation was invalid; fall back to a single full-width item.\n return best ?? {\n largeSize: containerSize,\n largeCount: 1,\n mediumSize: 0,\n mediumCount: 0,\n smallSize: 0,\n smallCount: 0,\n cost: Number.POSITIVE_INFINITY,\n };\n}\n\n/**\n * Trims keylines until there are no more of them than there are items, so a short list never\n * leaves empty slots. Small items go first, then medium — never large, since large items are\n * already fully unmasked.\n *\n * Returns true when the counts changed and the arrangement needs re-solving.\n */\nfunction trimToItemCount(candidate: Candidate, itemCount: number): boolean {\n let surplus = candidate.smallCount + candidate.mediumCount + candidate.largeCount - itemCount;\n let changed = false;\n\n while (surplus > 0 && (candidate.smallCount > 0 || candidate.mediumCount > 1)) {\n if (candidate.smallCount > 0) {\n candidate.smallCount--;\n } else {\n candidate.mediumCount--;\n }\n\n changed = true;\n surplus--;\n }\n\n return changed;\n}\n\n/**\n * The Material Design 3 multi-browse layout: a run of large items followed by a medium and a\n * small item, sized so the whole arrangement fills the container exactly.\n *\n * Ported from `MultiBrowseCarouselStrategy` and `Arrangement` in Material Components for\n * Android so the two implementations agree on sizing.\n */\nexport const multiBrowseStrategy: CarouselStrategy = {\n // Multi-browse resizes items, so it only reads correctly with items resting on keylines.\n snap: true,\n\n arrange(context: CarouselStrategyContext): CarouselArrangement {\n const { containerSize, itemSize, smallSizeMin, smallSizeMax, itemCount, alignment } = context;\n\n const maxSmallSize = Math.max(smallSizeMax, smallSizeMin);\n const targetLargeSize = Math.min(itemSize, containerSize);\n\n // A small item ideally reads as a third of a large one, held within its allowed range.\n const targetSmallSize = clamp(itemSize / 3, smallSizeMin, maxSmallSize);\n const targetMediumSize = (targetLargeSize + targetSmallSize) / 2;\n\n let smallCounts = containerSize <= smallSizeMin * 2 ? [0] : [1];\n let mediumCounts = [1, 0];\n\n // A centred focal range needs matching keylines on both sides of it.\n if (alignment === 'center') {\n smallCounts = smallCounts.map((count) => count * 2);\n mediumCounts = mediumCounts.map((count) => count * 2);\n }\n\n const minLargeSpace = containerSize\n - targetMediumSize * Math.max(...mediumCounts)\n - maxSmallSize * Math.max(...smallCounts);\n\n const largeCountMin = Math.max(1, Math.floor(minLargeSpace / targetLargeSize));\n const largeCountMax = Math.max(largeCountMin, Math.ceil(containerSize / targetLargeSize));\n const largeCounts: number[] = [];\n\n for (let count = largeCountMax; count >= largeCountMin; count--) {\n largeCounts.push(count);\n }\n\n let arrangement = findLowestCostArrangement(\n containerSize,\n targetLargeSize,\n targetSmallSize,\n smallSizeMin,\n maxSmallSize,\n smallCounts,\n mediumCounts,\n largeCounts,\n );\n\n let resolve = trimToItemCount(arrangement, itemCount);\n\n // An arrangement of nothing but large items has no visual hint that the list continues,\n // so force a small item back in whenever there is room for one.\n if (arrangement.mediumCount === 0 && arrangement.smallCount === 0 && containerSize > 2 * smallSizeMin) {\n arrangement.smallCount = 1;\n resolve = true;\n }\n\n if (resolve) {\n arrangement = findLowestCostArrangement(\n containerSize,\n targetLargeSize,\n targetSmallSize,\n smallSizeMin,\n maxSmallSize,\n [arrangement.smallCount],\n [arrangement.mediumCount],\n [arrangement.largeCount],\n );\n }\n\n return {\n largeSize: arrangement.largeSize,\n largeCount: arrangement.largeCount,\n mediumSize: arrangement.mediumSize,\n mediumCount: arrangement.mediumCount,\n smallSize: arrangement.smallSize,\n smallCount: arrangement.smallCount,\n };\n },\n};\n\n/**\n * Registry of the available carousel layouts.\n *\n * Adding a layout means implementing {@link CarouselStrategy}, widening `CarouselLayout` and\n * adding the entry here — no changes to the component itself.\n */\nexport const CAROUSEL_STRATEGIES: Record<CarouselLayout, CarouselStrategy> = {\n 'multi-browse': multiBrowseStrategy,\n};\n","import { CarouselArrangement } from '../../interfaces/carousel-arrangement.interface';\nimport {\n CarouselGeometry,\n CarouselItemGeometry,\n CarouselKeyline,\n CarouselKeylineState,\n} from '../../interfaces/carousel-keyline.interface';\nimport { CarouselAlignment } from '../../types/carousel-alignment.type';\nimport { CarouselItemSize } from '../../types/carousel-item-size.type';\n\n/** Anchor size fallback, as a fraction of the large item, when an arrangement has no small items. */\nconst ANCHOR_FALLBACK_RATIO = 0.2;\n\nfunction lerp(from: number, to: number, progress: number): number {\n return from + (to - from) * progress;\n}\n\n/** How many small and medium keylines sit before the focal range in a given shift step. */\ninterface ShiftStep {\n smallBefore: number;\n mediumBefore: number;\n}\n\n/**\n * Lays out one shift step.\n *\n * Keylines before the focal range ascend in size towards it and keylines after it descend away\n * from it, which is what keeps the arrangement looking balanced as it shifts. An off-screen\n * anchor sits at each end so items have somewhere to shrink into rather than popping out.\n */\nfunction buildState(\n step: ShiftStep,\n arrangement: CarouselArrangement,\n anchorSize: number,\n): CarouselKeylineState {\n const { largeSize, largeCount, mediumSize, mediumCount, smallSize, smallCount } = arrangement;\n\n const before: number[] = [\n ...new Array<number>(step.smallBefore).fill(smallSize),\n ...new Array<number>(step.mediumBefore).fill(mediumSize),\n ];\n const after: number[] = [\n ...new Array<number>(mediumCount - step.mediumBefore).fill(mediumSize),\n ...new Array<number>(smallCount - step.smallBefore).fill(smallSize),\n ];\n\n const sizes: number[] = [\n anchorSize,\n ...before,\n ...new Array<number>(largeCount).fill(largeSize),\n ...after,\n anchorSize,\n ];\n\n const firstFocalIndex = 1 + before.length;\n const lastFocalIndex = firstFocalIndex + largeCount - 1;\n\n // The leading anchor occupies [-anchorSize, 0] so the first real keyline starts at 0.\n let cursor = -anchorSize;\n const screenLocs = sizes.map((size) => {\n const loc = cursor + size / 2;\n cursor += size;\n return loc;\n });\n\n // In scroll space every item occupies exactly `largeSize`, so keylines are evenly spaced.\n // Anchoring that spacing to the first focal keyline keeps screen and scroll space aligned\n // wherever an item is fully unmasked.\n const focalLoc = screenLocs[firstFocalIndex];\n\n const keylines: CarouselKeyline[] = sizes.map((size, index) => ({\n scrollLoc: focalLoc + (index - firstFocalIndex) * largeSize,\n screenLoc: screenLocs[index],\n maskedSize: size,\n isFocal: index >= firstFocalIndex && index <= lastFocalIndex,\n isAnchor: index === 0 || index === sizes.length - 1,\n }));\n\n return {\n keylines,\n focalStart: focalLoc - largeSize / 2,\n firstFocalIndex,\n lastFocalIndex,\n };\n}\n\n/**\n * Enumerates every shift step from \"focal range at the start of the container\" through to\n * \"focal range at the end\", ordered by ascending `focalStart`.\n *\n * Each step moves exactly one keyline across the focal range, which is what guarantees every\n * item passes through the focal range as the carousel scrolls. Smaller keylines migrate first,\n * so items pile up smallest-outermost at whichever edge they are collecting against.\n */\nfunction buildSteps(arrangement: CarouselArrangement, alignment: CarouselAlignment): {\n steps: CarouselKeylineState[];\n defaultStep: number;\n} {\n const { smallCount, mediumCount } = arrangement;\n\n const restingStep: ShiftStep = alignment === 'center'\n ? { smallBefore: Math.floor(smallCount / 2), mediumBefore: Math.floor(mediumCount / 2) }\n : { smallBefore: 0, mediumBefore: 0 };\n\n // Walk backwards from the resting step, retiring the smallest leading keyline each time.\n const towardsStart: ShiftStep[] = [restingStep];\n let { smallBefore, mediumBefore } = restingStep;\n\n while (smallBefore > 0 || mediumBefore > 0) {\n if (smallBefore > 0) {\n smallBefore--;\n } else {\n mediumBefore--;\n }\n\n towardsStart.push({ smallBefore, mediumBefore });\n }\n\n // Walk forwards, promoting the smallest trailing keyline each time.\n const towardsEnd: ShiftStep[] = [restingStep];\n ({ smallBefore, mediumBefore } = restingStep);\n\n while (smallBefore + mediumBefore < smallCount + mediumCount) {\n if (smallBefore < smallCount) {\n smallBefore++;\n } else {\n mediumBefore++;\n }\n\n towardsEnd.push({ smallBefore, mediumBefore });\n }\n\n const ordered = [...towardsStart.slice(1).reverse(), ...towardsEnd];\n const anchorSize = arrangement.smallSize > 0\n ? arrangement.smallSize\n : arrangement.largeSize * ANCHOR_FALLBACK_RATIO;\n\n return {\n steps: ordered.map((step) => buildState(step, arrangement, anchorSize)),\n defaultStep: towardsStart.length - 1,\n };\n}\n\n/**\n * Turns a solved arrangement into everything the component needs to place items.\n */\nexport function buildGeometry(\n arrangement: CarouselArrangement,\n alignment: CarouselAlignment,\n itemCount: number,\n containerSize: number,\n): CarouselGeometry {\n const { steps, defaultStep } = buildSteps(arrangement, alignment);\n\n const resting = steps[defaultStep];\n const startShiftRange = resting.focalStart - steps[0].focalStart;\n const endShiftRange = steps[steps.length - 1].focalStart - resting.focalStart;\n\n // Each item owns exactly `largeSize` of scroll range, and the final `largeCount` items share\n // the focal region, so they need no scroll range of their own.\n const lastIndex = Math.max(0, itemCount - arrangement.largeCount);\n const maxScroll = lastIndex * arrangement.largeSize;\n\n return {\n arrangement,\n steps,\n defaultStep,\n itemSize: arrangement.largeSize,\n startShiftRange,\n endShiftRange,\n maxScroll,\n lastIndex,\n scrollSize: maxScroll + containerSize,\n };\n}\n\n/**\n * Where the focal range sits for a given scroll offset.\n *\n * It rests at its default position through the middle of the list and slides towards whichever\n * edge is being approached, so the first and last items can reach the focal range without\n * detaching from the container edges.\n */\nfunction focalStartFor(geometry: CarouselGeometry, scrollOffset: number): number {\n const resting = geometry.steps[geometry.defaultStep].focalStart;\n const first = geometry.steps[0].focalStart;\n const last = geometry.steps[geometry.steps.length - 1].focalStart;\n\n const startShift = Math.max(0, geometry.startShiftRange - scrollOffset);\n const endShift = Math.max(0, scrollOffset - (geometry.maxScroll - geometry.endShiftRange));\n\n return Math.min(Math.max(resting - startShift + endShift, first), last);\n}\n\n/**\n * Interpolates the two shift steps bracketing `focalStart` into a single state.\n *\n * Every step holds the same number of keylines, so this is a straight index-by-index blend.\n */\nfunction stateAt(geometry: CarouselGeometry, focalStart: number): CarouselKeylineState {\n const { steps } = geometry;\n\n let upper = 1;\n while (upper < steps.length && steps[upper].focalStart < focalStart) {\n upper++;\n }\n\n if (upper >= steps.length) {\n return steps[steps.length - 1];\n }\n\n const from = steps[upper - 1];\n const to = steps[upper];\n const span = to.focalStart - from.focalStart;\n\n if (span <= 0) {\n return from;\n }\n\n const progress = Math.min(Math.max((focalStart - from.focalStart) / span, 0), 1);\n\n return {\n focalStart,\n firstFocalIndex: progress < 0.5 ? from.firstFocalIndex : to.firstFocalIndex,\n lastFocalIndex: progress < 0.5 ? from.lastFocalIndex : to.lastFocalIndex,\n keylines: from.keylines.map((keyline, index) => {\n const target = to.keylines[index];\n\n return {\n scrollLoc: lerp(keyline.scrollLoc, target.scrollLoc, progress),\n screenLoc: lerp(keyline.screenLoc, target.screenLoc, progress),\n maskedSize: lerp(keyline.maskedSize, target.maskedSize, progress),\n isFocal: progress < 0.5 ? keyline.isFocal : target.isFocal,\n isAnchor: keyline.isAnchor && target.isAnchor,\n };\n }),\n };\n}\n\n/**\n * Resolves the keyline arrangement in effect at a given scroll offset.\n */\nexport function resolveState(geometry: CarouselGeometry, scrollOffset: number): CarouselKeylineState {\n return stateAt(geometry, focalStartFor(geometry, scrollOffset));\n}\n\n/**\n * Finds the keylines either side of a scroll-space position, and how far between them it sits.\n */\nfunction keylineRange(keylines: CarouselKeyline[], scrollCenter: number): [CarouselKeyline, CarouselKeyline, number] {\n let upper = 1;\n while (upper < keylines.length - 1 && keylines[upper].scrollLoc < scrollCenter) {\n upper++;\n }\n\n const from = keylines[upper - 1];\n const to = keylines[upper];\n const span = to.scrollLoc - from.scrollLoc;\n const progress = span <= 0 ? 0 : Math.min(Math.max((scrollCenter - from.scrollLoc) / span, 0), 1);\n\n return [from, to, progress];\n}\n\n/**\n * Classifies a rendered size against the arrangement's three sizes.\n *\n * Items resize continuously, so this snaps to whichever size the item currently reads as,\n * flipping at the midpoint between one size and the next.\n */\nexport function sizeBandFor(maskedSize: number, geometry: CarouselGeometry): CarouselItemSize {\n const { largeSize, mediumSize, smallSize } = geometry.arrangement;\n\n if (maskedSize >= (largeSize + mediumSize) / 2) {\n return 'large';\n }\n\n if (maskedSize >= (mediumSize + smallSize) / 2) {\n return 'medium';\n }\n\n return 'small';\n}\n\n/**\n * Places one item.\n *\n * The item's centre is a plain linear function of the scroll offset in scroll space; looking\n * that position up against the current keylines is what converts it into a rendered size and\n * an on-screen position.\n */\nexport function resolveItemGeometry(\n geometry: CarouselGeometry,\n state: CarouselKeylineState,\n index: number,\n scrollOffset: number,\n): CarouselItemGeometry {\n const { itemSize } = geometry;\n const { keylines } = state;\n\n const scrollCenter = index * itemSize + itemSize / 2 - scrollOffset + state.focalStart;\n\n const first = keylines[0];\n const last = keylines[keylines.length - 1];\n\n if (scrollCenter < first.scrollLoc || scrollCenter > last.scrollLoc) {\n return {\n offset: 0,\n maskedSize: 0,\n size: 'small',\n maskRatio: 1,\n isFocal: false,\n isVisible: false,\n };\n }\n\n const [from, to, progress] = keylineRange(keylines, scrollCenter);\n\n const maskedSize = lerp(from.maskedSize, to.maskedSize, progress);\n const screenCenter = lerp(from.screenLoc, to.screenLoc, progress);\n\n return {\n offset: screenCenter - maskedSize / 2,\n maskedSize,\n size: sizeBandFor(maskedSize, geometry),\n maskRatio: itemSize <= 0 ? 1 : Math.min(Math.max(1 - maskedSize / itemSize, 0), 1),\n isFocal: (from.isFocal && progress < 0.5) || (to.isFocal && progress >= 0.5),\n isVisible: maskedSize > 0.5,\n };\n}\n\n/**\n * Clamps an index to one the carousel can actually come to rest on.\n */\nexport function clampIndex(geometry: CarouselGeometry, index: number): number {\n return Math.min(Math.max(Math.round(index), 0), geometry.lastIndex);\n}\n\n/**\n * Scroll offset at which `index` leads the focal range.\n *\n * The shifting focal range cancels out here, so this stays a simple multiple regardless of\n * alignment or how close to either end of the list the item is.\n */\nexport function scrollOffsetForIndex(geometry: CarouselGeometry, index: number): number {\n return clampIndex(geometry, index) * geometry.itemSize;\n}\n\n/**\n * The item leading the focal range at a given scroll offset.\n */\nexport function indexForScrollOffset(geometry: CarouselGeometry, scrollOffset: number): number {\n if (geometry.itemSize <= 0) {\n return 0;\n }\n\n return clampIndex(geometry, scrollOffset / geometry.itemSize);\n}\n","import { Component, effect, ElementRef, signal } from '@angular/core';\nimport { CarouselItemGeometry } from '../../../interfaces/carousel-keyline.interface';\nimport { CarouselItemSize } from '../../../types/carousel-item-size.type';\n\n/**\n * A single item within an `md3-carousel`.\n *\n * The item is a clipping box whose content stays at full size, so scrolling crops the item\n * towards its centre rather than squashing it. Content should be full-bleed — an image or a\n * background that reaches the edges — or the crop will reveal empty space.\n *\n * Position and size are written straight to CSS custom properties by the parent carousel, so\n * styling never waits on change detection. The same values are mirrored onto signals and onto\n * `md3-large` / `md3-medium` / `md3-small` classes, so content can react to the item's size\n * either declaratively or from a stylesheet.\n */\n@Component({\n selector: 'md3-carousel-item',\n templateUrl: './carousel-item.html',\n styleUrl: './carousel-item.scss',\n host: {\n 'role': 'group',\n 'aria-roledescription': 'slide',\n },\n})\nexport class CarouselItem {\n /** 0 while the item is fully unmasked, approaching 1 as it crops away. */\n public readonly maskRatio = signal<number>(0);\n\n /** Current rendered size of the item, in pixels. */\n public readonly maskedSize = signal<number>(0);\n\n /** True while the item rests in the carousel's focal range. */\n public readonly isFocal = signal<boolean>(false);\n\n /**\n * Which of the arrangement's three sizes the item currently reads as.\n *\n * Mirrored onto the element as `md3-large`, `md3-medium` or `md3-small`.\n */\n public readonly size = signal<CarouselItemSize>('large');\n\n constructor(private el: ElementRef<HTMLElement>) {\n effect((onCleanup) => {\n const size = 'md3-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n /**\n * Applies a resolved placement.\n *\n * Called from the carousel's scroll handler on every frame, so this writes to the DOM\n * directly and only touches signals when a value actually changes.\n */\n public applyGeometry(geometry: CarouselItemGeometry, itemSize: number): void {\n const style = this.element.style;\n\n if (!geometry.isVisible) {\n this.element.setAttribute('hidden', '');\n return;\n }\n\n this.element.removeAttribute('hidden');\n style.setProperty('--md3-carousel-item-size', `${geometry.maskedSize}px`);\n style.setProperty('--md3-carousel-item-full-size', `${itemSize}px`);\n style.setProperty('--md3-carousel-item-offset', `${geometry.offset}px`);\n style.setProperty('--md3-carousel-item-mask-ratio', `${geometry.maskRatio}`);\n\n if (this.maskedSize() !== geometry.maskedSize) {\n this.maskedSize.set(geometry.maskedSize);\n }\n\n if (this.maskRatio() !== geometry.maskRatio) {\n this.maskRatio.set(geometry.maskRatio);\n }\n\n if (this.size() !== geometry.size) {\n this.size.set(geometry.size);\n }\n\n if (this.isFocal() !== geometry.isFocal) {\n this.isFocal.set(geometry.isFocal);\n this.element.classList.toggle('md3-focal', geometry.isFocal);\n }\n }\n}\n","<div class=\"md3-carousel-item-content\">\n <ng-content></ng-content>\n</div>\n","import { Directionality } from '@angular/cdk/bidi';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n model,\n numberAttribute,\n PLATFORM_ID,\n signal,\n viewChild,\n} from '@angular/core';\nimport { CarouselArrangement } from '../../interfaces/carousel-arrangement.interface';\nimport { CarouselGeometry } from '../../interfaces/carousel-keyline.interface';\nimport { CarouselAlignment } from '../../types/carousel-alignment.type';\nimport { CarouselLayout } from '../../types/carousel-layout.type';\nimport { CarouselOrientation } from '../../types/carousel-orientation.type';\nimport { CAROUSEL_STRATEGIES } from './carousel-arrangement';\nimport {\n buildGeometry,\n clampIndex,\n indexForScrollOffset,\n resolveItemGeometry,\n resolveState,\n scrollOffsetForIndex,\n} from './carousel-keylines';\nimport { CarouselItem } from './carousel-item/carousel-item';\n\n/**\n * Reads an aspect ratio from an input value.\n *\n * Accepts a number (`1.778`) or the more readable fraction form (`\"16 / 9\"`). Anything that is\n * not a positive, finite ratio resolves to `undefined`, which leaves the height to CSS.\n */\nexport function parseCarouselAspectRatio(value: unknown): number | undefined {\n if (value === null || value === undefined || value === '') {\n return undefined;\n }\n\n let ratio: number;\n\n if (typeof value === 'number') {\n ratio = value;\n } else {\n const parts = String(value).split('/');\n ratio = parts.length === 2\n ? Number(parts[0]) / Number(parts[1])\n : Number(parts[0]);\n }\n\n return Number.isFinite(ratio) && ratio > 0 ? ratio : undefined;\n}\n\n/** Grace period after a programmatic scroll before the index is synced back from the DOM. */\nconst SCROLL_END_FALLBACK = 120;\n\n/**\n * A Material Design 3 carousel.\n *\n * Items are laid out against a set of keylines — large, medium, small and an off-screen anchor —\n * and adopt the size of whichever keyline they are passing through, so they grow into the focal\n * range and crop away as they leave it.\n *\n * Scrolling is native, which keeps momentum, touch, snapping and the scrollbar intact. Only the\n * visual sizing is derived in TypeScript, and it is written straight to CSS custom properties so\n * scrolling never triggers change detection.\n *\n * All size inputs are in pixels.\n *\n * ```html\n * <md3-carousel [(index)]=\"selected\" [item-size]=\"200\">\n * @for (photo of photos(); track photo.id) {\n * <md3-carousel-item>\n * <img [src]=\"photo.url\" [alt]=\"photo.alt\" />\n * </md3-carousel-item>\n * }\n * </md3-carousel>\n * ```\n */\n@Component({\n selector: 'md3-carousel',\n templateUrl: './carousel.html',\n styleUrl: './carousel.scss',\n host: {\n 'role': 'group',\n 'aria-roledescription': 'carousel',\n },\n})\nexport class Carousel {\n /** Arrangement strategy. Additional Material Design layouts will widen this type. */\n public carouselLayout = input<CarouselLayout>('multi-browse', {\n alias: 'carousel-layout',\n });\n\n /** Where the focal (large) items sit within the container. */\n public alignment = input<CarouselAlignment>('start', {\n alias: 'alignment',\n });\n\n /** Scroll axis. Only `horizontal` is implemented today. */\n public orientation = input<CarouselOrientation>('horizontal', {\n alias: 'orientation',\n });\n\n /** Preferred size of a fully unmasked item, in pixels. */\n public itemSize = input<number, unknown>(200, {\n alias: 'item-size',\n transform: numberAttribute,\n });\n\n /** Smallest a small item may shrink to, in pixels. */\n public smallItemSizeMin = input<number, unknown>(40, {\n alias: 'small-item-size-min',\n transform: numberAttribute,\n });\n\n /** Largest a small item may grow to, in pixels. */\n public smallItemSizeMax = input<number, unknown>(56, {\n alias: 'small-item-size-max',\n transform: numberAttribute,\n });\n\n /** Space between items, in pixels. */\n public gap = input<number, unknown>(8, {\n alias: 'gap',\n transform: numberAttribute,\n });\n\n /**\n * Width-to-height ratio of a fully unmasked item, as a number or a `\"16 / 9\"` fraction.\n *\n * The solver changes item width as the container resizes, so a fixed height would let the\n * ratio drift. Setting this derives the carousel's height from the solved item width\n * instead, keeping items at a constant shape at every viewport size.\n *\n * Leave it unset to size the carousel with `--md3-carousel-height` in CSS.\n */\n public aspectRatio = input<number | undefined, unknown>(undefined, {\n alias: 'aspect-ratio',\n transform: parseCarouselAspectRatio,\n });\n\n /**\n * Index of the item leading the focal range. Two-way bindable.\n *\n * Clamped to {@link lastIndex}: the final items share the focal range and are all visible at\n * once, so there is no scroll position where any of them leads on its own. Setting a higher\n * value scrolls to the end and reads back as `lastIndex`.\n */\n public index = model<number>(0);\n\n /** Items projected into the carousel, in document order. */\n public readonly items = contentChildren<CarouselItem>(CarouselItem, { descendants: true });\n\n /**\n * Whether the current layout brings items to rest on keylines.\n *\n * Decided by the layout, not by the consumer: an arrangement that resizes items only reads\n * correctly when they are sitting on keylines.\n */\n public readonly snap = computed<boolean>(() => CAROUSEL_STRATEGIES[this.carouselLayout()].snap);\n\n private scroller = viewChild.required<ElementRef<HTMLDivElement>>('scroller');\n\n private containerSize = signal<number>(0);\n\n private readonly directionality = inject(Directionality, { optional: true });\n\n /**\n * Sizes handed to the solver.\n *\n * Gaps are folded into item sizes so the solver only has one quantity to balance, then\n * removed again visually by insetting each item half a gap on both sides.\n */\n private readonly metrics = computed(() => {\n const gap = this.gap();\n\n return {\n gap,\n itemSize: this.itemSize() + gap,\n smallSizeMin: this.smallItemSizeMin() + gap,\n smallSizeMax: this.smallItemSizeMax() + gap,\n };\n });\n\n /** The solved distribution of large, medium and small items for the current container. */\n public readonly arrangement = computed<CarouselArrangement | undefined>(() => {\n const containerSize = this.containerSize();\n const itemCount = this.items().length;\n const { itemSize, smallSizeMin, smallSizeMax } = this.metrics();\n\n if (containerSize <= 0 || itemCount === 0 || itemSize <= 0) {\n return undefined;\n }\n\n return CAROUSEL_STRATEGIES[this.carouselLayout()].arrange({\n containerSize,\n itemSize,\n smallSizeMin,\n smallSizeMax,\n itemCount,\n alignment: this.alignment(),\n });\n });\n\n /** Keyline geometry derived from the arrangement. */\n public readonly geometry = computed<CarouselGeometry | undefined>(() => {\n const arrangement = this.arrangement();\n\n if (!arrangement) {\n return undefined;\n }\n\n return buildGeometry(arrangement, this.alignment(), this.items().length, this.containerSize());\n });\n\n /** Scroll offsets that items snap to, one per item. */\n protected readonly snapPoints = computed<number[]>(() => {\n const geometry = this.geometry();\n\n if (!geometry) {\n return [];\n }\n\n return this.items().map((_, index) => scrollOffsetForIndex(geometry, index));\n });\n\n /**\n * Highest index the carousel can rest on.\n *\n * Lower than the last item's index, because the trailing items share the focal range once\n * the carousel is scrolled to the end. It moves as the container is resized, since a wider\n * container fits more items in the focal range.\n */\n public readonly lastIndex = computed<number>(() => this.geometry()?.lastIndex ?? 0);\n\n /**\n * Height implied by `aspect-ratio`, in pixels, or `undefined` when CSS owns the height.\n *\n * Measured against a focal item's visible width — the solved item size less the gap — so a\n * fully unmasked item matches the requested ratio exactly. Masked items keep this height and\n * crop horizontally, which is what the Material Design arrangement expects.\n */\n public readonly resolvedHeight = computed<number | undefined>(() => {\n const ratio = this.aspectRatio();\n const geometry = this.geometry();\n\n if (!ratio || !geometry) {\n return undefined;\n }\n\n return (geometry.itemSize - this.metrics().gap) / ratio;\n });\n\n public readonly atStart = computed<boolean>(() => this.index() <= 0);\n\n /** True when the carousel cannot scroll any further towards the end. */\n public readonly atEnd = computed<boolean>(() => this.index() >= this.lastIndex());\n\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private scrollEndTimer: ReturnType<typeof setTimeout> | undefined;\n private frame = 0;\n\n /**\n * Target of an in-flight programmatic scroll.\n *\n * Smooth scrolling reports intermediate offsets, and reading the index back from those would\n * fight the animation, so index syncing pauses until the target is reached or the user takes\n * over.\n */\n private pendingScroll: number | undefined;\n\n constructor(private el: ElementRef<HTMLElement>) {\n // ResizeObserver alone would leave the carousel unmeasured until its first callback, so\n // take an initial measurement as soon as the view exists.\n afterNextRender(() => this.measure());\n\n effect((onCleanup) => {\n if (!this.isBrowser) {\n return;\n }\n\n const observer = new ResizeObserver(() => this.measure());\n observer.observe(this.element);\n\n onCleanup(() => observer.disconnect());\n });\n\n effect((onCleanup) => {\n if (!this.isBrowser) {\n return;\n }\n\n const scroller = this.scroller().nativeElement;\n\n const onScroll = () => this.scheduleGeometry();\n const onScrollEnd = () => this.syncIndexFromScroll();\n const onInteract = () => {\n this.pendingScroll = undefined;\n };\n\n scroller.addEventListener('scroll', onScroll, { passive: true });\n scroller.addEventListener('scrollend', onScrollEnd);\n scroller.addEventListener('pointerdown', onInteract, { passive: true });\n scroller.addEventListener('wheel', onInteract, { passive: true });\n scroller.addEventListener('touchstart', onInteract, { passive: true });\n\n onCleanup(() => {\n clearTimeout(this.scrollEndTimer);\n cancelAnimationFrame(this.frame);\n scroller.removeEventListener('scroll', onScroll);\n scroller.removeEventListener('scrollend', onScrollEnd);\n scroller.removeEventListener('pointerdown', onInteract);\n scroller.removeEventListener('wheel', onInteract);\n scroller.removeEventListener('touchstart', onInteract);\n });\n });\n\n // Re-place every item whenever the arrangement or the item list changes. Reading the\n // signals here is what registers the dependency.\n effect(() => {\n this.geometry();\n this.items();\n this.applyGeometry();\n });\n\n // Derive the height from the solved item width so items keep their shape as the\n // container resizes. Changing the height cannot feed back into the arrangement, which\n // only depends on the container's width, so this settles in one pass.\n effect(() => {\n const height = this.resolvedHeight();\n\n if (height === undefined) {\n this.element.style.removeProperty('--md3-carousel-aspect-height');\n return;\n }\n\n this.element.style.setProperty('--md3-carousel-aspect-height', `${height}px`);\n });\n\n // Follow the index when it is set from outside, but not while the user is scrolling —\n // `syncIndexFromScroll` only writes a value the DOM already agrees with.\n effect(() => {\n const index = this.index();\n const geometry = this.geometry();\n\n if (!geometry || !this.isBrowser) {\n return;\n }\n\n // A resize changes how many items share the focal range, so an index that was\n // reachable before may no longer be.\n const clamped = clampIndex(geometry, index);\n\n if (clamped !== index) {\n this.index.set(clamped);\n return;\n }\n\n const target = scrollOffsetForIndex(geometry, clamped);\n\n if (Math.abs(this.scrollOffset() - target) > 1) {\n this.scrollTo(target, 'smooth');\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n /** True when laid out right-to-left. */\n protected get isRtl(): boolean {\n return this.directionality?.value === 'rtl'\n || getComputedStyle(this.element).direction === 'rtl';\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n // Arrow keys are direction-agnostic here: ArrowRight always moves towards the visual\n // right, which under RTL is the previous item.\n const forward = this.isRtl ? 'ArrowLeft' : 'ArrowRight';\n const backward = this.isRtl ? 'ArrowRight' : 'ArrowLeft';\n\n switch (event.key) {\n case forward:\n this.next();\n break;\n case backward:\n this.previous();\n break;\n case 'Home':\n this.scrollToIndex(0);\n break;\n case 'End':\n this.scrollToIndex(this.lastIndex());\n break;\n default:\n return;\n }\n\n event.preventDefault();\n }\n\n /**\n * Keeps a focused item in view.\n *\n * Items are absolutely positioned, so the browser cannot scroll them into view on its own.\n * Without this, tabbing to a link inside a cropped item would leave it invisible.\n */\n @HostListener('focusin', ['$event'])\n protected onFocusIn(event: FocusEvent): void {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n const index = this.items().findIndex((item) => item.element.contains(target));\n\n if (index >= 0 && index !== this.index()) {\n this.scrollToIndex(index);\n }\n }\n\n /** Scrolls until `index` leads the focal range, clamping to {@link lastIndex}. */\n public scrollToIndex(index: number, behavior: ScrollBehavior = 'smooth'): void {\n const geometry = this.geometry();\n\n if (!geometry) {\n return;\n }\n\n const clamped = clampIndex(geometry, index);\n\n this.index.set(clamped);\n this.scrollTo(scrollOffsetForIndex(geometry, clamped), behavior);\n }\n\n public next(): void {\n this.scrollToIndex(this.index() + 1);\n }\n\n public previous(): void {\n this.scrollToIndex(this.index() - 1);\n }\n\n private measure(): void {\n if (!this.isBrowser) {\n return;\n }\n\n this.containerSize.set(this.scroller().nativeElement.clientWidth);\n }\n\n /**\n * Current scroll position as a positive offset from the logical start edge.\n *\n * Right-to-left scroll containers report `scrollLeft` as zero at the start and negative\n * moving away from it, so the magnitude is the logical offset in both directions.\n */\n private scrollOffset(): number {\n return Math.abs(this.scroller().nativeElement.scrollLeft);\n }\n\n private scrollTo(offset: number, behavior: ScrollBehavior): void {\n if (!this.isBrowser) {\n return;\n }\n\n const reduceMotion = matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n this.pendingScroll = offset;\n this.scroller().nativeElement.scrollTo({\n left: this.isRtl ? -offset : offset,\n behavior: reduceMotion ? 'auto' : behavior,\n });\n\n this.scheduleIndexSync();\n }\n\n private scheduleGeometry(): void {\n if (this.frame) {\n return;\n }\n\n this.frame = requestAnimationFrame(() => {\n this.frame = 0;\n this.applyGeometry();\n });\n\n this.scheduleIndexSync();\n }\n\n /** `scrollend` is not universally supported, so back it with a timer. */\n private scheduleIndexSync(): void {\n clearTimeout(this.scrollEndTimer);\n this.scrollEndTimer = setTimeout(() => this.syncIndexFromScroll(), SCROLL_END_FALLBACK);\n }\n\n private syncIndexFromScroll(): void {\n const geometry = this.geometry();\n\n if (!geometry || !this.isBrowser) {\n return;\n }\n\n const offset = this.scrollOffset();\n\n // Wait for a programmatic scroll to land rather than reading the index off an\n // intermediate frame of the animation.\n if (this.pendingScroll !== undefined) {\n if (Math.abs(offset - this.pendingScroll) > 1) {\n return;\n }\n\n this.pendingScroll = undefined;\n }\n\n // Once the final items share the focal range they also share a scroll offset, so an\n // index that already resolves to this offset is left alone.\n if (Math.abs(scrollOffsetForIndex(geometry, this.index()) - offset) <= 1) {\n return;\n }\n\n const index = indexForScrollOffset(geometry, offset);\n\n if (index !== this.index()) {\n this.index.set(index);\n }\n }\n\n /**\n * Writes the current placement of every item.\n *\n * Runs on every scroll frame, so it touches the DOM directly and allocates nothing beyond\n * the resolved state.\n */\n private applyGeometry(): void {\n const geometry = this.geometry();\n const items = this.items();\n\n if (!geometry) {\n return;\n }\n\n const style = this.element.style;\n style.setProperty('--md3-carousel-scroll-size', `${geometry.scrollSize}px`);\n style.setProperty('--md3-carousel-viewport-size', `${this.containerSize()}px`);\n style.setProperty('--md3-carousel-gap', `${this.metrics().gap}px`);\n\n const scrollOffset = this.scrollOffset();\n const state = resolveState(geometry, scrollOffset);\n const itemCount = items.length;\n\n items.forEach((item, index) => {\n item.applyGeometry(\n resolveItemGeometry(geometry, state, index, scrollOffset),\n geometry.itemSize,\n );\n\n const label = `${index + 1} of ${itemCount}`;\n\n if (item.element.getAttribute('aria-label') !== label) {\n item.element.setAttribute('aria-label', label);\n }\n });\n }\n}\n","<div #scroller class=\"md3-carousel-scroller\" tabindex=\"0\" [class.md3-snap]=\"snap()\">\n <div class=\"md3-carousel-content\">\n <div class=\"md3-carousel-viewport\">\n <ng-content></ng-content>\n </div>\n\n @for (point of snapPoints(); track $index) {\n <div class=\"md3-carousel-snap\" aria-hidden=\"true\" [style.inset-inline-start.px]=\"point\"></div>\n }\n </div>\n</div>\n","import { booleanAttribute, Component, computed, contentChild, contentChildren, Directive, effect, ElementRef, input, Input, output } from '@angular/core';\nimport { MaterialIcon } from '../common/material-icon/material-icon';\nimport { StateComponent } from '../common/state-component';\nimport { ChipType } from '../../types/chip-type.type';\nimport { IconElement } from '../common/icon-element';\nimport { ChipStyle } from '../../types/chip-style.type';\n\n@Directive({\n selector: '[md3-chip-avatar]'\n})\nexport class ChipAvatar {}\n\n@Component({\n selector: 'button[md3-chip], a[md3-chip], label[md3-chip]',\n imports: [\n StateComponent,\n MaterialIcon,\n ],\n templateUrl: './chips.html',\n styleUrl: './chips.scss',\n})\nexport class Chips {\n public chipType = input<ChipType>('assist', {\n alias: 'chip-type',\n });\n\n public chipStyle = input<ChipStyle>('default', {\n alias: 'chip-style',\n });\n\n public trailingFunction = output<void>({\n alias: 'on-trailing',\n });\n\n protected onTrailingClick(event: Event): void {\n event.stopPropagation();\n this.trailingFunction.emit();\n }\n\n private avatar = contentChild(ChipAvatar);\n private iconElements = contentChildren(IconElement);\n\n public hasSurface = input<boolean, unknown>(false, {\n alias: 'surface',\n transform: booleanAttribute,\n });\n\n public isElevated = input<boolean, unknown>(false, {\n alias: 'elevated',\n transform: booleanAttribute,\n });\n\n public leading = computed(() => this.iconElements().find((icon) => icon.iconType() === 'leading'));\n public trailing = computed(() => this.iconElements().find((icon) => icon.iconType() === 'trailing'));\n public isSelectable = computed(() => this.chipType() != 'assist');\n public showCheckIcon = computed(() => !this.leading() && this.chipType() == 'filter');\n public hasAvatar = computed(() => this.avatar() != undefined && this.chipType() == 'input');\n public hasRemove = computed(() => this.chipType() == 'input');\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const type = 'md3-' + this.chipType();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect((onCleanup) => {\n const style = 'md3-' + this.chipStyle();\n this.element.classList.add(style);\n\n onCleanup(() => {\n this.element.classList.remove(style);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}","@if (isSelectable()) {\n <ng-content select=\"[md3-input-element]\"></ng-content>\n}\n<div class=\"md3-chip-container\" md3-state-component>\n <div class=\"md3-chip-leading\" [class.has-icon]=\"leading()\" [class.has-avatar]=\"hasAvatar()\">\n <ng-content select=\"[md3-icon-element=leading], [md3-chip-avatar]\"></ng-content>\n @if (showCheckIcon()) {\n <md3-icon [icon-size]=\"18\" md3-icon-element=\"leading\">check</md3-icon>\n }\n </div>\n <div class=\"md3-chip-label\">\n <ng-content></ng-content>\n </div>\n @if (hasRemove() || trailing()) {\n <button class=\"md3-chip-trailing\" md3-state-component [class.has-icon]=\"trailing()\" (click)=\"onTrailingClick($event)\">\n <ng-content select=\"[md3-icon-element=trailing]\"></ng-content>\n\n @if (hasRemove() && !trailing()) {\n <md3-icon [icon-size]=\"18\" md3-icon-element=\"trailing\">close</md3-icon>\n }\n </button>\n }\n</div>","import { booleanAttribute, Component, computed, contentChild, effect, input, signal, Signal, viewChild } from '@angular/core';\nimport { AbstractControl, FormControlName } from '@angular/forms';\nimport { fromEvent } from 'rxjs';\nimport { InputElement } from '../../common/input-element';\nimport { MaterialIcon } from '../../common/material-icon/material-icon';\nimport { StateComponent } from '../../common/state-component';\n\n@Component({\n selector: 'md3-checkbox',\n imports: [\n MaterialIcon,\n StateComponent,\n ],\n templateUrl: './checkbox.html',\n styleUrl: './checkbox.scss',\n})\nexport class Checkbox {\n public control = input<AbstractControl | undefined>(undefined, {\n alias: 'control',\n });\n\n private stateComponent = viewChild<StateComponent>(StateComponent);\n private input = contentChild(InputElement);\n private controlName = contentChild(FormControlName);\n private controlError = signal(false);\n private nativeInputError = signal(false);\n\n public disableStateLayer = input<boolean, unknown>(false, {\n alias: 'disable-state-layer',\n transform: booleanAttribute\n });\n\n protected checkboxIcon: 'check_small' | 'check_indeterminate_small' = 'check_small';\n public state = signal<boolean | null>(false);\n\n protected formControl = computed<AbstractControl | undefined>(() => this.control() ?? this.controlName()?.control);\n\n private inputError = computed<boolean>(() => {\n const control = this.formControl();\n if (control) {\n this.controlError();\n return this.hasControlError(control);\n }\n\n const input = this.input()?.nativeElement;\n if (!input) {\n return false;\n }\n\n this.nativeInputError();\n return this.hasNativeInputError(input);\n });\n\n private inputDisabledState = signal<boolean>(false);\n public isDisabled = computed<boolean>(() => this.inputDisabledState());\n\n constructor() {\n effect(() => {\n this.stateComponent()?.setStateLayer(!this.disableStateLayer());\n });\n\n effect((onCleanup) => {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n this.syncInitialState(input);\n this.syncNativeInputState(input);\n\n const inputEvents = fromEvent(input, 'change').subscribe(() => {\n this.syncStateFromInput(input);\n this.syncControlFromState(this.state());\n this.syncNativeInputState(input);\n });\n\n const observer = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(() => {\n if (!this.formControl()) {\n this.syncStateFromInput(input);\n }\n\n this.syncNativeInputState(input);\n });\n observer?.observe(input, {\n attributes: true,\n attributeFilter: ['aria-invalid', 'checked', 'disabled', 'required'],\n });\n\n onCleanup(() => {\n inputEvents.unsubscribe();\n observer?.disconnect();\n });\n });\n\n effect((onCleanup) => {\n const control = this.formControl();\n if (!control) {\n this.controlError.set(false);\n return;\n }\n\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n\n const controlEvents = control.events.subscribe(() => {\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n });\n\n onCleanup(() => controlEvents.unsubscribe());\n });\n\n effect(() => {\n this.syncAriaInvalidAttribute(this.input()?.nativeElement);\n });\n }\n\n private syncInitialState(input: HTMLInputElement): void {\n const control = this.formControl();\n if (control) {\n this.syncStateFromControl(control);\n return;\n }\n\n this.syncStateFromInput(input);\n }\n\n private updateState(state: boolean | null = false): void {\n this.checkboxIcon = state === null\n ? 'check_indeterminate_small'\n : 'check_small';\n\n this.state.set(state);\n }\n\n private syncStateFromInput(input: HTMLInputElement): void {\n this.updateState(input.indeterminate ? null : input.checked);\n }\n\n private syncInputFromState(state: boolean | null = false): void {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n const indeterminate = state === null;\n const checked = state === true;\n\n if (input.indeterminate !== indeterminate) {\n input.indeterminate = indeterminate;\n }\n\n if (input.checked !== checked) {\n input.checked = checked;\n }\n }\n\n private syncControlFromState(state: boolean | null = false): void {\n const control = this.formControl();\n if (!control || control.value === state) {\n return;\n }\n\n control.setValue(state);\n }\n\n private syncStateFromControl(control: AbstractControl): void {\n const controlState = control.value === null\n ? null\n : control.value === true;\n\n this.updateState(controlState);\n this.syncInputFromState(controlState);\n }\n\n private syncNativeInputState(input: HTMLInputElement): void {\n this.nativeInputError.set(this.hasNativeInputError(input));\n this.inputDisabledState.set(input.disabled);\n }\n\n private syncControlError(control: AbstractControl): void {\n this.controlError.set(this.hasControlError(control));\n }\n\n private syncInputDisabledState(control: AbstractControl): void {\n const input = this.input()?.nativeElement;\n if (input && input.disabled !== control.disabled) {\n input.disabled = control.disabled;\n }\n }\n\n private hasNativeInputError(input: HTMLInputElement): boolean {\n return !input.validity.valid || input.ariaInvalid === 'true';\n }\n\n private hasControlError(control: AbstractControl): boolean {\n return control.invalid && (control.touched || control.dirty);\n }\n\n private syncAriaInvalidAttribute(input: HTMLInputElement | undefined): void {\n const value = this.inputError() ? 'true' : 'false';\n if (input && input.getAttribute('aria-invalid') !== value) {\n input.setAttribute('aria-invalid', value);\n }\n }\n\n}\n","<ng-content select=\"[md3-input-element]\"></ng-content>\n<div md3-state-component class=\"md3-checkbox-container\">\n <div class=\"md3-checkbox-icon\">\n <md3-icon>{{ checkboxIcon }}</md3-icon>\n </div>\n</div>\n","import { booleanAttribute, Component, computed, contentChild, effect, input, signal, viewChild } from '@angular/core';\nimport { AbstractControl, FormControlName } from '@angular/forms';\nimport { fromEvent } from 'rxjs';\nimport { InputElement } from '../../common/input-element';\nimport { StateComponent } from '../../common/state-component';\n\n@Component({\n selector: 'md3-radio-button',\n imports: [\n StateComponent\n ],\n templateUrl: './radio-button.html',\n styleUrl: './radio-button.scss',\n})\nexport class RadioButton {\n public control = input<AbstractControl | undefined>(undefined, {\n alias: 'control',\n });\n\n private stateComponent = viewChild<StateComponent>(StateComponent);\n private input = contentChild(InputElement);\n private controlName = contentChild(FormControlName);\n private controlError = signal(false);\n private nativeInputError = signal(false);\n\n public disableStateLayer = input<boolean, unknown>(false, {\n alias: 'disable-state-layer',\n transform: booleanAttribute\n });\n\n public state = signal<boolean>(false);\n\n protected formControl = computed<AbstractControl | undefined>(() => this.control() ?? this.controlName()?.control);\n\n private inputError = computed<boolean>(() => {\n const control = this.formControl();\n if (control) {\n this.controlError();\n return this.hasControlError(control);\n }\n\n const input = this.input()?.nativeElement;\n if (!input) {\n return false;\n }\n\n this.nativeInputError();\n return this.hasNativeInputError(input);\n });\n\n private inputDisabledState = signal<boolean>(false);\n public isDisabled = computed<boolean>(() => this.inputDisabledState());\n\n constructor() {\n effect(() => {\n this.stateComponent()?.setStateLayer(!this.disableStateLayer());\n });\n\n effect((onCleanup) => {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n this.syncInitialState(input);\n this.syncNativeInputState(input);\n\n const inputEvents = fromEvent(input, 'change').subscribe(() => {\n this.syncStateFromInput(input);\n this.syncControlFromInput(input);\n this.syncNativeInputState(input);\n });\n\n const documentEvents = fromEvent(input.ownerDocument, 'change').subscribe((event) => {\n if (this.isSameRadioGroup(input, event.target)) {\n this.syncStateFromInput(input);\n this.syncNativeInputState(input);\n }\n });\n\n const observer = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(() => {\n if (!this.formControl()) {\n this.syncStateFromInput(input);\n }\n\n this.syncNativeInputState(input);\n });\n observer?.observe(input, {\n attributes: true,\n attributeFilter: ['aria-invalid', 'checked', 'disabled', 'name', 'required', 'value'],\n });\n\n onCleanup(() => {\n inputEvents.unsubscribe();\n documentEvents.unsubscribe();\n observer?.disconnect();\n });\n });\n\n effect((onCleanup) => {\n const control = this.formControl();\n if (!control) {\n this.controlError.set(false);\n return;\n }\n\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n\n const controlEvents = control.events.subscribe(() => {\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n });\n\n onCleanup(() => controlEvents.unsubscribe());\n });\n\n effect(() => {\n this.syncAriaInvalidAttribute(this.input()?.nativeElement);\n });\n }\n\n private syncInitialState(input: HTMLInputElement): void {\n const control = this.formControl();\n if (control) {\n this.syncStateFromControl(control);\n return;\n }\n\n this.syncStateFromInput(input);\n }\n\n private getInputValue(input: HTMLInputElement | undefined = this.input()?.nativeElement): unknown {\n return input?.value ?? true;\n }\n\n private updateState(state: boolean = false): void {\n this.state.set(state);\n }\n\n private syncStateFromInput(input: HTMLInputElement): void {\n this.updateState(input.checked);\n }\n\n private syncInputFromState(state: boolean = false): void {\n const input = this.input()?.nativeElement;\n if (input && input.checked !== state) {\n input.checked = state;\n }\n }\n\n private syncControlFromInput(input: HTMLInputElement): void {\n const control = this.formControl();\n if (!control || !input.checked) {\n return;\n }\n\n const inputValue = this.getInputValue(input);\n if (control.value !== inputValue) {\n control.setValue(inputValue);\n }\n }\n\n private syncStateFromControl(control: AbstractControl): void {\n const controlState = control.value === this.getInputValue();\n\n this.updateState(controlState);\n this.syncInputFromState(controlState);\n }\n\n private isSameRadioGroup(input: HTMLInputElement, target: EventTarget | null): boolean {\n return target instanceof HTMLInputElement\n && target.type === 'radio'\n && target.name === input.name\n && target.form === input.form;\n }\n\n private syncNativeInputState(input: HTMLInputElement): void {\n this.nativeInputError.set(this.hasNativeInputError(input));\n this.inputDisabledState.set(input.disabled);\n }\n\n private syncControlError(control: AbstractControl): void {\n this.controlError.set(this.hasControlError(control));\n }\n\n private syncInputDisabledState(control: AbstractControl): void {\n const input = this.input()?.nativeElement;\n if (input && input.disabled !== control.disabled) {\n input.disabled = control.disabled;\n }\n }\n\n private hasNativeInputError(input: HTMLInputElement): boolean {\n return !input.validity.valid || input.ariaInvalid === 'true';\n }\n\n private hasControlError(control: AbstractControl): boolean {\n return control.invalid && (control.touched || control.dirty);\n }\n\n private syncAriaInvalidAttribute(input: HTMLInputElement | undefined): void {\n const value = this.inputError() ? 'true' : 'false';\n if (input && input.getAttribute('aria-invalid') !== value) {\n input.setAttribute('aria-invalid', value);\n }\n }\n}\n","<ng-content select=\"[md3-input-element]\"></ng-content>\n<div md3-state-component class=\"md3-radio-button-container\">\n <div class=\"md3-radio-button-icon\"></div>\n</div>\n","import { booleanAttribute, Component, computed, contentChild, effect, input, signal, viewChild } from '@angular/core';\nimport { AbstractControl, FormControlName } from '@angular/forms';\nimport { fromEvent } from 'rxjs';\nimport { InputElement } from '../../common/input-element';\nimport { StateComponent } from '../../common/state-component';\n\n@Component({\n selector: 'md3-switch',\n imports: [\n StateComponent\n ],\n templateUrl: './switch.html',\n styleUrl: './switch.scss',\n})\nexport class Switch {\n public control = input<AbstractControl | undefined>(undefined, {\n alias: 'control',\n });\n\n private stateComponent = viewChild<StateComponent>(StateComponent);\n private input = contentChild(InputElement);\n private controlName = contentChild(FormControlName);\n private controlError = signal(false);\n private nativeInputError = signal(false);\n \n public disableStateLayer = input<boolean, unknown>(false, {\n alias: 'disable-state-layer',\n transform: booleanAttribute\n });\n\n public state = signal<boolean>(false);\n\n protected formControl = computed<AbstractControl | undefined>(() => this.control() ?? this.controlName()?.control);\n\n private inputError = computed<boolean>(() => {\n const control = this.formControl();\n if (control) {\n this.controlError();\n return this.hasControlError(control);\n }\n\n const input = this.input()?.nativeElement;\n if (!input) {\n return false;\n }\n\n this.nativeInputError();\n return this.hasNativeInputError(input);\n });\n\n private inputDisabledState = signal<boolean>(false);\n public isDisabled = computed<boolean>(() => {\n console.log('Switch disabled');\n return this.inputDisabledState();\n });\n\n constructor() {\n effect(() => {\n this.stateComponent()?.setStateLayer(!this.disableStateLayer());\n });\n\n effect((onCleanup) => {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n input.setAttribute('role', 'switch');\n this.syncInitialState(input);\n this.syncNativeInputState(input);\n\n const inputEvents = fromEvent(input, 'change').subscribe(() => {\n this.syncStateFromInput(input);\n this.syncControlFromState(this.state());\n this.syncNativeInputState(input);\n });\n\n const observer = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(() => {\n if (!this.formControl()) {\n this.syncStateFromInput(input);\n }\n\n this.syncNativeInputState(input);\n });\n observer?.observe(input, {\n attributes: true,\n attributeFilter: ['aria-invalid', 'checked', 'disabled', 'required'],\n });\n\n onCleanup(() => {\n inputEvents.unsubscribe();\n observer?.disconnect();\n });\n });\n\n effect((onCleanup) => {\n const control = this.formControl();\n if (!control) {\n this.controlError.set(false);\n return;\n }\n\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n\n const controlEvents = control.events.subscribe(() => {\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n });\n\n onCleanup(() => controlEvents.unsubscribe());\n });\n\n effect(() => {\n this.syncAriaInvalidAttribute(this.input()?.nativeElement);\n });\n }\n\n private syncInitialState(input: HTMLInputElement): void {\n const control = this.formControl();\n if (control) {\n this.syncStateFromControl(control);\n return;\n }\n\n this.syncStateFromInput(input);\n }\n\n private updateState(state: boolean = false): void {\n this.state.set(state);\n }\n\n private syncStateFromInput(input: HTMLInputElement): void {\n this.updateState(input.checked);\n }\n\n private syncInputFromState(state: boolean = false): void {\n const input = this.input()?.nativeElement;\n if (input && input.checked !== state) {\n input.checked = state;\n }\n }\n\n private syncControlFromState(state: boolean = false): void {\n const control = this.formControl();\n if (!control || control.value === state) {\n return;\n }\n\n control.setValue(state);\n }\n\n private syncStateFromControl(control: AbstractControl): void {\n const controlState = control.value === true;\n\n this.updateState(controlState);\n this.syncInputFromState(controlState);\n }\n\n private syncNativeInputState(input: HTMLInputElement): void {\n this.nativeInputError.set(this.hasNativeInputError(input));\n this.inputDisabledState.set(input.disabled);\n }\n\n private syncControlError(control: AbstractControl): void {\n this.controlError.set(this.hasControlError(control));\n }\n\n private syncInputDisabledState(control: AbstractControl): void {\n const input = this.input()?.nativeElement;\n if (input && input.disabled !== control.disabled) {\n input.disabled = control.disabled;\n }\n }\n\n private hasNativeInputError(input: HTMLInputElement): boolean {\n return !input.validity.valid || input.ariaInvalid === 'true';\n }\n\n private hasControlError(control: AbstractControl): boolean {\n return control.invalid && (control.touched || control.dirty);\n }\n\n private syncAriaInvalidAttribute(input: HTMLInputElement | undefined): void {\n const value = this.inputError() ? 'true' : 'false';\n if (input && input.getAttribute('aria-invalid') !== value) {\n input.setAttribute('aria-invalid', value);\n }\n }\n}\n","<ng-content select=\"[md3-input-element]\"></ng-content>\n<div md3-state-component class=\"md3-track-container\">\n <div class=\"md3-track\">\n <div class=\"md3-handle-container\">\n <div class=\"md3-handle\">\n <ng-content select=\"[md3-icon-element]\"></ng-content>\n </div>\n </div>\n </div>\n</div>\n","import { Component, computed, contentChild, effect, ElementRef, input, signal } from '@angular/core';\nimport { AbstractControl, FormControlName } from '@angular/forms';\nimport { fromEvent, merge } from 'rxjs';\nimport { InputElement } from '../common/input-element';\nimport { TypeBody } from '../../styles/typography/type-body';\nimport { SliderSize } from '../../types/slider-size.type';\n\n@Component({\n selector: 'md3-slider',\n imports: [\n TypeBody,\n ],\n templateUrl: './slider.html',\n styleUrl: './slider.scss',\n})\nexport class Slider {\n public control = input<AbstractControl | undefined>(undefined, {\n alias: 'control',\n });\n public sliderSize = input<SliderSize>('x-small', {\n alias: 'slider-size',\n });\n public showValueLabel = input<boolean>(false, {\n alias: 'show-value-label'\n });\n\n private input = contentChild<InputElement>(InputElement);\n private controlName = contentChild<FormControlName>(FormControlName);\n\n public value = signal<number>(0);\n public min = signal<number>(0);\n public max = signal<number>(100);\n public progress = signal<number>(0);\n\n protected formControl = computed<AbstractControl | undefined>(() => this.control() ?? this.controlName()?.control);\n\n constructor(private el: ElementRef<HTMLElement>) {\n effect((onCleanup) => {\n const size = 'md3-' + this.sliderSize();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect(() => {\n this.element.style.setProperty('--slider-progress', `${this.progress()}%`);\n });\n\n effect((onCleanup) => {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n this.syncInitialState(input);\n\n const inputEvents = merge(\n fromEvent(input, 'input'),\n fromEvent(input, 'change'),\n ).subscribe(() => {\n this.syncStateFromInput(input);\n this.syncControlFromState(this.value());\n });\n\n onCleanup(() => inputEvents.unsubscribe());\n });\n\n effect((onCleanup) => {\n const control = this.formControl();\n if (!control) {\n return;\n }\n\n this.syncStateFromControl(control);\n this.syncInputDisabledState(control);\n\n const controlEvents = control.events.subscribe(() => {\n this.syncStateFromControl(control);\n this.syncInputDisabledState(control);\n });\n\n onCleanup(() => controlEvents.unsubscribe());\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n private syncInitialState(input: HTMLInputElement): void {\n const control = this.formControl();\n if (control) {\n this.syncStateFromControl(control);\n return;\n }\n\n this.syncStateFromInput(input);\n }\n\n private updateState(value: number = 0): void {\n let min = this.min();\n let max = this.max();\n let range = max - min;\n let nextValue = Number.isFinite(value) ? value : min;\n let progress = range === 0\n ? 0\n : ((nextValue - min) / range) * 100;\n\n this.value.set(nextValue);\n this.progress.set(Math.min(100, Math.max(0, progress)));\n }\n\n private syncLimitsFromInput(input: HTMLInputElement | undefined = this.input()?.nativeElement): void {\n if (!input) {\n return;\n }\n\n let min = input.min === ''\n ? 0\n : Number(input.min);\n let max = input.max === ''\n ? 100\n : Number(input.max);\n\n this.min.set(Number.isFinite(min) ? min : 0);\n this.max.set(Number.isFinite(max) ? max : 100);\n }\n\n private syncStateFromInput(input: HTMLInputElement | undefined = this.input()?.nativeElement): void {\n if (!input) {\n return;\n }\n\n this.syncLimitsFromInput(input);\n this.updateState(input.valueAsNumber);\n }\n\n private syncInputFromState(value: number = 0): void {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n input.valueAsNumber = value;\n }\n\n private syncControlFromState(value: number = 0): void {\n const control = this.formControl();\n if (!control || control.value === value) {\n return;\n }\n\n control.setValue(value);\n }\n\n private syncStateFromControl(control: AbstractControl): void {\n let controlValue = Number(control.value ?? this.min());\n\n this.syncLimitsFromInput();\n this.updateState(controlValue);\n this.syncInputFromState(controlValue);\n }\n\n private syncInputDisabledState(control: AbstractControl): void {\n const input = this.input()?.nativeElement;\n if (input && input.disabled !== control.disabled) {\n input.disabled = control.disabled;\n }\n }\n}\n","<ng-content select=\"[md3-input-element]\"></ng-content>\n<div class=\"md3-slider-container\">\n <div class=\"md3-slider-track\">\n <div class=\"md3-active-track\">\n <div class=\"md3-track-bar\">\n <div class=\"md3-icon-container\">\n <ng-content select=\"[md3-icon-element]\"></ng-content>\n </div>\n </div>\n </div>\n <div class=\"md3-inactive-track\">\n <div class=\"md3-track-bar\"></div>\n </div>\n </div>\n <div class=\"md3-slider-handle\">\n @if (showValueLabel()) {\n <div class=\"md3-value-label\">\n <md3-type-body size=\"medium\">{{ value() }}</md3-type-body>\n </div>\n }\n </div>\n</div>\n","import { Component, effect, ElementRef, input } from '@angular/core';\n\n@Component({\n selector: 'md3-list',\n templateUrl: './list.html',\n styleUrl: './list.scss',\n})\nexport class List {\n public variant = input<'expressive' | 'baseline'>('expressive');\n public type = input<'standard' | 'segmented'>('standard');\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const variant = 'md3-' + this.variant();\n this.element.classList.add(variant);\n\n onCleanup(() => {\n this.element.classList.remove(variant);\n });\n });\n\n effect((onCleanup) => {\n const type = 'md3-' + this.type();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","<ng-content></ng-content>","import { AfterViewInit, booleanAttribute, Component, computed, contentChild, Directive, effect, ElementRef, HostListener, input } from '@angular/core';\nimport { StateComponent } from '../../common/state-component';\nimport { Checkbox } from '../../selection-controls/checkbox/checkbox';\nimport { RadioButton } from '../../selection-controls/radio-button/radio-button';\nimport { Switch } from '../../selection-controls/switch/switch';\n\n@Directive({\n selector: 'button[md3-item-primary-action], a[md3-item-primary-action]',\n host: {\n 'class': 'md3-item-primary-action',\n },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class ListItemPrimaryAction {\n}\n\n@Component({\n selector: 'md3-list-item, label[md3-list-item], button[md3-list-item], a[md3-list-item]',\n templateUrl: './list-item.html',\n styleUrl: './list-item.scss',\n host: {\n '[class.md3-selected]': 'isSelected()',\n },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class ListItem implements AfterViewInit {\n public slotsAlignment = input<'start' | 'center' | 'end'>('center', {\n alias: 'slots-alignment',\n });\n public selected = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n public isActionTag: boolean = false;\n private isLabelTag: boolean = false;\n private checkbox = contentChild(Checkbox);\n private radioButton = contentChild(RadioButton);\n private switch = contentChild(Switch);\n\n public isSelected = computed(() => {\n const checkbox = this.checkbox();\n const radioButton = this.radioButton();\n\n if (checkbox || radioButton) {\n return (checkbox?.state() || radioButton?.state()) === true;\n }\n\n return this.selected();\n });\n\n public isInputDisabled = computed(() => {\n return this.checkbox()?.isDisabled() || this.radioButton()?.isDisabled() || this.switch()?.isDisabled();\n });\n\n constructor(\n private el: ElementRef,\n private state: StateComponent\n ) {\n effect((onCleanup) => {\n const alignment = 'md3-slots-alignment-' + this.slotsAlignment();\n this.element.classList.add(alignment);\n\n onCleanup(() => {\n this.element.classList.remove(alignment);\n });\n });\n\n effect(() => {\n if (this.isInputDisabled()) {\n this.state.setStateLayer(false);\n this.element.classList.add('md3-disabled');\n } else {\n this.state.setStateLayer(true);\n this.element.classList.remove('md3-disabled');\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n ngAfterViewInit(): void {\n let tagName = this.element.tagName.toLowerCase();\n\n this.isLabelTag = tagName == 'label';\n\n if (this.isLabelTag) {\n this.element.setAttribute('tabindex', '0');\n this.setLabelInputTabIndex();\n }\n\n this.isActionTag = tagName != 'md3-list-item';\n \n if (!this.isActionTag) {\n this.state.setStateLayer(false);\n }\n }\n\n @HostListener('focusin', ['$event'])\n protected onFocusIn(event: FocusEvent): void {\n if (!this.isLabelTag || event.target === this.element || !this.isInputElement(event.target)) {\n return;\n }\n\n this.focusLabel();\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(event: KeyboardEvent): void {\n if (!this.isLabelTag || event.target !== this.element || event.defaultPrevented) {\n return;\n }\n\n if (event.key !== ' ' && event.key !== 'Enter') {\n return;\n }\n\n const input = this.getLabelActivationInput();\n\n if (!input) {\n return;\n }\n\n event.preventDefault();\n input.click();\n this.focusLabel();\n }\n\n private setLabelInputTabIndex(): void {\n this.getLabelInputs().forEach((input) => input.tabIndex = -1);\n }\n\n private getLabelActivationInput(): HTMLInputElement | undefined {\n return this.getLabelInputs().find((input) => {\n return !input.disabled && (input.type === 'checkbox' || input.type === 'radio');\n }) ?? this.getLabelInputs().find((input) => !input.disabled);\n }\n\n private getLabelInputs(): HTMLInputElement[] {\n return Array.from(this.element.querySelectorAll<HTMLInputElement>('input'));\n }\n\n private focusLabel(): void {\n this.element.focus({ preventScroll: true });\n }\n\n private isInputElement(target: EventTarget | null): target is HTMLInputElement {\n return target instanceof HTMLInputElement;\n }\n}\n","<ng-content select=\"[md3-item-primary-action]\"></ng-content>\n<ng-content select=\"md3-list-leading\"></ng-content>\n<ng-content select=\"[md3-list-slot=content]\"></ng-content>\n<ng-content select=\"[md3-list-slot=trailing]\"></ng-content>","import { Component, effect, ElementRef, input } from '@angular/core';\nimport { ListLeadingType } from '../../../types/list-leading-type.type';\nimport { ListLeadingSize } from '../../../types/list-leading-size.type';\n\n@Component({\n selector: 'md3-list-leading',\n templateUrl: './list-leading.html',\n styleUrl: './list-leading.scss',\n})\nexport class ListLeading {\n public type = input<ListLeadingType>('icon');\n public size = input<ListLeadingSize>('image');\n\n constructor(\n private el: ElementRef,\n ) {\n effect((onCleanup) => {\n const type = 'md3-type-' + this.type();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect((onCleanup) => {\n const size = 'md3-size-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","<ng-content></ng-content>","import { Directive, ElementRef, input } from '@angular/core';\n\n@Directive({\n selector: '[md3-list-slot]',\n host: {\n '[attr.md3-list-slot]': 'position()',\n },\n})\nexport class ListSlot {\n public position = input.required<'content' | 'trailing'>({\n alias: 'md3-list-slot',\n });\n\n constructor(private el: ElementRef) { }\n\n public get nativeElement(): HTMLElement {\n return this.el.nativeElement;\n }\n}\n","import { Component, computed, ElementRef, input, Input } from '@angular/core';\n\n@Component({\n selector: 'md3-loading-indicator',\n imports: [],\n templateUrl: './loading-indicator.html',\n styleUrl: './loading-indicator.scss',\n})\nexport class LoadingIndicator {\n public contained = input<boolean>(false);\n public size = input<number>(48);\n\n public dpSize = computed(() => {\n const fontSize = this.getHostFontSize();\n return Number((this.size() / fontSize).toFixed(4));\n });\n\n constructor(\n private el: ElementRef,\n ) {\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n private getHostFontSize(): number {\n if (typeof getComputedStyle === 'undefined') {\n return 16;\n }\n\n return Number.parseFloat(getComputedStyle(this.element).fontSize) || 16;\n }\n}\n","<div class=\"md3-indicator-indeterminate\" [class.md3-contained]=\"contained()\" [style]=\"'--size: '+dpSize()+'em'\">\n <svg viewBox=\"0 0 48 48\" class=\"md3-indicator-svg\">\n <path class=\"md3-indicator-shape\"></path>\n </svg>\n</div>","import { Component, computed, input } from '@angular/core';\n\n@Component({\n selector: 'md3-linear-progress-indicator',\n imports: [],\n templateUrl: './linear-progress-indicator.html',\n styleUrl: './linear-progress-indicator.scss',\n})\nexport class LinearProgressIndicator {\n public indeterminate = input<boolean>(false);\n public thickness = input<4 | 8>(4);\n public progress = input<number>(0);\n\n public progressValue = computed(() => {\n const progress = this.progress();\n if (progress < 0) {\n return 0;\n }\n\n if (progress > 100) {\n return 100;\n }\n\n return progress;\n });\n\n constructor() {\n }\n}\n","<div class=\"md3-linear-indicator\" [class.md3-thickness-8dp]=\"thickness() == 8\" [class.md3-indeterminate]=\"indeterminate()\" [style.--progress]=\"progressValue() + '%'\">\n <div class=\"md3-track\"></div>\n <div class=\"md3-active-indicator\"></div>\n @if (indeterminate()) {\n <div class=\"md3-track-secondary\"></div>\n <div class=\"md3-active-indicator-secondary\"></div>\n }\n</div>","import { Component, computed, input } from '@angular/core';\n\n@Component({\n selector: 'md3-circular-progress-indicator',\n imports: [],\n templateUrl: './circular-progress-indicator.html',\n styleUrl: './circular-progress-indicator.scss',\n})\nexport class CircularProgressIndicator {\n public indeterminate = input<boolean>(false);\n public thickness = input<4 | 8>(4);\n public progress = input<number>(0);\n\n public progressValue = computed(() => {\n const progress = this.progress();\n if (progress < 0) {\n return 0;\n }\n\n if (progress > 100) {\n return 100;\n }\n\n return progress;\n });\n\n constructor() {\n }\n}\n","<div class=\"md3-indicator-container\" [class.md3-thickness-8dp]=\"thickness() == 8\" [class.md3-indeterminate]=\"indeterminate()\" [style.--progress]=\"progressValue()\">\n <svg class=\"md3-circlar-indicator\">\n <circle class=\"md3-track\" pathLength=\"100\"></circle>\n <circle class=\"md3-active-indicator\" pathLength=\"100\"></circle>\n </svg>\n</div>","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[md3-app-bar-logo]',\n})\nexport class AppBarLogo {\n}\n","import { booleanAttribute, Component, computed, contentChild, effect, ElementRef, input, Signal, signal } from '@angular/core';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../interfaces/button-context.interface';\nimport { ButtonSize } from '../../types/button-size.type';\nimport { Avatar } from '../common/avatar';\nimport { LayoutService } from '../../foundations/layout.service';\nimport { AppBarLogo } from './app-bar-logo';\nimport { TypeDisplay, TypeHeadline, TypeTitle } from '../../../public-api';\n\nexport type AppBarType = 'small' | 'medium' | 'large' | 'search';\nexport type AppBarScrollingStyle = 'none' | 'transparent' | 'elevate';\n\n@Component({\n selector: 'md3-app-bar',\n imports: [\n TypeHeadline,\n TypeTitle,\n TypeDisplay,\n ],\n templateUrl: './app-bar.html',\n styleUrl: './app-bar.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: AppBar,\n },\n ],\n host: {\n role: 'banner',\n '[class.md3-scrolled]': 'mainIsScrolled()',\n '[class.md3-auto-hide]': 'autoHide()',\n '[class.md3-scrolling-down]': 'isScrollingDown()',\n },\n})\nexport class AppBar implements ButtonContext {\n public title = input<string | null>(null, {\n alias: 'bar-title',\n });\n\n public subtitle = input<string | null>(null, {\n alias: 'bar-subtitle',\n });\n\n public appBarType = input<AppBarType>('small', {\n alias: 'bar-type',\n });\n\n public appBarScrollingStyle = input<AppBarScrollingStyle>('elevate', {\n alias: 'scroll-style',\n });\n\n public autoHide = input<boolean, unknown>(false, {\n alias: 'auto-hide',\n transform: booleanAttribute,\n });\n \n public centerAligned = input<boolean, unknown>(false, {\n alias: 'center-aligned',\n transform: booleanAttribute,\n });\n\n private logo = contentChild(AppBarLogo);\n private avatar = contentChild(Avatar);\n\n public hasLogo = computed(() => !!this.logo());\n public hasAvatar = computed(() => !!this.avatar());\n\n public mainIsScrolled = computed(() => this.layoutService.mainIsScrolled());\n public isScrollingDown = signal<boolean>(false);\n\n private scrollPosition = 0;\n private bottomExpandedHeight = computed(() => {\n const type = this.appBarType();\n\n if (!this.hasCollapsibleBottom(type)) {\n return 0;\n }\n\n this.layoutService.viewport();\n\n const fontSize = this.getHostFontSize();\n const hasSubtitle = !!this.subtitle()?.length;\n\n if (type === 'medium') {\n return (hasSubtitle ? 4.5 : 3) * fontSize;\n }\n\n return (hasSubtitle ? 5.5 : 3.5) * fontSize;\n });\n\n private bottomCollapse = computed(() => {\n const expandedHeight = this.bottomExpandedHeight();\n\n if (!expandedHeight) {\n return 0;\n }\n\n return Math.min(expandedHeight, Math.max(0, this.layoutService.mainScrollTop()));\n });\n\n // button context\n public buttonContextSize: Signal<ButtonSize> = signal('small');\n\n constructor(\n private el: ElementRef,\n private layoutService: LayoutService\n ) {\n this.scrollPosition = this.layoutService.mainScrollTop();\n\n effect((onCleanup) => {\n const type = 'md3-' + this.appBarType();\n\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect((onCleanup) => {\n const scrollingStyle = 'md3-scroll-style-' + this.appBarScrollingStyle();\n\n this.element.classList.add(scrollingStyle);\n\n onCleanup(() => {\n this.element.classList.remove(scrollingStyle);\n });\n });\n\n effect((onCleanup) => {\n const width = 'md3-layout-' + this.layoutService.widthClass();\n this.element.classList.add(width);\n\n onCleanup(() => {\n this.element.classList.remove(width);\n });\n });\n\n effect(() => {\n this.updateScrollDirection(this.layoutService.mainScrollTop());\n });\n\n effect(() => {\n const collapse = this.bottomCollapse();\n const expandedHeight = this.bottomExpandedHeight();\n\n this.element.style.setProperty(\n '--app-bar-bottom-collapse',\n `${collapse}px`\n );\n this.element.style.setProperty(\n '--app-bar-bottom-opacity',\n this.getBottomOpacity(collapse, expandedHeight).toString()\n );\n this.element.classList.toggle(\n 'md3-collapsed',\n this.isBottomCollapsed(collapse, expandedHeight)\n );\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n private getBottomOpacity(collapse: number, expandedHeight: number): number {\n if (!expandedHeight) {\n return 1;\n }\n\n return Math.max(0, Math.min(1, 1 - (collapse / expandedHeight)));\n }\n\n private isBottomCollapsed(collapse: number, expandedHeight: number): boolean {\n return expandedHeight > 0 && collapse >= expandedHeight;\n }\n\n private updateScrollDirection(scrollTop: number): void {\n if (scrollTop === this.scrollPosition) {\n return;\n }\n\n const defaultBarHeight = this.getHostFontSize() * 4;\n const scrollOffset = scrollTop - this.scrollPosition;\n\n if (Math.abs(scrollOffset) <= defaultBarHeight) {\n return;\n }\n\n this.isScrollingDown.set(scrollOffset > 0);\n this.scrollPosition = scrollTop;\n }\n\n private hasCollapsibleBottom(type: AppBarType): boolean {\n return (type === 'medium' || type === 'large') &&\n (!!this.title()?.length || !!this.subtitle()?.length);\n }\n\n private getHostFontSize(): number {\n if (typeof getComputedStyle === 'undefined') {\n return 16;\n }\n\n return Number.parseFloat(getComputedStyle(this.element).fontSize) || 16;\n }\n}\n","<div class=\"md3-app-bar-container\">\n <div class=\"md3-app-bar-leading\">\n <ng-content select=\"[md3-app-bar-leading]\"></ng-content>\n </div>\n\n @if (appBarType() == 'search') {\n <div class=\"md3-app-bar-search\" [class.md3-center]=\"centerAligned()\">\n <div class=\"md3-search-container\">\n <div class=\"md3-leading-buttons\">\n <ng-content select=\"[md3-search-leading]\"></ng-content>\n </div>\n <ng-content select=\"[md3-input-element]\"></ng-content>\n <div class=\"md3-trailing-buttons\">\n <ng-content select=\"[md3-search-trailing]\"></ng-content>\n </div>\n </div>\n </div>\n } @else if (hasLogo()) {\n <div class=\"md3-app-bar-logo\" [class.md3-center]=\"centerAligned()\">\n <ng-content select=\"[md3-app-bar-logo]\"></ng-content>\n </div>\n } @else if (title() || subtitle()) {\n <div class=\"md3-app-bar-title\" [class.md3-center]=\"centerAligned()\">\n @if (title()?.length) {\n <div md3-type-title size=\"large\">{{ title() }}</div>\n }\n @if (subtitle()?.length) {\n <div md3-type-body size=\"small\" emphasized>{{ subtitle() }}</div>\n }\n </div>\n }\n\n <div class=\"md3-app-bar-trailing\">\n <ng-content select=\"[md3-app-bar-trailing]\"></ng-content>\n @if (hasAvatar()) {\n <div class=\"md3-app-bar-avatar\">\n <ng-content select=\"[md3-avatar]\"></ng-content>\n </div>\n }\n </div>\n\n @if ((appBarType() == 'medium' || appBarType() == 'large') && (title() || subtitle())) {\n <div class=\"md3-app-bar-bottom\" [class.md3-center]=\"centerAligned()\">\n <div class=\"md3-app-bar-bottom-content\">\n @if (appBarType() == 'medium') {\n @if (title()?.length) {\n <div md3-type-headline size=\"medium\">{{ title() }}</div>\n }\n @if (subtitle()?.length) {\n <div md3-type-title size=\"small\">{{ subtitle() }}</div>\n }\n }\n @if (appBarType() == 'large') {\n @if (title()?.length) {\n <div md3-type-display size=\"small\">{{ title() }}</div>\n }\n @if (subtitle()?.length) {\n <div md3-type-title size=\"medium\">{{ subtitle() }}</div>\n }\n }\n </div>\n </div>\n }\n</div>\n","import { booleanAttribute, Component, computed, contentChild, contentChildren, ElementRef, HostBinding, inject, input } from '@angular/core';\nimport { RouterLinkActive } from '@angular/router';\nimport { IconElement } from '../../common/icon-element';\nimport { Badge } from '../../common/badge';\n\n@Component({\n selector: 'button[md3-nav-item], a[md3-nav-item]',\n exportAs: 'md3NavItem',\n imports: [],\n templateUrl: './navigation-item.html',\n styleUrl: './navigation-item.scss',\n host: {\n '[class.md3-hide-on-collapse]': 'this.hideOnCollapse()',\n },\n hostDirectives: [\n {\n directive: RouterLinkActive,\n inputs: ['routerLinkActiveOptions', 'ariaCurrentWhenActive'],\n }\n ],\n})\nexport class NavigationItem {\n private readonly el = inject(ElementRef<HTMLElement>);\n private routerLinkActive = inject(RouterLinkActive);\n \n public hideOnCollapse = input<boolean, unknown>(false, {\n alias: 'hide-on-collapse',\n transform: booleanAttribute\n });\n\n private icons = contentChildren<IconElement>(IconElement);\n\n public hasIcons = computed(() => this.icons()?.length != 0);\n\n public badge = contentChild<Badge>(Badge);\n\n public get isRouteActive(): boolean {\n return this.routerLinkActive.isActive;\n }\n\n @HostBinding('class.md3-active') get active(): boolean {\n return this.isRouteActive;\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n}\n","<div class=\"md3-item-container\">\n @if (hasIcons()) {\n <div class=\"md3-icon-container\">\n <ng-content select=\"[md3-icon-element=active]\"></ng-content>\n <ng-content select=\"[md3-icon-element]\"></ng-content>\n </div>\n }\n <div class=\"md3-label\">\n <ng-content></ng-content>\n </div>\n @if (hasIcons() && badge()) {\n <div class=\"md3-badge-container\" [class.md3-small]=\"badge()?.isSmall()\">\n <ng-content select=\"md3-badge\"></ng-content>\n </div>\n }\n</div>","import { booleanAttribute, Component, ElementRef, inject, input } from '@angular/core';\nimport { TypeLabel } from '../../../../public-api';\n\n@Component({\n selector: 'md3-nav-group',\n imports: [\n TypeLabel,\n ],\n templateUrl: './navigation-group.html',\n styleUrl: './navigation-group.scss',\n host: {\n '[class.md3-hide-on-collapse]': 'hideOnCollapse()',\n },\n})\nexport class NavigationGroup {\n private readonly el = inject(ElementRef<HTMLElement>);\n \n public label = input<string>();\n \n public hideOnCollapse = input<boolean, unknown>(false, {\n alias: 'hide-on-collapse',\n transform: booleanAttribute\n });\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n}\n","@if (label()?.length) {\n <div class=\"md3-nav-label\">\n <md3-type-label size=\"large\">{{ label() }}</md3-type-label>\n </div>\n}\n<ng-content select=\"[md3-nav-item]\"></ng-content>","import { Component, ElementRef, Signal, booleanAttribute, computed, contentChild, contentChildren, effect, inject, input, model, signal } from '@angular/core';\nimport { LayoutService } from '../../../foundations/layout.service';\nimport { IconElement } from '../../common/icon-element';\nimport { FloatingActionButton } from '../../buttons/floating-action-button/floating-action-button';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { IconButton } from '../../buttons/icon-button/icon-button';\nimport { MaterialIcon } from '../../common/material-icon/material-icon';\n\ntype ExpandedLayout = 'standard' | 'modal';\ntype CollapsedLayout = 'compact' | 'narrow' | 'hidden';\ntype ContainerStyle = 'none' | 'elevated' | 'divider';\n\n@Component({\n selector: 'md3-navigation-rail',\n imports: [\n IconButton,\n IconElement,\n MaterialIcon,\n ],\n templateUrl: './navigation-rail.html',\n styleUrl: './navigation-rail.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: NavigationRail,\n },\n ],\n host: {\n '[class.md3-expanded]': 'this.expanded()',\n },\n})\nexport class NavigationRail implements ButtonContext {\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly layoutService = inject(LayoutService);\n\n public expanded = model(false, {\n alias: 'expanded',\n });\n\n public hideMenuButton = input<boolean, unknown>(false, {\n alias: 'hide-menu-button',\n transform: booleanAttribute\n });\n\n public fullWidthIndicator = input<boolean, unknown>(false, {\n alias: 'full-width-indicator',\n transform: booleanAttribute\n });\n\n public containerStyle = input<ContainerStyle>('none', {\n alias: 'container-style',\n });\n\n public collapsedMode = input<CollapsedLayout>('compact', {\n alias: 'collapsed-layout',\n });\n\n public expandedMode = input<ExpandedLayout>('standard', {\n alias: 'expanded-layout',\n });\n\n private readonly resolvedCollapsedLayout = computed<CollapsedLayout>(() => {\n if (this.layoutService.isCompact()) {\n return 'hidden';\n }\n\n return this.collapsedMode();\n });\n\n private readonly resolvedExpandedLayout = computed<ExpandedLayout>(() => {\n if (this.layoutService.isCompact()) {\n return 'modal';\n }\n\n return this.expandedMode();\n });\n\n private menuIcons = contentChildren<IconElement>(IconElement);\n private floatingActionButton = contentChild<FloatingActionButton>(FloatingActionButton);\n\n public menuExpandIcon = computed(() => this.menuIcons().find((icon) => icon.iconType() == 'expand'));\n public menuCollapseIcon = computed(() => this.menuIcons().find((icon) => icon.iconType() == 'collapse'));\n public hasFab = computed(() => !!this.floatingActionButton());\n \n // context values\n buttonContextSize: Signal<ButtonSize> = signal('small');\n buttonContextExtended: Signal<boolean> = this.expanded;\n\n constructor() {\n effect((onCleanup) => {\n const containerStyle = this.containerStyle();\n if (containerStyle == 'none') {\n return;\n }\n\n const containerClass = 'md3-style-' + containerStyle;\n\n this.element.classList.add(containerClass);\n\n onCleanup(() => {\n this.element.classList.remove(containerClass);\n });\n });\n\n effect((onCleanup) => {\n const collapsed = 'md3-collapsed-' + this.resolvedCollapsedLayout();\n this.element.classList.add(collapsed);\n\n onCleanup(() => {\n this.element.classList.remove(collapsed);\n });\n });\n \n effect((onCleanup) => {\n const expanded = 'md3-expanded-' + this.resolvedExpandedLayout();\n this.element.classList.add(expanded);\n\n onCleanup(() => {\n this.element.classList.remove(expanded);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n public toggle(): void {\n const isExpanded = !this.expanded();\n this.expanded.set(isExpanded);\n }\n\n public collapse(): void {\n this.expanded.set(false);\n }\n\n public expand(): void {\n this.expanded.set(true);\n }\n}","<div class=\"md3-nav-scrim\" (click)=\"collapse()\"></div>\n<div class=\"md3-nav-container\">\n <div class=\"md3-nav-header\" [class.md3-hidden]=\"hideMenuButton() && !hasFab()\">\n @if (!hideMenuButton()) {\n <button md3-icon-button button-type=\"standard\" class=\"md3-menu-button\" (click)=\"toggle()\">\n <ng-content select=\"[md3-icon-element=expand]\"></ng-content>\n @if (!menuExpandIcon()) {\n <md3-icon md3-icon-element md3-menu-expand>menu</md3-icon>\n }\n <ng-content select=\"[md3-icon-element=collapse]\"></ng-content>\n @if (!menuCollapseIcon()) {\n <md3-icon md3-icon-element md3-menu-collapse bi-directional>menu_open</md3-icon>\n }\n </button>\n }\n\n <ng-content select=\"[md3-fab]\"></ng-content>\n </div>\n <div class=\"md3-menu-container md3-scrollable\" [class.md3-full-width-indicator]=\"fullWidthIndicator()\">\n <ng-content select=\"[md3-nav-item], md3-nav-group\"></ng-content>\n </div>\n</div>","import { Component, computed, effect, ElementRef, inject } from '@angular/core';\nimport { LayoutService } from '../../../foundations/layout.service';\n\ntype NavigationLayout = 'vertical' | 'horizontal';\n\n@Component({\n selector: 'md3-navigation-bar',\n imports: [\n ],\n templateUrl: './navigation-bar.html',\n styleUrl: './navigation-bar.scss',\n})\nexport class NavigationBar {\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly layoutService = inject(LayoutService);\n private readonly resolvedLayout = computed<NavigationLayout>(() => {\n if (this.layoutService.widthClass() === 'compact') {\n return 'vertical';\n }\n\n return 'horizontal';\n });\n\n constructor() {\n effect((onCleanup) => {\n const layout = 'md3-layout-' + this.resolvedLayout();\n this.element.classList.add(layout);\n\n onCleanup(() => {\n this.element.classList.remove(layout);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n}\n","<div class=\"md3-navigation-container\">\n <div class=\"md3-menu-container\">\n <ng-content select=\"[md3-nav-item]\"></ng-content>\n </div>\n</div>","import { Component, computed, contentChild, contentChildren, effect, ElementRef, input, signal, Signal, viewChild } from '@angular/core';\nimport { InputElement } from '../common/input-element';\nimport { IconElement } from '../common/icon-element';\nimport { AbstractControl, FormControlName } from '@angular/forms';\nimport { fromEvent, merge } from 'rxjs';\nimport { IconButton } from '../buttons/icon-button/icon-button';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../interfaces/button-context.interface';\nimport { ButtonSize } from '../../types/button-size.type';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'md3-text-field',\n imports: [\n NgClass,\n ],\n templateUrl: './text-field.html',\n styleUrl: './text-field.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: TextField,\n },\n ],\n})\nexport class TextField implements ButtonContext {\n public label = input<string | null>(null, {\n alias: 'label',\n });\n public fieldType = input<'filled' | 'outlined'>('filled', {\n alias: 'field-type',\n });\n public inputCounter = input<boolean | number>(false, {\n alias: 'input-counter',\n });\n public control = input<AbstractControl>(undefined, {\n alias: 'control',\n });\n\n private inputContainer = viewChild<ElementRef>('inputContainer');\n private input = contentChild(InputElement);\n private iconElements = contentChildren(IconElement, { descendants: true });\n private iconButtons = contentChildren(IconButton, { descendants: true });\n private controlName = contentChild(FormControlName);\n private controlError = signal(false);\n private nativeInputError = signal(false);\n // Tracks the last aria-invalid value this component itself wrote, so\n // hasNativeInputError() can tell a self-authored value apart from one set\n // externally. See hasNativeInputError() for why that distinction matters.\n private lastSyncedAriaInvalid: string | null = null;\n\n public formControl = computed<AbstractControl | undefined>(() => {\n if (this.control()) {\n return this.control();\n }\n\n return this.controlName()?.control;\n });\n\n public inputError = computed<boolean>(() => {\n const control = this.formControl();\n if (control) {\n this.controlError();\n return this.hasControlError(control);\n }\n\n const input = this.input()?.nativeElement;\n if (!input) {\n return false;\n }\n\n this.nativeInputError();\n return this.hasNativeInputError(input);\n });\n\n public maxLength = computed<number | undefined>(() => {\n const counter = this.inputCounter();\n\n if (!counter || counter === true) {\n return undefined;\n }\n\n return Number(Number(counter).toFixed(0));\n });\n public valueLength = signal(0);\n \n // context values\n buttonContextSize: Signal<ButtonSize> = signal('small');\n\n constructor() {\n effect((onCleanup) => {\n const input = this.input();\n if (!input) {\n return;\n }\n\n const nativeInput = input.nativeElement;\n const isTextarea = nativeInput.tagName.toLowerCase() === 'textarea';\n \n nativeInput.setAttribute('placeholder', '');\n this.syncNativeInputState(nativeInput);\n\n if (isTextarea) {\n nativeInput.setAttribute('rows', '1');\n }\n\n const inputEvents = merge(\n fromEvent(nativeInput, 'input'),\n fromEvent(nativeInput, 'change'),\n fromEvent(nativeInput, 'blur'),\n fromEvent(nativeInput, 'invalid'),\n ).subscribe(() => {\n this.syncNativeInputState(nativeInput);\n\n if (isTextarea) {\n nativeInput.style.height = 'auto';\n nativeInput.style.height = nativeInput.scrollHeight + 'px';\n }\n });\n\n const observer = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(() => this.syncNativeInputState(nativeInput));\n observer?.observe(nativeInput, {\n attributes: true,\n attributeFilter: ['aria-invalid', 'disabled', 'maxlength', 'minlength', 'pattern', 'required'],\n });\n\n onCleanup(() => {\n inputEvents.unsubscribe();\n observer?.disconnect();\n });\n });\n\n effect((onCleanup) => {\n const control = this.formControl();\n if (!control) {\n this.controlError.set(false);\n return;\n }\n\n this.syncControlError(control);\n\n const controlEvents = control.events.subscribe(() => this.syncControlError(control));\n\n onCleanup(() => controlEvents.unsubscribe());\n });\n\n effect(() => {\n const container = this.inputContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n const hasLeading: boolean = this.iconElements().some(i => i.iconType() === 'leading') ?? false;\n const hasTrailing: boolean = (this.iconElements().some(i => i.iconType() === 'trailing') || !!this.iconButtons().length) ?? false;\n\n container.classList.toggle('md3-has-leading-icon', hasLeading);\n container.classList.toggle('md3-has-trailing-icon', hasTrailing);\n });\n\n effect(() => {\n this.syncAriaInvalidAttribute(this.input()?.nativeElement);\n });\n }\n\n private syncNativeInputState(input: HTMLInputElement): void {\n this.valueLength.set(input.value.length);\n this.nativeInputError.set(this.hasNativeInputError(input));\n }\n\n private syncControlError(control: AbstractControl): void {\n this.controlError.set(this.hasControlError(control));\n }\n\n private hasNativeInputError(input: HTMLInputElement): boolean {\n const ariaInvalid = input.getAttribute('aria-invalid');\n\n // aria-invalid is also written by syncAriaInvalidAttribute() below,\n // based on this very computation. Without excluding our own last\n // write, a validity error that gets flagged once can never clear:\n // the native 'input'/'change' handler would keep reading back the\n // (still-true, self-authored) attribute from the previous cycle\n // before the effect that's about to correct it has had a chance to\n // run. Comparing against lastSyncedAriaInvalid means only a value\n // that didn't come from us — i.e. set externally, such as by a\n // consumer's own validation — counts as an error signal here.\n const externallyFlaggedInvalid = ariaInvalid === 'true' && ariaInvalid !== this.lastSyncedAriaInvalid;\n\n return !input.validity.valid || externallyFlaggedInvalid;\n }\n\n private hasControlError(control: AbstractControl): boolean {\n return control.invalid && (control.touched || control.dirty);\n }\n\n private syncAriaInvalidAttribute(input: HTMLInputElement | undefined): void {\n if (!input) {\n return;\n }\n\n const value = this.inputError() ? 'true' : 'false';\n this.lastSyncedAriaInvalid = value;\n\n if (input.getAttribute('aria-invalid') !== value) {\n input.setAttribute('aria-invalid', value);\n }\n }\n}\n","<label #inputContainer class=\"md3-text-field-container\" [ngClass]=\"{\n 'md3-text-field-filled': fieldType() == 'filled',\n 'md3-text-field-outlined': fieldType() == 'outlined',\n}\">\n <ng-content></ng-content>\n <fieldset aria-hidden=\"true\" class=\"md3-text-field-outline\">\n @if (label() && fieldType() == 'outlined') {\n <legend class=\"md3-label-gap\">{{ label() }}</legend>\n }\n </fieldset>\n @if (label()) {\n <label class=\"md3-text-field-label\">{{ label() }}</label>\n }\n <ng-content select=\"[md3-icon-element=leading]\"></ng-content>\n <ng-content select=\"[md3-icon-button], [md3-icon-element=trailing]\"></ng-content>\n @if (fieldType() != 'outlined') {\n <div class=\"md3-text-field-state\"></div>\n }\n</label>\n<div class=\"md3-supporting-text-container\" [class.md3-has-error]=\"inputError()\">\n <ng-content select=\"[md3-supporting-text]\"></ng-content>\n @if (inputCounter()) {\n <div class=\"md3-text-input-counter\">{{ valueLength() + (maxLength() ? \"/\" + maxLength() : \"\") }}</div>\n }\n</div>\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[md3-supporting-text]',\n host: {\n 'class': 'md3-supporting-text'\n }\n})\nexport class SupportingText {\n}\n","import { DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { InjectionToken, Type } from '@angular/core';\nimport { filter, Observable, Subject, take } from 'rxjs';\nimport { DialogConfig, DialogContainer } from '../../interfaces/dialog-config.interface';\n\nexport const DIALOG_DATA = new InjectionToken<unknown>('MD3_DIALOG_DATA');\nexport const DIALOG_CONFIG = new InjectionToken<DialogConfig>('MD3_DIALOG_CONFIG');\nexport const DIALOG_COMPONENT = new InjectionToken<Type<unknown>>('MD3_DIALOG_COMPONENT');\n\nconst DIALOG_EXIT_ANIMATION_FALLBACK_MS = 300;\nconst HIDDEN_CLASS = 'md3-dialog-hidden';\n\nexport class DialogRef<T = unknown, R = unknown> {\n private readonly closed = new Subject<R | undefined>();\n private readonly closing = new Subject<void>();\n private readonly hiddenChanges = new Subject<boolean>();\n private closePromise: Promise<void> | null = null;\n private closeStarted = false;\n private closeSettled = false;\n private hidden = false;\n\n /** Shell hosting the dialog: the regular dialog or the full screen one. */\n public dialogInstance?: DialogContainer;\n /**\n * Filled by DialogService after the user component is attached. Keeping the\n * instance here lets callers imperatively update inputs when that is useful.\n */\n public componentInstance?: T;\n\n /** Overlay hosting the dialog, useful to reach the panel and the scrim. */\n public get overlayRef(): OverlayRef {\n return this.cdkRef.overlayRef;\n }\n\n /** Whether the dialog started closing. Such a dialog cannot be hidden or shown anymore. */\n public get isClosing(): boolean {\n return this.closeStarted;\n }\n\n /** Whether the dialog is currently hidden, on request or behind another dialog. */\n public get isHidden(): boolean {\n return this.hidden;\n }\n\n constructor(\n private readonly cdkRef: CdkDialogRef<R, T>,\n disableCloseEvents: boolean,\n /** Whether this reference belongs to a full screen dialog. */\n public readonly isFullScreen: boolean = false,\n ) {\n // Closing always goes through this reference so the exit animation can\n // run before the CDK disposes the overlay. Detachments triggered from\n // the outside (navigation, scroll strategy) still settle this ref.\n this.cdkRef.closed.pipe(take(1)).subscribe((result) => this.settle(result));\n\n if (!disableCloseEvents) {\n this.connectCloseEvents();\n }\n }\n\n /** Closes the dialog. The promise resolves once the exit animation is done. */\n public close(result?: R): Promise<void> {\n if (this.closePromise) {\n return this.closePromise;\n }\n\n this.startClosing();\n this.closePromise = this.startCloseAnimation().then(() => this.cdkRef.close(result));\n\n return this.closePromise;\n }\n\n /**\n * Hides the dialog with the closing animation while keeping it alive, so\n * its content, form state and subscriptions survive until show() is called.\n * The page underneath becomes usable again while the dialog waits behind it.\n * The promise resolves once the dialog is out of sight.\n */\n public hide(): Promise<void> {\n if (this.hidden || this.closeStarted) {\n return Promise.resolve();\n }\n\n this.hidden = true;\n this.toggleHiddenState(true);\n this.dialogInstance?.setActive(false);\n this.hiddenChanges.next(true);\n\n return this.waitForSurfaceAnimation();\n }\n\n /**\n * Brings a hidden dialog back with the opening animation. Focus moves back\n * into the dialog even when it was never hidden, which is what makes it\n * usable again once the dialog above it closes.\n */\n public show(): void {\n if (this.closeStarted) {\n return;\n }\n\n if (this.hidden) {\n this.hidden = false;\n this.toggleHiddenState(false);\n this.dialogInstance?.setActive(true);\n this.hiddenChanges.next(false);\n }\n\n this.dialogInstance?.recaptureFocus();\n }\n\n /** Emits when the dialog starts closing, before the exit animation runs. */\n public beforeClosed(): Observable<void> {\n return this.closing.asObservable();\n }\n\n /** Emits the new value of `isHidden` every time the dialog is hidden or shown. */\n public hiddenChanged(): Observable<boolean> {\n return this.hiddenChanges.asObservable();\n }\n\n public afterClosed(): Observable<R | undefined> {\n return this.closed.asObservable();\n }\n\n private connectCloseEvents(): void {\n // The CDK config keeps `disableClose` on, so the scrim and Escape key\n // are handled here instead and the dialog can animate out.\n this.cdkRef.backdropClick.pipe(take(1)).subscribe(() => {\n this.cdkRef.containerInstance._closeInteractionType = 'mouse';\n this.close();\n });\n\n // A hidden dialog is not the one the Escape key is meant for, even\n // though the overlay it sits in is still the one receiving the event.\n this.cdkRef.keydownEvents.pipe(\n filter((event) => !this.hidden && event.key === 'Escape' && !hasModifierKey(event)),\n take(1),\n ).subscribe((event) => {\n event.preventDefault();\n this.cdkRef.containerInstance._closeInteractionType = 'keyboard';\n this.close();\n });\n }\n\n private toggleHiddenState(isHidden: boolean): void {\n const overlayRef = this.cdkRef.overlayRef;\n const panel = overlayRef.overlayElement;\n const backdrop = overlayRef.backdropElement;\n\n panel.classList.toggle(HIDDEN_CLASS, isHidden);\n backdrop?.classList.toggle(HIDDEN_CLASS, isHidden);\n\n // `inert` keeps a hidden dialog out of the tab order and away from\n // assistive technology without removing it from the DOM.\n if (isHidden) {\n panel.setAttribute('inert', '');\n } else {\n panel.removeAttribute('inert');\n }\n }\n\n private startClosing(): void {\n if (this.closeStarted) {\n return;\n }\n\n this.closeStarted = true;\n this.closing.next();\n this.closing.complete();\n }\n\n private startCloseAnimation(): Promise<void> {\n const overlayRef = this.cdkRef.overlayRef;\n const wasVisible = !this.hidden;\n\n overlayRef.overlayElement.classList.add('md3-dialog-closing');\n overlayRef.backdropElement?.classList.add('md3-dialog-closing');\n this.dialogInstance?.setActive(false);\n\n // A hidden dialog already played the exit animation, so there is\n // nothing left to transition and it can be disposed right away.\n return wasVisible ? this.waitForSurfaceAnimation() : Promise.resolve();\n }\n\n /** Resolves when the surface finished animating, with a timeout as a safety net. */\n private waitForSurfaceAnimation(): Promise<void> {\n const panel = this.cdkRef.overlayRef.overlayElement;\n const surface = this.dialogInstance?.surfaceElement ?? panel;\n\n return new Promise((resolve) => {\n let isResolved = false;\n let timeoutId = setTimeout(done, DIALOG_EXIT_ANIMATION_FALLBACK_MS);\n\n function done(): void {\n if (isResolved) {\n return;\n }\n\n isResolved = true;\n clearTimeout(timeoutId);\n surface.removeEventListener('transitionend', onTransitionEnd);\n resolve();\n }\n\n function onTransitionEnd(event: TransitionEvent): void {\n if (event.target === surface) {\n done();\n }\n }\n\n surface.addEventListener('transitionend', onTransitionEnd);\n });\n }\n\n /** Emits the result once the CDK reference is closed. Focus is restored by the container. */\n private settle(result?: R): void {\n if (this.closeSettled) {\n return;\n }\n\n // Covers detachments that did not go through close(), so anything\n // waiting on beforeClosed() is still notified.\n this.startClosing();\n this.closeSettled = true;\n this.hiddenChanges.complete();\n this.closed.next(result);\n this.closed.complete();\n }\n}\n","import { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { Component, ElementRef, inject, signal, viewChild } from '@angular/core';\nimport { DIALOG_CONFIG } from './dialog-ref';\nimport { DialogConfig, DialogContainer } from '../../interfaces/dialog-config.interface';\n\n/**\n * Material 3 dialog shell. It extends the CDK dialog container, so focus\n * trapping, focus restoration and the ARIA attributes are handled by the CDK\n * while this component only owns the MD3 surface and its animation.\n */\n@Component({\n selector: 'md3-dialog',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: './dialog.html',\n styleUrl: './dialog.scss',\n})\nexport class Dialog extends CdkDialogContainer implements DialogContainer {\n private readonly surface = viewChild<ElementRef<HTMLElement>>('surface');\n\n public isActive = signal<boolean>(false);\n\n protected readonly config = inject<DialogConfig>(DIALOG_CONFIG, { optional: true }) ?? {};\n\n public get surfaceElement(): HTMLElement | null {\n return this.surface()?.nativeElement ?? null;\n }\n\n /**\n * Started by DialogService, either right after the dialog is created or\n * once the dialog it replaces has had its head start. The animation runs on\n * the next frame so the surface has a real from/to state.\n */\n public startEnterAnimation(): void {\n requestAnimationFrame(() => {\n this.isActive.set(true);\n });\n }\n\n public setActive(value: boolean): void {\n this.isActive.set(value);\n }\n\n public recaptureFocus(): void {\n this._recaptureFocus();\n }\n}\n","<!-- The role and aria attributes live on the host element, applied by the CDK dialog container. -->\n<section\n #surface\n class=\"md3-dialog-container\"\n [class.md3-active]=\"isActive()\"\n [class.md-scheme-dark]=\"config.scheme == 'dark'\"\n [class.md-scheme-light]=\"config.scheme == 'light'\"\n [attr.dir]=\"config.direction ?? null\">\n <ng-template cdkPortalOutlet></ng-template>\n</section>\n","import { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { AfterViewInit, Component, ElementRef, inject, signal, viewChild } from '@angular/core';\nimport { DIALOG_CONFIG } from '../dialog-ref';\nimport { DialogConfig, DialogContainer } from '../../../interfaces/dialog-config.interface';\nimport { SheetsService } from '../../sheets/sheets.service';\n\n/**\n * Material 3 full screen dialog shell. It covers the viewport and lays its\n * content out like the scaffold does, with a main pane and a side sheet outlet\n * on each side, so side sheets opened while it is up land inside the dialog\n * instead of behind it.\n */\n@Component({\n selector: 'md3-fullscreen-dialog',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: './full-screen-dialog.html',\n styleUrl: './full-screen-dialog.scss',\n})\nexport class FullScreenDialog extends CdkDialogContainer implements DialogContainer, AfterViewInit {\n private readonly surface = viewChild<ElementRef<HTMLElement>>('surface');\n private readonly startOutlet = viewChild('startOutlet', { read: CdkPortalOutlet });\n private readonly endOutlet = viewChild('endOutlet', { read: CdkPortalOutlet });\n private readonly sheets = inject(SheetsService);\n\n public isActive = signal<boolean>(false);\n\n protected readonly config = inject<DialogConfig>(DIALOG_CONFIG, { optional: true }) ?? {};\n\n public get surfaceElement(): HTMLElement | null {\n return this.surface()?.nativeElement ?? null;\n }\n\n ngAfterViewInit(): void {\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n\n // Taking the outlets over is what sends the next side sheet inside the\n // dialog. The scaffold gets them back when this dialog is destroyed.\n if (startOutlet) {\n this.sheets.registerSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.registerSideSheetOutlet('end', endOutlet);\n }\n }\n\n public override ngOnDestroy(): void {\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n\n if (startOutlet) {\n this.sheets.unregisterSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.unregisterSideSheetOutlet('end', endOutlet);\n }\n\n super.ngOnDestroy();\n }\n\n public startEnterAnimation(): void {\n requestAnimationFrame(() => {\n this.isActive.set(true);\n });\n }\n\n public setActive(value: boolean): void {\n this.isActive.set(value);\n }\n\n public recaptureFocus(): void {\n this._recaptureFocus();\n }\n}\n","<!-- The role and aria attributes live on the host element, applied by the CDK dialog container. -->\n<section\n #surface\n class=\"md3-fullscreen-dialog-container\"\n [class.md3-active]=\"isActive()\"\n [class.md-scheme-dark]=\"config.scheme == 'dark'\"\n [class.md-scheme-light]=\"config.scheme == 'light'\"\n [attr.dir]=\"config.direction ?? null\">\n <div class=\"md3-panes-container md3-scrollable\">\n <!--\n The CDK attaches the dialog content to the first portal outlet of\n this template, so the main pane has to come first. The panes are\n placed by grid area, which makes the DOM order irrelevant visually.\n -->\n <div class=\"md3-pane md3-pane-main\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n <div class=\"md3-pane md3-pane-start\">\n <ng-template #startOutlet cdkPortalOutlet></ng-template>\n </div>\n <div class=\"md3-pane md3-pane-end\">\n <ng-template #endOutlet cdkPortalOutlet></ng-template>\n </div>\n </div>\n</section>\n","import { Dialog as CdkDialog, DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { DOCUMENT } from '@angular/common';\nimport { Overlay, OverlayContainer } from '@angular/cdk/overlay';\nimport { ComponentRef, inject, Injectable, Injector, Type, ViewContainerRef } from '@angular/core';\nimport { Dialog } from './dialog';\nimport { FullScreenDialog } from './full-screen-dialog/full-screen-dialog';\nimport { DIALOG_COMPONENT, DIALOG_CONFIG, DIALOG_DATA, DialogRef } from './dialog-ref';\nimport { DialogConfig, DialogContainer, PreviousDialog } from '../../interfaces/dialog-config.interface';\nimport { FullScreenDialogConfig } from '../../interfaces/full-screen-dialog-config.interface';\n\ninterface ResolvedDialogConfig<D = unknown> extends DialogConfig<D> {\n data: D | undefined;\n bindDataToInputs: boolean;\n disableCloseEvents: boolean;\n previousDialog: PreviousDialog;\n role: 'dialog' | 'alertdialog';\n ariaLabel: string;\n ariaLabelledBy: string;\n ariaDescribedBy: string;\n scheme: 'inherit' | 'dark' | 'light';\n direction: null | 'ltr' | 'rtl';\n viewContainerRef?: ViewContainerRef;\n injector: Injector;\n}\n\nconst PANEL_CLASS = 'md3-dialog-panel';\nconst FULL_SCREEN_PANEL_CLASS = 'md3-fullscreen-dialog-panel';\nconst OPENING_CLASS = 'md3-dialog-opening';\nconst SCRIM_KEPT_CLASS = 'md3-dialog-scrim-kept';\nconst SCRIM_INSTANT_CLASS = 'md3-dialog-scrim-instant';\n\n/**\n * Head start given to a dialog that leaves the screen before the dialog taking\n * its place animates in. Long enough to read as one dialog replacing another,\n * short enough to still feel like a single gesture.\n */\nconst DIALOG_HANDOVER_DELAY_MS = 160;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogService {\n private readonly cdkDialog = inject(CdkDialog);\n private readonly overlay = inject(Overlay);\n private readonly overlayContainer = inject(OverlayContainer);\n private readonly injector = inject(Injector);\n private readonly document = inject(DOCUMENT);\n\n /** Open dialogs, from the first one opened to the one currently on top. */\n private readonly refs: DialogRef<any, any>[] = [];\n\n /**\n * Elements the page was made of that the CDK hid from assistive technology,\n * kept here while the dialogs are hidden and the page is given back.\n */\n private readonly pageAriaHidden = new Map<Element, string>();\n\n /**\n * Page scrolling is blocked here instead of per overlay, so stacked dialogs\n * cannot unblock the page while another dialog is still open.\n */\n private readonly scrollBlock = this.overlay.scrollStrategies.block();\n\n /** Element that was focused before the first dialog of the stack opened. */\n private rootTrigger: HTMLElement | null = null;\n\n private pageStateQueued = false;\n\n public get openDialogs(): readonly DialogRef<any, any>[] {\n return this.refs;\n }\n\n /** Open dialogs that are currently on screen, from the bottom one up. */\n public get visibleDialogs(): readonly DialogRef<any, any>[] {\n return this.refs.filter((ref) => !ref.isHidden);\n }\n\n /** The full screen dialog that is open, if there is one. */\n public get fullScreenDialog(): DialogRef<any, any> | undefined {\n return this.refs.find((ref) => ref.isFullScreen && !ref.isClosing);\n }\n\n public open<T, D = unknown, R = unknown>(\n component: Type<T>,\n config: DialogConfig<D> = {},\n ): DialogRef<T, R> {\n const dialogConfig = this.mergeConfig(config);\n\n if (this.refs.length === 0) {\n this.rootTrigger = this.getFocusedElement();\n }\n\n // The dialog that is on screen starts leaving first, so the two dialogs\n // never animate on top of each other. A full screen dialog is not part\n // of this: regular dialogs open on top of it and leave it alone.\n const previousRef = this.topRegularRef();\n\n if (previousRef) {\n this.dismissPrevious(previousRef, dialogConfig.previousDialog);\n }\n\n let dialogRef!: DialogRef<T, R>;\n\n const cdkRef = this.cdkDialog.open<R, D, T>(component, {\n // The MD3 shell replaces the default CDK container, so the overlay,\n // focus trap and focus restoration come from the CDK while the shell\n // only renders the surface.\n container: {\n type: Dialog,\n providers: () => [\n { provide: DIALOG_CONFIG, useValue: dialogConfig },\n ],\n },\n // These tokens make the dialog controllable from the dynamic\n // component without coupling that component to the service.\n providers: (cdkDialogRef: CdkDialogRef<R, T>) => {\n dialogRef = new DialogRef<T, R>(cdkDialogRef, dialogConfig.disableCloseEvents);\n\n return [\n { provide: DialogRef, useValue: dialogRef },\n { provide: DIALOG_DATA, useValue: dialogConfig.data },\n { provide: DIALOG_CONFIG, useValue: dialogConfig },\n { provide: DIALOG_COMPONENT, useValue: component },\n ];\n },\n data: dialogConfig.data,\n role: dialogConfig.role,\n ariaModal: true,\n ariaLabel: dialogConfig.ariaLabel || null,\n ariaLabelledBy: dialogConfig.ariaLabelledBy || null,\n ariaDescribedBy: dialogConfig.ariaDescribedBy || null,\n direction: dialogConfig.direction ?? undefined,\n viewContainerRef: dialogConfig.viewContainerRef,\n injector: dialogConfig.injector,\n hasBackdrop: true,\n backdropClass: ['md3-dialog-scrim', OPENING_CLASS],\n panelClass: [PANEL_CLASS, OPENING_CLASS],\n positionStrategy: this.overlay.position()\n .global()\n .centerHorizontally()\n .centerVertically(),\n // Scrolling is blocked by the service for the whole stack.\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n // Focus goes back to whatever opened the stack, even when the dialog\n // that was open underneath has been closed in the meantime.\n restoreFocus: this.rootTrigger ?? true,\n // Scrim and Escape handling lives in DialogRef so the dialog can\n // play its exit animation before the overlay is disposed.\n disableClose: true,\n });\n\n this.registerDialog(dialogRef, cdkRef, dialogConfig, previousRef);\n\n return dialogRef;\n }\n\n /**\n * Opens a dialog that covers the whole screen. Only one can be open at a\n * time, so it replaces whatever is open, and while it is up the side sheet\n * outlets belong to it: side sheets open inside the dialog, not behind it.\n */\n public openFullScreen<T, D = unknown, R = unknown>(\n component: Type<T>,\n config: FullScreenDialogConfig<D> = {},\n ): DialogRef<T, R> {\n const dialogConfig = this.mergeConfig(config);\n\n if (this.refs.length === 0) {\n this.rootTrigger = this.getFocusedElement();\n }\n\n // A full screen dialog is a context of its own: the dialog it replaces\n // and anything stacked on that dialog goes with it.\n const previousRef = this.topRef();\n\n if (previousRef) {\n // Everything open belongs to the context being replaced, including\n // a full screen dialog that is already up.\n this.closeAll();\n }\n\n let dialogRef!: DialogRef<T, R>;\n\n const cdkRef = this.cdkDialog.open<R, D, T>(component, {\n container: {\n type: FullScreenDialog,\n providers: () => [\n { provide: DIALOG_CONFIG, useValue: dialogConfig },\n ],\n },\n providers: (cdkDialogRef: CdkDialogRef<R, T>) => {\n dialogRef = new DialogRef<T, R>(cdkDialogRef, dialogConfig.disableCloseEvents, true);\n\n return [\n { provide: DialogRef, useValue: dialogRef },\n { provide: DIALOG_DATA, useValue: dialogConfig.data },\n { provide: DIALOG_CONFIG, useValue: dialogConfig },\n { provide: DIALOG_COMPONENT, useValue: component },\n ];\n },\n data: dialogConfig.data,\n role: dialogConfig.role,\n ariaModal: true,\n ariaLabel: dialogConfig.ariaLabel || null,\n ariaLabelledBy: dialogConfig.ariaLabelledBy || null,\n ariaDescribedBy: dialogConfig.ariaDescribedBy || null,\n direction: dialogConfig.direction ?? undefined,\n viewContainerRef: dialogConfig.viewContainerRef,\n injector: dialogConfig.injector,\n // The dialog covers the page on its own, so there is nothing left\n // for a scrim to dim.\n hasBackdrop: false,\n panelClass: [FULL_SCREEN_PANEL_CLASS, OPENING_CLASS],\n // The CDK writes the size on the panel and the global strategy then\n // drops its centering margins, which is how the panel ends up\n // covering the whole wrapper.\n width: '100%',\n height: '100%',\n positionStrategy: this.overlay.position().global(),\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n restoreFocus: this.rootTrigger ?? true,\n disableClose: true,\n });\n\n this.registerDialog(dialogRef, cdkRef, dialogConfig, previousRef);\n\n return dialogRef;\n }\n\n /** Wires a freshly created dialog into the stack and starts its animation. */\n private registerDialog<T, D, R>(\n dialogRef: DialogRef<T, R>,\n cdkRef: CdkDialogRef<R, T>,\n dialogConfig: ResolvedDialogConfig<D>,\n previousRef: DialogRef<any, any> | undefined,\n ): void {\n dialogRef.dialogInstance = cdkRef.containerInstance as unknown as DialogContainer;\n dialogRef.componentInstance = cdkRef.componentInstance ?? undefined;\n\n if (cdkRef.componentRef) {\n this.bindDataToInputs(cdkRef.componentRef, dialogConfig);\n }\n\n this.refs.push(dialogRef);\n this.syncPageState();\n\n if (previousRef) {\n setTimeout(\n () => this.startReplacingAnimation(dialogRef, previousRef),\n DIALOG_HANDOVER_DELAY_MS,\n );\n } else {\n this.startOpenAnimation(dialogRef);\n }\n\n // Restoring starts with the exit animation, so the dialog underneath is\n // already coming back while this one is fading out.\n dialogRef.beforeClosed().subscribe(() => this.restorePreviousDialog(dialogRef));\n dialogRef.afterClosed().subscribe(() => this.removeRef(dialogRef));\n // Hiding and showing can also come straight from the reference, so the\n // page state is driven by what the dialogs report rather than by the\n // calls that went through this service.\n dialogRef.hiddenChanged().subscribe(() => this.syncPageState());\n }\n\n /**\n * Hides every dialog that is on screen, the full screen one included, with\n * the closing animation. They stay alive with their content and state, the\n * page underneath becomes usable, and showAll() puts them back. The promise\n * resolves once they are all out of sight.\n */\n public hideAll(): Promise<void> {\n const visible = this.refs.filter((ref) => !ref.isHidden && !ref.isClosing);\n\n return Promise.all(visible.map((ref) => ref.hide())).then(() => undefined);\n }\n\n /**\n * Brings the dialogs back on screen, whether they were hidden one by one or\n * all at once: the dialog that was on top returns, along with the full\n * screen dialog it sits in. Dialogs hidden behind another dialog stay\n * hidden, since that is where they belong once the stack is back.\n */\n public showAll(): void {\n const topRef = this.topRef();\n\n if (!topRef) {\n return;\n }\n\n const fullScreenRef = this.fullScreenDialog;\n\n // The full screen dialog is the context the top one sits in, so it\n // comes back first and the dialog on top ends up on top, with the focus.\n if (fullScreenRef && fullScreenRef !== topRef && fullScreenRef.isHidden) {\n fullScreenRef.show();\n }\n\n if (topRef.isHidden) {\n topRef.show();\n }\n }\n\n /** Closes every open dialog, including the hidden and the full screen ones. */\n public closeAll(): Promise<void> {\n // Closed from the bottom up so a closing dialog never brings back a\n // hidden dialog that is about to close as well.\n return Promise.all([...this.refs].map((ref) => ref.close())).then(() => undefined);\n }\n\n /** Closes the regular dialogs and leaves a full screen dialog alone. */\n private closeRegularDialogs(): Promise<void> {\n const closing = this.refs\n .filter((ref) => !ref.isFullScreen)\n .map((ref) => ref.close());\n\n return Promise.all(closing).then(() => undefined);\n }\n\n private mergeConfig<D>(config: DialogConfig<D>): ResolvedDialogConfig<D> {\n return {\n data: config.data,\n bindDataToInputs: config.bindDataToInputs ?? false,\n disableCloseEvents: config.disableCloseEvents ?? false,\n previousDialog: config.previousDialog ?? 'close',\n role: config.role ?? 'dialog',\n ariaLabel: config.ariaLabel ?? '',\n ariaLabelledBy: config.ariaLabelledBy ?? '',\n ariaDescribedBy: config.ariaDescribedBy ?? '',\n scheme: config.scheme ?? 'inherit',\n direction: config.direction ?? null,\n viewContainerRef: config.viewContainerRef,\n injector: config.injector ?? this.injector,\n };\n }\n\n /**\n * Hides or closes the dialog that is on screen. Its scrim stays up until\n * the dialog taking over is ready for it, so the page behind never\n * brightens between the two dialogs.\n */\n private dismissPrevious(\n previousRef: DialogRef<any, any>,\n behavior: PreviousDialog,\n ): Promise<void> {\n previousRef.overlayRef.backdropElement?.classList.add(SCRIM_KEPT_CLASS);\n\n return behavior === 'hide' ? previousRef.hide() : this.closeRegularDialogs();\n }\n\n private startOpenAnimation(dialogRef: DialogRef<any, any>): void {\n const overlayRef = dialogRef.overlayRef;\n const panel = overlayRef.overlayElement;\n const backdrop = overlayRef.backdropElement;\n\n // The overlay is inserted already rendered. Keep an initial class for\n // one frame, force style calculation, then remove it so CSS transitions\n // have a real from/to state.\n requestAnimationFrame(() => {\n setTimeout(() => {\n panel.getBoundingClientRect();\n panel.classList.remove(OPENING_CLASS);\n backdrop?.classList.remove(OPENING_CLASS);\n }, 100);\n });\n\n dialogRef.dialogInstance?.startEnterAnimation();\n }\n\n /** Opening animation for a dialog that took the place of another one. */\n private startReplacingAnimation(\n dialogRef: DialogRef<any, any>,\n previousRef: DialogRef<any, any>,\n ): void {\n if (dialogRef.isClosing) {\n return;\n }\n\n const panel = dialogRef.overlayRef.overlayElement;\n const backdrop = dialogRef.overlayRef.backdropElement;\n\n this.beginScrimHandover(previousRef, dialogRef);\n\n panel.getBoundingClientRect();\n panel.classList.remove(OPENING_CLASS);\n backdrop?.classList.remove(OPENING_CLASS);\n\n this.endScrimHandover(previousRef, dialogRef);\n\n dialogRef.dialogInstance?.startEnterAnimation();\n }\n\n /** Opening animation for a dialog coming back from behind a closing one. */\n private startRestoringAnimation(\n closingRef: DialogRef<any, any>,\n previousRef: DialogRef<any, any>,\n ): void {\n if (previousRef.isClosing) {\n return;\n }\n\n this.beginScrimHandover(closingRef, previousRef);\n previousRef.show();\n this.endScrimHandover(closingRef, previousRef);\n }\n\n /**\n * Moves both scrims to their new value in a single frame, without a\n * transition on either side, so the dim behind the dialogs never changes.\n */\n private beginScrimHandover(fromRef: DialogRef<any, any>, toRef: DialogRef<any, any>): void {\n const from = fromRef.overlayRef.backdropElement;\n const to = toRef.overlayRef.backdropElement;\n\n // Nothing to hand the scrim over to, e.g. a full screen dialog: the\n // outgoing scrim fades out on its own instead.\n if (!to) {\n return;\n }\n\n from?.classList.add(SCRIM_INSTANT_CLASS);\n from?.classList.remove(SCRIM_KEPT_CLASS);\n to?.classList.add(SCRIM_INSTANT_CLASS);\n }\n\n /** Gives the scrims their transitions back once the handover is painted. */\n private endScrimHandover(fromRef: DialogRef<any, any>, toRef: DialogRef<any, any>): void {\n const from = fromRef.overlayRef.backdropElement;\n const to = toRef.overlayRef.backdropElement;\n\n requestAnimationFrame(() => {\n from?.classList.remove(SCRIM_INSTANT_CLASS);\n to?.classList.remove(SCRIM_INSTANT_CLASS);\n });\n }\n\n private bindDataToInputs<T, D>(\n componentRef: ComponentRef<T>,\n config: ResolvedDialogConfig<D>,\n ): void {\n if (!config.bindDataToInputs || !this.canBindDataToInputs(config.data)) {\n return;\n }\n\n // setInput runs Angular's normal input pipeline, so input setters,\n // transforms, signal inputs, and change detection are handled for us.\n Object.entries(config.data).forEach(([inputName, inputValue]) => {\n componentRef.setInput(inputName, inputValue);\n });\n }\n\n private canBindDataToInputs(data: unknown): data is Record<string, unknown> {\n return typeof data === 'object' && data !== null && !Array.isArray(data);\n }\n\n /** Last dialog of the stack that is not closing yet. */\n private topRef(): DialogRef<any, any> | undefined {\n for (let index = this.refs.length - 1; index >= 0; index--) {\n if (!this.refs[index].isClosing) {\n return this.refs[index];\n }\n }\n\n return undefined;\n }\n\n /**\n * Same, without the full screen dialog: it hosts the dialogs opened on top\n * of it, so it is never the one that gets hidden or closed to make room.\n */\n private topRegularRef(): DialogRef<any, any> | undefined {\n const ref = this.topRef();\n\n return ref?.isFullScreen ? undefined : ref;\n }\n\n private restorePreviousDialog(ref: DialogRef<any, any>): void {\n const index = this.refs.indexOf(ref);\n\n if (index < 1) {\n return;\n }\n\n for (let previousIndex = index - 1; previousIndex >= 0; previousIndex--) {\n const previousRef = this.refs[previousIndex];\n\n if (previousRef.isClosing) {\n continue;\n }\n\n // The closing dialog gets the same head start it was given when it\n // took the screen, and keeps the scrim until then. Nothing to keep\n // when the dialog underneath has no scrim of its own.\n if (previousRef.overlayRef.backdropElement) {\n ref.overlayRef.backdropElement?.classList.add(SCRIM_KEPT_CLASS);\n }\n\n setTimeout(\n () => this.startRestoringAnimation(ref, previousRef),\n DIALOG_HANDOVER_DELAY_MS,\n );\n return;\n }\n }\n\n private removeRef(ref: DialogRef<any, any>): void {\n const index = this.refs.indexOf(ref);\n\n if (index === -1) {\n return;\n }\n\n this.refs.splice(index, 1);\n\n if (this.refs.length === 0) {\n this.rootTrigger = null;\n }\n\n this.syncPageState();\n }\n\n /**\n * State that belongs to the dialogs as a whole rather than to one of them:\n * page scrolling, the page being hidden from assistive technology, and\n * where focus sits. Applied in a task of its own, so a dialog handing the\n * screen over to another one does not give the page back and take it again\n * within the same frame.\n */\n private syncPageState(): void {\n if (this.pageStateQueued) {\n return;\n }\n\n this.pageStateQueued = true;\n\n setTimeout(() => {\n this.pageStateQueued = false;\n this.applyPageState();\n });\n }\n\n private applyPageState(): void {\n const hasVisibleDialog = this.refs.some((ref) => !ref.isHidden);\n\n if (hasVisibleDialog) {\n this.scrollBlock.enable();\n } else {\n this.scrollBlock.disable();\n }\n\n if (this.refs.length === 0) {\n // Nothing is open anymore: the CDK gives the page back to assistive\n // technology on its own, so there is nothing left to restore here.\n this.pageAriaHidden.clear();\n return;\n }\n\n if (hasVisibleDialog) {\n this.hidePageFromAssistiveTechnology();\n return;\n }\n\n this.exposePageToAssistiveTechnology();\n this.releaseFocus();\n }\n\n /**\n * Gives the page back to assistive technology while every dialog is hidden.\n * The CDK hides it for as long as a dialog is open, which would otherwise\n * leave nothing to read at all once the dialogs are out of sight.\n */\n private exposePageToAssistiveTechnology(): void {\n if (this.pageAriaHidden.size > 0) {\n return;\n }\n\n const container = this.overlayContainer.getContainerElement();\n\n Array.from(container.parentElement?.children ?? []).forEach((sibling) => {\n const value = sibling.getAttribute('aria-hidden');\n\n if (sibling === container || value === null) {\n return;\n }\n\n this.pageAriaHidden.set(sibling, value);\n sibling.removeAttribute('aria-hidden');\n });\n }\n\n /** Hides the page again as soon as a dialog is back on screen. */\n private hidePageFromAssistiveTechnology(): void {\n this.pageAriaHidden.forEach((value, element) => {\n element.setAttribute('aria-hidden', value);\n });\n\n this.pageAriaHidden.clear();\n }\n\n /**\n * Focus follows the dialogs off the screen: it goes back to whatever opened\n * the stack, so the page stays usable with the keyboard while the dialogs\n * wait behind it. Focus that already moved somewhere else is left alone.\n */\n private releaseFocus(): void {\n const activeElement = this.document.activeElement;\n\n if (this.rootTrigger && (!activeElement || activeElement === this.document.body)) {\n this.rootTrigger.focus();\n }\n }\n\n private getFocusedElement(): HTMLElement | null {\n const activeElement = this.document.activeElement;\n return activeElement instanceof HTMLElement ? activeElement : null;\n }\n}\n","import { Component } from '@angular/core';\nimport { TypeHeadline } from '../../../styles/typography/type-headline';\n\n@Component({\n selector: 'md3-dialog-header',\n imports: [\n TypeHeadline\n ],\n templateUrl: './dialog-header.html',\n styleUrl: './dialog-header.scss',\n})\nexport class DialogHeader {\n}\n","<ng-content select=\"[md3-icon-element]\"></ng-content>\n<div class=\"md3-dialog-title\">\n <md3-type-headline size=\"small\">\n <ng-content></ng-content>\n </md3-type-headline>\n</div>","import { Component } from '@angular/core';\nimport { TypeBody } from '../../../styles/typography/type-body';\n\n@Component({\n selector: 'md3-dialog-body',\n imports: [\n TypeBody\n ],\n templateUrl: './dialog-body.html',\n styleUrl: './dialog-body.scss',\n host: {\n 'class': 'md3-scrollable',\n },\n})\nexport class DialogBody {\n}\n","<md3-type-body size=\"medium\">\n <ng-content></ng-content>\n</md3-type-body>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'md3-dialog-actions',\n imports: [],\n templateUrl: './dialog-actions.html',\n styleUrl: './dialog-actions.scss',\n})\nexport class DialogActions {\n}\n","<div class=\"md3-actions\">\n <ng-content></ng-content>\n</div>","import { Component, input, signal, Signal } from '@angular/core';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { IconButtonWidth } from '../../../types/icon-button-width.type';\n\n/**\n * Header of a full screen dialog: a leading icon button to leave the dialog,\n * the headline, and a trailing action. It sticks to the top of the dialog while\n * the content scrolls underneath.\n */\n@Component({\n selector: 'md3-fullscreen-dialog-header',\n imports: [\n ],\n templateUrl: './full-screen-dialog-header.html',\n styleUrl: './full-screen-dialog-header.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: FullScreenDialogHeader,\n },\n ],\n})\nexport class FullScreenDialogHeader implements ButtonContext {\n // context values\n buttonContextSize: Signal<ButtonSize> = signal('small');\n buttonContextWidth: Signal<IconButtonWidth> = signal('default');\n}\n","<ng-content select=\"[md3-icon-button][md3-header-leading]\"></ng-content>\n<div class=\"md3-title-container\">\n <ng-content></ng-content>\n</div>\n<div class=\"md3-actions-container\">\n <ng-content select=\"[md3-header-trailing]\"></ng-content>\n</div>\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { InjectionToken, Type } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { MenuConfig } from '../../interfaces/menu-config.interface';\nimport { Menu } from './menu';\n\nexport const MENU_DATA = new InjectionToken<unknown>('MD3_MENU_DATA');\nexport const MENU_CONFIG = new InjectionToken<MenuConfig>('MD3_MENU_CONFIG');\nexport const MENU_COMPONENT = new InjectionToken<Type<unknown>>('MD3_MENU_COMPONENT');\n\nconst MENU_EXIT_ANIMATION_FALLBACK_MS = 300;\n\nexport class MenuRef<T = unknown, R = unknown> {\n private readonly closed = new Subject<R | undefined>();\n private isClosed = false;\n\n public menuInstance?: Menu;\n /**\n * Filled by MenuService after the user component is attached. Keeping the\n * instance here lets callers imperatively update inputs when that is useful.\n */\n public componentInstance?: T;\n\n constructor(\n private readonly overlayRef: OverlayRef,\n private readonly previouslyFocusedElement: HTMLElement | null\n ) {\n }\n\n public close(result?: R): void {\n if (this.isClosed) {\n return;\n }\n\n this.isClosed = true;\n this.startCloseAnimation().then(() => {\n // Disposing the overlay removes the wrapper, the backdrop, and the\n // dynamically attached content component in one operation.\n this.overlayRef.dispose();\n\n this.previouslyFocusedElement?.focus();\n\n this.closed.next(result);\n this.closed.complete();\n });\n }\n\n private startCloseAnimation(): Promise<void> {\n let panel = this.overlayRef.overlayElement;\n let animatedElement = panel.querySelector<HTMLElement>('.md3-menu-container') ?? panel;\n\n panel.classList.add('md3-menu-closing');\n this.menuInstance?.showMenu(false);\n\n return new Promise((resolve) => {\n let isResolved = false;\n let timeoutId = setTimeout(done, MENU_EXIT_ANIMATION_FALLBACK_MS);\n\n function done(): void {\n if (isResolved) {\n return;\n }\n\n isResolved = true;\n clearTimeout(timeoutId);\n animatedElement.removeEventListener('transitionend', onTransitionEnd);\n resolve();\n }\n\n function onTransitionEnd(event: TransitionEvent): void {\n if (event.target === animatedElement) {\n done();\n }\n }\n\n animatedElement.addEventListener('transitionend', onTransitionEnd);\n });\n }\n\n public afterClosed(): Observable<R | undefined> {\n return this.closed.asObservable();\n }\n}\n","import { CdkPortalOutlet, ComponentPortal } from '@angular/cdk/portal';\nimport { AfterContentInit, Component, ComponentRef, effect, ElementRef, inject, Injector, signal, Type, viewChild } from '@angular/core';\nimport { MenuConfig } from '../../interfaces/menu-config.interface';\nimport { MENU_CONFIG } from './menu-ref';\n\n@Component({\n selector: 'md3-menu',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: './menu.html',\n styleUrl: './menu.scss',\n host: {\n 'class': 'md3-menu-container',\n 'role': 'menu',\n '[class.md3-visible]': 'isVisible()',\n '[class.md3-inactive]': '!isActive()',\n '[class.md-scheme-dark]': 'scheme() == \"dark\"',\n '[class.md-scheme-light]': 'scheme() == \"light\"',\n '[dir]': 'direction()',\n },\n})\nexport class Menu implements AfterContentInit {\n private readonly portalOutlet = viewChild<CdkPortalOutlet>(CdkPortalOutlet);\n\n protected readonly config = inject<MenuConfig>(MENU_CONFIG, { optional: true }) ?? {};\n protected menuColors = signal<'standard' | 'vibrant'>('standard');\n protected isVisible = signal<boolean>(false);\n protected scheme = signal<'inherit' | 'dark' | 'light'>('inherit');\n protected direction = signal<null | 'ltr' | 'rtl'>(null);\n \n public isActive = signal<boolean>(true);\n \n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const color = 'md3-' + this.menuColors();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n\n this.menuColors.set(this.config.menuColors ?? 'standard');\n this.scheme.set(this.config.scheme ?? 'inherit');\n this.direction.set(this.config.direction ?? null);\n }\n\n ngAfterContentInit(): void {\n requestAnimationFrame(() => {\n this.showMenu(true);\n });\n }\n\n public showMenu(value: boolean): void {\n this.isVisible.set(value);\n }\n \n /**\n * The service creates this wrapper first, then calls this method to mount\n * the user supplied component into the dialog container.\n */\n public attachContent<T>(component: Type<T>, injector: Injector): ComponentRef<T> {\n const portal = new ComponentPortal(component, null, injector);\n\n return this.portalOutlet()!.attachComponentPortal(portal);\n }\n}\n","<ng-template cdkPortalOutlet></ng-template>","import {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentRef, ElementRef, inject, Injectable, Injector, Type, ViewContainerRef } from '@angular/core';\nimport { MenuConfig, MenuPositionOrigin, MenuPositionX, MenuPositionY, MenuScrollStrategy } from '../../interfaces/menu-config.interface';\nimport { MENU_COMPONENT, MENU_CONFIG, MENU_DATA, MenuRef } from './menu-ref';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Menu } from './menu';\nimport { filter, take } from 'rxjs';\n\ninterface ResolvedMenuConfig<D = unknown> extends MenuConfig<D> {\n data: D | undefined;\n bindDataToInputs: boolean;\n isSubMenu: boolean;\n menuColors: 'standard' | 'vibrant';\n xPosition: MenuPositionX;\n yPosition: MenuPositionY;\n overlapTrigger: boolean;\n offsetX: number;\n offsetY: number;\n viewportMargin: number;\n positions?: ConnectedPosition[];\n scrollStrategy: MenuScrollStrategy;\n scheme: 'inherit' | 'dark' | 'light';\n direction: null | 'ltr' | 'rtl';\n viewContainerRef?: ViewContainerRef;\n injector: Injector;\n}\n\ninterface InternalMenuConfig<D = unknown> extends MenuConfig<D> {\n isSubMenu?: boolean;\n}\n\ninterface CreatedMenuOverlay {\n overlayRef: OverlayRef;\n positionStrategy?: FlexibleConnectedPositionStrategy;\n origin: ResolvedMenuOrigin;\n}\n\ntype ResolvedMenuOrigin = Element | { height?: number; width?: number; x: number; y: number };\ntype ClientRect = Pick<DOMRectReadOnly, 'bottom' | 'height' | 'left' | 'right' | 'top' | 'width' | 'x' | 'y'>;\ntype SubMenuPositionX = Extract<MenuPositionX, 'before' | 'after'>;\ntype SubMenuVerticalAlignment = 'top' | 'bottom';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MenuService {\n private readonly overlay = inject(Overlay);\n private readonly injector = inject(Injector);\n private readonly document = inject(DOCUMENT);\n\n public open<T, D = unknown, R = unknown>(\n component: Type<T>,\n config: MenuConfig<D> = {},\n ): MenuRef<T, R> {\n const menuConfig = this.mergeConfig(config);\n const previouslyFocusedElement = this.getFocusedElement();\n const triggerElement = this.resolveTriggerElement(menuConfig.origin, previouslyFocusedElement);\n const menuOverlay = this.createOverlay(menuConfig, previouslyFocusedElement);\n const overlayRef = menuOverlay.overlayRef;\n const menuRef = new MenuRef<T, R>(\n overlayRef,\n previouslyFocusedElement\n );\n const injector = this.createInjector(component, menuConfig, menuRef);\n\n // The overlay hosts the MD3 menu shell. The shell is responsible for\n // the surface markup and receives the dynamic content through a portal.\n const menuPortal = new ComponentPortal(\n Menu,\n menuConfig.viewContainerRef ?? null,\n injector,\n );\n const menuComponentRef = overlayRef.attach(menuPortal);\n const contentComponentRef = menuComponentRef.instance.attachContent(component, injector);\n\n this.bindDataToInputs(contentComponentRef, menuConfig);\n this.flipPositionIfPushBreaksAnchor(menuOverlay, menuConfig);\n menuRef.componentInstance = contentComponentRef.instance;\n menuRef.menuInstance = menuComponentRef.instance;\n this.bindTriggerActiveState(triggerElement, overlayRef, menuRef);\n this.startOpenAnimation(overlayRef);\n this.connectCloseEvents(overlayRef, menuRef);\n\n return menuRef;\n }\n\n public openSubMenu<T, D = unknown, R = unknown>(\n component: Type<T>,\n config: MenuConfig<D> = {},\n ): MenuRef<T, R> {\n const xPosition = this.getSubMenuXPosition(config.xPosition);\n const yPosition = config.yPosition ?? 'below';\n const offsetX = config.offsetX ?? 0;\n const offsetY = config.offsetY ?? 0;\n\n const subMenuConfig: InternalMenuConfig<D> = {\n ...config,\n isSubMenu: true,\n xPosition,\n yPosition,\n overlapTrigger: config.overlapTrigger ?? true,\n offsetX,\n offsetY,\n scheme: config.scheme ?? 'inherit',\n direction: config.direction ?? null,\n };\n\n return this.open<T, D, R>(component, subMenuConfig);\n }\n\n private mergeConfig<D>(config: MenuConfig<D>): ResolvedMenuConfig<D> {\n const viewportMargin = this.getViewportMargin(config.viewportMargin);\n\n return {\n data: config.data,\n bindDataToInputs: config.bindDataToInputs ?? false,\n isSubMenu: (config as InternalMenuConfig<D>).isSubMenu ?? false,\n menuColors: config.menuColors ?? 'standard',\n xPosition: config.xPosition ?? 'start',\n yPosition: config.yPosition ?? 'below',\n overlapTrigger: config.overlapTrigger ?? false,\n offsetX: config.offsetX ?? 0,\n offsetY: config.offsetY ?? 4,\n viewportMargin,\n positions: config.positions,\n scrollStrategy: config.scrollStrategy ?? 'reposition',\n scheme: config.scheme ?? 'inherit',\n direction: config.direction ?? null,\n viewContainerRef: config.viewContainerRef,\n injector: config.injector ?? this.injector,\n };\n }\n\n private createOverlay(\n config: ResolvedMenuConfig,\n fallbackOrigin: HTMLElement | null,\n ): CreatedMenuOverlay {\n const origin = this.resolveOrigin(config.origin, fallbackOrigin);\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(origin)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(true)\n .withPush(true)\n .withViewportMargin(config.viewportMargin)\n .withPositions(config.positions ?? this.getInitialConnectedPositions(config))\n .withTransformOriginOn('.md3-menu-container');\n\n const overlayConfig = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: ['md3-menu-scrim', 'md3-menu-opening'],\n panelClass: ['md3-menu-panel', 'md3-menu-opening'],\n positionStrategy,\n scrollStrategy: this.getScrollStrategy(config.scrollStrategy),\n });\n\n return {\n overlayRef: this.overlay.create(overlayConfig),\n positionStrategy: config.positions ? undefined : positionStrategy,\n origin,\n };\n }\n\n private bindTriggerActiveState<T, R>(\n triggerElement: HTMLElement | null,\n overlayRef: OverlayRef,\n menuRef: MenuRef<T, R>,\n ): void {\n if (!triggerElement) {\n return;\n }\n\n const removeActiveClass = () => triggerElement.classList.remove('md3-menu-active');\n\n triggerElement.classList.add('md3-menu-active');\n menuRef.afterClosed().pipe(take(1)).subscribe(removeActiveClass);\n overlayRef.detachments().pipe(take(1)).subscribe(removeActiveClass);\n }\n\n private resolveOrigin(\n origin: MenuPositionOrigin | undefined,\n fallbackOrigin: HTMLElement | null,\n ): ResolvedMenuOrigin {\n const resolvedOrigin = origin ?? fallbackOrigin;\n\n if (resolvedOrigin) {\n if (this.isMouseEvent(resolvedOrigin)) {\n if (resolvedOrigin.currentTarget instanceof HTMLElement) {\n return resolvedOrigin.currentTarget;\n }\n\n return {\n x: resolvedOrigin.clientX,\n y: resolvedOrigin.clientY,\n };\n }\n\n if (this.isElementRef(resolvedOrigin)) {\n return resolvedOrigin.nativeElement;\n }\n\n return resolvedOrigin as ResolvedMenuOrigin;\n }\n\n const viewport = this.document.defaultView;\n\n return {\n x: (viewport?.innerWidth ?? 0) / 2,\n y: (viewport?.innerHeight ?? 0) / 2,\n };\n }\n\n private resolveTriggerElement(\n origin: MenuPositionOrigin | undefined,\n fallbackOrigin: HTMLElement | null,\n ): HTMLElement | null {\n const resolvedOrigin = origin ?? fallbackOrigin;\n\n if (!resolvedOrigin) {\n return null;\n }\n\n if (this.isMouseEvent(resolvedOrigin)) {\n return resolvedOrigin.currentTarget instanceof HTMLElement\n ? resolvedOrigin.currentTarget\n : null;\n }\n\n if (this.isElementRef(resolvedOrigin)) {\n return resolvedOrigin.nativeElement;\n }\n\n return resolvedOrigin instanceof HTMLElement ? resolvedOrigin : null;\n }\n\n private flipPositionIfPushBreaksAnchor(\n menuOverlay: CreatedMenuOverlay,\n config: ResolvedMenuConfig,\n ): void {\n if (!menuOverlay.positionStrategy) {\n return;\n }\n\n menuOverlay.overlayRef.updatePosition();\n\n const fallbackPosition = this.getFallbackPositionAfterPush(\n config,\n this.getOriginClientRect(menuOverlay.origin),\n menuOverlay.overlayRef.overlayElement.getBoundingClientRect(),\n );\n\n if (!fallbackPosition) {\n return;\n }\n\n menuOverlay.positionStrategy.withPositions([fallbackPosition]);\n menuOverlay.overlayRef.updatePosition();\n }\n\n private getInitialConnectedPositions(config: ResolvedMenuConfig): ConnectedPosition[] {\n return [this.getPreferredConnectedPosition(config)];\n }\n\n private getPreferredConnectedPosition(config: ResolvedMenuConfig): ConnectedPosition {\n if (config.isSubMenu) {\n return this.createSubMenuConnectedPosition(\n this.getSubMenuXPosition(config.xPosition),\n this.getSubMenuVerticalAlignment(config.yPosition),\n config.offsetX,\n config.offsetY,\n );\n }\n\n return this.createConnectedPosition(config.xPosition, config.yPosition, config);\n }\n\n private getFallbackPositionAfterPush(\n config: ResolvedMenuConfig,\n originRect: ClientRect,\n overlayRect: ClientRect,\n ): ConnectedPosition | null {\n const xPosition = this.shouldFlipXPosition(\n config,\n originRect,\n overlayRect,\n )\n ? this.getFallbackXPosition(config.xPosition)\n : config.xPosition;\n const yPosition = this.shouldFlipYPosition(\n config,\n originRect,\n overlayRect,\n )\n ? this.getFallbackYPosition(config.yPosition)\n : config.yPosition;\n\n if (xPosition === config.xPosition && yPosition === config.yPosition) {\n return null;\n }\n\n return this.getPreferredConnectedPosition({\n ...config,\n xPosition,\n yPosition,\n });\n }\n\n private shouldFlipXPosition(\n config: ResolvedMenuConfig,\n originRect: ClientRect,\n overlayRect: ClientRect,\n ): boolean {\n const tolerance = config.viewportMargin;\n\n switch (config.xPosition) {\n case 'before':\n return overlayRect.right > originRect.left + tolerance;\n\n case 'after':\n return overlayRect.left < originRect.right - tolerance;\n\n case 'start':\n return originRect.left < overlayRect.left - tolerance\n || originRect.left > overlayRect.right + tolerance;\n\n case 'end':\n return originRect.right < overlayRect.left - tolerance\n || originRect.right > overlayRect.right + tolerance;\n\n case 'center':\n default:\n return false;\n }\n }\n\n private shouldFlipYPosition(\n config: ResolvedMenuConfig,\n originRect: ClientRect,\n overlayRect: ClientRect,\n ): boolean {\n const tolerance = config.viewportMargin;\n\n if (config.isSubMenu) {\n const anchorY = config.yPosition === 'above' ? originRect.bottom : originRect.top;\n\n return anchorY < overlayRect.top - tolerance\n || anchorY > overlayRect.bottom + tolerance;\n }\n\n if (config.overlapTrigger) {\n const anchorY = config.yPosition === 'above' ? originRect.bottom : originRect.top;\n\n return anchorY < overlayRect.top - tolerance\n || anchorY > overlayRect.bottom + tolerance;\n }\n\n switch (config.yPosition) {\n case 'above':\n return overlayRect.bottom > originRect.top + tolerance;\n\n case 'below':\n return overlayRect.top < originRect.bottom - tolerance;\n\n case 'center':\n default:\n return false;\n }\n }\n\n private createConnectedPosition(\n xPosition: MenuPositionX,\n yPosition: MenuPositionY,\n config: ResolvedMenuConfig,\n ): ConnectedPosition {\n const horizontal = this.getHorizontalPosition(xPosition);\n const vertical = this.getVerticalPosition(yPosition, config.overlapTrigger);\n\n return {\n ...horizontal,\n ...vertical,\n offsetX: config.offsetX,\n offsetY: this.getOffsetY(yPosition, config),\n panelClass: [\n 'md3-menu-position-' + xPosition,\n 'md3-menu-position-' + yPosition,\n ],\n };\n }\n\n private createSubMenuConnectedPosition(\n xPosition: SubMenuPositionX,\n yAlignment: SubMenuVerticalAlignment,\n offsetX: number,\n offsetY: number,\n ): ConnectedPosition {\n const horizontal = this.getHorizontalPosition(xPosition);\n const yPosition = yAlignment === 'top' ? 'below' : 'above';\n\n return {\n ...horizontal,\n originY: yAlignment,\n overlayY: yAlignment,\n offsetX: this.getSubMenuOffsetX(xPosition, offsetX),\n offsetY: this.getSubMenuOffsetY(yAlignment, offsetY),\n panelClass: [\n 'md3-menu-position-' + xPosition,\n 'md3-menu-position-' + yPosition,\n 'md3-menu-position-submenu',\n ],\n };\n }\n\n private getHorizontalPosition(position: MenuPositionX): Pick<ConnectedPosition, 'originX' | 'overlayX'> {\n switch (position) {\n case 'end':\n return {\n originX: 'end',\n overlayX: 'end',\n };\n\n case 'before':\n return {\n originX: 'start',\n overlayX: 'end',\n };\n\n case 'after':\n return {\n originX: 'end',\n overlayX: 'start',\n };\n\n case 'center':\n return {\n originX: 'center',\n overlayX: 'center',\n };\n\n case 'start':\n default:\n return {\n originX: 'start',\n overlayX: 'start',\n };\n }\n }\n\n private getVerticalPosition(\n position: MenuPositionY,\n overlapTrigger: boolean,\n ): Pick<ConnectedPosition, 'originY' | 'overlayY'> {\n switch (position) {\n case 'above':\n return {\n originY: overlapTrigger ? 'bottom' : 'top',\n overlayY: 'bottom',\n };\n\n case 'center':\n return {\n originY: 'center',\n overlayY: 'center',\n };\n\n case 'below':\n default:\n return {\n originY: overlapTrigger ? 'top' : 'bottom',\n overlayY: 'top',\n };\n }\n }\n\n private getFallbackXPosition(position: MenuPositionX): MenuPositionX {\n switch (position) {\n case 'start':\n return 'end';\n\n case 'end':\n return 'start';\n\n case 'before':\n return 'after';\n\n case 'after':\n return 'before';\n\n case 'center':\n default:\n return 'center';\n }\n }\n\n private getSubMenuXPosition(position: MenuPositionX | undefined): SubMenuPositionX {\n return position === 'before' ? 'before' : 'after';\n }\n\n private getFallbackYPosition(position: MenuPositionY): MenuPositionY {\n switch (position) {\n case 'above':\n return 'below';\n\n case 'below':\n return 'above';\n\n case 'center':\n default:\n return 'center';\n }\n }\n\n private getSubMenuVerticalAlignment(position: MenuPositionY): SubMenuVerticalAlignment {\n return position === 'above' ? 'bottom' : 'top';\n }\n\n private getOriginClientRect(origin: ResolvedMenuOrigin): ClientRect {\n if ('getBoundingClientRect' in origin) {\n return origin.getBoundingClientRect();\n }\n\n return {\n x: origin.x,\n y: origin.y,\n top: origin.y,\n right: origin.x,\n bottom: origin.y,\n left: origin.x,\n width: 0,\n height: 0,\n };\n }\n\n private getViewportMargin(configuredMargin: number | undefined): number {\n const minimumMargin = this.getHalfEmInPixels();\n\n return Math.max(configuredMargin ?? minimumMargin, minimumMargin);\n }\n\n private getHalfEmInPixels(): number {\n const viewport = this.document.defaultView;\n const fontSize = viewport?.getComputedStyle(this.document.documentElement).fontSize;\n const pixels = fontSize ? Number.parseFloat(fontSize) * 0.5 : 8;\n\n return Number.isFinite(pixels) ? pixels : 8;\n }\n\n private getOffsetY(position: MenuPositionY, config: ResolvedMenuConfig): number {\n if (config.overlapTrigger || position === 'center') {\n return 0;\n }\n\n return position === 'above'\n ? config.offsetY * -1\n : config.offsetY;\n }\n\n private getSubMenuOffsetX(position: SubMenuPositionX, offsetX: number): number {\n return position === 'before' ? offsetX * -1 : offsetX;\n }\n\n private getSubMenuOffsetY(\n alignment: SubMenuVerticalAlignment,\n offsetY: number,\n ): number {\n return alignment === 'bottom' ? offsetY * -1 : offsetY;\n }\n\n private getScrollStrategy(scrollStrategy: MenuScrollStrategy) {\n switch (scrollStrategy) {\n case 'block':\n return this.overlay.scrollStrategies.block();\n\n case 'close':\n return this.overlay.scrollStrategies.close();\n\n case 'noop':\n return this.overlay.scrollStrategies.noop();\n\n case 'reposition':\n default:\n return this.overlay.scrollStrategies.reposition();\n }\n }\n\n private isMouseEvent(origin: MenuPositionOrigin | HTMLElement): origin is MouseEvent {\n return typeof MouseEvent !== 'undefined' && origin instanceof MouseEvent;\n }\n\n private isElementRef(origin: Exclude<MenuPositionOrigin, MouseEvent>): origin is ElementRef<HTMLElement> {\n return typeof origin === 'object'\n && origin !== null\n && 'nativeElement' in origin\n && origin.nativeElement instanceof HTMLElement;\n }\n\n private startOpenAnimation(overlayRef: OverlayRef): void {\n const panel = overlayRef.overlayElement;\n const backdrop = overlayRef.backdropElement;\n\n // The overlay is inserted already rendered. Keep an initial class for\n // one frame, force style calculation, then remove it so CSS transitions\n // have a real from/to state.\n requestAnimationFrame(() => {\n setTimeout(() => {\n panel.getBoundingClientRect();\n panel.classList.remove('md3-menu-opening');\n backdrop?.classList.remove('md3-menu-opening');\n }, 100);\n });\n }\n\n private createInjector<T, D, R>(\n component: Type<T>,\n config: ResolvedMenuConfig<D>,\n menuRef: MenuRef<T, R>,\n ): Injector {\n return Injector.create({\n parent: config.injector,\n providers: [\n // These tokens make the menu controllable from the dynamic\n // component without coupling that component to the service.\n { provide: MenuRef, useValue: menuRef },\n { provide: MENU_DATA, useValue: config.data },\n { provide: MENU_CONFIG, useValue: config },\n { provide: MENU_COMPONENT, useValue: component },\n ],\n });\n }\n\n private bindDataToInputs<T, D>(\n componentRef: ComponentRef<T>,\n config: ResolvedMenuConfig<D>,\n ): void {\n if (!config.bindDataToInputs || !this.canBindDataToInputs(config.data)) {\n return;\n }\n\n // setInput runs Angular's normal input pipeline, so input setters,\n // transforms, signal inputs, and change detection are handled for us.\n Object.entries(config.data).forEach(([inputName, inputValue]) => {\n componentRef.setInput(inputName, inputValue);\n });\n }\n\n private connectCloseEvents<T, R>(\n overlayRef: OverlayRef,\n menuRef: MenuRef<T, R>,\n ): void {\n overlayRef.backdropClick().pipe(take(1)).subscribe(() => menuRef.close());\n overlayRef.keydownEvents().pipe(\n filter((event) => event.key === 'Escape'),\n take(1),\n ).subscribe(() => menuRef.close());\n }\n\n private getFocusedElement(): HTMLElement | null {\n const activeElement = this.document.activeElement;\n return activeElement instanceof HTMLElement ? activeElement : null;\n }\n\n private canBindDataToInputs(data: unknown): data is Record<string, unknown> {\n return typeof data === 'object' && data !== null && !Array.isArray(data);\n }\n}\n","import { booleanAttribute, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'md3-menu-group',\n imports: [],\n templateUrl: './menu-group.html',\n styleUrl: './menu-group.scss',\n host: {\n 'role': 'group',\n },\n})\nexport class MenuGroup {\n}\n","<ng-content></ng-content>\n","import { Component, contentChildren, ElementRef, input, model } from '@angular/core';\nimport { StateComponent } from '../../common/state-component';\nimport { IconElement } from '../../common/icon-element';\nimport { InputElement } from '../../common/input-element';\nimport { MaterialIcon } from '../../common/material-icon/material-icon';\nimport { TypeBody, TypeLabel, TypeTitle } from '../../../../public-api';\n\n@Component({\n selector: 'button[md3-menu-item], a[md3-menu-item]',\n imports: [\n InputElement,\n StateComponent,\n MaterialIcon,\n TypeLabel,\n TypeBody,\n TypeTitle,\n ],\n templateUrl: './menu-item.html',\n styleUrl: './menu-item.scss',\n host: {\n '(click)': 'onHostClick()',\n },\n})\nexport class MenuItem {\n public label = input<string>('', {\n alias: 'label',\n });\n\n public supportingText = input<string | null>(null, {\n alias: 'supporting-text',\n });\n\n public trailingText = input<string | null>(null, {\n alias: 'trailing-text',\n });\n\n public selected = model<boolean | null>(null, {\n alias: 'selected'\n });\n\n private iconElements = contentChildren(IconElement);\n \n public get leading(): IconElement | undefined {\n return this.iconElements().find((icon) => icon.iconType() === 'leading');\n }\n\n public get trailing(): IconElement | undefined {\n return this.iconElements().find((icon) => icon.iconType() === 'trailing');\n }\n\n public get showLeadingIcon(): boolean {\n return (!!this.leading && !this.selected()) || this.selected() == true;\n }\n\n public onHostClick(): void {\n const selected = this.selected();\n if (selected === null) {\n return;\n }\n\n this.selected.set(!selected);\n }\n\n constructor(private el: ElementRef<HTMLElement>) {\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n}\n","@if (selected() !== null) {\n <input type=\"checkbox\" md3-input-element [checked]=\"selected()\">\n}\n\n<div class=\"md3-menu-item-container\" md3-state-component>\n <div class=\"md3-menu-item-leading\" [class.has-icon]=\"showLeadingIcon\">\n <ng-content select=\"[md3-icon-element=leading]\"></ng-content>\n @if (!leading) {\n <md3-icon>check</md3-icon>\n }\n </div>\n\n <div class=\"md3-menu-item-content\">\n <md3-type-label size=\"large\">{{ label() }}</md3-type-label>\n @if (supportingText()?.length) {\n <md3-type-body size=\"small\">{{ supportingText() }}</md3-type-body>\n }\n </div>\n\n <div class=\"md3-menu-item-trailing\">\n <ng-content select=\"md3-badge\"></ng-content>\n @if (trailingText()?.length) {\n <md3-type-title size=\"small\">{{ trailingText() }}</md3-type-title>\n }\n <ng-content select=\"[md3-icon-element=trailing]\"></ng-content>\n </div>\n</div>","import { Component, input, signal, Signal } from '@angular/core';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\nimport { TypeTitle } from '../../../styles/typography/type-title';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { IconButtonWidth } from '../../../types/icon-button-width.type';\n\n@Component({\n selector: 'md3-side-sheet-header',\n imports: [\n TypeTitle\n ],\n templateUrl: './side-sheet-header.html',\n styleUrl: './side-sheet-header.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: SideSheetHeader,\n },\n ],\n})\nexport class SideSheetHeader implements ButtonContext {\n public title = input<string>('', {\n alias: 'title',\n });\n \n // context values\n buttonContextSize: Signal<ButtonSize> = signal(\"small\");\n buttonContextWidth: Signal<IconButtonWidth> = signal(\"default\");\n}\n","<ng-content select=\"[md3-icon-button][leading]\"></ng-content>\n<div class=\"md3-title-container\">\n <md3-type-title size=\"large\">{{ title() }}</md3-type-title>\n</div>\n<ng-content select=\"[md3-icon-button][trailing]\"></ng-content>","import { CdkScrollable } from '@angular/cdk/scrolling';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'md3-side-sheet-body',\n imports: [],\n templateUrl: './side-sheet-body.html',\n styleUrl: './side-sheet-body.scss',\n host: {\n class: 'md3-scrollable',\n },\n hostDirectives: [\n CdkScrollable\n ],\n})\nexport class SideSheetBody {\n}\n","<ng-content></ng-content>","import { booleanAttribute, Component, input } from '@angular/core';\n\n@Component({\n selector: 'md3-side-sheet-actions',\n imports: [],\n templateUrl: './side-sheet-actions.html',\n styleUrl: './side-sheet-actions.scss',\n host: {\n '[class.md3-style-divider]': 'showDivider()',\n },\n})\nexport class SideSheetActions {\n public showDivider = input<boolean, unknown>(false, {\n alias: 'show-divider',\n transform: booleanAttribute\n });\n}\n","<ng-content></ng-content>","import { OverlayRef } from '@angular/cdk/overlay';\nimport { InjectionToken, TemplateRef } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { SnackbarConfig } from '../../interfaces/snackbar-config.interface';\nimport { Snackbar } from './snackbar';\n\nexport const SNACKBAR_MESSAGE = new InjectionToken<string | TemplateRef<unknown>>('MD3_SNACKBAR_MESSAGE');\nexport const SNACKBAR_ACTION_LABEL = new InjectionToken<string | undefined>('MD3_SNACKBAR_ACTION_LABEL');\nexport const SNACKBAR_CONFIG = new InjectionToken<SnackbarConfig>('MD3_SNACKBAR_CONFIG');\n\nconst SNACKBAR_EXIT_ANIMATION_FALLBACK_MS = 300;\n\nexport type SnackbarDismissReason = 'timeout' | 'action' | 'manual';\n\nexport interface SnackbarDismiss<R = unknown> {\n reason: SnackbarDismissReason;\n result?: R;\n}\n\nexport class SnackbarRef<R = unknown> {\n private readonly closed = new Subject<SnackbarDismiss<R>>();\n private readonly actionTriggered = new Subject<void>();\n private isClosed = false;\n private overlayRef?: OverlayRef;\n private timeoutId?: ReturnType<typeof setTimeout>;\n private timerStartedAt = 0;\n private remainingMs: number;\n\n public snackbarInstance?: Snackbar;\n\n constructor(private readonly duration: number) {\n this.remainingMs = duration;\n }\n\n /**\n * Called by SnackbarService once this snackbar is dequeued and actually\n * attached to the overlay. Queued-but-never-shown refs never get one, and\n * close() below handles that case without trying to animate or dispose.\n */\n public attachOverlay(overlayRef: OverlayRef): void {\n this.overlayRef = overlayRef;\n }\n\n public startTimer(): void {\n if (this.isClosed || this.duration <= 0 || this.timeoutId) {\n return;\n }\n\n this.timerStartedAt = Date.now();\n this.timeoutId = setTimeout(() => this.close('timeout'), this.remainingMs);\n }\n\n public pauseTimer(): void {\n if (!this.timeoutId) {\n return;\n }\n\n clearTimeout(this.timeoutId);\n this.timeoutId = undefined;\n this.remainingMs = Math.max(0, this.remainingMs - (Date.now() - this.timerStartedAt));\n }\n\n public resumeTimer(): void {\n if (this.timeoutId || this.isClosed || this.duration <= 0 || this.remainingMs <= 0) {\n return;\n }\n\n this.startTimer();\n }\n\n public triggerAction(result?: R): void {\n if (this.isClosed) {\n return;\n }\n\n this.actionTriggered.next();\n this.close('action', result);\n }\n\n public close(reason: SnackbarDismissReason = 'manual', result?: R): void {\n if (this.isClosed) {\n return;\n }\n\n this.isClosed = true;\n\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = undefined;\n }\n\n if (!this.overlayRef) {\n // Still sitting in the queue — nothing was ever attached, so\n // there's nothing to animate or dispose.\n this.closed.next({ reason, result });\n this.closed.complete();\n this.actionTriggered.complete();\n return;\n }\n\n this.startCloseAnimation().then(() => {\n this.overlayRef!.dispose();\n this.closed.next({ reason, result });\n this.closed.complete();\n this.actionTriggered.complete();\n });\n }\n\n public onAction(): Observable<void> {\n return this.actionTriggered.asObservable();\n }\n\n public afterDismissed(): Observable<SnackbarDismiss<R>> {\n return this.closed.asObservable();\n }\n\n private startCloseAnimation(): Promise<void> {\n const panel = this.overlayRef!.overlayElement;\n const animatedElement = panel.querySelector<HTMLElement>('.md3-snackbar-container') ?? panel;\n\n panel.classList.add('md3-snackbar-closing');\n this.snackbarInstance?.isActive.set(false);\n\n return new Promise((resolve) => {\n let isResolved = false;\n const timeoutId = setTimeout(done, SNACKBAR_EXIT_ANIMATION_FALLBACK_MS);\n\n function done(): void {\n if (isResolved) {\n return;\n }\n\n isResolved = true;\n clearTimeout(timeoutId);\n animatedElement.removeEventListener('transitionend', onTransitionEnd);\n resolve();\n }\n\n function onTransitionEnd(event: TransitionEvent): void {\n if (event.target === animatedElement) {\n done();\n }\n }\n\n animatedElement.addEventListener('transitionend', onTransitionEnd);\n });\n }\n}\n","import { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { Component, ElementRef, HostListener, OnDestroy, OnInit, Signal, TemplateRef, effect, inject, signal } from '@angular/core';\nimport { Button } from '../buttons/button/button';\nimport { IconButton } from '../buttons/icon-button/icon-button';\nimport { MaterialIcon } from '../common/material-icon/material-icon';\nimport { LayoutService } from '../../foundations/layout.service';\nimport { SnackbarConfig } from '../../interfaces/snackbar-config.interface';\nimport { SNACKBAR_ACTION_LABEL, SNACKBAR_CONFIG, SNACKBAR_MESSAGE, SnackbarRef } from './snackbar-ref';\nimport { IconElement, TypeBody } from '../../../public-api';\n\n@Component({\n selector: 'md3-snackbar',\n imports: [\n NgClass,\n NgTemplateOutlet,\n TypeBody,\n Button,\n IconButton,\n MaterialIcon,\n IconElement,\n ],\n templateUrl: './snackbar.html',\n styleUrl: './snackbar.scss',\n})\nexport class Snackbar implements OnInit, OnDestroy {\n private readonly snackbarRef = inject(SnackbarRef, { optional: true });\n private readonly layout = inject(LayoutService);\n\n public isActive = signal<boolean>(false);\n\n protected readonly config = inject<SnackbarConfig>(SNACKBAR_CONFIG, { optional: true }) ?? {};\n protected readonly message = inject<string | TemplateRef<unknown>>(SNACKBAR_MESSAGE, { optional: true }) ?? '';\n protected readonly actionLabel = inject<string | undefined>(SNACKBAR_ACTION_LABEL, { optional: true });\n\n protected get role(): string {\n return this.config.politeness === 'assertive' ? 'alert' : 'status';\n }\n\n protected get isTemplateMessage(): boolean {\n return this.message instanceof TemplateRef;\n }\n\n protected get templateMessage(): TemplateRef<unknown> {\n return this.message as TemplateRef<unknown>;\n }\n\n protected get textMessage(): string {\n return this.message as string;\n }\n\n protected get templateContext(): unknown {\n return this.config.data ?? null;\n }\n\n protected get isStacked(): boolean {\n return !!this.config.stackedAction && !!this.actionLabel;\n }\n\n constructor(private readonly el: ElementRef<HTMLElement>) {\n effect(() => {\n const inset = this.layout.bottomInset() + (this.config.bottomOffset ?? 0);\n this.el.nativeElement.style.setProperty('--md3-snackbar-bottom-inset', `${inset}px`);\n });\n\n effect(() => {\n if (this.layout.isCompact()) {\n this.el.nativeElement.classList.add('md3-full-width');\n } else {\n this.el.nativeElement.classList.remove('md3-full-width');\n }\n });\n }\n\n @HostListener('pointerenter')\n @HostListener('focusin')\n protected onInteractionStart(): void {\n this.snackbarRef?.pauseTimer();\n }\n\n @HostListener('pointerleave')\n @HostListener('focusout')\n protected onInteractionEnd(): void {\n this.snackbarRef?.resumeTimer();\n }\n\n ngOnInit(): void {\n requestAnimationFrame(() => {\n this.isActive.set(true);\n });\n\n this.snackbarRef?.startTimer();\n }\n\n ngOnDestroy(): void {\n this.snackbarRef?.pauseTimer();\n }\n\n protected onActionClick(): void {\n this.snackbarRef?.triggerAction();\n }\n\n protected onCloseClick(): void {\n this.snackbarRef?.close('manual');\n }\n}\n","<div\n class=\"md3-snackbar-container\"\n [class.md3-active]=\"isActive()\"\n [class.md3-snackbar-stacked]=\"isStacked\"\n [ngClass]=\"{\n 'md-scheme-light': config.scheme == 'dark',\n 'md-scheme-dark': config.scheme == 'light',\n }\"\n [attr.dir]=\"config.direction ?? null\"\n [attr.role]=\"role\"\n [attr.aria-live]=\"config.politeness ?? 'polite'\"\n [attr.aria-label]=\"config.ariaLabel || null\">\n <div class=\"md3-snackbar-message\">\n @if (isTemplateMessage) {\n <ng-container *ngTemplateOutlet=\"templateMessage; context: templateContext\"></ng-container>\n } @else {\n <div md3-type-body size=\"medium\">{{ textMessage }}</div>\n }\n </div>\n\n @if (actionLabel) {\n <button md3-button type=\"button\" class=\"md3-snackbar-action\" button-type=\"text\" button-size=\"small\" (click)=\"onActionClick()\">\n {{ actionLabel }}\n </button>\n }\n\n @if (config.showCloseIcon) {\n <button md3-icon-button type=\"button\" class=\"md3-snackbar-close\" button-type=\"standard\" button-size=\"small\" aria-label=\"Dismiss\" (click)=\"onCloseClick()\">\n <md3-icon md3-icon-element>close</md3-icon>\n </button>\n }\n</div>\n","import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Injectable, Injector, TemplateRef, inject } from '@angular/core';\nimport { SnackbarConfig, SnackbarPoliteness } from '../../interfaces/snackbar-config.interface';\nimport { Snackbar } from './snackbar';\nimport { SNACKBAR_ACTION_LABEL, SNACKBAR_CONFIG, SNACKBAR_MESSAGE, SnackbarRef } from './snackbar-ref';\n\nconst DEFAULT_DURATION_MS = 4000;\n\ninterface ResolvedSnackbarConfig extends SnackbarConfig {\n showCloseIcon: boolean;\n stackedAction: boolean;\n duration: number;\n politeness: SnackbarPoliteness;\n replaceCurrent: boolean;\n ariaLabel: string;\n scheme: 'inherit' | 'dark' | 'light';\n direction: null | 'ltr' | 'rtl';\n position: 'start' | 'center' | 'end';\n bottomOffset: number;\n injector: Injector;\n}\n\n// Internally every queued snackbar is tracked as SnackbarRef<unknown> — the\n// caller-facing generic <R> only matters for the ref that open() hands back,\n// so it's applied once at that single return point instead of threaded\n// through the queue/active bookkeeping.\ninterface QueuedSnackbar {\n message: string | TemplateRef<unknown>;\n actionLabel: string | undefined;\n config: ResolvedSnackbarConfig;\n ref: SnackbarRef;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnackbarService {\n private readonly overlay = inject(Overlay);\n private readonly injector = inject(Injector);\n\n private readonly queue: QueuedSnackbar[] = [];\n private active?: QueuedSnackbar;\n\n /**\n * Opens a snackbar. Only one is ever visible at a time — if another is\n * already showing, this one waits in a FIFO queue unless\n * config.replaceCurrent is set.\n *\n * message can be a plain string, or a TemplateRef for cases like a\n * progress indicator that needs to keep re-rendering as the caller's own\n * state changes. The surrounding surface, action button, close icon,\n * positioning, and animation are always owned by the Snackbar shell —\n * there's no arbitrary custom-component API, since that's how you end up\n * with something that isn't a snackbar anymore per MD3.\n *\n * config.onAction, if provided, is called when the action button (never\n * the close icon) is clicked — an alternative to ref.onAction().subscribe()\n * for callers that don't want to hold onto the returned ref.\n */\n public open<D = unknown, R = unknown>(\n message: string | TemplateRef<D>,\n actionLabel?: string,\n config: SnackbarConfig<D> = {},\n ): SnackbarRef<R> {\n const snackbarConfig = this.mergeConfig(config);\n\n if (snackbarConfig.showCloseIcon && actionLabel) {\n throw new Error(\n 'Snackbar cannot have both an action and a close icon — Material Design 3 snackbars support only one.',\n );\n }\n\n const ref = new SnackbarRef(snackbarConfig.duration);\n const queued: QueuedSnackbar = {\n message,\n actionLabel,\n config: snackbarConfig,\n ref,\n };\n\n ref.afterDismissed().subscribe(() => this.onDismissed(queued));\n\n if (snackbarConfig.onAction) {\n // Only ever fires for the action button — SnackbarRef.actionTriggered\n // is exclusively raised from the action button's click handler, never\n // from the close icon, which just closes without emitting.\n ref.onAction().subscribe(() => snackbarConfig.onAction!());\n }\n\n if (snackbarConfig.replaceCurrent && this.active) {\n this.queue.unshift(queued);\n this.active.ref.close('manual');\n } else if (this.active) {\n this.queue.push(queued);\n } else {\n this.show(queued);\n }\n\n return ref as SnackbarRef<R>;\n }\n\n /** Dismisses whichever snackbar is currently showing, if any. */\n public dismiss<R = unknown>(result?: R): void {\n this.active?.ref.close('manual', result);\n }\n\n /** Dismisses the visible snackbar and clears everything still queued. */\n public dismissAll(): void {\n const stillQueued = this.queue.splice(0, this.queue.length);\n stillQueued.forEach((item) => item.ref.close('manual'));\n this.active?.ref.close('manual');\n }\n\n private show(queued: QueuedSnackbar): void {\n this.active = queued;\n\n const overlayRef = this.createOverlay(queued.config);\n queued.ref.attachOverlay(overlayRef);\n\n const injector = this.createInjector(queued);\n const portal = new ComponentPortal(Snackbar, queued.config.viewContainerRef ?? null, injector);\n const componentRef = overlayRef.attach(portal);\n\n queued.ref.snackbarInstance = componentRef.instance;\n }\n\n private onDismissed(queued: QueuedSnackbar): void {\n if (this.active === queued) {\n this.active = undefined;\n } else {\n const index = this.queue.indexOf(queued);\n\n if (index !== -1) {\n this.queue.splice(index, 1);\n }\n\n return;\n }\n\n const next = this.queue.shift();\n\n if (next) {\n this.show(next);\n }\n }\n\n private mergeConfig(config: SnackbarConfig): ResolvedSnackbarConfig {\n return {\n data: config.data,\n showCloseIcon: config.showCloseIcon ?? false,\n stackedAction: config.stackedAction ?? false,\n onAction: config.onAction,\n duration: config.duration ?? DEFAULT_DURATION_MS,\n politeness: config.politeness ?? 'polite',\n replaceCurrent: config.replaceCurrent ?? false,\n ariaLabel: config.ariaLabel ?? '',\n scheme: config.scheme ?? 'inherit',\n direction: config.direction ?? null,\n position: config.position ?? 'start',\n bottomOffset: config.bottomOffset ?? 0,\n viewContainerRef: config.viewContainerRef,\n injector: config.injector ?? this.injector,\n };\n }\n\n private createOverlay(config: ResolvedSnackbarConfig): OverlayRef {\n let panelClass = ['md3-snackbar-panel', 'md3-position-' + config.position];\n if (config.direction !== null) {\n panelClass.push('md3-direction-' + config.direction);\n }\n\n const overlayConfig = new OverlayConfig({\n hasBackdrop: false,\n panelClass: panelClass,\n positionStrategy: this.overlay.position().global(),\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n });\n\n return this.overlay.create(overlayConfig);\n }\n\n private createInjector(queued: QueuedSnackbar): Injector {\n return Injector.create({\n parent: queued.config.injector,\n providers: [\n { provide: SnackbarRef, useValue: queued.ref },\n { provide: SNACKBAR_MESSAGE, useValue: queued.message },\n { provide: SNACKBAR_ACTION_LABEL, useValue: queued.actionLabel },\n { provide: SNACKBAR_CONFIG, useValue: queued.config },\n ],\n });\n }\n}\n","// types\nexport * from './types/text-size.type';\nexport * from './types/text-color.type';\nexport * from './types/card-type.type';\nexport * from './types/button-size.type';\nexport * from './types/button-type.type';\nexport * from './types/icon-button-type.type';\nexport * from './types/icon-button-width.type';\nexport * from './types/split-button-type.type';\nexport * from './types/button-group-type.type';\nexport * from './types/button-group-selection.type';\nexport * from './types/fab-size.type';\nexport * from './types/fab-type.type';\nexport * from './types/slider-size.type';\nexport * from './types/dialog-role.type';\nexport * from './types/chip-type.type';\nexport * from './types/chip-style.type';\nexport * from './types/list-leading-type.type';\nexport * from './types/list-leading-size.type';\nexport * from './types/carousel-layout.type';\nexport * from './types/carousel-alignment.type';\nexport * from './types/carousel-orientation.type';\nexport * from './types/carousel-item-size.type';\n\n// interfaces\nexport * from './interfaces/dialog-config.interface';\nexport * from './interfaces/full-screen-dialog-config.interface';\nexport * from './interfaces/menu-config.interface';\nexport * from './interfaces/side-sheet-config.interface';\nexport * from './interfaces/snackbar-config.interface';\nexport * from './interfaces/carousel-arrangement.interface';\nexport * from './interfaces/carousel-keyline.interface';\nexport * from './interfaces/carousel-strategy.interface';\n\n// typography\nexport * from './styles/typography/type-display';\nexport * from './styles/typography/type-headline';\nexport * from './styles/typography/type-title';\nexport * from './styles/typography/type-body';\nexport * from './styles/typography/type-label';\n\n// foundations\nexport * from './foundations/layout.service';\nexport * from './foundations/scaffold/scaffold';\nexport * from './foundations/scaffold-bar';\nexport * from './foundations/scaffold-rail';\nexport * from './foundations/scaffold-pane';\nexport * from './foundations/grid';\nexport * from './foundations/grid-item';\n\n// common components and directives\nexport * from './components/common/input-element';\nexport * from './components/common/state-component';\nexport * from './components/common/icon-element';\nexport * from './components/common/material-icon/material-icon';\nexport * from './components/common/divider';\nexport * from './components/common/badge';\nexport * from './components/common/avatar';\n\n// buttons\nexport * from './components/buttons/button/button';\nexport * from './components/buttons/floating-action-button/floating-action-button';\nexport * from './components/buttons/icon-button/icon-button';\nexport * from './components/buttons/split-button/split-button';\nexport * from './components/buttons/button-group/button-group';\n\n// cards\nexport * from './components/card/card';\n\n// carousel\nexport * from './components/carousel/carousel';\nexport * from './components/carousel/carousel-item/carousel-item';\nexport * from './components/carousel/carousel-arrangement';\nexport * from './components/carousel/carousel-keylines';\n\n// chips\nexport * from './components/chips/chips';\n\n// selection controls\nexport * from './components/selection-controls/checkbox/checkbox';\nexport * from './components/selection-controls/radio-button/radio-button';\nexport * from './components/selection-controls/switch/switch';\n\n// sliders\nexport * from './components/slider/slider';\n\n// list\nexport * from './components/list/list';\nexport * from './components/list/list-item/list-item';\nexport * from './components/list/list-leading/list-leading';\nexport * from './components/list/list-slot';\n\n// loading and progress\nexport * from './components/loading-and-progress/loading-indicator/loading-indicator';\nexport * from './components/loading-and-progress/linear-progress-indicator/linear-progress-indicator';\nexport * from './components/loading-and-progress/circular-progress-indicator/circular-progress-indicator';\n\n// app bar\nexport * from './components/app-bar/app-bar';\nexport * from './components/app-bar/app-bar-logo';\n\n// navigations\nexport * from './components/navigations/navigation-item/navigation-item';\nexport * from './components/navigations/navigation-group/navigation-group';\nexport * from './components/navigations/navigation-rail/navigation-rail';\nexport * from './components/navigations/navigation-bar/navigation-bar';\n\n// text fields\nexport * from './components/text-field/text-field';\nexport * from './components/text-field/supporting-text';\n\n// dialogs\nexport * from './components/dialog/dialog';\nexport * from './components/dialog/dialog-ref';\nexport * from './components/dialog/dialog.service';\nexport * from './components/dialog/dialog-header/dialog-header';\nexport * from './components/dialog/dialog-body/dialog-body';\nexport * from './components/dialog/dialog-actions/dialog-actions';\nexport * from './components/dialog/full-screen-dialog/full-screen-dialog';\nexport * from './components/dialog/full-screen-dialog-header/full-screen-dialog-header';\n\n// menus\nexport * from './components/menu/menu';\nexport * from './components/menu/menu-ref';\nexport * from './components/menu/menu.service';\nexport * from './components/menu/menu-group/menu-group';\nexport * from './components/menu/menu-item/menu-item';\n\n// sheets\nexport * from './components/sheets/side-sheet/side-sheet-ref';\nexport * from './components/sheets/sheets.service';\nexport * from './components/sheets/side-sheet-header/side-sheet-header';\nexport * from './components/sheets/side-sheet-body/side-sheet-body';\nexport * from './components/sheets/side-sheet-actions/side-sheet-actions';\n\n// snackbar\nexport * from './components/snackbar/snackbar';\nexport * from './components/snackbar/snackbar-ref';\nexport * from './components/snackbar/snackbar.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LayoutService","i1.StateComponent","CdkDialog"],"mappings":"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"}
1
+ {"version":3,"file":"almoamendev-ngx-md3.mjs","sources":["../../../projects/ngx-md3/src/lib/styles/typography/type-display.ts","../../../projects/ngx-md3/src/lib/styles/typography/type-headline.ts","../../../projects/ngx-md3/src/lib/styles/typography/type-title.ts","../../../projects/ngx-md3/src/lib/styles/typography/type-body.ts","../../../projects/ngx-md3/src/lib/styles/typography/type-label.ts","../../../projects/ngx-md3/src/lib/foundations/layout.service.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet/side-sheet-ref.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet/side-sheet.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet/side-sheet.html","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet/side-sheet-stack.ts","../../../projects/ngx-md3/src/lib/components/sheets/sheets.service.ts","../../../projects/ngx-md3/src/lib/foundations/scaffold/scaffold.ts","../../../projects/ngx-md3/src/lib/foundations/scaffold/scaffold.html","../../../projects/ngx-md3/src/lib/foundations/scaffold-bar.ts","../../../projects/ngx-md3/src/lib/foundations/scaffold-rail.ts","../../../projects/ngx-md3/src/lib/foundations/scaffold-pane.ts","../../../projects/ngx-md3/src/lib/foundations/grid.ts","../../../projects/ngx-md3/src/lib/foundations/grid-item.ts","../../../projects/ngx-md3/src/lib/components/common/input-element.ts","../../../projects/ngx-md3/src/lib/components/common/state-component.ts","../../../projects/ngx-md3/src/lib/components/common/icon-element.ts","../../../projects/ngx-md3/src/lib/components/common/material-icon/material-icon.ts","../../../projects/ngx-md3/src/lib/components/common/material-icon/material-icon.html","../../../projects/ngx-md3/src/lib/components/common/divider.ts","../../../projects/ngx-md3/src/lib/components/common/badge.ts","../../../projects/ngx-md3/src/lib/components/common/avatar.ts","../../../projects/ngx-md3/src/lib/interfaces/button-context.interface.ts","../../../projects/ngx-md3/src/lib/components/buttons/button/button.ts","../../../projects/ngx-md3/src/lib/components/buttons/button/button.html","../../../projects/ngx-md3/src/lib/components/buttons/floating-action-button/floating-action-button.ts","../../../projects/ngx-md3/src/lib/components/buttons/floating-action-button/floating-action-button.html","../../../projects/ngx-md3/src/lib/components/buttons/icon-button/icon-button.ts","../../../projects/ngx-md3/src/lib/components/buttons/icon-button/icon-button.html","../../../projects/ngx-md3/src/lib/components/buttons/split-button/split-button.ts","../../../projects/ngx-md3/src/lib/components/buttons/split-button/split-button.html","../../../projects/ngx-md3/src/lib/components/buttons/button-group/button-group.ts","../../../projects/ngx-md3/src/lib/components/buttons/button-group/button-group.html","../../../projects/ngx-md3/src/lib/components/card/card.ts","../../../projects/ngx-md3/src/lib/components/card/card.html","../../../projects/ngx-md3/src/lib/components/carousel/carousel-arrangement.ts","../../../projects/ngx-md3/src/lib/components/carousel/carousel-keylines.ts","../../../projects/ngx-md3/src/lib/components/carousel/carousel-item/carousel-item.ts","../../../projects/ngx-md3/src/lib/components/carousel/carousel-item/carousel-item.html","../../../projects/ngx-md3/src/lib/components/carousel/carousel.ts","../../../projects/ngx-md3/src/lib/components/carousel/carousel.html","../../../projects/ngx-md3/src/lib/components/chips/chips.ts","../../../projects/ngx-md3/src/lib/components/chips/chips.html","../../../projects/ngx-md3/src/lib/components/selection-controls/checkbox/checkbox.ts","../../../projects/ngx-md3/src/lib/components/selection-controls/checkbox/checkbox.html","../../../projects/ngx-md3/src/lib/components/selection-controls/radio-button/radio-button.ts","../../../projects/ngx-md3/src/lib/components/selection-controls/radio-button/radio-button.html","../../../projects/ngx-md3/src/lib/components/selection-controls/switch/switch.ts","../../../projects/ngx-md3/src/lib/components/selection-controls/switch/switch.html","../../../projects/ngx-md3/src/lib/components/slider/slider.ts","../../../projects/ngx-md3/src/lib/components/slider/slider.html","../../../projects/ngx-md3/src/lib/components/list/list.ts","../../../projects/ngx-md3/src/lib/components/list/list.html","../../../projects/ngx-md3/src/lib/components/list/list-item/list-item.ts","../../../projects/ngx-md3/src/lib/components/list/list-item/list-item.html","../../../projects/ngx-md3/src/lib/components/list/list-leading/list-leading.ts","../../../projects/ngx-md3/src/lib/components/list/list-leading/list-leading.html","../../../projects/ngx-md3/src/lib/components/list/list-slot.ts","../../../projects/ngx-md3/src/lib/components/loading-and-progress/loading-indicator/loading-indicator.ts","../../../projects/ngx-md3/src/lib/components/loading-and-progress/loading-indicator/loading-indicator.html","../../../projects/ngx-md3/src/lib/components/loading-and-progress/linear-progress-indicator/linear-progress-indicator.ts","../../../projects/ngx-md3/src/lib/components/loading-and-progress/linear-progress-indicator/linear-progress-indicator.html","../../../projects/ngx-md3/src/lib/components/loading-and-progress/circular-progress-indicator/circular-progress-indicator.ts","../../../projects/ngx-md3/src/lib/components/loading-and-progress/circular-progress-indicator/circular-progress-indicator.html","../../../projects/ngx-md3/src/lib/components/app-bar/app-bar-logo.ts","../../../projects/ngx-md3/src/lib/components/app-bar/app-bar.ts","../../../projects/ngx-md3/src/lib/components/app-bar/app-bar.html","../../../projects/ngx-md3/src/lib/components/navigations/navigation-item/navigation-item.ts","../../../projects/ngx-md3/src/lib/components/navigations/navigation-item/navigation-item.html","../../../projects/ngx-md3/src/lib/components/navigations/navigation-group/navigation-group.ts","../../../projects/ngx-md3/src/lib/components/navigations/navigation-group/navigation-group.html","../../../projects/ngx-md3/src/lib/components/navigations/navigation-rail/navigation-rail.ts","../../../projects/ngx-md3/src/lib/components/navigations/navigation-rail/navigation-rail.html","../../../projects/ngx-md3/src/lib/components/navigations/navigation-bar/navigation-bar.ts","../../../projects/ngx-md3/src/lib/components/navigations/navigation-bar/navigation-bar.html","../../../projects/ngx-md3/src/lib/components/text-field/text-field.ts","../../../projects/ngx-md3/src/lib/components/text-field/text-field.html","../../../projects/ngx-md3/src/lib/components/text-field/supporting-text.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog-ref.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog.html","../../../projects/ngx-md3/src/lib/components/dialog/full-screen-dialog/full-screen-dialog.ts","../../../projects/ngx-md3/src/lib/components/dialog/full-screen-dialog/full-screen-dialog.html","../../../projects/ngx-md3/src/lib/components/dialog/dialog.service.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog-header/dialog-header.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog-header/dialog-header.html","../../../projects/ngx-md3/src/lib/components/dialog/dialog-body/dialog-body.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog-body/dialog-body.html","../../../projects/ngx-md3/src/lib/components/dialog/dialog-actions/dialog-actions.ts","../../../projects/ngx-md3/src/lib/components/dialog/dialog-actions/dialog-actions.html","../../../projects/ngx-md3/src/lib/components/dialog/full-screen-dialog-header/full-screen-dialog-header.ts","../../../projects/ngx-md3/src/lib/components/dialog/full-screen-dialog-header/full-screen-dialog-header.html","../../../projects/ngx-md3/src/lib/components/menu/menu-ref.ts","../../../projects/ngx-md3/src/lib/components/menu/menu.ts","../../../projects/ngx-md3/src/lib/components/menu/menu.html","../../../projects/ngx-md3/src/lib/components/menu/menu.service.ts","../../../projects/ngx-md3/src/lib/components/menu/menu-group/menu-group.ts","../../../projects/ngx-md3/src/lib/components/menu/menu-group/menu-group.html","../../../projects/ngx-md3/src/lib/components/menu/menu-item/menu-item.ts","../../../projects/ngx-md3/src/lib/components/menu/menu-item/menu-item.html","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-header/side-sheet-header.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-header/side-sheet-header.html","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-body/side-sheet-body.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-body/side-sheet-body.html","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-actions/side-sheet-actions.ts","../../../projects/ngx-md3/src/lib/components/sheets/side-sheet-actions/side-sheet-actions.html","../../../projects/ngx-md3/src/lib/components/snackbar/snackbar-ref.ts","../../../projects/ngx-md3/src/lib/components/snackbar/snackbar.ts","../../../projects/ngx-md3/src/lib/components/snackbar/snackbar.html","../../../projects/ngx-md3/src/lib/components/snackbar/snackbar.service.ts","../../../projects/ngx-md3/src/lib/index.ts","../../../projects/ngx-md3/src/almoamendev-ngx-md3.ts"],"sourcesContent":["import { booleanAttribute, Directive, effect, ElementRef, input } from '@angular/core';\nimport { TextColor } from '../../types/text-color.type';\nimport { TextSize } from '../../types/text-size.type';\n\n@Directive({\n selector: 'md3-type-display, [md3-type-display]',\n host: {\n 'class': 'md3-text-display',\n '[class.md3-emphasized]': 'emphasized()',\n }\n})\nexport class TypeDisplay {\n public size = input<TextSize | 'default'>('default');\n public color = input<TextColor | 'default'>('default');\n public emphasized = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n constructor(public el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-text-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.color();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { booleanAttribute, Directive, effect, ElementRef, input } from '@angular/core';\nimport { TextColor } from '../../types/text-color.type';\nimport { TextSize } from '../../types/text-size.type';\n\n@Directive({\n selector: 'md3-type-headline, [md3-type-headline]',\n host: {\n 'class': 'md3-text-headline',\n '[class.md3-emphasized]': 'emphasized()',\n }\n})\nexport class TypeHeadline {\n public size = input<TextSize | 'default'>('default');\n public color = input<TextColor | 'default'>('default');\n public emphasized = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n constructor(public el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-text-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.color();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { booleanAttribute, Directive, effect, ElementRef, input } from '@angular/core';\nimport { TextColor } from '../../types/text-color.type';\nimport { TextSize } from '../../types/text-size.type';\n\n@Directive({\n selector: 'md3-type-title, [md3-type-title]',\n host: {\n 'class': 'md3-text-title',\n '[class.md3-emphasized]': 'emphasized()',\n }\n})\nexport class TypeTitle {\n public size = input<TextSize | 'default'>('default');\n public color = input<TextColor | 'default'>('default');\n public emphasized = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n constructor(public el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-text-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.color();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { booleanAttribute, Directive, effect, ElementRef, input } from '@angular/core';\nimport { TextColor } from '../../types/text-color.type';\nimport { TextSize } from '../../types/text-size.type';\n\n@Directive({\n selector: 'md3-type-body, [md3-type-body]',\n host: {\n 'class': 'md3-text-body',\n '[class.md3-emphasized]': 'emphasized()',\n }\n})\nexport class TypeBody {\n public size = input<TextSize | 'default'>('default');\n public color = input<TextColor | 'default'>('default');\n public emphasized = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n constructor(public el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-text-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.color();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { booleanAttribute, Directive, effect, ElementRef, input } from '@angular/core';\nimport { TextColor } from '../../types/text-color.type';\nimport { TextSize } from '../../types/text-size.type';\n\n@Directive({\n selector: 'md3-type-label, [md3-type-label]',\n host: {\n 'class': 'md3-text-label',\n '[class.md3-emphasized]': 'emphasized()',\n }\n})\nexport class TypeLabel {\n public size = input<TextSize | 'default'>('default');\n public color = input<TextColor | 'default'>('default');\n public emphasized = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n constructor(public el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-text-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.color();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter, fromEvent, map, startWith, Subscription } from 'rxjs';\nimport { ViewportWidth } from '../types/viewport-width.type';\nimport { ViewportHeight } from '../types/viewport-height.type';\n\nexport type Md3NavigationMode = 'none' | 'navigation-bar' | 'navigation-rail' | 'standard-drawer' | 'modal-drawer';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LayoutService {\n private readonly document = inject(DOCUMENT);\n private readonly breakpointObserver = inject(BreakpointObserver);\n // Optional — LayoutService (and anything built on Scaffold) shouldn't\n // hard-require the Router, only benefit from it when it's present.\n private readonly router = inject(Router, { optional: true });\n\n private readonly widthQueries: Record<ViewportWidth, string> = {\n 'compact': '(max-width: 37.499em)', // < 600\n 'medium': '(min-width: 37.5em) and (max-width: 52.499em)', // 600-839\n 'expanded': '(min-width: 52.5em) and (max-width: 74.999em)', // 840-1199\n 'large': '(min-width: 75em) and (max-width: 99.999em)', // 1200-1599\n 'extra-large': '(min-width: 100em)' // >=1600\n } as const;\n\n private readonly heightQueries: Record<ViewportHeight, string> = {\n 'compact': '(max-height: 29.999em)',\n 'medium': '(min-height: 30em) and (max-height: 56.249em)',\n 'expanded': '(min-height: 56.25em)'\n } as const;\n\n private mainPaneSub?: Subscription;\n private mainPaneEl?: HTMLElement;\n private panesContainerResizeObserver?: ResizeObserver;\n private panesContainerResizeListener?: () => void;\n\n readonly mainScrollTop = signal<number>(0);\n readonly mainIsScrolled = computed<boolean>(() => this.mainScrollTop() > 0);\n\n /**\n * Distance, in pixels, between the viewport bottom and the bottom edge of\n * the scaffold's .md3-panes-container — i.e. whatever the bottom scaffold\n * bar (nav bar) currently reserves, or 0 when there is none. Overlay-based\n * components anchored to the viewport bottom (like Snackbar) read this so\n * they never render lower than the panes container.\n */\n readonly bottomInset = signal<number>(0);\n\n public readonly viewport = toSignal(\n fromEvent(window, 'resize').pipe(\n startWith(null),\n map(() => ({\n width: window.innerWidth,\n height: window.innerHeight\n }))\n ),\n {\n initialValue: {\n width: window.innerWidth,\n height: window.innerHeight\n }\n }\n );\n\n public readonly widthClass = toSignal(\n this.breakpointObserver.observe(Object.values(this.widthQueries)).pipe(\n map((state): ViewportWidth => {\n if (state.breakpoints[this.widthQueries.compact]) {\n return 'compact';\n }\n\n if (state.breakpoints[this.widthQueries.medium]) {\n return 'medium';\n }\n\n if (state.breakpoints[this.widthQueries.expanded]) {\n return 'expanded';\n }\n\n if (state.breakpoints[this.widthQueries.large]) {\n return 'large';\n }\n\n return 'extra-large';\n })\n ),\n { initialValue: 'expanded' as ViewportWidth }\n );\n\n public readonly heightClass = toSignal(\n this.breakpointObserver.observe(Object.values(this.heightQueries)).pipe(\n map((state): ViewportHeight => {\n if (state.breakpoints[this.heightQueries.compact]) {\n return 'compact';\n }\n\n if (state.breakpoints[this.heightQueries.medium]) {\n return 'medium';\n }\n\n return 'expanded';\n })\n ),\n { initialValue: 'expanded' as ViewportHeight }\n );\n\n public readonly direction = signal<'ltr' | 'rtl'>(\n (this.document.documentElement.dir as 'ltr' | 'rtl') || 'ltr'\n );\n\n public readonly isCompact = computed(() => this.widthClass() === 'compact');\n public readonly isMedium = computed(() => this.widthClass() === 'medium');\n public readonly isExpanded = computed(() => this.widthClass() === 'expanded');\n public readonly isLarge = computed(() => this.widthClass() === 'large');\n public readonly isExtraLarge = computed(() => this.widthClass() === 'extra-large');\n\n public readonly isPortrait = computed(() => {\n const viewport = this.viewport();\n return viewport.height >= viewport.width;\n });\n\n public readonly isLandscape = computed(() => !this.isPortrait());\n\n public readonly preferredNavigationMode = computed(() => {\n switch (this.widthClass()) {\n case 'compact':\n return 'navigation-bar';\n\n case 'medium':\n return 'navigation-rail';\n\n case 'expanded':\n case 'large':\n case 'extra-large':\n return 'standard-drawer';\n }\n });\n\n public darkMode = signal<boolean>(true);\n\n constructor() {\n effect(() => {\n const darkMode = this.darkMode();\n this.document.body.classList.toggle('md-scheme-dark', darkMode);\n this.document.body.classList.toggle('md-scheme-light', !darkMode);\n });\n\n // Reset the scaffold's main pane to the top after every completed\n // navigation — otherwise a scrolled-down list page leaves the next\n // page's content scrolled down too, since the pane itself never\n // remounts on route change.\n this.router?.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntilDestroyed(),\n )\n .subscribe(() => this.scrollMainPaneToTop());\n }\n\n public setDirection(direction: 'ltr' | 'rtl'): void {\n this.document.documentElement.dir = direction;\n this.direction.set(direction);\n }\n\n private scrollMainPaneToTop(): void {\n this.mainPaneEl?.scrollTo({ top: 0 });\n this.mainScrollTop.set(0);\n }\n\n public registerMainPane(element: HTMLElement): void {\n this.mainPaneSub?.unsubscribe();\n this.mainPaneEl = element;\n\n const update = () => {\n const scrollTop = element.scrollTop;\n\n this.mainScrollTop.set(scrollTop);\n };\n\n update();\n\n this.mainPaneSub = new Subscription();\n\n element.addEventListener('scroll', update, { passive: true });\n\n this.mainPaneSub.add(() => {\n element.removeEventListener('scroll', update);\n });\n }\n\n public unregisterMainPane(element: HTMLElement): void {\n this.mainPaneSub?.unsubscribe();\n this.mainPaneSub = undefined;\n\n if (this.mainPaneEl === element) {\n this.mainPaneEl = undefined;\n }\n\n this.mainScrollTop.set(0);\n }\n\n public registerPanesContainer(element: HTMLElement): void {\n this.unregisterPanesContainer();\n\n const update = () => {\n const rect = element.getBoundingClientRect();\n this.bottomInset.set(Math.max(0, Math.round(window.innerHeight - rect.bottom)));\n };\n\n update();\n\n this.panesContainerResizeObserver = new ResizeObserver(update);\n this.panesContainerResizeObserver.observe(element);\n\n this.panesContainerResizeListener = update;\n window.addEventListener('resize', update, { passive: true });\n }\n\n public unregisterPanesContainer(): void {\n this.panesContainerResizeObserver?.disconnect();\n this.panesContainerResizeObserver = undefined;\n\n if (this.panesContainerResizeListener) {\n window.removeEventListener('resize', this.panesContainerResizeListener);\n this.panesContainerResizeListener = undefined;\n }\n\n this.bottomInset.set(0);\n }\n}\n","import { ComponentRef, InjectionToken, Type } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { SideSheetConfig, SideSheetContainer, SideSheetSide, SideSheetType } from '../../../interfaces/side-sheet-config.interface';\nimport { SideSheet } from './side-sheet';\n\nexport const SIDE_SHEET_DATA = new InjectionToken<unknown>('MD3_SIDE_SHEET_DATA');\nexport const SIDE_SHEET_CONFIG = new InjectionToken<SideSheetConfig>('MD3_SIDE_SHEET_CONFIG');\nexport const SIDE_SHEET_COMPONENT = new InjectionToken<Type<unknown>>('MD3_SIDE_SHEET_COMPONENT');\n\nconst SIDE_SHEET_EXIT_ANIMATION_FALLBACK_MS = 300;\n\nexport class SideSheetRef<T = unknown, R = unknown> {\n private readonly closed = new Subject<R | undefined>();\n private isClosed = false;\n private isHidden = false;\n private sheetComponentRef?: ComponentRef<SideSheet>;\n\n public componentInstance?: T;\n public sheetInstance?: SideSheetContainer;\n\n constructor(\n public readonly side: SideSheetSide,\n private readonly onClosed: () => void,\n ) {\n }\n\n public attachSheetComponentRef(sheetComponentRef: ComponentRef<SideSheet>): void {\n this.sheetComponentRef = sheetComponentRef;\n this.sheetInstance = sheetComponentRef.instance as SideSheetContainer;\n }\n\n public setSide(side: SideSheetSide): void {\n this.sheetComponentRef?.instance?.side.set(side);\n }\n\n public setSheetType(type: SideSheetType): void {\n this.sheetComponentRef?.instance?.sheetType.set(type);\n }\n\n public setInset(isInset: boolean): void {\n this.sheetComponentRef?.instance?.isInset.set(isInset);\n }\n\n public setDivider(showDivider: boolean): void {\n this.sheetComponentRef?.instance?.showDivider.set(showDivider);\n }\n\n public hide(): void {\n this.isHidden = true;\n this.sheetInstance?.setHidden(true);\n }\n\n public show(): void {\n this.isHidden = false;\n this.sheetInstance?.setHidden(false);\n this.sheetInstance?.showSheet(true);\n }\n\n public close(result?: R): void {\n if (this.isClosed) {\n return;\n }\n\n this.isClosed = true;\n this.startCloseAnimation().then(() => {\n this.destroySheet();\n this.onClosed();\n this.closed.next(result);\n this.closed.complete();\n });\n }\n\n public dispose(result?: R): void {\n if (this.isClosed) {\n return;\n }\n\n this.isClosed = true;\n this.destroySheet();\n this.onClosed();\n this.closed.next(result);\n this.closed.complete();\n }\n\n public afterClosed(): Observable<R | undefined> {\n return this.closed.asObservable();\n }\n\n private destroySheet(): void {\n this.sheetComponentRef?.destroy();\n this.sheetComponentRef = undefined;\n this.sheetInstance = undefined;\n }\n\n private startCloseAnimation(): Promise<void> {\n const animatedElement = this.sheetInstance?.element;\n\n if (this.isHidden) {\n return Promise.resolve();\n }\n\n this.sheetInstance?.setHidden(false);\n this.sheetInstance?.showSheet(false);\n\n return new Promise((resolve) => {\n if (!animatedElement) {\n resolve();\n return;\n }\n\n let isResolved = false;\n const timeoutId = setTimeout(done, SIDE_SHEET_EXIT_ANIMATION_FALLBACK_MS);\n\n function done(): void {\n if (isResolved) {\n return;\n }\n\n isResolved = true;\n clearTimeout(timeoutId);\n animatedElement!.removeEventListener('transitionend', onTransitionEnd);\n resolve();\n }\n\n function onTransitionEnd(event: TransitionEvent): void {\n if (event.target === animatedElement) {\n done();\n }\n }\n\n animatedElement.addEventListener('transitionend', onTransitionEnd);\n });\n }\n}\n","import { CdkPortalOutlet, ComponentPortal } from '@angular/cdk/portal';\nimport { AfterContentInit, Component, ComponentRef, computed, effect, ElementRef, inject, Injector, signal, Type, ViewChild } from '@angular/core';\nimport { SIDE_SHEET_CONFIG, SideSheetRef } from './side-sheet-ref';\nimport { SideSheetConfig, SideSheetSide, SideSheetType } from '../../../interfaces/side-sheet-config.interface';\nimport { LayoutService } from '../../../foundations/layout.service';\n\n@Component({\n selector: 'md3-side-sheet',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: './side-sheet.html',\n styleUrl: './side-sheet.scss',\n host: {\n '[class.md3-active]': 'isActive()',\n '[class.md3-hidden]': 'isHidden()',\n '[class.md3-start]': 'side() === \"start\"',\n '[class.md3-end]': 'side() === \"end\"',\n '[class.md3-inset]': 'isInset()',\n '[class.md3-show-divider]': 'showDivider()',\n },\n})\nexport class SideSheet implements AfterContentInit {\n @ViewChild(CdkPortalOutlet, { static: true })\n private readonly portalOutlet!: CdkPortalOutlet;\n\n protected readonly config = inject<SideSheetConfig>(SIDE_SHEET_CONFIG, { optional: true }) ?? {};\n private readonly sideSheetRef = inject<SideSheetRef>(SideSheetRef, { optional: true });\n\n public readonly isActive = signal<boolean>(false);\n public readonly isHidden = signal<boolean>(false);\n public readonly side = signal<SideSheetSide>(this.config.side ?? 'end');\n public readonly sheetType = signal<SideSheetType>(this.config.type ?? 'default');\n public readonly isInset = signal<boolean>(this.config.inset ?? false);\n public readonly showDivider = signal<boolean>(this.config.divider ?? false);\n private readonly resolvedSheetType = computed<SideSheetType>(() => {\n if (this.layoutService.isMedium() || this.layoutService.isCompact()) {\n return 'modal';\n }\n \n return this.sheetType();\n });\n\n constructor(\n private layoutService: LayoutService,\n private el: ElementRef<HTMLElement>\n ) {\n effect((onCleanUp) => {\n const type = 'md3-style-' + this.resolvedSheetType();\n this.element.classList.add(type);\n\n onCleanUp(() => {\n this.element.classList.remove(type);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n ngAfterContentInit(): void {\n requestAnimationFrame(() => {\n this.showSheet(true);\n });\n }\n\n public showSheet(value: boolean): void {\n this.isActive.set(value);\n }\n\n public setHidden(value: boolean): void {\n this.isHidden.set(value);\n }\n\n public close(): void {\n this.sideSheetRef?.close();\n }\n\n public attachContent<T>(component: Type<T>, injector: Injector): ComponentRef<T> {\n const portal = new ComponentPortal(component, this.config.viewContainerRef ?? null, injector);\n\n return this.portalOutlet.attachComponentPortal(portal);\n }\n}\n","<div class=\"md3-side-sheet-scrim\" (click)=\"close()\"></div>\n<div class=\"md3-side-sheet-container\">\n <ng-template cdkPortalOutlet></ng-template>\n</div>\n","import { Component, ComponentRef, Injector, inputBinding, Type, ViewChild, ViewContainerRef } from '@angular/core';\nimport { SideSheet } from './side-sheet';\n\nexport interface SideSheetStackItem<T> {\n sheetComponentRef: ComponentRef<SideSheet>;\n contentComponentRef: ComponentRef<T>;\n}\n\n@Component({\n selector: 'md3-side-sheet-stack',\n template: '<ng-container #container></ng-container>',\n styles: [`\n :host {\n display: grid;\n min-width: 0;\n min-height: 0;\n height: 100%;\n }\n\n :host ::ng-deep md3-side-sheet {\n grid-area: 1 / 1;\n }\n `],\n})\nexport class SideSheetStack {\n @ViewChild('container', { read: ViewContainerRef, static: true })\n private readonly container!: ViewContainerRef;\n\n public createSheet<T>(component: Type<T>, injector: Injector): SideSheetStackItem<T> {\n const sheetComponentRef = this.container.createComponent(SideSheet, {\n injector: injector,\n });\n\n sheetComponentRef.changeDetectorRef.detectChanges();\n\n const contentComponentRef = sheetComponentRef.instance.attachContent(component, injector);\n\n sheetComponentRef.changeDetectorRef.detectChanges();\n\n return {\n sheetComponentRef,\n contentComponentRef,\n };\n }\n}\n","import { ComponentRef, inject, Injectable, Injector, Type } from '@angular/core';\nimport { CdkPortalOutlet, ComponentPortal } from '@angular/cdk/portal';\nimport { SideSheetStack } from './side-sheet/side-sheet-stack';\nimport {\n SIDE_SHEET_COMPONENT,\n SIDE_SHEET_CONFIG,\n SIDE_SHEET_DATA,\n SideSheetRef,\n} from './side-sheet/side-sheet-ref';\nimport { SideSheetConfig, SideSheetSide, SideSheetType } from '../../interfaces/side-sheet-config.interface';\n\ninterface ResolvedSideSheetConfig<D = unknown> extends SideSheetConfig<D> {\n data: D | undefined;\n bindDataToInputs: boolean;\n side: SideSheetSide;\n type: SideSheetType;\n inset: boolean;\n divider: boolean;\n closeExisting: boolean;\n injector: Injector;\n}\n\ninterface SideSheetOutletState<T = unknown, R = unknown> {\n outlet: CdkPortalOutlet;\n stackComponentRef: ComponentRef<SideSheetStack>;\n refs: SideSheetRef<T, R>[];\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SheetsService {\n private readonly injector = inject(Injector);\n\n /**\n * Outlets registered per side, from the page scaffold up to whatever took\n * them over last. Sheets always open in the outlet on top, so a full screen\n * dialog can host them while it is up and hand them back when it closes.\n */\n private readonly states = new Map<SideSheetSide, SideSheetOutletState[]>();\n\n public registerSideSheetOutlet(side: SideSheetSide, outlet: CdkPortalOutlet): void {\n const stack = this.getOutletStack(side);\n\n if (stack.some((state) => state.outlet === outlet)) {\n return;\n }\n\n if (outlet.hasAttached()) {\n outlet.detach();\n }\n\n const stackPortal = new ComponentPortal(SideSheetStack, null, this.injector);\n const stackComponentRef = outlet.attachComponentPortal(stackPortal);\n\n stack.push({\n outlet,\n stackComponentRef,\n refs: [],\n });\n }\n\n public unregisterSideSheetOutlet(side: SideSheetSide, outlet: CdkPortalOutlet): void {\n const stack = this.states.get(side);\n const index = stack?.findIndex((state) => state.outlet === outlet) ?? -1;\n\n if (!stack || index === -1) {\n return;\n }\n\n // Sheets opened in this outlet go with it, and the outlet underneath\n // becomes the one new sheets open in.\n this.disposeOutletState(stack[index]);\n stack.splice(index, 1);\n\n if (stack.length === 0) {\n this.states.delete(side);\n }\n }\n\n public openSideSheet<T = unknown, D = unknown, R = unknown>(\n component: Type<T>,\n config: SideSheetConfig<D> = {},\n ): SideSheetRef<T, R> {\n const sheetConfig = this.mergeConfig(config);\n const state = this.activeState(sheetConfig.side);\n\n if (!state) {\n throw new Error(`No ${sheetConfig.side} side sheet outlet is registered.`);\n }\n\n if (sheetConfig.closeExisting) {\n this.disposeSideSheetRefs(state);\n } else {\n this.getVisibleRef(state)?.hide();\n }\n\n const sheetRef = new SideSheetRef<T, R>(\n sheetConfig.side,\n () => this.removeSideSheetRef(state, sheetRef as SideSheetRef),\n );\n const injector = this.createInjector(component, sheetConfig, sheetRef);\n const { sheetComponentRef, contentComponentRef } = state.stackComponentRef.instance.createSheet(\n component,\n injector,\n );\n\n sheetRef.attachSheetComponentRef(sheetComponentRef);\n this.bindDataToInputs(contentComponentRef, sheetConfig);\n sheetRef.componentInstance = contentComponentRef.instance;\n state.refs.push(sheetRef as SideSheetRef);\n\n return sheetRef;\n }\n\n public closeSideSheet<R = unknown>(side: SideSheetSide = 'end', result?: R): void {\n this.getVisibleRef(this.activeState(side))?.close(result);\n }\n\n /** Outlet that sheets currently open in: the last one that registered. */\n private activeState(side: SideSheetSide): SideSheetOutletState | undefined {\n const stack = this.states.get(side);\n\n return stack?.[stack.length - 1];\n }\n\n private getOutletStack(side: SideSheetSide): SideSheetOutletState[] {\n const stack = this.states.get(side) ?? [];\n\n if (!this.states.has(side)) {\n this.states.set(side, stack);\n }\n\n return stack;\n }\n\n private mergeConfig<D>(config: SideSheetConfig<D>): ResolvedSideSheetConfig<D> {\n return {\n data: config.data,\n bindDataToInputs: config.bindDataToInputs ?? false,\n side: config.side ?? 'end',\n type: config.type ?? 'default',\n inset: config.inset ?? false,\n divider: config.divider ?? false,\n closeExisting: config.closeExisting ?? false,\n viewContainerRef: config.viewContainerRef,\n injector: config.injector ?? this.injector,\n };\n }\n\n private createInjector<T, D, R>(\n component: Type<T>,\n config: ResolvedSideSheetConfig<D>,\n sheetRef: SideSheetRef<T, R>,\n ): Injector {\n return Injector.create({\n parent: config.injector,\n providers: [\n { provide: SideSheetRef, useValue: sheetRef },\n { provide: SIDE_SHEET_DATA, useValue: config.data },\n { provide: SIDE_SHEET_CONFIG, useValue: config },\n { provide: SIDE_SHEET_COMPONENT, useValue: component },\n ],\n });\n }\n\n private bindDataToInputs<T, D>(\n componentRef: ComponentRef<T>,\n config: ResolvedSideSheetConfig<D>,\n ): void {\n if (!config.bindDataToInputs || !this.canBindDataToInputs(config.data)) {\n return;\n }\n\n Object.entries(config.data).forEach(([inputName, inputValue]) => {\n componentRef.setInput(inputName, inputValue);\n });\n }\n\n private canBindDataToInputs(data: unknown): data is Record<string, unknown> {\n return typeof data === 'object' && data !== null && !Array.isArray(data);\n }\n\n private disposeOutletState(state: SideSheetOutletState): void {\n this.disposeSideSheetRefs(state);\n\n if (state.outlet.hasAttached()) {\n state.outlet.detach();\n }\n }\n\n private disposeSideSheetRefs(state: SideSheetOutletState): void {\n const refs = [...state.refs];\n\n state.refs.length = 0;\n\n refs.forEach((ref) => {\n ref.dispose();\n });\n }\n\n private removeSideSheetRef(state: SideSheetOutletState, sheetRef: SideSheetRef): void {\n const index = state.refs.indexOf(sheetRef);\n\n if (index === -1) {\n return;\n }\n\n state.refs.splice(index, 1);\n this.getVisibleRef(state)?.show();\n }\n\n private getVisibleRef(state: SideSheetOutletState | undefined): SideSheetRef | undefined {\n if (!state || state.refs.length === 0) {\n return undefined;\n }\n\n return state.refs[state.refs.length - 1];\n }\n}\n","import { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { AfterViewInit, Component, ElementRef, inject, OnDestroy, viewChild } from '@angular/core';\nimport { SheetsService } from '../../components/sheets/sheets.service';\nimport { LayoutService } from '../layout.service';\n\n@Component({\n selector: 'md3-scaffold',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: './scaffold.html',\n styleUrl: './scaffold.scss',\n})\nexport class Scaffold implements AfterViewInit, OnDestroy {\n private startOutlet = viewChild('startOutlet', { read: CdkPortalOutlet });\n private endOutlet = viewChild('endOutlet', { read: CdkPortalOutlet });\n private panesContainer = viewChild<ElementRef<HTMLElement>>('panesContainer');\n private sheets = inject(SheetsService);\n private layout = inject(LayoutService);\n\n ngAfterViewInit(): void {\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n const panesContainer = this.panesContainer();\n\n if (startOutlet) {\n this.sheets.registerSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.registerSideSheetOutlet('end', endOutlet);\n }\n\n if (panesContainer) {\n this.layout.registerPanesContainer(panesContainer.nativeElement);\n }\n }\n\n ngOnDestroy(): void {\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n\n if (startOutlet) {\n this.sheets.unregisterSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.unregisterSideSheetOutlet('end', endOutlet);\n }\n\n this.layout.unregisterPanesContainer();\n }\n}\n","<ng-content select=\"[md3-scaffold-bar=top]\"></ng-content>\n<ng-content select=\"[md3-scaffold-rail=leading]\"></ng-content>\n\n<div class=\"md3-panes-container\" #panesContainer>\n <div class=\"md3-pane md3-pane-start\">\n <ng-content select=\"[md3-scaffold-pane=start]\"></ng-content>\n <ng-template #startOutlet cdkPortalOutlet></ng-template>\n </div>\n <div class=\"md3-pane md3-pane-main\">\n <ng-content select=\"[md3-scaffold-pane=main]\"></ng-content>\n </div>\n <div class=\"md3-pane md3-pane-end\">\n <ng-content select=\"[md3-scaffold-pane=end]\"></ng-content>\n <ng-template #endOutlet cdkPortalOutlet></ng-template>\n </div>\n</div>\n\n<ng-content select=\"[md3-scaffold-rail=trailing]\"></ng-content>\n<ng-content select=\"[md3-scaffold-bar=bottom]\"></ng-content>","import { Directive, input } from '@angular/core';\n\n@Directive({\n selector: '[md3-scaffold-bar]'\n})\nexport class ScaffoldBar {\n public region = input.required<'top' | 'bottom'>({\n alias: 'md3-scaffold-bar',\n });\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n selector: '[md3-scaffold-rail]'\n})\nexport class ScaffoldRail {\n public region = input.required<'leading' | 'trailing'>({\n alias: 'md3-scaffold-rail',\n });\n}\n","import { CdkScrollable } from '@angular/cdk/scrolling';\nimport { Directive, effect, ElementRef, input, OnDestroy } from '@angular/core';\nimport { LayoutService } from './layout.service';\n\n@Directive({\n selector: '[md3-scaffold-pane]',\n host: {\n class: 'md3-scrollable',\n },\n hostDirectives: [\n CdkScrollable,\n ],\n})\nexport class ScaffoldPane implements OnDestroy {\n public role = input.required<'main' | 'start' | 'end'>({\n alias: 'md3-scaffold-pane',\n });\n\n constructor(\n private el: ElementRef,\n private layout: LayoutService\n ) {\n effect(() => {\n if (this.role() == 'main') {\n this.layout.registerMainPane(this.el.nativeElement);\n } else {\n this.layout.unregisterMainPane(this.el.nativeElement);\n }\n });\n }\n\n ngOnDestroy(): void {\n if (this.role() == 'main') {\n this.layout.unregisterMainPane(this.el.nativeElement);\n }\n }\n}\n","import { computed, Directive, inject, input } from '@angular/core';\nimport { LayoutService } from './layout.service';\nimport { ViewportWidth } from '../types/viewport-width.type';\n\nconst GRID_COLUMNS_BY_WIDTH: Record<ViewportWidth, number> = {\n 'compact': 4,\n 'medium': 8,\n 'expanded': 8,\n 'large': 12,\n 'extra-large': 12,\n};\n\n@Directive({\n selector: 'md3-grid, [md3-grid]',\n host: {\n 'class': 'md3-grid',\n '[style.--md-grid-columns]': 'columns()',\n }\n})\nexport class Grid {\n private readonly layout = inject(LayoutService);\n\n // overrides the window-size-class column count when set — e.g. to simulate a screen size\n public readonly cols = input<number | undefined>(undefined, {\n alias: 'cols',\n });\n\n protected readonly columns = computed(() => this.cols() ?? GRID_COLUMNS_BY_WIDTH[this.layout.widthClass()]);\n}\n","import { computed, Directive, input, numberAttribute } from '@angular/core';\n\n@Directive({\n selector: 'md3-grid-item, [md3-grid-item]',\n host: {\n 'class': 'md3-grid-item',\n '[style.grid-column]': 'span()',\n }\n})\nexport class GridItem {\n public readonly colSpan = input(1, {\n alias: 'col-span',\n transform: numberAttribute,\n });\n\n protected readonly span = computed(() => `span ${this.colSpan()}`);\n}\n","import { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n selector: '[md3-input-element]',\n host: {\n 'class': 'md3-input-element'\n }\n})\nexport class InputElement {\n constructor(private el: ElementRef<HTMLInputElement>) { }\n\n public get nativeElement(): HTMLInputElement {\n return this.el.nativeElement;\n }\n}\n","import { Directive, effect, ElementRef, HostListener, Input, OnInit, Renderer2, signal } from '@angular/core';\n\n@Directive({\n selector: '[md3-state-component]',\n host: {\n class: 'md3-state-component',\n },\n})\nexport class StateComponent implements OnInit {\n private stateLayer?: HTMLDivElement;\n private stateLayerSignal = signal<boolean>(true);\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {\n effect(() => {\n if (this.stateLayerSignal()) {\n this.enable();\n } else {\n this.disable();\n }\n });\n }\n\n ngOnInit(): void {\n this.init();\n }\n\n private init(): void {\n if (!this.stateLayerSignal() || this.stateLayer) {\n return;\n }\n\n let layer = this.el.nativeElement.querySelector(\n ':scope > .md3-state-layer'\n ) as HTMLDivElement | null;\n\n if (!layer) {\n // Create the state layer and insert as the first child\n layer = this.renderer.createElement('div') as HTMLDivElement;\n this.renderer.addClass(layer, 'md3-state-layer');\n\n this.renderer.appendChild(\n this.el.nativeElement,\n layer\n );\n\n }\n\n this.stateLayer = layer;\n }\n\n public setStateLayer(value: boolean) {\n this.stateLayerSignal.set(value);\n }\n\n private enable(): void {\n this.el.nativeElement.classList.add('md3-state-component');\n this.init();\n }\n\n private disable(): void {\n this.el.nativeElement.classList.remove('md3-state-component');\n this.stateLayer?.remove();\n this.stateLayer = undefined;\n }\n\n @HostListener('pointerdown', ['$event'])\n onPointerDown(event: PointerEvent): void {\n if (!this.stateLayer) {\n return;\n }\n\n const rect = this.el.nativeElement.getBoundingClientRect();\n const w = Math.max(rect.width, rect.height);\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n\n this.stateLayer.style.setProperty('--ripple-w', `${w}px`);\n this.stateLayer.style.setProperty('--ripple-x', `${x}px`);\n this.stateLayer.style.setProperty('--ripple-y', `${y}px`);\n }\n}\n","import { Directive, ElementRef, input } from '@angular/core';\n\n@Directive({\n selector: '[md3-icon-element]',\n host: {\n 'class': 'md3-icon-element'\n }\n})\nexport class IconElement {\n public iconType = input<string | null>(null, {\n alias: 'md3-icon-element',\n });\n\n constructor(private el: ElementRef) { }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { Component, ElementRef, input, booleanAttribute, effect } from '@angular/core';\n\n@Component({\n selector: 'md3-icon',\n imports: [],\n templateUrl: './material-icon.html',\n styleUrl: './material-icon.scss',\n host: {\n '[class.md3-filled]': 'isFilled()',\n '[class.md3-bi-directional]': 'biDirectional()',\n },\n})\nexport class MaterialIcon {\n public iconVersion = input<'MaterialIcons' | 'MaterialSymbols'>('MaterialSymbols', {\n alias: 'icon-version',\n });\n public isFilled = input<boolean, unknown>(false, {\n alias: 'filled',\n transform: booleanAttribute\n });\n public iconStyle = input<'normal' | 'outlined' | 'rounded' | 'sharp' | 'two-tone'>('normal', {\n alias: 'icon-style',\n });\n public iconSize = input<48 | 36 | 24 | 18>(24, {\n alias: 'icon-size',\n });\n public biDirectional = input<boolean, unknown>(false, {\n alias: 'bi-directional',\n transform: booleanAttribute\n });\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const iconSize = 'md3-' + this.iconSize().toString();\n this.element.classList.add(iconSize);\n\n onCleanup(() => {\n this.element.classList.remove(iconSize);\n });\n });\n\n effect((onCleanup) => {\n let iconStyle = this.iconStyle() == 'normal' ? null : this.iconStyle();\n\n if (this.iconVersion() == 'MaterialSymbols') {\n this.element.classList.add('md3-symbol');\n\n if (iconStyle == 'two-tone') {\n iconStyle = null;\n }\n }\n\n if (iconStyle !== null) {\n this.element.classList.add('md3-' + iconStyle);\n }\n\n onCleanup(() => {\n this.element.classList.remove('md3-symbol', 'md3-' + iconStyle);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","<ng-content></ng-content>","import { Directive, input } from '@angular/core';\n\n@Directive({\n selector: 'md3-divider'\n})\nexport class Divider {\n public dividerType = input<string | null>(null, {\n alias: 'type',\n });\n}\n","import { booleanAttribute, Directive, ElementRef, input } from '@angular/core';\n\n@Directive({\n selector: 'md3-badge',\n host: {\n '[class.md3-small]': 'isSmall()',\n },\n})\nexport class Badge {\n public isSmall = input<boolean, unknown>(false, {\n alias: 'small',\n transform: booleanAttribute,\n });\n\n constructor(private el: ElementRef) {\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","import { Directive } from '@angular/core';\nimport { StateComponent } from './state-component';\n\n@Directive({\n selector: '[md3-avatar]',\n host: {\n 'class': 'md3-avatar',\n },\n hostDirectives: [\n StateComponent,\n ],\n})\nexport class Avatar {\n constructor() { }\n}\n","import { InjectionToken, Signal } from \"@angular/core\";\nimport { IconButtonWidth } from \"../types/icon-button-width.type\";\nimport { ButtonSize } from \"../types/button-size.type\";\nimport { SplitButtonType } from \"../types/split-button-type.type\";\nimport { ButtonGroupSelection } from \"../types/button-group-selection.type\";\n\nexport interface ButtonContext {\n buttonContextSize?: Signal<ButtonSize>;\n buttonContextType?: Signal<SplitButtonType>;\n buttonContextWidth?: Signal<IconButtonWidth>;\n buttonContextSquared?: Signal<boolean>;\n buttonContextExtended?: Signal<boolean>;\n buttonContextSelection?: Signal<ButtonGroupSelection>;\n}\n\nexport const MD3_BUTTON_CONTEXT = new InjectionToken<ButtonContext>('MD3_BUTTON_CONTEXT');","import { booleanAttribute, Component, computed, effect, ElementRef, HostListener, inject, input, model } from '@angular/core';\nimport { StateComponent } from '../../common/state-component';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { ButtonType } from '../../../types/button-type.type';\nimport { MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\n\n@Component({\n selector: 'button[md3-button], a[md3-button]',\n imports: [],\n templateUrl: './button.html',\n styleUrl: './button.scss',\n host: {\n '[class.md3-square]': 'effectiveSquared()',\n },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class Button {\n private context = inject(MD3_BUTTON_CONTEXT, { optional: true });\n \n @HostListener('click', ['$event']) onClick(event: Event): void {\n if (this.isSelected() === null) {\n return;\n }\n\n if (this.context?.buttonContextSelection?.() === 'single') {\n return;\n }\n\n this.isSelected.update((value) => {\n return !value;\n });\n }\n\n public buttonSize = input<ButtonSize>('small', {\n alias: 'button-size',\n });\n public buttonType = input<ButtonType>('filled', {\n alias: 'button-type',\n });\n public isSquared = input<boolean, unknown>(false, {\n alias: 'button-squared',\n transform: booleanAttribute,\n });\n public isSelected = model<boolean | null>(null, {\n alias: 'selected',\n });\n\n public effectiveSize = computed(() => this.context?.buttonContextSize?.() ?? this.buttonSize());\n public effectiveType = computed(() => this.context?.buttonContextType?.() ?? this.buttonType());\n public effectiveSquared = computed(() => this.context?.buttonContextSquared?.() ?? this.isSquared());\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-' + this.effectiveSize();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const type = 'md3-' + this.effectiveType();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect(() => {\n const toggle = this.isSelected() !== null;\n\n if (toggle) {\n this.element.classList.add('md3-toggle');\n this.element.classList.toggle('md3-selected', this.isSelected() ?? false);\n } else {\n this.element.classList.remove('md3-toggle', 'md3-selected');\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n public enableSelection() {\n this.isSelected.update((current) => {\n if (current !== null) {\n return current;\n }\n\n return false;\n });\n }\n}\n","<ng-content select=\"[md3-icon-element=leading]\"></ng-content>\n<div class=\"md3-label\">\n <ng-content></ng-content>\n</div>\n<ng-content select=\"[md3-icon-element=trailing]\"></ng-content>","import { booleanAttribute, Component, computed, effect, ElementRef, inject, input } from '@angular/core';\nimport { StateComponent } from '../../common/state-component';\nimport { FabType } from '../../../types/fab-type.type';\nimport { MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\nimport { FabSize } from '../../../types/fab-size.type';\n\n@Component({\n selector: 'button[md3-fab], a[md3-fab]',\n imports: [],\n templateUrl: './floating-action-button.html',\n styleUrl: './floating-action-button.scss',\n host: {\n '[class.md3-extended-fab]': 'effectiveExtended()',\n },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class FloatingActionButton {\n private context = inject(MD3_BUTTON_CONTEXT, { optional: true });\n \n public buttonSize = input<FabSize>('small', {\n alias: 'button-size',\n });\n public buttonType = input<FabType>('tonal-primary', {\n alias: 'button-type',\n });\n public isExtended = input<boolean, unknown>(false, {\n alias: 'extended',\n transform: booleanAttribute,\n });\n\n public effectiveSize = computed(() => this.context?.buttonContextSize?.() ?? this.buttonSize());\n public effectiveExtended = computed(() => this.context?.buttonContextExtended?.() ?? this.isExtended());\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const buttonSize = 'md3-' + this.effectiveSize();\n this.element.classList.add(buttonSize);\n\n onCleanup(() => {\n this.element.classList.remove(buttonSize);\n });\n });\n\n effect((onCleanup) => {\n const buttonType = 'md3-' + this.buttonType();\n this.element.classList.add(buttonType);\n\n onCleanup(() => {\n this.element.classList.remove(buttonType);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","<ng-content select=\"[md3-icon-element]\"></ng-content>\n<div class=\"md3-icon-label-space\"></div>\n<div class=\"md3-label\">\n <ng-content></ng-content>\n</div>","import { booleanAttribute, Component, computed, effect, ElementRef, HostListener, inject, input, model } from '@angular/core';\nimport { StateComponent } from '../../common/state-component';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { IconButtonType } from '../../../types/icon-button-type.type';\nimport { IconButtonWidth } from '../../../types/icon-button-width.type';\nimport { MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\n\n@Component({\n selector: 'button[md3-icon-button], a[md3-icon-button]',\n imports: [],\n templateUrl: './icon-button.html',\n styleUrl: './icon-button.scss',\n host: {\n '[class.md3-square]': 'effectiveSquared()',\n },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class IconButton {\n private context = inject(MD3_BUTTON_CONTEXT, { optional: true });\n \n @HostListener('click', ['$event']) onClick(event: Event): void {\n if (this.isSelected() === null) {\n return;\n }\n\n if (this.context?.buttonContextSelection?.() === 'single') {\n return;\n }\n\n this.isSelected.update((value) => {\n return !value;\n });\n }\n\n public buttonSize = input<ButtonSize>('small', {\n alias: 'button-size',\n });\n public buttonType = input<IconButtonType>('filled', {\n alias: 'button-type',\n });\n public buttonWidth = input<IconButtonWidth>('default', {\n alias: 'button-width',\n });\n public isSquared = input<boolean, unknown>(false, {\n alias: 'button-squared',\n transform: booleanAttribute\n });\n public isSelected = model<boolean | null>(null, {\n alias: 'selected',\n });\n\n public effectiveSize = computed(() => this.context?.buttonContextSize?.() ?? this.buttonSize());\n public effectiveType = computed(() => {\n const contextType = this.context?.buttonContextType?.();\n if (contextType) {\n return contextType == 'elevated' ? 'standard' : contextType;\n }\n \n return this.buttonType();\n });\n public effectiveWidth = computed(() => this.context?.buttonContextWidth?.() ?? this.buttonWidth());\n public effectiveSquared = computed(() => this.context?.buttonContextSquared?.() ?? this.isSquared());\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-' + this.effectiveSize();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const type = 'md3-' + this.effectiveType();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect((onCleanup) => {\n const width = 'md3-' + this.effectiveWidth();\n this.element.classList.add(width);\n\n onCleanup(() => {\n this.element.classList.remove(width);\n });\n });\n\n effect(() => {\n const toggle = this.isSelected() !== null;\n\n if (toggle) {\n this.element.classList.add('md3-toggle');\n this.element.classList.toggle('md3-selected', this.isSelected() ?? false);\n } else {\n this.element.classList.remove('md3-toggle', 'md3-selected');\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n public enableSelection() {\n this.isSelected.update((current) => {\n if (current !== null) {\n return current;\n }\n\n return false;\n });\n }\n}\n","<ng-content select=\"[md3-icon-element]\"></ng-content>\n<ng-content></ng-content>","import { booleanAttribute, Component, contentChild, contentChildren, effect, ElementRef, input, signal, Signal } from '@angular/core';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { SplitButtonType } from '../../../types/split-button-type.type';\nimport { Button } from '../button/button';\nimport { IconButton } from '../icon-button/icon-button';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\nimport { IconButtonWidth } from '../../../types/icon-button-width.type';\n\n@Component({\n selector: 'md3-split-button',\n imports: [\n ],\n templateUrl: './split-button.html',\n styleUrl: './split-button.scss',\n host: {\n 'role': 'group',\n },\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: SplitButton,\n },\n ],\n})\nexport class SplitButton implements ButtonContext {\n public buttonSize = input<ButtonSize>('small', {\n alias: 'button-size',\n });\n public buttonType = input<SplitButtonType>('filled', {\n alias: 'button-type',\n });\n\n public flipTrailingIcon = input<boolean, unknown>(true, {\n alias: 'flip-trailing-icon',\n transform: booleanAttribute,\n });\n\n private button = contentChild<Button>(Button);\n private iconButtons = contentChildren<IconButton>(IconButton);\n\n // context values\n buttonContextSize: Signal<ButtonSize> = this.buttonSize;\n buttonContextType: Signal<SplitButtonType> = this.buttonType;\n buttonContextWidth: Signal<IconButtonWidth> = signal('default');\n buttonContextSquared?: Signal<boolean> = signal(false);\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-' + this.buttonSize();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const type = 'md3-' + this.buttonType();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n \n effect(() => {\n this.button()?.isSelected.set(null);\n });\n \n effect(() => {\n this.iconButtons().forEach((iconButton) => {\n iconButton.isSelected.set(null);\n \n if (iconButton?.element.hasAttribute('md3-main-action')) {\n return;\n }\n\n iconButton.element.classList.toggle('md3-flip-icon', this.flipTrailingIcon());\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","<ng-content select=\"button[md3-button], button[md3-icon-button][md3-main-action], a[md3-button], a[md3-icon-button][md3-main-action]\"></ng-content>\n<ng-content select=\"button[md3-icon-button], a[md3-icon-button]\"></ng-content>","import { Component, contentChildren, effect, ElementRef, HostListener, input, InputSignal, Signal } from '@angular/core';\nimport { Button } from '../button/button';\nimport { IconButton } from '../icon-button/icon-button';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { ButtonGroupSelection } from '../../../types/button-group-selection.type';\nimport { ButtonGroupType } from '../../../types/button-group-type.type';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\n\n@Component({\n selector: 'md3-button-group',\n templateUrl: './button-group.html',\n styleUrl: './button-group.scss',\n host: {\n 'role': 'group',\n },\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: ButtonGroup,\n },\n ],\n})\nexport class ButtonGroup implements ButtonContext {\n @HostListener('click', ['$event']) onClick(event: PointerEvent): void {\n if (this.groupSelection() !== 'single') {\n return;\n }\n\n const selectedItem = this.findEventButton(event);\n\n if (!selectedItem) {\n return;\n }\n\n this.clearOtherSelections(selectedItem);\n selectedItem.isSelected.set(true);\n }\n \n public buttonSize: InputSignal<ButtonSize> = input<ButtonSize>('small', {\n alias: 'button-size',\n });\n public groupType: InputSignal<ButtonGroupType> = input<ButtonGroupType>('standard', {\n alias: 'group-type',\n });\n public groupSelection: InputSignal<ButtonGroupSelection> = input<ButtonGroupSelection>('none', {\n alias: 'selection',\n });\n\n private buttons = contentChildren<Button>(Button, { descendants: true });\n private iconButtons = contentChildren<IconButton>(IconButton, { descendants: true });\n \n // context values\n buttonContextSize: Signal<ButtonSize> = this.buttonSize;\n buttonContextSelection: Signal<ButtonGroupSelection> = this.groupSelection;\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const size = 'md3-' + this.buttonSize();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect((onCleanup) => {\n const groupType = 'md3-' + this.groupType();\n this.element.classList.add(groupType);\n\n onCleanup(() => {\n this.element.classList.remove(groupType);\n });\n });\n\n effect(() => {\n const selection = this.groupSelection();\n\n if (selection == 'none') {\n this.allButtons().forEach((item) => {\n item.isSelected.set(null);\n });\n } else {\n this.allButtons().forEach((item) => {\n item.enableSelection();\n });\n\n if (selection == 'single') {\n this.normalizeSingleSelection();\n }\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n private findEventButton(event: PointerEvent): Button | IconButton | undefined {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return undefined;\n }\n\n return this.allButtons().find((item) => {\n return item.element.contains(target);\n });\n }\n\n private normalizeSingleSelection(): void {\n const selectedItem = this.allButtons().find((item) => {\n return item.isSelected();\n });\n\n if (selectedItem) {\n this.clearOtherSelections(selectedItem);\n }\n }\n\n private clearOtherSelections(selectedItem: Button | IconButton): void {\n this.allButtons().forEach((item) => {\n if (item != selectedItem) {\n item.isSelected.set(false);\n }\n });\n }\n\n private allButtons(): (Button | IconButton)[] {\n return [\n ...this.buttons(),\n ...this.iconButtons(),\n ];\n }\n}\n","<ng-content select=\"button[md3-button], button[md3-icon-button], a[md3-button], a[md3-icon-button]\"></ng-content>","import { AfterViewInit, booleanAttribute, Component, effect, ElementRef, input, signal } from '@angular/core';\nimport { StateComponent } from '../common/state-component';\nimport { CardType } from '../../types/card-type.type';\n\n@Component({\n selector: 'md3-card, button[md3-card], a[md3-card]',\n imports: [],\n templateUrl: './card.html',\n styleUrl: './card.scss',\n // host: {\n // tabindex: '0',\n // },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class Card implements AfterViewInit {\n public cardType = input<CardType>('elevated', {\n alias: 'card-type',\n });\n\n public isInteractive = input<boolean, unknown>(false, {\n alias: 'interactive',\n transform: booleanAttribute,\n });\n\n private isActionTag = signal<boolean>(false);\n\n constructor(\n private el: ElementRef,\n private state: StateComponent,\n ) {\n effect((onCleanup) => {\n const type = 'md3-' + this.cardType();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect(() => {\n if (this.isInteractive() || this.isActionTag()) {\n this.element.classList.add('md3-interactive');\n this.state.setStateLayer(true);\n\n if (!this.isActionTag()) {\n this.element.setAttribute('tabindex', '0');\n }\n } else {\n this.element.classList.remove('md3-interactive');\n this.state.setStateLayer(false);\n this.element.removeAttribute('tabindex');\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n ngAfterViewInit(): void {\n const tagName = this.element.tagName.toLowerCase();\n this.isActionTag.set(tagName != 'md3-card');\n }\n}\n","<ng-content></ng-content>\n","import { CarouselArrangement } from '../../interfaces/carousel-arrangement.interface';\nimport { CarouselStrategy, CarouselStrategyContext } from '../../interfaces/carousel-strategy.interface';\nimport { CarouselLayout } from '../../types/carousel-layout.type';\n\n/** Fraction of its own size a medium item may flex by to protect the large item's target size. */\nconst MEDIUM_FLEX = 0.1;\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * One candidate distribution, already fitted to the container.\n *\n * `cost` ranks candidates: lower is better. A candidate that cannot preserve the\n * large > medium > small ordering is invalid and never selected.\n */\ninterface Candidate extends CarouselArrangement {\n cost: number;\n}\n\n/**\n * Solves for the large item size given that medium items are always the mean of large and small.\n *\n * containerSize = largeSize * largeCount\n * + ((largeSize + smallSize) / 2) * mediumCount\n * + smallSize * smallCount\n */\nfunction solveLargeSize(\n containerSize: number,\n smallSize: number,\n smallCount: number,\n mediumCount: number,\n largeCount: number,\n): number {\n const smallContribution = (smallCount + mediumCount / 2) * smallSize;\n return (containerSize - smallContribution) / (largeCount + mediumCount / 2);\n}\n\n/**\n * Shrinks or grows a candidate until it exactly fills the container, disturbing the large items\n * as little as possible: small items absorb the difference first, then medium items flex, and\n * only what is left over changes the large size.\n */\nfunction fit(\n containerSize: number,\n targetLargeSize: number,\n smallSizeMin: number,\n smallSizeMax: number,\n smallCount: number,\n mediumCount: number,\n largeCount: number,\n targetSmallSize: number,\n priority: number,\n): Candidate {\n let smallSize = clamp(targetSmallSize, smallSizeMin, smallSizeMax);\n let largeSize = targetLargeSize;\n let mediumSize = (targetLargeSize + smallSize) / 2;\n\n const occupied = largeSize * largeCount + mediumSize * mediumCount + smallSize * smallCount;\n const delta = containerSize - occupied;\n\n if (smallCount > 0 && delta > 0) {\n smallSize += Math.min(delta / smallCount, smallSizeMax - smallSize);\n } else if (smallCount > 0 && delta < 0) {\n smallSize += Math.max(delta / smallCount, smallSizeMin - smallSize);\n }\n\n if (smallCount === 0) {\n smallSize = 0;\n }\n\n largeSize = solveLargeSize(containerSize, smallSize, smallCount, mediumCount, largeCount);\n mediumSize = (largeSize + smallSize) / 2;\n\n // Give the large items back as much of their target size as the medium items can spare.\n if (mediumCount > 0 && largeSize !== targetLargeSize) {\n const targetAdjustment = (targetLargeSize - largeSize) * largeCount;\n const availableFlex = mediumSize * MEDIUM_FLEX * mediumCount;\n const distribute = Math.min(Math.abs(targetAdjustment), availableFlex);\n const direction = targetAdjustment > 0 ? 1 : -1;\n\n mediumSize -= (direction * distribute) / mediumCount;\n largeSize += (direction * distribute) / largeCount;\n }\n\n return {\n largeSize,\n largeCount,\n mediumSize,\n mediumCount,\n smallSize,\n smallCount,\n cost: cost(targetLargeSize, largeSize, mediumSize, smallSize, largeCount, mediumCount, smallCount, priority),\n };\n}\n\nfunction isValid(\n largeSize: number,\n mediumSize: number,\n smallSize: number,\n largeCount: number,\n mediumCount: number,\n smallCount: number,\n): boolean {\n if (largeSize <= 0) {\n return false;\n }\n\n if (largeCount > 0 && smallCount > 0 && mediumCount > 0) {\n return largeSize > mediumSize && mediumSize > smallSize;\n }\n\n if (largeCount > 0 && smallCount > 0) {\n return largeSize > smallSize;\n }\n\n return true;\n}\n\nfunction cost(\n targetLargeSize: number,\n largeSize: number,\n mediumSize: number,\n smallSize: number,\n largeCount: number,\n mediumCount: number,\n smallCount: number,\n priority: number,\n): number {\n if (!isValid(largeSize, mediumSize, smallSize, largeCount, mediumCount, smallCount)) {\n return Number.POSITIVE_INFINITY;\n }\n\n // Prefer arrangements that appear earlier in the priority order and that leave the large\n // item closest to the size the consumer asked for.\n return Math.abs(targetLargeSize - largeSize) * priority;\n}\n\n/**\n * Fits every permutation of the supplied counts and returns the cheapest.\n *\n * Permutations are generated in priority order, so a zero-cost candidate is provably optimal\n * and ends the search early.\n */\nfunction findLowestCostArrangement(\n containerSize: number,\n targetLargeSize: number,\n targetSmallSize: number,\n smallSizeMin: number,\n smallSizeMax: number,\n smallCounts: number[],\n mediumCounts: number[],\n largeCounts: number[],\n): Candidate {\n let best: Candidate | undefined;\n let priority = 1;\n\n for (const largeCount of largeCounts) {\n for (const mediumCount of mediumCounts) {\n for (const smallCount of smallCounts) {\n const candidate = fit(\n containerSize,\n targetLargeSize,\n smallSizeMin,\n smallSizeMax,\n smallCount,\n mediumCount,\n largeCount,\n targetSmallSize,\n priority,\n );\n\n if (!best || candidate.cost < best.cost) {\n best = candidate;\n\n if (best.cost === 0) {\n return best;\n }\n }\n\n priority++;\n }\n }\n }\n\n // Every permutation was invalid; fall back to a single full-width item.\n return best ?? {\n largeSize: containerSize,\n largeCount: 1,\n mediumSize: 0,\n mediumCount: 0,\n smallSize: 0,\n smallCount: 0,\n cost: Number.POSITIVE_INFINITY,\n };\n}\n\n/**\n * Trims keylines until there are no more of them than there are items, so a short list never\n * leaves empty slots. Small items go first, then medium — never large, since large items are\n * already fully unmasked.\n *\n * Returns true when the counts changed and the arrangement needs re-solving.\n */\nfunction trimToItemCount(candidate: Candidate, itemCount: number): boolean {\n let surplus = candidate.smallCount + candidate.mediumCount + candidate.largeCount - itemCount;\n let changed = false;\n\n while (surplus > 0 && (candidate.smallCount > 0 || candidate.mediumCount > 1)) {\n if (candidate.smallCount > 0) {\n candidate.smallCount--;\n } else {\n candidate.mediumCount--;\n }\n\n changed = true;\n surplus--;\n }\n\n return changed;\n}\n\n/**\n * The Material Design 3 multi-browse layout: a run of large items followed by a medium and a\n * small item, sized so the whole arrangement fills the container exactly.\n *\n * Ported from `MultiBrowseCarouselStrategy` and `Arrangement` in Material Components for\n * Android so the two implementations agree on sizing.\n */\nexport const multiBrowseStrategy: CarouselStrategy = {\n // Multi-browse resizes items, so it only reads correctly with items resting on keylines.\n snap: true,\n\n arrange(context: CarouselStrategyContext): CarouselArrangement {\n const { containerSize, itemSize, smallSizeMin, smallSizeMax, itemCount, alignment } = context;\n\n const maxSmallSize = Math.max(smallSizeMax, smallSizeMin);\n const targetLargeSize = Math.min(itemSize, containerSize);\n\n // A small item ideally reads as a third of a large one, held within its allowed range.\n const targetSmallSize = clamp(itemSize / 3, smallSizeMin, maxSmallSize);\n const targetMediumSize = (targetLargeSize + targetSmallSize) / 2;\n\n let smallCounts = containerSize <= smallSizeMin * 2 ? [0] : [1];\n let mediumCounts = [1, 0];\n\n // A centred focal range needs matching keylines on both sides of it.\n if (alignment === 'center') {\n smallCounts = smallCounts.map((count) => count * 2);\n mediumCounts = mediumCounts.map((count) => count * 2);\n }\n\n const minLargeSpace = containerSize\n - targetMediumSize * Math.max(...mediumCounts)\n - maxSmallSize * Math.max(...smallCounts);\n\n const largeCountMin = Math.max(1, Math.floor(minLargeSpace / targetLargeSize));\n const largeCountMax = Math.max(largeCountMin, Math.ceil(containerSize / targetLargeSize));\n const largeCounts: number[] = [];\n\n for (let count = largeCountMax; count >= largeCountMin; count--) {\n largeCounts.push(count);\n }\n\n let arrangement = findLowestCostArrangement(\n containerSize,\n targetLargeSize,\n targetSmallSize,\n smallSizeMin,\n maxSmallSize,\n smallCounts,\n mediumCounts,\n largeCounts,\n );\n\n let resolve = trimToItemCount(arrangement, itemCount);\n\n // An arrangement of nothing but large items has no visual hint that the list continues,\n // so force a small item back in whenever there is room for one.\n if (arrangement.mediumCount === 0 && arrangement.smallCount === 0 && containerSize > 2 * smallSizeMin) {\n arrangement.smallCount = 1;\n resolve = true;\n }\n\n if (resolve) {\n arrangement = findLowestCostArrangement(\n containerSize,\n targetLargeSize,\n targetSmallSize,\n smallSizeMin,\n maxSmallSize,\n [arrangement.smallCount],\n [arrangement.mediumCount],\n [arrangement.largeCount],\n );\n }\n\n return {\n largeSize: arrangement.largeSize,\n largeCount: arrangement.largeCount,\n mediumSize: arrangement.mediumSize,\n mediumCount: arrangement.mediumCount,\n smallSize: arrangement.smallSize,\n smallCount: arrangement.smallCount,\n };\n },\n};\n\n/**\n * Registry of the available carousel layouts.\n *\n * Adding a layout means implementing {@link CarouselStrategy}, widening `CarouselLayout` and\n * adding the entry here — no changes to the component itself.\n */\nexport const CAROUSEL_STRATEGIES: Record<CarouselLayout, CarouselStrategy> = {\n 'multi-browse': multiBrowseStrategy,\n};\n","import { CarouselArrangement } from '../../interfaces/carousel-arrangement.interface';\nimport {\n CarouselGeometry,\n CarouselItemGeometry,\n CarouselKeyline,\n CarouselKeylineState,\n} from '../../interfaces/carousel-keyline.interface';\nimport { CarouselAlignment } from '../../types/carousel-alignment.type';\nimport { CarouselItemSize } from '../../types/carousel-item-size.type';\n\n/** Anchor size fallback, as a fraction of the large item, when an arrangement has no small items. */\nconst ANCHOR_FALLBACK_RATIO = 0.2;\n\nfunction lerp(from: number, to: number, progress: number): number {\n return from + (to - from) * progress;\n}\n\n/** How many small and medium keylines sit before the focal range in a given shift step. */\ninterface ShiftStep {\n smallBefore: number;\n mediumBefore: number;\n}\n\n/**\n * Lays out one shift step.\n *\n * Keylines before the focal range ascend in size towards it and keylines after it descend away\n * from it, which is what keeps the arrangement looking balanced as it shifts. An off-screen\n * anchor sits at each end so items have somewhere to shrink into rather than popping out.\n */\nfunction buildState(\n step: ShiftStep,\n arrangement: CarouselArrangement,\n anchorSize: number,\n): CarouselKeylineState {\n const { largeSize, largeCount, mediumSize, mediumCount, smallSize, smallCount } = arrangement;\n\n const before: number[] = [\n ...new Array<number>(step.smallBefore).fill(smallSize),\n ...new Array<number>(step.mediumBefore).fill(mediumSize),\n ];\n const after: number[] = [\n ...new Array<number>(mediumCount - step.mediumBefore).fill(mediumSize),\n ...new Array<number>(smallCount - step.smallBefore).fill(smallSize),\n ];\n\n const sizes: number[] = [\n anchorSize,\n ...before,\n ...new Array<number>(largeCount).fill(largeSize),\n ...after,\n anchorSize,\n ];\n\n const firstFocalIndex = 1 + before.length;\n const lastFocalIndex = firstFocalIndex + largeCount - 1;\n\n // The leading anchor occupies [-anchorSize, 0] so the first real keyline starts at 0.\n let cursor = -anchorSize;\n const screenLocs = sizes.map((size) => {\n const loc = cursor + size / 2;\n cursor += size;\n return loc;\n });\n\n // In scroll space every item occupies exactly `largeSize`, so keylines are evenly spaced.\n // Anchoring that spacing to the first focal keyline keeps screen and scroll space aligned\n // wherever an item is fully unmasked.\n const focalLoc = screenLocs[firstFocalIndex];\n\n const keylines: CarouselKeyline[] = sizes.map((size, index) => ({\n scrollLoc: focalLoc + (index - firstFocalIndex) * largeSize,\n screenLoc: screenLocs[index],\n maskedSize: size,\n isFocal: index >= firstFocalIndex && index <= lastFocalIndex,\n isAnchor: index === 0 || index === sizes.length - 1,\n }));\n\n return {\n keylines,\n focalStart: focalLoc - largeSize / 2,\n firstFocalIndex,\n lastFocalIndex,\n };\n}\n\n/**\n * Enumerates every shift step from \"focal range at the start of the container\" through to\n * \"focal range at the end\", ordered by ascending `focalStart`.\n *\n * Each step moves exactly one keyline across the focal range, which is what guarantees every\n * item passes through the focal range as the carousel scrolls. Smaller keylines migrate first,\n * so items pile up smallest-outermost at whichever edge they are collecting against.\n */\nfunction buildSteps(arrangement: CarouselArrangement, alignment: CarouselAlignment): {\n steps: CarouselKeylineState[];\n defaultStep: number;\n} {\n const { smallCount, mediumCount } = arrangement;\n\n const restingStep: ShiftStep = alignment === 'center'\n ? { smallBefore: Math.floor(smallCount / 2), mediumBefore: Math.floor(mediumCount / 2) }\n : { smallBefore: 0, mediumBefore: 0 };\n\n // Walk backwards from the resting step, retiring the smallest leading keyline each time.\n const towardsStart: ShiftStep[] = [restingStep];\n let { smallBefore, mediumBefore } = restingStep;\n\n while (smallBefore > 0 || mediumBefore > 0) {\n if (smallBefore > 0) {\n smallBefore--;\n } else {\n mediumBefore--;\n }\n\n towardsStart.push({ smallBefore, mediumBefore });\n }\n\n // Walk forwards, promoting the smallest trailing keyline each time.\n const towardsEnd: ShiftStep[] = [restingStep];\n ({ smallBefore, mediumBefore } = restingStep);\n\n while (smallBefore + mediumBefore < smallCount + mediumCount) {\n if (smallBefore < smallCount) {\n smallBefore++;\n } else {\n mediumBefore++;\n }\n\n towardsEnd.push({ smallBefore, mediumBefore });\n }\n\n const ordered = [...towardsStart.slice(1).reverse(), ...towardsEnd];\n const anchorSize = arrangement.smallSize > 0\n ? arrangement.smallSize\n : arrangement.largeSize * ANCHOR_FALLBACK_RATIO;\n\n return {\n steps: ordered.map((step) => buildState(step, arrangement, anchorSize)),\n defaultStep: towardsStart.length - 1,\n };\n}\n\n/**\n * Turns a solved arrangement into everything the component needs to place items.\n */\nexport function buildGeometry(\n arrangement: CarouselArrangement,\n alignment: CarouselAlignment,\n itemCount: number,\n containerSize: number,\n): CarouselGeometry {\n const { steps, defaultStep } = buildSteps(arrangement, alignment);\n\n const resting = steps[defaultStep];\n const startShiftRange = resting.focalStart - steps[0].focalStart;\n const endShiftRange = steps[steps.length - 1].focalStart - resting.focalStart;\n\n // Each item owns exactly `largeSize` of scroll range, and the final `largeCount` items share\n // the focal region, so they need no scroll range of their own.\n const lastIndex = Math.max(0, itemCount - arrangement.largeCount);\n const maxScroll = lastIndex * arrangement.largeSize;\n\n return {\n arrangement,\n steps,\n defaultStep,\n itemSize: arrangement.largeSize,\n startShiftRange,\n endShiftRange,\n maxScroll,\n lastIndex,\n scrollSize: maxScroll + containerSize,\n };\n}\n\n/**\n * Where the focal range sits for a given scroll offset.\n *\n * It rests at its default position through the middle of the list and slides towards whichever\n * edge is being approached, so the first and last items can reach the focal range without\n * detaching from the container edges.\n */\nfunction focalStartFor(geometry: CarouselGeometry, scrollOffset: number): number {\n const resting = geometry.steps[geometry.defaultStep].focalStart;\n const first = geometry.steps[0].focalStart;\n const last = geometry.steps[geometry.steps.length - 1].focalStart;\n\n const startShift = Math.max(0, geometry.startShiftRange - scrollOffset);\n const endShift = Math.max(0, scrollOffset - (geometry.maxScroll - geometry.endShiftRange));\n\n return Math.min(Math.max(resting - startShift + endShift, first), last);\n}\n\n/**\n * Interpolates the two shift steps bracketing `focalStart` into a single state.\n *\n * Every step holds the same number of keylines, so this is a straight index-by-index blend.\n */\nfunction stateAt(geometry: CarouselGeometry, focalStart: number): CarouselKeylineState {\n const { steps } = geometry;\n\n let upper = 1;\n while (upper < steps.length && steps[upper].focalStart < focalStart) {\n upper++;\n }\n\n if (upper >= steps.length) {\n return steps[steps.length - 1];\n }\n\n const from = steps[upper - 1];\n const to = steps[upper];\n const span = to.focalStart - from.focalStart;\n\n if (span <= 0) {\n return from;\n }\n\n const progress = Math.min(Math.max((focalStart - from.focalStart) / span, 0), 1);\n\n return {\n focalStart,\n firstFocalIndex: progress < 0.5 ? from.firstFocalIndex : to.firstFocalIndex,\n lastFocalIndex: progress < 0.5 ? from.lastFocalIndex : to.lastFocalIndex,\n keylines: from.keylines.map((keyline, index) => {\n const target = to.keylines[index];\n\n return {\n scrollLoc: lerp(keyline.scrollLoc, target.scrollLoc, progress),\n screenLoc: lerp(keyline.screenLoc, target.screenLoc, progress),\n maskedSize: lerp(keyline.maskedSize, target.maskedSize, progress),\n isFocal: progress < 0.5 ? keyline.isFocal : target.isFocal,\n isAnchor: keyline.isAnchor && target.isAnchor,\n };\n }),\n };\n}\n\n/**\n * Resolves the keyline arrangement in effect at a given scroll offset.\n */\nexport function resolveState(geometry: CarouselGeometry, scrollOffset: number): CarouselKeylineState {\n return stateAt(geometry, focalStartFor(geometry, scrollOffset));\n}\n\n/**\n * Finds the keylines either side of a scroll-space position, and how far between them it sits.\n */\nfunction keylineRange(keylines: CarouselKeyline[], scrollCenter: number): [CarouselKeyline, CarouselKeyline, number] {\n let upper = 1;\n while (upper < keylines.length - 1 && keylines[upper].scrollLoc < scrollCenter) {\n upper++;\n }\n\n const from = keylines[upper - 1];\n const to = keylines[upper];\n const span = to.scrollLoc - from.scrollLoc;\n const progress = span <= 0 ? 0 : Math.min(Math.max((scrollCenter - from.scrollLoc) / span, 0), 1);\n\n return [from, to, progress];\n}\n\n/**\n * Classifies a rendered size against the arrangement's three sizes.\n *\n * Items resize continuously, so this snaps to whichever size the item currently reads as,\n * flipping at the midpoint between one size and the next.\n */\nexport function sizeBandFor(maskedSize: number, geometry: CarouselGeometry): CarouselItemSize {\n const { largeSize, mediumSize, smallSize } = geometry.arrangement;\n\n if (maskedSize >= (largeSize + mediumSize) / 2) {\n return 'large';\n }\n\n if (maskedSize >= (mediumSize + smallSize) / 2) {\n return 'medium';\n }\n\n return 'small';\n}\n\n/**\n * Places one item.\n *\n * The item's centre is a plain linear function of the scroll offset in scroll space; looking\n * that position up against the current keylines is what converts it into a rendered size and\n * an on-screen position.\n */\nexport function resolveItemGeometry(\n geometry: CarouselGeometry,\n state: CarouselKeylineState,\n index: number,\n scrollOffset: number,\n): CarouselItemGeometry {\n const { itemSize } = geometry;\n const { keylines } = state;\n\n const scrollCenter = index * itemSize + itemSize / 2 - scrollOffset + state.focalStart;\n\n const first = keylines[0];\n const last = keylines[keylines.length - 1];\n\n if (scrollCenter < first.scrollLoc || scrollCenter > last.scrollLoc) {\n return {\n offset: 0,\n maskedSize: 0,\n size: 'small',\n maskRatio: 1,\n isFocal: false,\n isVisible: false,\n };\n }\n\n const [from, to, progress] = keylineRange(keylines, scrollCenter);\n\n const maskedSize = lerp(from.maskedSize, to.maskedSize, progress);\n const screenCenter = lerp(from.screenLoc, to.screenLoc, progress);\n\n return {\n offset: screenCenter - maskedSize / 2,\n maskedSize,\n size: sizeBandFor(maskedSize, geometry),\n maskRatio: itemSize <= 0 ? 1 : Math.min(Math.max(1 - maskedSize / itemSize, 0), 1),\n isFocal: (from.isFocal && progress < 0.5) || (to.isFocal && progress >= 0.5),\n isVisible: maskedSize > 0.5,\n };\n}\n\n/**\n * Clamps an index to one the carousel can actually come to rest on.\n */\nexport function clampIndex(geometry: CarouselGeometry, index: number): number {\n return Math.min(Math.max(Math.round(index), 0), geometry.lastIndex);\n}\n\n/**\n * Scroll offset at which `index` leads the focal range.\n *\n * The shifting focal range cancels out here, so this stays a simple multiple regardless of\n * alignment or how close to either end of the list the item is.\n */\nexport function scrollOffsetForIndex(geometry: CarouselGeometry, index: number): number {\n return clampIndex(geometry, index) * geometry.itemSize;\n}\n\n/**\n * The item leading the focal range at a given scroll offset.\n */\nexport function indexForScrollOffset(geometry: CarouselGeometry, scrollOffset: number): number {\n if (geometry.itemSize <= 0) {\n return 0;\n }\n\n return clampIndex(geometry, scrollOffset / geometry.itemSize);\n}\n","import { Component, effect, ElementRef, signal } from '@angular/core';\nimport { CarouselItemGeometry } from '../../../interfaces/carousel-keyline.interface';\nimport { CarouselItemSize } from '../../../types/carousel-item-size.type';\n\n/**\n * A single item within an `md3-carousel`.\n *\n * The item is a clipping box whose content stays at full size, so scrolling crops the item\n * towards its centre rather than squashing it. Content should be full-bleed — an image or a\n * background that reaches the edges — or the crop will reveal empty space.\n *\n * Position and size are written straight to CSS custom properties by the parent carousel, so\n * styling never waits on change detection. The same values are mirrored onto signals and onto\n * `md3-large` / `md3-medium` / `md3-small` classes, so content can react to the item's size\n * either declaratively or from a stylesheet.\n */\n@Component({\n selector: 'md3-carousel-item',\n templateUrl: './carousel-item.html',\n styleUrl: './carousel-item.scss',\n host: {\n 'role': 'group',\n 'aria-roledescription': 'slide',\n },\n})\nexport class CarouselItem {\n /** 0 while the item is fully unmasked, approaching 1 as it crops away. */\n public readonly maskRatio = signal<number>(0);\n\n /** Current rendered size of the item, in pixels. */\n public readonly maskedSize = signal<number>(0);\n\n /** True while the item rests in the carousel's focal range. */\n public readonly isFocal = signal<boolean>(false);\n\n /**\n * Which of the arrangement's three sizes the item currently reads as.\n *\n * Mirrored onto the element as `md3-large`, `md3-medium` or `md3-small`.\n */\n public readonly size = signal<CarouselItemSize>('large');\n\n constructor(private el: ElementRef<HTMLElement>) {\n effect((onCleanup) => {\n const size = 'md3-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n /**\n * Applies a resolved placement.\n *\n * Called from the carousel's scroll handler on every frame, so this writes to the DOM\n * directly and only touches signals when a value actually changes.\n */\n public applyGeometry(geometry: CarouselItemGeometry, itemSize: number): void {\n const style = this.element.style;\n\n if (!geometry.isVisible) {\n this.element.setAttribute('hidden', '');\n return;\n }\n\n this.element.removeAttribute('hidden');\n style.setProperty('--md3-carousel-item-size', `${geometry.maskedSize}px`);\n style.setProperty('--md3-carousel-item-full-size', `${itemSize}px`);\n style.setProperty('--md3-carousel-item-offset', `${geometry.offset}px`);\n style.setProperty('--md3-carousel-item-mask-ratio', `${geometry.maskRatio}`);\n\n if (this.maskedSize() !== geometry.maskedSize) {\n this.maskedSize.set(geometry.maskedSize);\n }\n\n if (this.maskRatio() !== geometry.maskRatio) {\n this.maskRatio.set(geometry.maskRatio);\n }\n\n if (this.size() !== geometry.size) {\n this.size.set(geometry.size);\n }\n\n if (this.isFocal() !== geometry.isFocal) {\n this.isFocal.set(geometry.isFocal);\n this.element.classList.toggle('md3-focal', geometry.isFocal);\n }\n }\n}\n","<div class=\"md3-carousel-item-content\">\n <ng-content></ng-content>\n</div>\n","import { Directionality } from '@angular/cdk/bidi';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n Component,\n computed,\n contentChildren,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n model,\n numberAttribute,\n PLATFORM_ID,\n signal,\n viewChild,\n} from '@angular/core';\nimport { CarouselArrangement } from '../../interfaces/carousel-arrangement.interface';\nimport { CarouselGeometry } from '../../interfaces/carousel-keyline.interface';\nimport { CarouselAlignment } from '../../types/carousel-alignment.type';\nimport { CarouselLayout } from '../../types/carousel-layout.type';\nimport { CarouselOrientation } from '../../types/carousel-orientation.type';\nimport { CAROUSEL_STRATEGIES } from './carousel-arrangement';\nimport {\n buildGeometry,\n clampIndex,\n indexForScrollOffset,\n resolveItemGeometry,\n resolveState,\n scrollOffsetForIndex,\n} from './carousel-keylines';\nimport { CarouselItem } from './carousel-item/carousel-item';\n\n/**\n * Reads an aspect ratio from an input value.\n *\n * Accepts a number (`1.778`) or the more readable fraction form (`\"16 / 9\"`). Anything that is\n * not a positive, finite ratio resolves to `undefined`, which leaves the height to CSS.\n */\nexport function parseCarouselAspectRatio(value: unknown): number | undefined {\n if (value === null || value === undefined || value === '') {\n return undefined;\n }\n\n let ratio: number;\n\n if (typeof value === 'number') {\n ratio = value;\n } else {\n const parts = String(value).split('/');\n ratio = parts.length === 2\n ? Number(parts[0]) / Number(parts[1])\n : Number(parts[0]);\n }\n\n return Number.isFinite(ratio) && ratio > 0 ? ratio : undefined;\n}\n\n/** Grace period after a programmatic scroll before the index is synced back from the DOM. */\nconst SCROLL_END_FALLBACK = 120;\n\n/**\n * A Material Design 3 carousel.\n *\n * Items are laid out against a set of keylines — large, medium, small and an off-screen anchor —\n * and adopt the size of whichever keyline they are passing through, so they grow into the focal\n * range and crop away as they leave it.\n *\n * Scrolling is native, which keeps momentum, touch, snapping and the scrollbar intact. Only the\n * visual sizing is derived in TypeScript, and it is written straight to CSS custom properties so\n * scrolling never triggers change detection.\n *\n * All size inputs are in pixels.\n *\n * ```html\n * <md3-carousel [(index)]=\"selected\" [item-size]=\"200\">\n * @for (photo of photos(); track photo.id) {\n * <md3-carousel-item>\n * <img [src]=\"photo.url\" [alt]=\"photo.alt\" />\n * </md3-carousel-item>\n * }\n * </md3-carousel>\n * ```\n */\n@Component({\n selector: 'md3-carousel',\n templateUrl: './carousel.html',\n styleUrl: './carousel.scss',\n host: {\n 'role': 'group',\n 'aria-roledescription': 'carousel',\n },\n})\nexport class Carousel {\n /** Arrangement strategy. Additional Material Design layouts will widen this type. */\n public carouselLayout = input<CarouselLayout>('multi-browse', {\n alias: 'carousel-layout',\n });\n\n /** Where the focal (large) items sit within the container. */\n public alignment = input<CarouselAlignment>('start', {\n alias: 'alignment',\n });\n\n /** Scroll axis. Only `horizontal` is implemented today. */\n public orientation = input<CarouselOrientation>('horizontal', {\n alias: 'orientation',\n });\n\n /** Preferred size of a fully unmasked item, in pixels. */\n public itemSize = input<number, unknown>(200, {\n alias: 'item-size',\n transform: numberAttribute,\n });\n\n /** Smallest a small item may shrink to, in pixels. */\n public smallItemSizeMin = input<number, unknown>(40, {\n alias: 'small-item-size-min',\n transform: numberAttribute,\n });\n\n /** Largest a small item may grow to, in pixels. */\n public smallItemSizeMax = input<number, unknown>(56, {\n alias: 'small-item-size-max',\n transform: numberAttribute,\n });\n\n /** Space between items, in pixels. */\n public gap = input<number, unknown>(8, {\n alias: 'gap',\n transform: numberAttribute,\n });\n\n /**\n * Width-to-height ratio of a fully unmasked item, as a number or a `\"16 / 9\"` fraction.\n *\n * The solver changes item width as the container resizes, so a fixed height would let the\n * ratio drift. Setting this derives the carousel's height from the solved item width\n * instead, keeping items at a constant shape at every viewport size.\n *\n * Leave it unset to size the carousel with `--md3-carousel-height` in CSS.\n */\n public aspectRatio = input<number | undefined, unknown>(undefined, {\n alias: 'aspect-ratio',\n transform: parseCarouselAspectRatio,\n });\n\n /**\n * Index of the item leading the focal range. Two-way bindable.\n *\n * Clamped to {@link lastIndex}: the final items share the focal range and are all visible at\n * once, so there is no scroll position where any of them leads on its own. Setting a higher\n * value scrolls to the end and reads back as `lastIndex`.\n */\n public index = model<number>(0);\n\n /** Items projected into the carousel, in document order. */\n public readonly items = contentChildren<CarouselItem>(CarouselItem, { descendants: true });\n\n /**\n * Whether the current layout brings items to rest on keylines.\n *\n * Decided by the layout, not by the consumer: an arrangement that resizes items only reads\n * correctly when they are sitting on keylines.\n */\n public readonly snap = computed<boolean>(() => CAROUSEL_STRATEGIES[this.carouselLayout()].snap);\n\n private scroller = viewChild.required<ElementRef<HTMLDivElement>>('scroller');\n\n private containerSize = signal<number>(0);\n\n private readonly directionality = inject(Directionality, { optional: true });\n\n /**\n * Sizes handed to the solver.\n *\n * Gaps are folded into item sizes so the solver only has one quantity to balance, then\n * removed again visually by insetting each item half a gap on both sides.\n */\n private readonly metrics = computed(() => {\n const gap = this.gap();\n\n return {\n gap,\n itemSize: this.itemSize() + gap,\n smallSizeMin: this.smallItemSizeMin() + gap,\n smallSizeMax: this.smallItemSizeMax() + gap,\n };\n });\n\n /** The solved distribution of large, medium and small items for the current container. */\n public readonly arrangement = computed<CarouselArrangement | undefined>(() => {\n const containerSize = this.containerSize();\n const itemCount = this.items().length;\n const { itemSize, smallSizeMin, smallSizeMax } = this.metrics();\n\n if (containerSize <= 0 || itemCount === 0 || itemSize <= 0) {\n return undefined;\n }\n\n return CAROUSEL_STRATEGIES[this.carouselLayout()].arrange({\n containerSize,\n itemSize,\n smallSizeMin,\n smallSizeMax,\n itemCount,\n alignment: this.alignment(),\n });\n });\n\n /** Keyline geometry derived from the arrangement. */\n public readonly geometry = computed<CarouselGeometry | undefined>(() => {\n const arrangement = this.arrangement();\n\n if (!arrangement) {\n return undefined;\n }\n\n return buildGeometry(arrangement, this.alignment(), this.items().length, this.containerSize());\n });\n\n /** Scroll offsets that items snap to, one per item. */\n protected readonly snapPoints = computed<number[]>(() => {\n const geometry = this.geometry();\n\n if (!geometry) {\n return [];\n }\n\n return this.items().map((_, index) => scrollOffsetForIndex(geometry, index));\n });\n\n /**\n * Highest index the carousel can rest on.\n *\n * Lower than the last item's index, because the trailing items share the focal range once\n * the carousel is scrolled to the end. It moves as the container is resized, since a wider\n * container fits more items in the focal range.\n */\n public readonly lastIndex = computed<number>(() => this.geometry()?.lastIndex ?? 0);\n\n /**\n * Height implied by `aspect-ratio`, in pixels, or `undefined` when CSS owns the height.\n *\n * Measured against a focal item's visible width — the solved item size less the gap — so a\n * fully unmasked item matches the requested ratio exactly. Masked items keep this height and\n * crop horizontally, which is what the Material Design arrangement expects.\n */\n public readonly resolvedHeight = computed<number | undefined>(() => {\n const ratio = this.aspectRatio();\n const geometry = this.geometry();\n\n if (!ratio || !geometry) {\n return undefined;\n }\n\n return (geometry.itemSize - this.metrics().gap) / ratio;\n });\n\n public readonly atStart = computed<boolean>(() => this.index() <= 0);\n\n /** True when the carousel cannot scroll any further towards the end. */\n public readonly atEnd = computed<boolean>(() => this.index() >= this.lastIndex());\n\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private scrollEndTimer: ReturnType<typeof setTimeout> | undefined;\n private frame = 0;\n\n /**\n * Target of an in-flight programmatic scroll.\n *\n * Smooth scrolling reports intermediate offsets, and reading the index back from those would\n * fight the animation, so index syncing pauses until the target is reached or the user takes\n * over.\n */\n private pendingScroll: number | undefined;\n\n constructor(private el: ElementRef<HTMLElement>) {\n // ResizeObserver alone would leave the carousel unmeasured until its first callback, so\n // take an initial measurement as soon as the view exists.\n afterNextRender(() => this.measure());\n\n effect((onCleanup) => {\n if (!this.isBrowser) {\n return;\n }\n\n const observer = new ResizeObserver(() => this.measure());\n observer.observe(this.element);\n\n onCleanup(() => observer.disconnect());\n });\n\n effect((onCleanup) => {\n if (!this.isBrowser) {\n return;\n }\n\n const scroller = this.scroller().nativeElement;\n\n const onScroll = () => this.scheduleGeometry();\n const onScrollEnd = () => this.syncIndexFromScroll();\n const onInteract = () => {\n this.pendingScroll = undefined;\n };\n\n scroller.addEventListener('scroll', onScroll, { passive: true });\n scroller.addEventListener('scrollend', onScrollEnd);\n scroller.addEventListener('pointerdown', onInteract, { passive: true });\n scroller.addEventListener('wheel', onInteract, { passive: true });\n scroller.addEventListener('touchstart', onInteract, { passive: true });\n\n onCleanup(() => {\n clearTimeout(this.scrollEndTimer);\n cancelAnimationFrame(this.frame);\n scroller.removeEventListener('scroll', onScroll);\n scroller.removeEventListener('scrollend', onScrollEnd);\n scroller.removeEventListener('pointerdown', onInteract);\n scroller.removeEventListener('wheel', onInteract);\n scroller.removeEventListener('touchstart', onInteract);\n });\n });\n\n // Re-place every item whenever the arrangement or the item list changes. Reading the\n // signals here is what registers the dependency.\n effect(() => {\n this.geometry();\n this.items();\n this.applyGeometry();\n });\n\n // Derive the height from the solved item width so items keep their shape as the\n // container resizes. Changing the height cannot feed back into the arrangement, which\n // only depends on the container's width, so this settles in one pass.\n effect(() => {\n const height = this.resolvedHeight();\n\n if (height === undefined) {\n this.element.style.removeProperty('--md3-carousel-aspect-height');\n return;\n }\n\n this.element.style.setProperty('--md3-carousel-aspect-height', `${height}px`);\n });\n\n // Follow the index when it is set from outside, but not while the user is scrolling —\n // `syncIndexFromScroll` only writes a value the DOM already agrees with.\n effect(() => {\n const index = this.index();\n const geometry = this.geometry();\n\n if (!geometry || !this.isBrowser) {\n return;\n }\n\n // A resize changes how many items share the focal range, so an index that was\n // reachable before may no longer be.\n const clamped = clampIndex(geometry, index);\n\n if (clamped !== index) {\n this.index.set(clamped);\n return;\n }\n\n const target = scrollOffsetForIndex(geometry, clamped);\n\n if (Math.abs(this.scrollOffset() - target) > 1) {\n this.scrollTo(target, 'smooth');\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n /** True when laid out right-to-left. */\n protected get isRtl(): boolean {\n return this.directionality?.value === 'rtl'\n || getComputedStyle(this.element).direction === 'rtl';\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n // Arrow keys are direction-agnostic here: ArrowRight always moves towards the visual\n // right, which under RTL is the previous item.\n const forward = this.isRtl ? 'ArrowLeft' : 'ArrowRight';\n const backward = this.isRtl ? 'ArrowRight' : 'ArrowLeft';\n\n switch (event.key) {\n case forward:\n this.next();\n break;\n case backward:\n this.previous();\n break;\n case 'Home':\n this.scrollToIndex(0);\n break;\n case 'End':\n this.scrollToIndex(this.lastIndex());\n break;\n default:\n return;\n }\n\n event.preventDefault();\n }\n\n /**\n * Keeps a focused item in view.\n *\n * Items are absolutely positioned, so the browser cannot scroll them into view on its own.\n * Without this, tabbing to a link inside a cropped item would leave it invisible.\n */\n @HostListener('focusin', ['$event'])\n protected onFocusIn(event: FocusEvent): void {\n const target = event.target;\n\n if (!(target instanceof Node)) {\n return;\n }\n\n const index = this.items().findIndex((item) => item.element.contains(target));\n\n if (index >= 0 && index !== this.index()) {\n this.scrollToIndex(index);\n }\n }\n\n /** Scrolls until `index` leads the focal range, clamping to {@link lastIndex}. */\n public scrollToIndex(index: number, behavior: ScrollBehavior = 'smooth'): void {\n const geometry = this.geometry();\n\n if (!geometry) {\n return;\n }\n\n const clamped = clampIndex(geometry, index);\n\n this.index.set(clamped);\n this.scrollTo(scrollOffsetForIndex(geometry, clamped), behavior);\n }\n\n public next(): void {\n this.scrollToIndex(this.index() + 1);\n }\n\n public previous(): void {\n this.scrollToIndex(this.index() - 1);\n }\n\n private measure(): void {\n if (!this.isBrowser) {\n return;\n }\n\n this.containerSize.set(this.scroller().nativeElement.clientWidth);\n }\n\n /**\n * Current scroll position as a positive offset from the logical start edge.\n *\n * Right-to-left scroll containers report `scrollLeft` as zero at the start and negative\n * moving away from it, so the magnitude is the logical offset in both directions.\n */\n private scrollOffset(): number {\n return Math.abs(this.scroller().nativeElement.scrollLeft);\n }\n\n private scrollTo(offset: number, behavior: ScrollBehavior): void {\n if (!this.isBrowser) {\n return;\n }\n\n const reduceMotion = matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n this.pendingScroll = offset;\n this.scroller().nativeElement.scrollTo({\n left: this.isRtl ? -offset : offset,\n behavior: reduceMotion ? 'auto' : behavior,\n });\n\n this.scheduleIndexSync();\n }\n\n private scheduleGeometry(): void {\n if (this.frame) {\n return;\n }\n\n this.frame = requestAnimationFrame(() => {\n this.frame = 0;\n this.applyGeometry();\n });\n\n this.scheduleIndexSync();\n }\n\n /** `scrollend` is not universally supported, so back it with a timer. */\n private scheduleIndexSync(): void {\n clearTimeout(this.scrollEndTimer);\n this.scrollEndTimer = setTimeout(() => this.syncIndexFromScroll(), SCROLL_END_FALLBACK);\n }\n\n private syncIndexFromScroll(): void {\n const geometry = this.geometry();\n\n if (!geometry || !this.isBrowser) {\n return;\n }\n\n const offset = this.scrollOffset();\n\n // Wait for a programmatic scroll to land rather than reading the index off an\n // intermediate frame of the animation.\n if (this.pendingScroll !== undefined) {\n if (Math.abs(offset - this.pendingScroll) > 1) {\n return;\n }\n\n this.pendingScroll = undefined;\n }\n\n // Once the final items share the focal range they also share a scroll offset, so an\n // index that already resolves to this offset is left alone.\n if (Math.abs(scrollOffsetForIndex(geometry, this.index()) - offset) <= 1) {\n return;\n }\n\n const index = indexForScrollOffset(geometry, offset);\n\n if (index !== this.index()) {\n this.index.set(index);\n }\n }\n\n /**\n * Writes the current placement of every item.\n *\n * Runs on every scroll frame, so it touches the DOM directly and allocates nothing beyond\n * the resolved state.\n */\n private applyGeometry(): void {\n const geometry = this.geometry();\n const items = this.items();\n\n if (!geometry) {\n return;\n }\n\n const style = this.element.style;\n style.setProperty('--md3-carousel-scroll-size', `${geometry.scrollSize}px`);\n style.setProperty('--md3-carousel-viewport-size', `${this.containerSize()}px`);\n style.setProperty('--md3-carousel-gap', `${this.metrics().gap}px`);\n\n const scrollOffset = this.scrollOffset();\n const state = resolveState(geometry, scrollOffset);\n const itemCount = items.length;\n\n items.forEach((item, index) => {\n item.applyGeometry(\n resolveItemGeometry(geometry, state, index, scrollOffset),\n geometry.itemSize,\n );\n\n const label = `${index + 1} of ${itemCount}`;\n\n if (item.element.getAttribute('aria-label') !== label) {\n item.element.setAttribute('aria-label', label);\n }\n });\n }\n}\n","<div #scroller class=\"md3-carousel-scroller\" tabindex=\"0\" [class.md3-snap]=\"snap()\">\n <div class=\"md3-carousel-content\">\n <div class=\"md3-carousel-viewport\">\n <ng-content></ng-content>\n </div>\n\n @for (point of snapPoints(); track $index) {\n <div class=\"md3-carousel-snap\" aria-hidden=\"true\" [style.inset-inline-start.px]=\"point\"></div>\n }\n </div>\n</div>\n","import { booleanAttribute, Component, computed, contentChild, contentChildren, Directive, effect, ElementRef, input, Input, output } from '@angular/core';\nimport { MaterialIcon } from '../common/material-icon/material-icon';\nimport { StateComponent } from '../common/state-component';\nimport { ChipType } from '../../types/chip-type.type';\nimport { IconElement } from '../common/icon-element';\nimport { ChipStyle } from '../../types/chip-style.type';\n\n@Directive({\n selector: '[md3-chip-avatar]'\n})\nexport class ChipAvatar {}\n\n@Component({\n selector: 'button[md3-chip], a[md3-chip], label[md3-chip]',\n imports: [\n StateComponent,\n MaterialIcon,\n ],\n templateUrl: './chips.html',\n styleUrl: './chips.scss',\n})\nexport class Chips {\n public chipType = input<ChipType>('assist', {\n alias: 'chip-type',\n });\n\n public chipStyle = input<ChipStyle>('default', {\n alias: 'chip-style',\n });\n\n public trailingFunction = output<void>({\n alias: 'on-trailing',\n });\n\n protected onTrailingClick(event: Event): void {\n event.stopPropagation();\n this.trailingFunction.emit();\n }\n\n private avatar = contentChild(ChipAvatar);\n private iconElements = contentChildren(IconElement);\n\n public hasSurface = input<boolean, unknown>(false, {\n alias: 'surface',\n transform: booleanAttribute,\n });\n\n public isElevated = input<boolean, unknown>(false, {\n alias: 'elevated',\n transform: booleanAttribute,\n });\n\n public leading = computed(() => this.iconElements().find((icon) => icon.iconType() === 'leading'));\n public trailing = computed(() => this.iconElements().find((icon) => icon.iconType() === 'trailing'));\n public isSelectable = computed(() => this.chipType() != 'assist');\n public showCheckIcon = computed(() => !this.leading() && this.chipType() == 'filter');\n public hasAvatar = computed(() => this.avatar() != undefined && this.chipType() == 'input');\n public hasRemove = computed(() => this.chipType() == 'input');\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const type = 'md3-' + this.chipType();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect((onCleanup) => {\n const style = 'md3-' + this.chipStyle();\n this.element.classList.add(style);\n\n onCleanup(() => {\n this.element.classList.remove(style);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}","@if (isSelectable()) {\n <ng-content select=\"[md3-input-element]\"></ng-content>\n}\n<div class=\"md3-chip-container\" md3-state-component>\n <div class=\"md3-chip-leading\" [class.has-icon]=\"leading()\" [class.has-avatar]=\"hasAvatar()\">\n <ng-content select=\"[md3-icon-element=leading], [md3-chip-avatar]\"></ng-content>\n @if (showCheckIcon()) {\n <md3-icon [icon-size]=\"18\" md3-icon-element=\"leading\">check</md3-icon>\n }\n </div>\n <div class=\"md3-chip-label\">\n <ng-content></ng-content>\n </div>\n @if (hasRemove() || trailing()) {\n <button class=\"md3-chip-trailing\" md3-state-component [class.has-icon]=\"trailing()\" (click)=\"onTrailingClick($event)\">\n <ng-content select=\"[md3-icon-element=trailing]\"></ng-content>\n\n @if (hasRemove() && !trailing()) {\n <md3-icon [icon-size]=\"18\" md3-icon-element=\"trailing\">close</md3-icon>\n }\n </button>\n }\n</div>","import { booleanAttribute, Component, computed, contentChild, effect, input, signal, Signal, viewChild } from '@angular/core';\nimport { AbstractControl, FormControlName } from '@angular/forms';\nimport { fromEvent } from 'rxjs';\nimport { InputElement } from '../../common/input-element';\nimport { MaterialIcon } from '../../common/material-icon/material-icon';\nimport { StateComponent } from '../../common/state-component';\n\n@Component({\n selector: 'md3-checkbox',\n imports: [\n MaterialIcon,\n StateComponent,\n ],\n templateUrl: './checkbox.html',\n styleUrl: './checkbox.scss',\n})\nexport class Checkbox {\n public control = input<AbstractControl | undefined>(undefined, {\n alias: 'control',\n });\n\n private stateComponent = viewChild<StateComponent>(StateComponent);\n private input = contentChild(InputElement);\n private controlName = contentChild(FormControlName);\n private controlError = signal(false);\n private nativeInputError = signal(false);\n\n public disableStateLayer = input<boolean, unknown>(false, {\n alias: 'disable-state-layer',\n transform: booleanAttribute\n });\n\n protected checkboxIcon: 'check_small' | 'check_indeterminate_small' = 'check_small';\n public state = signal<boolean | null>(false);\n\n protected formControl = computed<AbstractControl | undefined>(() => this.control() ?? this.controlName()?.control);\n\n private inputError = computed<boolean>(() => {\n const control = this.formControl();\n if (control) {\n this.controlError();\n return this.hasControlError(control);\n }\n\n const input = this.input()?.nativeElement;\n if (!input) {\n return false;\n }\n\n this.nativeInputError();\n return this.hasNativeInputError(input);\n });\n\n private inputDisabledState = signal<boolean>(false);\n public isDisabled = computed<boolean>(() => this.inputDisabledState());\n\n constructor() {\n effect(() => {\n this.stateComponent()?.setStateLayer(!this.disableStateLayer());\n });\n\n effect((onCleanup) => {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n this.syncInitialState(input);\n this.syncNativeInputState(input);\n\n const inputEvents = fromEvent(input, 'change').subscribe(() => {\n this.syncStateFromInput(input);\n this.syncControlFromState(this.state());\n this.syncNativeInputState(input);\n });\n\n const observer = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(() => {\n if (!this.formControl()) {\n this.syncStateFromInput(input);\n }\n\n this.syncNativeInputState(input);\n });\n observer?.observe(input, {\n attributes: true,\n attributeFilter: ['aria-invalid', 'checked', 'disabled', 'required'],\n });\n\n onCleanup(() => {\n inputEvents.unsubscribe();\n observer?.disconnect();\n });\n });\n\n effect((onCleanup) => {\n const control = this.formControl();\n if (!control) {\n this.controlError.set(false);\n return;\n }\n\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n\n const controlEvents = control.events.subscribe(() => {\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n });\n\n onCleanup(() => controlEvents.unsubscribe());\n });\n\n effect(() => {\n this.syncAriaInvalidAttribute(this.input()?.nativeElement);\n });\n }\n\n private syncInitialState(input: HTMLInputElement): void {\n const control = this.formControl();\n if (control) {\n this.syncStateFromControl(control);\n return;\n }\n\n this.syncStateFromInput(input);\n }\n\n private updateState(state: boolean | null = false): void {\n this.checkboxIcon = state === null\n ? 'check_indeterminate_small'\n : 'check_small';\n\n this.state.set(state);\n }\n\n private syncStateFromInput(input: HTMLInputElement): void {\n this.updateState(input.indeterminate ? null : input.checked);\n }\n\n private syncInputFromState(state: boolean | null = false): void {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n const indeterminate = state === null;\n const checked = state === true;\n\n if (input.indeterminate !== indeterminate) {\n input.indeterminate = indeterminate;\n }\n\n if (input.checked !== checked) {\n input.checked = checked;\n }\n }\n\n private syncControlFromState(state: boolean | null = false): void {\n const control = this.formControl();\n if (!control || control.value === state) {\n return;\n }\n\n control.setValue(state);\n }\n\n private syncStateFromControl(control: AbstractControl): void {\n const controlState = control.value === null\n ? null\n : control.value === true;\n\n this.updateState(controlState);\n this.syncInputFromState(controlState);\n }\n\n private syncNativeInputState(input: HTMLInputElement): void {\n this.nativeInputError.set(this.hasNativeInputError(input));\n this.inputDisabledState.set(input.disabled);\n }\n\n private syncControlError(control: AbstractControl): void {\n this.controlError.set(this.hasControlError(control));\n }\n\n private syncInputDisabledState(control: AbstractControl): void {\n const input = this.input()?.nativeElement;\n if (input && input.disabled !== control.disabled) {\n input.disabled = control.disabled;\n }\n }\n\n private hasNativeInputError(input: HTMLInputElement): boolean {\n return !input.validity.valid || input.ariaInvalid === 'true';\n }\n\n private hasControlError(control: AbstractControl): boolean {\n return control.invalid && (control.touched || control.dirty);\n }\n\n private syncAriaInvalidAttribute(input: HTMLInputElement | undefined): void {\n const value = this.inputError() ? 'true' : 'false';\n if (input && input.getAttribute('aria-invalid') !== value) {\n input.setAttribute('aria-invalid', value);\n }\n }\n\n}\n","<ng-content select=\"[md3-input-element]\"></ng-content>\n<div md3-state-component class=\"md3-checkbox-container\">\n <div class=\"md3-checkbox-icon\">\n <md3-icon>{{ checkboxIcon }}</md3-icon>\n </div>\n</div>\n","import { booleanAttribute, Component, computed, contentChild, effect, input, signal, viewChild } from '@angular/core';\nimport { AbstractControl, FormControlName } from '@angular/forms';\nimport { fromEvent } from 'rxjs';\nimport { InputElement } from '../../common/input-element';\nimport { StateComponent } from '../../common/state-component';\n\n@Component({\n selector: 'md3-radio-button',\n imports: [\n StateComponent\n ],\n templateUrl: './radio-button.html',\n styleUrl: './radio-button.scss',\n})\nexport class RadioButton {\n public control = input<AbstractControl | undefined>(undefined, {\n alias: 'control',\n });\n\n private stateComponent = viewChild<StateComponent>(StateComponent);\n private input = contentChild(InputElement);\n private controlName = contentChild(FormControlName);\n private controlError = signal(false);\n private nativeInputError = signal(false);\n\n public disableStateLayer = input<boolean, unknown>(false, {\n alias: 'disable-state-layer',\n transform: booleanAttribute\n });\n\n public state = signal<boolean>(false);\n\n protected formControl = computed<AbstractControl | undefined>(() => this.control() ?? this.controlName()?.control);\n\n private inputError = computed<boolean>(() => {\n const control = this.formControl();\n if (control) {\n this.controlError();\n return this.hasControlError(control);\n }\n\n const input = this.input()?.nativeElement;\n if (!input) {\n return false;\n }\n\n this.nativeInputError();\n return this.hasNativeInputError(input);\n });\n\n private inputDisabledState = signal<boolean>(false);\n public isDisabled = computed<boolean>(() => this.inputDisabledState());\n\n constructor() {\n effect(() => {\n this.stateComponent()?.setStateLayer(!this.disableStateLayer());\n });\n\n effect((onCleanup) => {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n this.syncInitialState(input);\n this.syncNativeInputState(input);\n\n const inputEvents = fromEvent(input, 'change').subscribe(() => {\n this.syncStateFromInput(input);\n this.syncControlFromInput(input);\n this.syncNativeInputState(input);\n });\n\n const documentEvents = fromEvent(input.ownerDocument, 'change').subscribe((event) => {\n if (this.isSameRadioGroup(input, event.target)) {\n this.syncStateFromInput(input);\n this.syncNativeInputState(input);\n }\n });\n\n const observer = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(() => {\n if (!this.formControl()) {\n this.syncStateFromInput(input);\n }\n\n this.syncNativeInputState(input);\n });\n observer?.observe(input, {\n attributes: true,\n attributeFilter: ['aria-invalid', 'checked', 'disabled', 'name', 'required', 'value'],\n });\n\n onCleanup(() => {\n inputEvents.unsubscribe();\n documentEvents.unsubscribe();\n observer?.disconnect();\n });\n });\n\n effect((onCleanup) => {\n const control = this.formControl();\n if (!control) {\n this.controlError.set(false);\n return;\n }\n\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n\n const controlEvents = control.events.subscribe(() => {\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n });\n\n onCleanup(() => controlEvents.unsubscribe());\n });\n\n effect(() => {\n this.syncAriaInvalidAttribute(this.input()?.nativeElement);\n });\n }\n\n private syncInitialState(input: HTMLInputElement): void {\n const control = this.formControl();\n if (control) {\n this.syncStateFromControl(control);\n return;\n }\n\n this.syncStateFromInput(input);\n }\n\n private getInputValue(input: HTMLInputElement | undefined = this.input()?.nativeElement): unknown {\n return input?.value ?? true;\n }\n\n private updateState(state: boolean = false): void {\n this.state.set(state);\n }\n\n private syncStateFromInput(input: HTMLInputElement): void {\n this.updateState(input.checked);\n }\n\n private syncInputFromState(state: boolean = false): void {\n const input = this.input()?.nativeElement;\n if (input && input.checked !== state) {\n input.checked = state;\n }\n }\n\n private syncControlFromInput(input: HTMLInputElement): void {\n const control = this.formControl();\n if (!control || !input.checked) {\n return;\n }\n\n const inputValue = this.getInputValue(input);\n if (control.value !== inputValue) {\n control.setValue(inputValue);\n }\n }\n\n private syncStateFromControl(control: AbstractControl): void {\n const controlState = control.value === this.getInputValue();\n\n this.updateState(controlState);\n this.syncInputFromState(controlState);\n }\n\n private isSameRadioGroup(input: HTMLInputElement, target: EventTarget | null): boolean {\n return target instanceof HTMLInputElement\n && target.type === 'radio'\n && target.name === input.name\n && target.form === input.form;\n }\n\n private syncNativeInputState(input: HTMLInputElement): void {\n this.nativeInputError.set(this.hasNativeInputError(input));\n this.inputDisabledState.set(input.disabled);\n }\n\n private syncControlError(control: AbstractControl): void {\n this.controlError.set(this.hasControlError(control));\n }\n\n private syncInputDisabledState(control: AbstractControl): void {\n const input = this.input()?.nativeElement;\n if (input && input.disabled !== control.disabled) {\n input.disabled = control.disabled;\n }\n }\n\n private hasNativeInputError(input: HTMLInputElement): boolean {\n return !input.validity.valid || input.ariaInvalid === 'true';\n }\n\n private hasControlError(control: AbstractControl): boolean {\n return control.invalid && (control.touched || control.dirty);\n }\n\n private syncAriaInvalidAttribute(input: HTMLInputElement | undefined): void {\n const value = this.inputError() ? 'true' : 'false';\n if (input && input.getAttribute('aria-invalid') !== value) {\n input.setAttribute('aria-invalid', value);\n }\n }\n}\n","<ng-content select=\"[md3-input-element]\"></ng-content>\n<div md3-state-component class=\"md3-radio-button-container\">\n <div class=\"md3-radio-button-icon\"></div>\n</div>\n","import { booleanAttribute, Component, computed, contentChild, effect, input, signal, viewChild } from '@angular/core';\nimport { AbstractControl, FormControlName } from '@angular/forms';\nimport { fromEvent } from 'rxjs';\nimport { InputElement } from '../../common/input-element';\nimport { StateComponent } from '../../common/state-component';\n\n@Component({\n selector: 'md3-switch',\n imports: [\n StateComponent\n ],\n templateUrl: './switch.html',\n styleUrl: './switch.scss',\n})\nexport class Switch {\n public control = input<AbstractControl | undefined>(undefined, {\n alias: 'control',\n });\n\n private stateComponent = viewChild<StateComponent>(StateComponent);\n private input = contentChild(InputElement);\n private controlName = contentChild(FormControlName);\n private controlError = signal(false);\n private nativeInputError = signal(false);\n \n public disableStateLayer = input<boolean, unknown>(false, {\n alias: 'disable-state-layer',\n transform: booleanAttribute\n });\n\n public state = signal<boolean>(false);\n\n protected formControl = computed<AbstractControl | undefined>(() => this.control() ?? this.controlName()?.control);\n\n private inputError = computed<boolean>(() => {\n const control = this.formControl();\n if (control) {\n this.controlError();\n return this.hasControlError(control);\n }\n\n const input = this.input()?.nativeElement;\n if (!input) {\n return false;\n }\n\n this.nativeInputError();\n return this.hasNativeInputError(input);\n });\n\n private inputDisabledState = signal<boolean>(false);\n public isDisabled = computed<boolean>(() => {\n console.log('Switch disabled');\n return this.inputDisabledState();\n });\n\n constructor() {\n effect(() => {\n this.stateComponent()?.setStateLayer(!this.disableStateLayer());\n });\n\n effect((onCleanup) => {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n input.setAttribute('role', 'switch');\n this.syncInitialState(input);\n this.syncNativeInputState(input);\n\n const inputEvents = fromEvent(input, 'change').subscribe(() => {\n this.syncStateFromInput(input);\n this.syncControlFromState(this.state());\n this.syncNativeInputState(input);\n });\n\n const observer = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(() => {\n if (!this.formControl()) {\n this.syncStateFromInput(input);\n }\n\n this.syncNativeInputState(input);\n });\n observer?.observe(input, {\n attributes: true,\n attributeFilter: ['aria-invalid', 'checked', 'disabled', 'required'],\n });\n\n onCleanup(() => {\n inputEvents.unsubscribe();\n observer?.disconnect();\n });\n });\n\n effect((onCleanup) => {\n const control = this.formControl();\n if (!control) {\n this.controlError.set(false);\n return;\n }\n\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n\n const controlEvents = control.events.subscribe(() => {\n this.syncStateFromControl(control);\n this.syncControlError(control);\n this.syncInputDisabledState(control);\n });\n\n onCleanup(() => controlEvents.unsubscribe());\n });\n\n effect(() => {\n this.syncAriaInvalidAttribute(this.input()?.nativeElement);\n });\n }\n\n private syncInitialState(input: HTMLInputElement): void {\n const control = this.formControl();\n if (control) {\n this.syncStateFromControl(control);\n return;\n }\n\n this.syncStateFromInput(input);\n }\n\n private updateState(state: boolean = false): void {\n this.state.set(state);\n }\n\n private syncStateFromInput(input: HTMLInputElement): void {\n this.updateState(input.checked);\n }\n\n private syncInputFromState(state: boolean = false): void {\n const input = this.input()?.nativeElement;\n if (input && input.checked !== state) {\n input.checked = state;\n }\n }\n\n private syncControlFromState(state: boolean = false): void {\n const control = this.formControl();\n if (!control || control.value === state) {\n return;\n }\n\n control.setValue(state);\n }\n\n private syncStateFromControl(control: AbstractControl): void {\n const controlState = control.value === true;\n\n this.updateState(controlState);\n this.syncInputFromState(controlState);\n }\n\n private syncNativeInputState(input: HTMLInputElement): void {\n this.nativeInputError.set(this.hasNativeInputError(input));\n this.inputDisabledState.set(input.disabled);\n }\n\n private syncControlError(control: AbstractControl): void {\n this.controlError.set(this.hasControlError(control));\n }\n\n private syncInputDisabledState(control: AbstractControl): void {\n const input = this.input()?.nativeElement;\n if (input && input.disabled !== control.disabled) {\n input.disabled = control.disabled;\n }\n }\n\n private hasNativeInputError(input: HTMLInputElement): boolean {\n return !input.validity.valid || input.ariaInvalid === 'true';\n }\n\n private hasControlError(control: AbstractControl): boolean {\n return control.invalid && (control.touched || control.dirty);\n }\n\n private syncAriaInvalidAttribute(input: HTMLInputElement | undefined): void {\n const value = this.inputError() ? 'true' : 'false';\n if (input && input.getAttribute('aria-invalid') !== value) {\n input.setAttribute('aria-invalid', value);\n }\n }\n}\n","<ng-content select=\"[md3-input-element]\"></ng-content>\n<div md3-state-component class=\"md3-track-container\">\n <div class=\"md3-track\">\n <div class=\"md3-handle-container\">\n <div class=\"md3-handle\">\n <ng-content select=\"[md3-icon-element]\"></ng-content>\n </div>\n </div>\n </div>\n</div>\n","import { Component, computed, contentChild, effect, ElementRef, input, signal } from '@angular/core';\nimport { AbstractControl, FormControlName } from '@angular/forms';\nimport { fromEvent, merge } from 'rxjs';\nimport { InputElement } from '../common/input-element';\nimport { TypeBody } from '../../styles/typography/type-body';\nimport { SliderSize } from '../../types/slider-size.type';\n\n@Component({\n selector: 'md3-slider',\n imports: [\n TypeBody,\n ],\n templateUrl: './slider.html',\n styleUrl: './slider.scss',\n})\nexport class Slider {\n public control = input<AbstractControl | undefined>(undefined, {\n alias: 'control',\n });\n public sliderSize = input<SliderSize>('x-small', {\n alias: 'slider-size',\n });\n public showValueLabel = input<boolean>(false, {\n alias: 'show-value-label'\n });\n\n private input = contentChild<InputElement>(InputElement);\n private controlName = contentChild<FormControlName>(FormControlName);\n\n public value = signal<number>(0);\n public min = signal<number>(0);\n public max = signal<number>(100);\n public progress = signal<number>(0);\n\n protected formControl = computed<AbstractControl | undefined>(() => this.control() ?? this.controlName()?.control);\n\n constructor(private el: ElementRef<HTMLElement>) {\n effect((onCleanup) => {\n const size = 'md3-' + this.sliderSize();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n\n effect(() => {\n this.element.style.setProperty('--slider-progress', `${this.progress()}%`);\n });\n\n effect((onCleanup) => {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n this.syncInitialState(input);\n\n const inputEvents = merge(\n fromEvent(input, 'input'),\n fromEvent(input, 'change'),\n ).subscribe(() => {\n this.syncStateFromInput(input);\n this.syncControlFromState(this.value());\n });\n\n onCleanup(() => inputEvents.unsubscribe());\n });\n\n effect((onCleanup) => {\n const control = this.formControl();\n if (!control) {\n return;\n }\n\n this.syncStateFromControl(control);\n this.syncInputDisabledState(control);\n\n const controlEvents = control.events.subscribe(() => {\n this.syncStateFromControl(control);\n this.syncInputDisabledState(control);\n });\n\n onCleanup(() => controlEvents.unsubscribe());\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n private syncInitialState(input: HTMLInputElement): void {\n const control = this.formControl();\n if (control) {\n this.syncStateFromControl(control);\n return;\n }\n\n this.syncStateFromInput(input);\n }\n\n private updateState(value: number = 0): void {\n let min = this.min();\n let max = this.max();\n let range = max - min;\n let nextValue = Number.isFinite(value) ? value : min;\n let progress = range === 0\n ? 0\n : ((nextValue - min) / range) * 100;\n\n this.value.set(nextValue);\n this.progress.set(Math.min(100, Math.max(0, progress)));\n }\n\n private syncLimitsFromInput(input: HTMLInputElement | undefined = this.input()?.nativeElement): void {\n if (!input) {\n return;\n }\n\n let min = input.min === ''\n ? 0\n : Number(input.min);\n let max = input.max === ''\n ? 100\n : Number(input.max);\n\n this.min.set(Number.isFinite(min) ? min : 0);\n this.max.set(Number.isFinite(max) ? max : 100);\n }\n\n private syncStateFromInput(input: HTMLInputElement | undefined = this.input()?.nativeElement): void {\n if (!input) {\n return;\n }\n\n this.syncLimitsFromInput(input);\n this.updateState(input.valueAsNumber);\n }\n\n private syncInputFromState(value: number = 0): void {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n\n input.valueAsNumber = value;\n }\n\n private syncControlFromState(value: number = 0): void {\n const control = this.formControl();\n if (!control || control.value === value) {\n return;\n }\n\n control.setValue(value);\n }\n\n private syncStateFromControl(control: AbstractControl): void {\n let controlValue = Number(control.value ?? this.min());\n\n this.syncLimitsFromInput();\n this.updateState(controlValue);\n this.syncInputFromState(controlValue);\n }\n\n private syncInputDisabledState(control: AbstractControl): void {\n const input = this.input()?.nativeElement;\n if (input && input.disabled !== control.disabled) {\n input.disabled = control.disabled;\n }\n }\n}\n","<ng-content select=\"[md3-input-element]\"></ng-content>\n<div class=\"md3-slider-container\">\n <div class=\"md3-slider-track\">\n <div class=\"md3-active-track\">\n <div class=\"md3-track-bar\">\n <div class=\"md3-icon-container\">\n <ng-content select=\"[md3-icon-element]\"></ng-content>\n </div>\n </div>\n </div>\n <div class=\"md3-inactive-track\">\n <div class=\"md3-track-bar\"></div>\n </div>\n </div>\n <div class=\"md3-slider-handle\">\n @if (showValueLabel()) {\n <div class=\"md3-value-label\">\n <md3-type-body size=\"medium\">{{ value() }}</md3-type-body>\n </div>\n }\n </div>\n</div>\n","import { Component, effect, ElementRef, input } from '@angular/core';\n\n@Component({\n selector: 'md3-list',\n templateUrl: './list.html',\n styleUrl: './list.scss',\n})\nexport class List {\n public variant = input<'expressive' | 'baseline'>('expressive');\n public type = input<'standard' | 'segmented'>('standard');\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const variant = 'md3-' + this.variant();\n this.element.classList.add(variant);\n\n onCleanup(() => {\n this.element.classList.remove(variant);\n });\n });\n\n effect((onCleanup) => {\n const type = 'md3-' + this.type();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","<ng-content></ng-content>","import { AfterViewInit, booleanAttribute, Component, computed, contentChild, Directive, effect, ElementRef, HostListener, input } from '@angular/core';\nimport { StateComponent } from '../../common/state-component';\nimport { Checkbox } from '../../selection-controls/checkbox/checkbox';\nimport { RadioButton } from '../../selection-controls/radio-button/radio-button';\nimport { Switch } from '../../selection-controls/switch/switch';\n\n@Directive({\n selector: 'button[md3-item-primary-action], a[md3-item-primary-action]',\n host: {\n 'class': 'md3-item-primary-action',\n },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class ListItemPrimaryAction {\n}\n\n@Component({\n selector: 'md3-list-item, label[md3-list-item], button[md3-list-item], a[md3-list-item]',\n templateUrl: './list-item.html',\n styleUrl: './list-item.scss',\n host: {\n '[class.md3-selected]': 'isSelected()',\n },\n hostDirectives: [\n StateComponent\n ],\n})\nexport class ListItem implements AfterViewInit {\n public slotsAlignment = input<'start' | 'center' | 'end'>('center', {\n alias: 'slots-alignment',\n });\n public selected = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n public isActionTag: boolean = false;\n private isLabelTag: boolean = false;\n private checkbox = contentChild(Checkbox);\n private radioButton = contentChild(RadioButton);\n private switch = contentChild(Switch);\n\n public isSelected = computed(() => {\n const checkbox = this.checkbox();\n const radioButton = this.radioButton();\n\n if (checkbox || radioButton) {\n return (checkbox?.state() || radioButton?.state()) === true;\n }\n\n return this.selected();\n });\n\n public isInputDisabled = computed(() => {\n return this.checkbox()?.isDisabled() || this.radioButton()?.isDisabled() || this.switch()?.isDisabled();\n });\n\n constructor(\n private el: ElementRef,\n private state: StateComponent\n ) {\n effect((onCleanup) => {\n const alignment = 'md3-slots-alignment-' + this.slotsAlignment();\n this.element.classList.add(alignment);\n\n onCleanup(() => {\n this.element.classList.remove(alignment);\n });\n });\n\n effect(() => {\n if (this.isInputDisabled()) {\n this.state.setStateLayer(false);\n this.element.classList.add('md3-disabled');\n } else {\n this.state.setStateLayer(true);\n this.element.classList.remove('md3-disabled');\n }\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n ngAfterViewInit(): void {\n let tagName = this.element.tagName.toLowerCase();\n\n this.isLabelTag = tagName == 'label';\n\n if (this.isLabelTag) {\n this.element.setAttribute('tabindex', '0');\n this.setLabelInputTabIndex();\n }\n\n this.isActionTag = tagName != 'md3-list-item';\n \n if (!this.isActionTag) {\n this.state.setStateLayer(false);\n }\n }\n\n @HostListener('focusin', ['$event'])\n protected onFocusIn(event: FocusEvent): void {\n if (!this.isLabelTag || event.target === this.element || !this.isInputElement(event.target)) {\n return;\n }\n\n this.focusLabel();\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeyDown(event: KeyboardEvent): void {\n if (!this.isLabelTag || event.target !== this.element || event.defaultPrevented) {\n return;\n }\n\n if (event.key !== ' ' && event.key !== 'Enter') {\n return;\n }\n\n const input = this.getLabelActivationInput();\n\n if (!input) {\n return;\n }\n\n event.preventDefault();\n input.click();\n this.focusLabel();\n }\n\n private setLabelInputTabIndex(): void {\n this.getLabelInputs().forEach((input) => input.tabIndex = -1);\n }\n\n private getLabelActivationInput(): HTMLInputElement | undefined {\n return this.getLabelInputs().find((input) => {\n return !input.disabled && (input.type === 'checkbox' || input.type === 'radio');\n }) ?? this.getLabelInputs().find((input) => !input.disabled);\n }\n\n private getLabelInputs(): HTMLInputElement[] {\n return Array.from(this.element.querySelectorAll<HTMLInputElement>('input'));\n }\n\n private focusLabel(): void {\n this.element.focus({ preventScroll: true });\n }\n\n private isInputElement(target: EventTarget | null): target is HTMLInputElement {\n return target instanceof HTMLInputElement;\n }\n}\n","<ng-content select=\"[md3-item-primary-action]\"></ng-content>\n<ng-content select=\"md3-list-leading\"></ng-content>\n<ng-content select=\"[md3-list-slot=content]\"></ng-content>\n<ng-content select=\"[md3-list-slot=trailing]\"></ng-content>","import { Component, effect, ElementRef, input } from '@angular/core';\nimport { ListLeadingType } from '../../../types/list-leading-type.type';\nimport { ListLeadingSize } from '../../../types/list-leading-size.type';\n\n@Component({\n selector: 'md3-list-leading',\n templateUrl: './list-leading.html',\n styleUrl: './list-leading.scss',\n})\nexport class ListLeading {\n public type = input<ListLeadingType>('icon');\n public size = input<ListLeadingSize>('image');\n\n constructor(\n private el: ElementRef,\n ) {\n effect((onCleanup) => {\n const type = 'md3-type-' + this.type();\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect((onCleanup) => {\n const size = 'md3-size-' + this.size();\n this.element.classList.add(size);\n\n onCleanup(() => {\n this.element.classList.remove(size);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n}\n","<ng-content></ng-content>","import { Directive, ElementRef, input } from '@angular/core';\n\n@Directive({\n selector: '[md3-list-slot]',\n host: {\n '[attr.md3-list-slot]': 'position()',\n },\n})\nexport class ListSlot {\n public position = input.required<'content' | 'trailing'>({\n alias: 'md3-list-slot',\n });\n\n constructor(private el: ElementRef) { }\n\n public get nativeElement(): HTMLElement {\n return this.el.nativeElement;\n }\n}\n","import { Component, computed, ElementRef, input, Input } from '@angular/core';\n\n@Component({\n selector: 'md3-loading-indicator',\n imports: [],\n templateUrl: './loading-indicator.html',\n styleUrl: './loading-indicator.scss',\n})\nexport class LoadingIndicator {\n public contained = input<boolean>(false);\n public size = input<number>(48);\n\n public dpSize = computed(() => {\n const fontSize = this.getHostFontSize();\n return Number((this.size() / fontSize).toFixed(4));\n });\n\n constructor(\n private el: ElementRef,\n ) {\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n private getHostFontSize(): number {\n if (typeof getComputedStyle === 'undefined') {\n return 16;\n }\n\n return Number.parseFloat(getComputedStyle(this.element).fontSize) || 16;\n }\n}\n","<div class=\"md3-indicator-indeterminate\" [class.md3-contained]=\"contained()\" [style]=\"'--size: '+dpSize()+'em'\">\n <svg viewBox=\"0 0 48 48\" class=\"md3-indicator-svg\">\n <path class=\"md3-indicator-shape\"></path>\n </svg>\n</div>","import { Component, computed, input } from '@angular/core';\n\n@Component({\n selector: 'md3-linear-progress-indicator',\n imports: [],\n templateUrl: './linear-progress-indicator.html',\n styleUrl: './linear-progress-indicator.scss',\n})\nexport class LinearProgressIndicator {\n public indeterminate = input<boolean>(false);\n public thickness = input<4 | 8>(4);\n public progress = input<number>(0);\n\n public progressValue = computed(() => {\n const progress = this.progress();\n if (progress < 0) {\n return 0;\n }\n\n if (progress > 100) {\n return 100;\n }\n\n return progress;\n });\n\n constructor() {\n }\n}\n","<div class=\"md3-linear-indicator\" [class.md3-thickness-8dp]=\"thickness() == 8\" [class.md3-indeterminate]=\"indeterminate()\" [style.--progress]=\"progressValue() + '%'\">\n <div class=\"md3-track\"></div>\n <div class=\"md3-active-indicator\"></div>\n @if (indeterminate()) {\n <div class=\"md3-track-secondary\"></div>\n <div class=\"md3-active-indicator-secondary\"></div>\n }\n</div>","import { Component, computed, input } from '@angular/core';\n\n@Component({\n selector: 'md3-circular-progress-indicator',\n imports: [],\n templateUrl: './circular-progress-indicator.html',\n styleUrl: './circular-progress-indicator.scss',\n})\nexport class CircularProgressIndicator {\n public indeterminate = input<boolean>(false);\n public thickness = input<4 | 8>(4);\n public progress = input<number>(0);\n\n public progressValue = computed(() => {\n const progress = this.progress();\n if (progress < 0) {\n return 0;\n }\n\n if (progress > 100) {\n return 100;\n }\n\n return progress;\n });\n\n constructor() {\n }\n}\n","<div class=\"md3-indicator-container\" [class.md3-thickness-8dp]=\"thickness() == 8\" [class.md3-indeterminate]=\"indeterminate()\" [style.--progress]=\"progressValue()\">\n <svg class=\"md3-circlar-indicator\">\n <circle class=\"md3-track\" pathLength=\"100\"></circle>\n <circle class=\"md3-active-indicator\" pathLength=\"100\"></circle>\n </svg>\n</div>","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[md3-app-bar-logo]',\n})\nexport class AppBarLogo {\n}\n","import { booleanAttribute, Component, computed, contentChild, effect, ElementRef, input, Signal, signal } from '@angular/core';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../interfaces/button-context.interface';\nimport { ButtonSize } from '../../types/button-size.type';\nimport { Avatar } from '../common/avatar';\nimport { LayoutService } from '../../foundations/layout.service';\nimport { AppBarLogo } from './app-bar-logo';\nimport { TypeDisplay, TypeHeadline, TypeTitle } from '../../../public-api';\n\nexport type AppBarType = 'small' | 'medium' | 'large' | 'search';\nexport type AppBarScrollingStyle = 'none' | 'transparent' | 'elevate';\n\n@Component({\n selector: 'md3-app-bar',\n imports: [\n TypeHeadline,\n TypeTitle,\n TypeDisplay,\n ],\n templateUrl: './app-bar.html',\n styleUrl: './app-bar.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: AppBar,\n },\n ],\n host: {\n role: 'banner',\n '[class.md3-scrolled]': 'mainIsScrolled()',\n '[class.md3-auto-hide]': 'autoHide()',\n '[class.md3-scrolling-down]': 'isScrollingDown()',\n },\n})\nexport class AppBar implements ButtonContext {\n public title = input<string | null>(null, {\n alias: 'bar-title',\n });\n\n public subtitle = input<string | null>(null, {\n alias: 'bar-subtitle',\n });\n\n public appBarType = input<AppBarType>('small', {\n alias: 'bar-type',\n });\n\n public appBarScrollingStyle = input<AppBarScrollingStyle>('elevate', {\n alias: 'scroll-style',\n });\n\n public autoHide = input<boolean, unknown>(false, {\n alias: 'auto-hide',\n transform: booleanAttribute,\n });\n \n public centerAligned = input<boolean, unknown>(false, {\n alias: 'center-aligned',\n transform: booleanAttribute,\n });\n\n private logo = contentChild(AppBarLogo);\n private avatar = contentChild(Avatar);\n\n public hasLogo = computed(() => !!this.logo());\n public hasAvatar = computed(() => !!this.avatar());\n\n public mainIsScrolled = computed(() => this.layoutService.mainIsScrolled());\n public isScrollingDown = signal<boolean>(false);\n\n private scrollPosition = 0;\n private bottomExpandedHeight = computed(() => {\n const type = this.appBarType();\n\n if (!this.hasCollapsibleBottom(type)) {\n return 0;\n }\n\n this.layoutService.viewport();\n\n const fontSize = this.getHostFontSize();\n const hasSubtitle = !!this.subtitle()?.length;\n\n if (type === 'medium') {\n return (hasSubtitle ? 4.5 : 3) * fontSize;\n }\n\n return (hasSubtitle ? 5.5 : 3.5) * fontSize;\n });\n\n private bottomCollapse = computed(() => {\n const expandedHeight = this.bottomExpandedHeight();\n\n if (!expandedHeight) {\n return 0;\n }\n\n return Math.min(expandedHeight, Math.max(0, this.layoutService.mainScrollTop()));\n });\n\n // button context\n public buttonContextSize: Signal<ButtonSize> = signal('small');\n\n constructor(\n private el: ElementRef,\n private layoutService: LayoutService\n ) {\n this.scrollPosition = this.layoutService.mainScrollTop();\n\n effect((onCleanup) => {\n const type = 'md3-' + this.appBarType();\n\n this.element.classList.add(type);\n\n onCleanup(() => {\n this.element.classList.remove(type);\n });\n });\n\n effect((onCleanup) => {\n const scrollingStyle = 'md3-scroll-style-' + this.appBarScrollingStyle();\n\n this.element.classList.add(scrollingStyle);\n\n onCleanup(() => {\n this.element.classList.remove(scrollingStyle);\n });\n });\n\n effect((onCleanup) => {\n const width = 'md3-layout-' + this.layoutService.widthClass();\n this.element.classList.add(width);\n\n onCleanup(() => {\n this.element.classList.remove(width);\n });\n });\n\n effect(() => {\n this.updateScrollDirection(this.layoutService.mainScrollTop());\n });\n\n effect(() => {\n const collapse = this.bottomCollapse();\n const expandedHeight = this.bottomExpandedHeight();\n\n this.element.style.setProperty(\n '--app-bar-bottom-collapse',\n `${collapse}px`\n );\n this.element.style.setProperty(\n '--app-bar-bottom-opacity',\n this.getBottomOpacity(collapse, expandedHeight).toString()\n );\n this.element.classList.toggle(\n 'md3-collapsed',\n this.isBottomCollapsed(collapse, expandedHeight)\n );\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n private getBottomOpacity(collapse: number, expandedHeight: number): number {\n if (!expandedHeight) {\n return 1;\n }\n\n return Math.max(0, Math.min(1, 1 - (collapse / expandedHeight)));\n }\n\n private isBottomCollapsed(collapse: number, expandedHeight: number): boolean {\n return expandedHeight > 0 && collapse >= expandedHeight;\n }\n\n private updateScrollDirection(scrollTop: number): void {\n if (scrollTop === this.scrollPosition) {\n return;\n }\n\n const defaultBarHeight = this.getHostFontSize() * 4;\n const scrollOffset = scrollTop - this.scrollPosition;\n\n if (Math.abs(scrollOffset) <= defaultBarHeight) {\n return;\n }\n\n this.isScrollingDown.set(scrollOffset > 0);\n this.scrollPosition = scrollTop;\n }\n\n private hasCollapsibleBottom(type: AppBarType): boolean {\n return (type === 'medium' || type === 'large') &&\n (!!this.title()?.length || !!this.subtitle()?.length);\n }\n\n private getHostFontSize(): number {\n if (typeof getComputedStyle === 'undefined') {\n return 16;\n }\n\n return Number.parseFloat(getComputedStyle(this.element).fontSize) || 16;\n }\n}\n","<div class=\"md3-app-bar-container\">\n <div class=\"md3-app-bar-leading\">\n <ng-content select=\"[md3-app-bar-leading]\"></ng-content>\n </div>\n\n @if (appBarType() == 'search') {\n <div class=\"md3-app-bar-search\" [class.md3-center]=\"centerAligned()\">\n <div class=\"md3-search-container\">\n <div class=\"md3-leading-buttons\">\n <ng-content select=\"[md3-search-leading]\"></ng-content>\n </div>\n <ng-content select=\"[md3-input-element]\"></ng-content>\n <div class=\"md3-trailing-buttons\">\n <ng-content select=\"[md3-search-trailing]\"></ng-content>\n </div>\n </div>\n </div>\n } @else if (hasLogo()) {\n <div class=\"md3-app-bar-logo\" [class.md3-center]=\"centerAligned()\">\n <ng-content select=\"[md3-app-bar-logo]\"></ng-content>\n </div>\n } @else if (title() || subtitle()) {\n <div class=\"md3-app-bar-title\" [class.md3-center]=\"centerAligned()\">\n @if (title()?.length) {\n <div md3-type-title size=\"large\">{{ title() }}</div>\n }\n @if (subtitle()?.length) {\n <div md3-type-body size=\"small\" emphasized>{{ subtitle() }}</div>\n }\n </div>\n }\n\n <div class=\"md3-app-bar-trailing\">\n <ng-content select=\"[md3-app-bar-trailing]\"></ng-content>\n @if (hasAvatar()) {\n <div class=\"md3-app-bar-avatar\">\n <ng-content select=\"[md3-avatar]\"></ng-content>\n </div>\n }\n </div>\n\n @if ((appBarType() == 'medium' || appBarType() == 'large') && (title() || subtitle())) {\n <div class=\"md3-app-bar-bottom\" [class.md3-center]=\"centerAligned()\">\n <div class=\"md3-app-bar-bottom-content\">\n @if (appBarType() == 'medium') {\n @if (title()?.length) {\n <div md3-type-headline size=\"medium\">{{ title() }}</div>\n }\n @if (subtitle()?.length) {\n <div md3-type-title size=\"small\">{{ subtitle() }}</div>\n }\n }\n @if (appBarType() == 'large') {\n @if (title()?.length) {\n <div md3-type-display size=\"small\">{{ title() }}</div>\n }\n @if (subtitle()?.length) {\n <div md3-type-title size=\"medium\">{{ subtitle() }}</div>\n }\n }\n </div>\n </div>\n }\n</div>\n","import { booleanAttribute, Component, computed, contentChild, contentChildren, ElementRef, HostBinding, inject, input } from '@angular/core';\nimport { RouterLinkActive } from '@angular/router';\nimport { IconElement } from '../../common/icon-element';\nimport { Badge } from '../../common/badge';\n\n@Component({\n selector: 'button[md3-nav-item], a[md3-nav-item]',\n exportAs: 'md3NavItem',\n imports: [],\n templateUrl: './navigation-item.html',\n styleUrl: './navigation-item.scss',\n host: {\n '[class.md3-hide-on-collapse]': 'this.hideOnCollapse()',\n },\n hostDirectives: [\n {\n directive: RouterLinkActive,\n inputs: ['routerLinkActiveOptions', 'ariaCurrentWhenActive'],\n }\n ],\n})\nexport class NavigationItem {\n private readonly el = inject(ElementRef<HTMLElement>);\n private routerLinkActive = inject(RouterLinkActive);\n \n public hideOnCollapse = input<boolean, unknown>(false, {\n alias: 'hide-on-collapse',\n transform: booleanAttribute\n });\n\n private icons = contentChildren<IconElement>(IconElement);\n\n public hasIcons = computed(() => this.icons()?.length != 0);\n\n public badge = contentChild<Badge>(Badge);\n\n public get isRouteActive(): boolean {\n return this.routerLinkActive.isActive;\n }\n\n @HostBinding('class.md3-active') get active(): boolean {\n return this.isRouteActive;\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n}\n","<div class=\"md3-item-container\">\n @if (hasIcons()) {\n <div class=\"md3-icon-container\">\n <ng-content select=\"[md3-icon-element=active]\"></ng-content>\n <ng-content select=\"[md3-icon-element]\"></ng-content>\n </div>\n }\n <div class=\"md3-label\">\n <ng-content></ng-content>\n </div>\n @if (hasIcons() && badge()) {\n <div class=\"md3-badge-container\" [class.md3-small]=\"badge()?.isSmall()\">\n <ng-content select=\"md3-badge\"></ng-content>\n </div>\n }\n</div>","import { booleanAttribute, Component, ElementRef, inject, input } from '@angular/core';\nimport { TypeLabel } from '../../../../public-api';\n\n@Component({\n selector: 'md3-nav-group',\n imports: [\n TypeLabel,\n ],\n templateUrl: './navigation-group.html',\n styleUrl: './navigation-group.scss',\n host: {\n '[class.md3-hide-on-collapse]': 'hideOnCollapse()',\n },\n})\nexport class NavigationGroup {\n private readonly el = inject(ElementRef<HTMLElement>);\n \n public label = input<string>();\n \n public hideOnCollapse = input<boolean, unknown>(false, {\n alias: 'hide-on-collapse',\n transform: booleanAttribute\n });\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n}\n","@if (label()?.length) {\n <div class=\"md3-nav-label\">\n <md3-type-label size=\"large\">{{ label() }}</md3-type-label>\n </div>\n}\n<ng-content select=\"[md3-nav-item]\"></ng-content>","import { Component, ElementRef, Signal, booleanAttribute, computed, contentChild, contentChildren, effect, inject, input, model, signal } from '@angular/core';\nimport { LayoutService } from '../../../foundations/layout.service';\nimport { IconElement } from '../../common/icon-element';\nimport { FloatingActionButton } from '../../buttons/floating-action-button/floating-action-button';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { IconButton } from '../../buttons/icon-button/icon-button';\nimport { MaterialIcon } from '../../common/material-icon/material-icon';\n\ntype ExpandedLayout = 'standard' | 'modal';\ntype CollapsedLayout = 'compact' | 'narrow' | 'hidden';\ntype ContainerStyle = 'none' | 'elevated' | 'divider';\n\n@Component({\n selector: 'md3-navigation-rail',\n imports: [\n IconButton,\n IconElement,\n MaterialIcon,\n ],\n templateUrl: './navigation-rail.html',\n styleUrl: './navigation-rail.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: NavigationRail,\n },\n ],\n host: {\n '[class.md3-expanded]': 'this.expanded()',\n },\n})\nexport class NavigationRail implements ButtonContext {\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly layoutService = inject(LayoutService);\n\n public expanded = model(false, {\n alias: 'expanded',\n });\n\n public hideMenuButton = input<boolean, unknown>(false, {\n alias: 'hide-menu-button',\n transform: booleanAttribute\n });\n\n public fullWidthIndicator = input<boolean, unknown>(false, {\n alias: 'full-width-indicator',\n transform: booleanAttribute\n });\n\n public containerStyle = input<ContainerStyle>('none', {\n alias: 'container-style',\n });\n\n public collapsedMode = input<CollapsedLayout>('compact', {\n alias: 'collapsed-layout',\n });\n\n public expandedMode = input<ExpandedLayout>('standard', {\n alias: 'expanded-layout',\n });\n\n private readonly resolvedCollapsedLayout = computed<CollapsedLayout>(() => {\n if (this.layoutService.isCompact()) {\n return 'hidden';\n }\n\n return this.collapsedMode();\n });\n\n private readonly resolvedExpandedLayout = computed<ExpandedLayout>(() => {\n if (this.layoutService.isCompact()) {\n return 'modal';\n }\n\n return this.expandedMode();\n });\n\n private menuIcons = contentChildren<IconElement>(IconElement);\n private floatingActionButton = contentChild<FloatingActionButton>(FloatingActionButton);\n\n public menuExpandIcon = computed(() => this.menuIcons().find((icon) => icon.iconType() == 'expand'));\n public menuCollapseIcon = computed(() => this.menuIcons().find((icon) => icon.iconType() == 'collapse'));\n public hasFab = computed(() => !!this.floatingActionButton());\n \n // context values\n buttonContextSize: Signal<ButtonSize> = signal('small');\n buttonContextExtended: Signal<boolean> = this.expanded;\n\n constructor() {\n effect((onCleanup) => {\n const containerStyle = this.containerStyle();\n if (containerStyle == 'none') {\n return;\n }\n\n const containerClass = 'md3-style-' + containerStyle;\n\n this.element.classList.add(containerClass);\n\n onCleanup(() => {\n this.element.classList.remove(containerClass);\n });\n });\n\n effect((onCleanup) => {\n const collapsed = 'md3-collapsed-' + this.resolvedCollapsedLayout();\n this.element.classList.add(collapsed);\n\n onCleanup(() => {\n this.element.classList.remove(collapsed);\n });\n });\n \n effect((onCleanup) => {\n const expanded = 'md3-expanded-' + this.resolvedExpandedLayout();\n this.element.classList.add(expanded);\n\n onCleanup(() => {\n this.element.classList.remove(expanded);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n public toggle(): void {\n const isExpanded = !this.expanded();\n this.expanded.set(isExpanded);\n }\n\n public collapse(): void {\n this.expanded.set(false);\n }\n\n public expand(): void {\n this.expanded.set(true);\n }\n}","<div class=\"md3-nav-scrim\" (click)=\"collapse()\"></div>\n<div class=\"md3-nav-container\">\n <div class=\"md3-nav-header\" [class.md3-hidden]=\"hideMenuButton() && !hasFab()\">\n @if (!hideMenuButton()) {\n <button md3-icon-button button-type=\"standard\" class=\"md3-menu-button\" (click)=\"toggle()\">\n <ng-content select=\"[md3-icon-element=expand]\"></ng-content>\n @if (!menuExpandIcon()) {\n <md3-icon md3-icon-element md3-menu-expand>menu</md3-icon>\n }\n <ng-content select=\"[md3-icon-element=collapse]\"></ng-content>\n @if (!menuCollapseIcon()) {\n <md3-icon md3-icon-element md3-menu-collapse bi-directional>menu_open</md3-icon>\n }\n </button>\n }\n\n <ng-content select=\"[md3-fab]\"></ng-content>\n </div>\n <div class=\"md3-menu-container md3-scrollable\" [class.md3-full-width-indicator]=\"fullWidthIndicator()\">\n <ng-content select=\"[md3-nav-item], md3-nav-group\"></ng-content>\n </div>\n</div>","import { Component, computed, effect, ElementRef, inject } from '@angular/core';\nimport { LayoutService } from '../../../foundations/layout.service';\n\ntype NavigationLayout = 'vertical' | 'horizontal';\n\n@Component({\n selector: 'md3-navigation-bar',\n imports: [\n ],\n templateUrl: './navigation-bar.html',\n styleUrl: './navigation-bar.scss',\n})\nexport class NavigationBar {\n private readonly el = inject(ElementRef<HTMLElement>);\n private readonly layoutService = inject(LayoutService);\n private readonly resolvedLayout = computed<NavigationLayout>(() => {\n if (this.layoutService.widthClass() === 'compact') {\n return 'vertical';\n }\n\n return 'horizontal';\n });\n\n constructor() {\n effect((onCleanup) => {\n const layout = 'md3-layout-' + this.resolvedLayout();\n this.element.classList.add(layout);\n\n onCleanup(() => {\n this.element.classList.remove(layout);\n });\n });\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n}\n","<div class=\"md3-navigation-container\">\n <div class=\"md3-menu-container\">\n <ng-content select=\"[md3-nav-item]\"></ng-content>\n </div>\n</div>","import { Component, computed, contentChild, contentChildren, effect, ElementRef, input, signal, Signal, viewChild } from '@angular/core';\nimport { InputElement } from '../common/input-element';\nimport { IconElement } from '../common/icon-element';\nimport { AbstractControl, FormControlName } from '@angular/forms';\nimport { fromEvent, merge } from 'rxjs';\nimport { IconButton } from '../buttons/icon-button/icon-button';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../interfaces/button-context.interface';\nimport { ButtonSize } from '../../types/button-size.type';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'md3-text-field',\n imports: [\n NgClass,\n ],\n templateUrl: './text-field.html',\n styleUrl: './text-field.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: TextField,\n },\n ],\n})\nexport class TextField implements ButtonContext {\n public label = input<string | null>(null, {\n alias: 'label',\n });\n public fieldType = input<'filled' | 'outlined'>('filled', {\n alias: 'field-type',\n });\n public inputCounter = input<boolean | number>(false, {\n alias: 'input-counter',\n });\n public control = input<AbstractControl>(undefined, {\n alias: 'control',\n });\n\n private inputContainer = viewChild<ElementRef>('inputContainer');\n private input = contentChild(InputElement);\n private iconElements = contentChildren(IconElement, { descendants: true });\n private iconButtons = contentChildren(IconButton, { descendants: true });\n private controlName = contentChild(FormControlName);\n private controlError = signal(false);\n private nativeInputError = signal(false);\n // Tracks the last aria-invalid value this component itself wrote, so\n // hasNativeInputError() can tell a self-authored value apart from one set\n // externally. See hasNativeInputError() for why that distinction matters.\n private lastSyncedAriaInvalid: string | null = null;\n\n public formControl = computed<AbstractControl | undefined>(() => {\n if (this.control()) {\n return this.control();\n }\n\n return this.controlName()?.control;\n });\n\n public inputError = computed<boolean>(() => {\n const control = this.formControl();\n if (control) {\n this.controlError();\n return this.hasControlError(control);\n }\n\n const input = this.input()?.nativeElement;\n if (!input) {\n return false;\n }\n\n this.nativeInputError();\n return this.hasNativeInputError(input);\n });\n\n public maxLength = computed<number | undefined>(() => {\n const counter = this.inputCounter();\n\n if (!counter || counter === true) {\n return undefined;\n }\n\n return Number(Number(counter).toFixed(0));\n });\n public valueLength = signal(0);\n \n // context values\n buttonContextSize: Signal<ButtonSize> = signal('small');\n\n constructor() {\n effect((onCleanup) => {\n const input = this.input();\n if (!input) {\n return;\n }\n\n const nativeInput = input.nativeElement;\n const isTextarea = nativeInput.tagName.toLowerCase() === 'textarea';\n \n nativeInput.setAttribute('placeholder', '');\n this.syncNativeInputState(nativeInput);\n\n if (isTextarea) {\n nativeInput.setAttribute('rows', '1');\n }\n\n const inputEvents = merge(\n fromEvent(nativeInput, 'input'),\n fromEvent(nativeInput, 'change'),\n fromEvent(nativeInput, 'blur'),\n fromEvent(nativeInput, 'invalid'),\n ).subscribe(() => {\n this.syncNativeInputState(nativeInput);\n\n if (isTextarea) {\n nativeInput.style.height = 'auto';\n nativeInput.style.height = nativeInput.scrollHeight + 'px';\n }\n });\n\n const observer = typeof MutationObserver === 'undefined'\n ? undefined\n : new MutationObserver(() => this.syncNativeInputState(nativeInput));\n observer?.observe(nativeInput, {\n attributes: true,\n attributeFilter: ['aria-invalid', 'disabled', 'maxlength', 'minlength', 'pattern', 'required'],\n });\n\n onCleanup(() => {\n inputEvents.unsubscribe();\n observer?.disconnect();\n });\n });\n\n effect((onCleanup) => {\n const control = this.formControl();\n if (!control) {\n this.controlError.set(false);\n return;\n }\n\n this.syncControlError(control);\n\n const controlEvents = control.events.subscribe(() => this.syncControlError(control));\n\n onCleanup(() => controlEvents.unsubscribe());\n });\n\n effect(() => {\n const container = this.inputContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n const hasLeading: boolean = this.iconElements().some(i => i.iconType() === 'leading') ?? false;\n const hasTrailing: boolean = (this.iconElements().some(i => i.iconType() === 'trailing') || !!this.iconButtons().length) ?? false;\n\n container.classList.toggle('md3-has-leading-icon', hasLeading);\n container.classList.toggle('md3-has-trailing-icon', hasTrailing);\n });\n\n effect(() => {\n this.syncAriaInvalidAttribute(this.input()?.nativeElement);\n });\n }\n\n private syncNativeInputState(input: HTMLInputElement): void {\n this.valueLength.set(input.value.length);\n this.nativeInputError.set(this.hasNativeInputError(input));\n }\n\n private syncControlError(control: AbstractControl): void {\n this.controlError.set(this.hasControlError(control));\n }\n\n private hasNativeInputError(input: HTMLInputElement): boolean {\n const ariaInvalid = input.getAttribute('aria-invalid');\n\n // aria-invalid is also written by syncAriaInvalidAttribute() below,\n // based on this very computation. Without excluding our own last\n // write, a validity error that gets flagged once can never clear:\n // the native 'input'/'change' handler would keep reading back the\n // (still-true, self-authored) attribute from the previous cycle\n // before the effect that's about to correct it has had a chance to\n // run. Comparing against lastSyncedAriaInvalid means only a value\n // that didn't come from us — i.e. set externally, such as by a\n // consumer's own validation — counts as an error signal here.\n const externallyFlaggedInvalid = ariaInvalid === 'true' && ariaInvalid !== this.lastSyncedAriaInvalid;\n\n return !input.validity.valid || externallyFlaggedInvalid;\n }\n\n private hasControlError(control: AbstractControl): boolean {\n return control.invalid && (control.touched || control.dirty);\n }\n\n private syncAriaInvalidAttribute(input: HTMLInputElement | undefined): void {\n if (!input) {\n return;\n }\n\n const value = this.inputError() ? 'true' : 'false';\n this.lastSyncedAriaInvalid = value;\n\n if (input.getAttribute('aria-invalid') !== value) {\n input.setAttribute('aria-invalid', value);\n }\n }\n}\n","<label #inputContainer class=\"md3-text-field-container\" [ngClass]=\"{\n 'md3-text-field-filled': fieldType() == 'filled',\n 'md3-text-field-outlined': fieldType() == 'outlined',\n}\">\n <ng-content></ng-content>\n <fieldset aria-hidden=\"true\" class=\"md3-text-field-outline\">\n @if (label() && fieldType() == 'outlined') {\n <legend class=\"md3-label-gap\">{{ label() }}</legend>\n }\n </fieldset>\n @if (label()) {\n <label class=\"md3-text-field-label\">{{ label() }}</label>\n }\n <ng-content select=\"[md3-icon-element=leading]\"></ng-content>\n <ng-content select=\"[md3-icon-button], [md3-icon-element=trailing]\"></ng-content>\n @if (fieldType() != 'outlined') {\n <div class=\"md3-text-field-state\"></div>\n }\n</label>\n<div class=\"md3-supporting-text-container\" [class.md3-has-error]=\"inputError()\">\n <ng-content select=\"[md3-supporting-text]\"></ng-content>\n @if (inputCounter()) {\n <div class=\"md3-text-input-counter\">{{ valueLength() + (maxLength() ? \"/\" + maxLength() : \"\") }}</div>\n }\n</div>\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[md3-supporting-text]',\n host: {\n 'class': 'md3-supporting-text'\n }\n})\nexport class SupportingText {\n}\n","import { DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { InjectionToken, Type } from '@angular/core';\nimport { filter, Observable, Subject, take } from 'rxjs';\nimport { DialogConfig, DialogContainer } from '../../interfaces/dialog-config.interface';\n\nexport const DIALOG_DATA = new InjectionToken<unknown>('MD3_DIALOG_DATA');\nexport const DIALOG_CONFIG = new InjectionToken<DialogConfig>('MD3_DIALOG_CONFIG');\nexport const DIALOG_COMPONENT = new InjectionToken<Type<unknown>>('MD3_DIALOG_COMPONENT');\n\nconst DIALOG_EXIT_ANIMATION_FALLBACK_MS = 300;\nconst HIDDEN_CLASS = 'md3-dialog-hidden';\n\nexport class DialogRef<T = unknown, R = unknown> {\n private readonly closed = new Subject<R | undefined>();\n private readonly closing = new Subject<void>();\n private readonly hiddenChanges = new Subject<boolean>();\n private closePromise: Promise<void> | null = null;\n private closeStarted = false;\n private closeSettled = false;\n private hidden = false;\n\n /** Shell hosting the dialog: the regular dialog or the full screen one. */\n public dialogInstance?: DialogContainer;\n /**\n * Filled by DialogService after the user component is attached. Keeping the\n * instance here lets callers imperatively update inputs when that is useful.\n */\n public componentInstance?: T;\n\n /** Overlay hosting the dialog, useful to reach the panel and the scrim. */\n public get overlayRef(): OverlayRef {\n return this.cdkRef.overlayRef;\n }\n\n /** Whether the dialog started closing. Such a dialog cannot be hidden or shown anymore. */\n public get isClosing(): boolean {\n return this.closeStarted;\n }\n\n /** Whether the dialog is currently hidden, on request or behind another dialog. */\n public get isHidden(): boolean {\n return this.hidden;\n }\n\n constructor(\n private readonly cdkRef: CdkDialogRef<R, T>,\n disableCloseEvents: boolean,\n /** Whether this reference belongs to a full screen dialog. */\n public readonly isFullScreen: boolean = false,\n ) {\n // Closing always goes through this reference so the exit animation can\n // run before the CDK disposes the overlay. Detachments triggered from\n // the outside (navigation, scroll strategy) still settle this ref.\n this.cdkRef.closed.pipe(take(1)).subscribe((result) => this.settle(result));\n\n if (!disableCloseEvents) {\n this.connectCloseEvents();\n }\n }\n\n /** Closes the dialog. The promise resolves once the exit animation is done. */\n public close(result?: R): Promise<void> {\n if (this.closePromise) {\n return this.closePromise;\n }\n\n this.startClosing();\n this.closePromise = this.startCloseAnimation().then(() => this.cdkRef.close(result));\n\n return this.closePromise;\n }\n\n /**\n * Hides the dialog with the closing animation while keeping it alive, so\n * its content, form state and subscriptions survive until show() is called.\n * The page underneath becomes usable again while the dialog waits behind it.\n * The promise resolves once the dialog is out of sight.\n */\n public hide(): Promise<void> {\n if (this.hidden || this.closeStarted) {\n return Promise.resolve();\n }\n\n this.hidden = true;\n this.toggleHiddenState(true);\n this.dialogInstance?.setActive(false);\n this.hiddenChanges.next(true);\n\n return this.waitForSurfaceAnimation();\n }\n\n /**\n * Brings a hidden dialog back with the opening animation. Focus moves back\n * into the dialog even when it was never hidden, which is what makes it\n * usable again once the dialog above it closes.\n */\n public show(): void {\n if (this.closeStarted) {\n return;\n }\n\n if (this.hidden) {\n this.hidden = false;\n this.toggleHiddenState(false);\n this.dialogInstance?.setActive(true);\n this.hiddenChanges.next(false);\n }\n\n this.dialogInstance?.recaptureFocus();\n }\n\n /** Emits when the dialog starts closing, before the exit animation runs. */\n public beforeClosed(): Observable<void> {\n return this.closing.asObservable();\n }\n\n /** Emits the new value of `isHidden` every time the dialog is hidden or shown. */\n public hiddenChanged(): Observable<boolean> {\n return this.hiddenChanges.asObservable();\n }\n\n public afterClosed(): Observable<R | undefined> {\n return this.closed.asObservable();\n }\n\n private connectCloseEvents(): void {\n // The CDK config keeps `disableClose` on, so the scrim and Escape key\n // are handled here instead and the dialog can animate out.\n this.cdkRef.backdropClick.pipe(take(1)).subscribe(() => {\n this.cdkRef.containerInstance._closeInteractionType = 'mouse';\n this.close();\n });\n\n // A hidden dialog is not the one the Escape key is meant for, even\n // though the overlay it sits in is still the one receiving the event.\n this.cdkRef.keydownEvents.pipe(\n filter((event) => !this.hidden && event.key === 'Escape' && !hasModifierKey(event)),\n take(1),\n ).subscribe((event) => {\n event.preventDefault();\n this.cdkRef.containerInstance._closeInteractionType = 'keyboard';\n this.close();\n });\n }\n\n private toggleHiddenState(isHidden: boolean): void {\n const overlayRef = this.cdkRef.overlayRef;\n const panel = overlayRef.overlayElement;\n const backdrop = overlayRef.backdropElement;\n\n panel.classList.toggle(HIDDEN_CLASS, isHidden);\n backdrop?.classList.toggle(HIDDEN_CLASS, isHidden);\n\n // `inert` keeps a hidden dialog out of the tab order and away from\n // assistive technology without removing it from the DOM.\n if (isHidden) {\n panel.setAttribute('inert', '');\n } else {\n panel.removeAttribute('inert');\n }\n }\n\n private startClosing(): void {\n if (this.closeStarted) {\n return;\n }\n\n this.closeStarted = true;\n this.closing.next();\n this.closing.complete();\n }\n\n private startCloseAnimation(): Promise<void> {\n const overlayRef = this.cdkRef.overlayRef;\n const wasVisible = !this.hidden;\n\n overlayRef.overlayElement.classList.add('md3-dialog-closing');\n overlayRef.backdropElement?.classList.add('md3-dialog-closing');\n this.dialogInstance?.setActive(false);\n\n // A hidden dialog already played the exit animation, so there is\n // nothing left to transition and it can be disposed right away.\n return wasVisible ? this.waitForSurfaceAnimation() : Promise.resolve();\n }\n\n /** Resolves when the surface finished animating, with a timeout as a safety net. */\n private waitForSurfaceAnimation(): Promise<void> {\n const panel = this.cdkRef.overlayRef.overlayElement;\n const surface = this.dialogInstance?.surfaceElement ?? panel;\n\n return new Promise((resolve) => {\n let isResolved = false;\n let timeoutId = setTimeout(done, DIALOG_EXIT_ANIMATION_FALLBACK_MS);\n\n function done(): void {\n if (isResolved) {\n return;\n }\n\n isResolved = true;\n clearTimeout(timeoutId);\n surface.removeEventListener('transitionend', onTransitionEnd);\n resolve();\n }\n\n function onTransitionEnd(event: TransitionEvent): void {\n if (event.target === surface) {\n done();\n }\n }\n\n surface.addEventListener('transitionend', onTransitionEnd);\n });\n }\n\n /** Emits the result once the CDK reference is closed. Focus is restored by the container. */\n private settle(result?: R): void {\n if (this.closeSettled) {\n return;\n }\n\n // Covers detachments that did not go through close(), so anything\n // waiting on beforeClosed() is still notified.\n this.startClosing();\n this.closeSettled = true;\n this.hiddenChanges.complete();\n this.closed.next(result);\n this.closed.complete();\n }\n}\n","import { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { Component, ElementRef, inject, signal, viewChild } from '@angular/core';\nimport { DIALOG_CONFIG } from './dialog-ref';\nimport { DialogConfig, DialogContainer } from '../../interfaces/dialog-config.interface';\n\n/**\n * Material 3 dialog shell. It extends the CDK dialog container, so focus\n * trapping, focus restoration and the ARIA attributes are handled by the CDK\n * while this component only owns the MD3 surface and its animation.\n */\n@Component({\n selector: 'md3-dialog',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: './dialog.html',\n styleUrl: './dialog.scss',\n})\nexport class Dialog extends CdkDialogContainer implements DialogContainer {\n private readonly surface = viewChild<ElementRef<HTMLElement>>('surface');\n\n public isActive = signal<boolean>(false);\n\n protected readonly config = inject<DialogConfig>(DIALOG_CONFIG, { optional: true }) ?? {};\n\n public get surfaceElement(): HTMLElement | null {\n return this.surface()?.nativeElement ?? null;\n }\n\n /**\n * Started by DialogService, either right after the dialog is created or\n * once the dialog it replaces has had its head start. The animation runs on\n * the next frame so the surface has a real from/to state.\n */\n public startEnterAnimation(): void {\n requestAnimationFrame(() => {\n this.isActive.set(true);\n });\n }\n\n public setActive(value: boolean): void {\n this.isActive.set(value);\n }\n\n public recaptureFocus(): void {\n this._recaptureFocus();\n }\n}\n","<!-- The role and aria attributes live on the host element, applied by the CDK dialog container. -->\n<div\n #surface\n class=\"md3-dialog-container\"\n [class.md3-active]=\"isActive()\"\n [class.md-scheme-dark]=\"config.scheme == 'dark'\"\n [class.md-scheme-light]=\"config.scheme == 'light'\"\n [attr.dir]=\"config.direction ?? null\">\n <ng-template cdkPortalOutlet></ng-template>\n</div>\n","import { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { AfterViewInit, Component, ElementRef, inject, signal, viewChild } from '@angular/core';\nimport { DIALOG_CONFIG } from '../dialog-ref';\nimport { DialogConfig, DialogContainer } from '../../../interfaces/dialog-config.interface';\nimport { SheetsService } from '../../sheets/sheets.service';\n\n/**\n * Material 3 full screen dialog shell. It covers the viewport and lays its\n * content out like the scaffold does, with a main pane and a side sheet outlet\n * on each side, so side sheets opened while it is up land inside the dialog\n * instead of behind it.\n */\n@Component({\n selector: 'md3-fullscreen-dialog',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: './full-screen-dialog.html',\n styleUrl: './full-screen-dialog.scss',\n})\nexport class FullScreenDialog extends CdkDialogContainer implements DialogContainer, AfterViewInit {\n private readonly surface = viewChild<ElementRef<HTMLElement>>('surface');\n private readonly startOutlet = viewChild('startOutlet', { read: CdkPortalOutlet });\n private readonly endOutlet = viewChild('endOutlet', { read: CdkPortalOutlet });\n private readonly sheets = inject(SheetsService);\n\n public isActive = signal<boolean>(false);\n\n protected readonly config = inject<DialogConfig>(DIALOG_CONFIG, { optional: true }) ?? {};\n\n public get surfaceElement(): HTMLElement | null {\n return this.surface()?.nativeElement ?? null;\n }\n\n ngAfterViewInit(): void {\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n\n // Taking the outlets over is what sends the next side sheet inside the\n // dialog. The scaffold gets them back when this dialog is destroyed.\n if (startOutlet) {\n this.sheets.registerSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.registerSideSheetOutlet('end', endOutlet);\n }\n }\n\n public override ngOnDestroy(): void {\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n\n if (startOutlet) {\n this.sheets.unregisterSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.unregisterSideSheetOutlet('end', endOutlet);\n }\n\n super.ngOnDestroy();\n }\n\n public startEnterAnimation(): void {\n requestAnimationFrame(() => {\n this.isActive.set(true);\n });\n }\n\n public setActive(value: boolean): void {\n this.isActive.set(value);\n }\n\n public recaptureFocus(): void {\n this._recaptureFocus();\n }\n}\n","<!-- The role and aria attributes live on the host element, applied by the CDK dialog container. -->\n<div\n #surface\n class=\"md3-fullscreen-dialog-container\"\n [class.md3-active]=\"isActive()\"\n [class.md-scheme-dark]=\"config.scheme == 'dark'\"\n [class.md-scheme-light]=\"config.scheme == 'light'\"\n [attr.dir]=\"config.direction ?? null\">\n <div class=\"md3-panes-container md3-scrollable\">\n <!--\n The CDK attaches the dialog content to the first portal outlet of\n this template, so the main pane has to come first. The panes are\n placed by grid area, which makes the DOM order irrelevant visually.\n -->\n <div class=\"md3-pane md3-pane-main\">\n <ng-template cdkPortalOutlet></ng-template>\n </div>\n <div class=\"md3-pane md3-pane-start\">\n <ng-template #startOutlet cdkPortalOutlet></ng-template>\n </div>\n <div class=\"md3-pane md3-pane-end\">\n <ng-template #endOutlet cdkPortalOutlet></ng-template>\n </div>\n </div>\n</div>\n","import { Dialog as CdkDialog, DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { DOCUMENT } from '@angular/common';\nimport { Overlay, OverlayContainer } from '@angular/cdk/overlay';\nimport { ComponentRef, inject, Injectable, Injector, Type, ViewContainerRef } from '@angular/core';\nimport { Dialog } from './dialog';\nimport { FullScreenDialog } from './full-screen-dialog/full-screen-dialog';\nimport { DIALOG_COMPONENT, DIALOG_CONFIG, DIALOG_DATA, DialogRef } from './dialog-ref';\nimport { DialogConfig, DialogContainer, PreviousDialog } from '../../interfaces/dialog-config.interface';\nimport { FullScreenDialogConfig } from '../../interfaces/full-screen-dialog-config.interface';\n\ninterface ResolvedDialogConfig<D = unknown> extends DialogConfig<D> {\n data: D | undefined;\n bindDataToInputs: boolean;\n disableCloseEvents: boolean;\n previousDialog: PreviousDialog;\n role: 'dialog' | 'alertdialog';\n ariaLabel: string;\n ariaLabelledBy: string;\n ariaDescribedBy: string;\n scheme: 'inherit' | 'dark' | 'light';\n direction: null | 'ltr' | 'rtl';\n viewContainerRef?: ViewContainerRef;\n injector: Injector;\n}\n\nconst PANEL_CLASS = 'md3-dialog-panel';\nconst FULL_SCREEN_PANEL_CLASS = 'md3-fullscreen-dialog-panel';\nconst OPENING_CLASS = 'md3-dialog-opening';\nconst SCRIM_KEPT_CLASS = 'md3-dialog-scrim-kept';\nconst SCRIM_INSTANT_CLASS = 'md3-dialog-scrim-instant';\n\n/**\n * Head start given to a dialog that leaves the screen before the dialog taking\n * its place animates in. Long enough to read as one dialog replacing another,\n * short enough to still feel like a single gesture.\n */\nconst DIALOG_HANDOVER_DELAY_MS = 160;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DialogService {\n private readonly cdkDialog = inject(CdkDialog);\n private readonly overlay = inject(Overlay);\n private readonly overlayContainer = inject(OverlayContainer);\n private readonly injector = inject(Injector);\n private readonly document = inject(DOCUMENT);\n\n /** Open dialogs, from the first one opened to the one currently on top. */\n private readonly refs: DialogRef<any, any>[] = [];\n\n /**\n * Elements the page was made of that the CDK hid from assistive technology,\n * kept here while the dialogs are hidden and the page is given back.\n */\n private readonly pageAriaHidden = new Map<Element, string>();\n\n /**\n * Page scrolling is blocked here instead of per overlay, so stacked dialogs\n * cannot unblock the page while another dialog is still open.\n */\n private readonly scrollBlock = this.overlay.scrollStrategies.block();\n\n /** Element that was focused before the first dialog of the stack opened. */\n private rootTrigger: HTMLElement | null = null;\n\n private pageStateQueued = false;\n\n public get openDialogs(): readonly DialogRef<any, any>[] {\n return this.refs;\n }\n\n /** Open dialogs that are currently on screen, from the bottom one up. */\n public get visibleDialogs(): readonly DialogRef<any, any>[] {\n return this.refs.filter((ref) => !ref.isHidden);\n }\n\n /** The full screen dialog that is open, if there is one. */\n public get fullScreenDialog(): DialogRef<any, any> | undefined {\n return this.refs.find((ref) => ref.isFullScreen && !ref.isClosing);\n }\n\n public open<T, D = unknown, R = unknown>(\n component: Type<T>,\n config: DialogConfig<D> = {},\n ): DialogRef<T, R> {\n const dialogConfig = this.mergeConfig(config);\n\n if (this.refs.length === 0) {\n this.rootTrigger = this.getFocusedElement();\n }\n\n // The dialog that is on screen starts leaving first, so the two dialogs\n // never animate on top of each other. A full screen dialog is not part\n // of this: regular dialogs open on top of it and leave it alone.\n const previousRef = this.topRegularRef();\n\n if (previousRef) {\n this.dismissPrevious(previousRef, dialogConfig.previousDialog);\n }\n\n let dialogRef!: DialogRef<T, R>;\n\n const cdkRef = this.cdkDialog.open<R, D, T>(component, {\n // The MD3 shell replaces the default CDK container, so the overlay,\n // focus trap and focus restoration come from the CDK while the shell\n // only renders the surface.\n container: {\n type: Dialog,\n providers: () => [\n { provide: DIALOG_CONFIG, useValue: dialogConfig },\n ],\n },\n // These tokens make the dialog controllable from the dynamic\n // component without coupling that component to the service.\n providers: (cdkDialogRef: CdkDialogRef<R, T>) => {\n dialogRef = new DialogRef<T, R>(cdkDialogRef, dialogConfig.disableCloseEvents);\n\n return [\n { provide: DialogRef, useValue: dialogRef },\n { provide: DIALOG_DATA, useValue: dialogConfig.data },\n { provide: DIALOG_CONFIG, useValue: dialogConfig },\n { provide: DIALOG_COMPONENT, useValue: component },\n ];\n },\n data: dialogConfig.data,\n role: dialogConfig.role,\n ariaModal: true,\n ariaLabel: dialogConfig.ariaLabel || null,\n ariaLabelledBy: dialogConfig.ariaLabelledBy || null,\n ariaDescribedBy: dialogConfig.ariaDescribedBy || null,\n direction: dialogConfig.direction ?? undefined,\n viewContainerRef: dialogConfig.viewContainerRef,\n injector: dialogConfig.injector,\n hasBackdrop: true,\n backdropClass: ['md3-dialog-scrim', OPENING_CLASS],\n panelClass: [PANEL_CLASS, OPENING_CLASS],\n positionStrategy: this.overlay.position()\n .global()\n .centerHorizontally()\n .centerVertically(),\n // Scrolling is blocked by the service for the whole stack.\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n // Focus goes back to whatever opened the stack, even when the dialog\n // that was open underneath has been closed in the meantime.\n restoreFocus: this.rootTrigger ?? true,\n // Scrim and Escape handling lives in DialogRef so the dialog can\n // play its exit animation before the overlay is disposed.\n disableClose: true,\n });\n\n this.registerDialog(dialogRef, cdkRef, dialogConfig, previousRef);\n\n return dialogRef;\n }\n\n /**\n * Opens a dialog that covers the whole screen. Only one can be open at a\n * time, so it replaces whatever is open, and while it is up the side sheet\n * outlets belong to it: side sheets open inside the dialog, not behind it.\n */\n public openFullScreen<T, D = unknown, R = unknown>(\n component: Type<T>,\n config: FullScreenDialogConfig<D> = {},\n ): DialogRef<T, R> {\n const dialogConfig = this.mergeConfig(config);\n\n if (this.refs.length === 0) {\n this.rootTrigger = this.getFocusedElement();\n }\n\n // A full screen dialog is a context of its own: the dialog it replaces\n // and anything stacked on that dialog goes with it.\n const previousRef = this.topRef();\n\n if (previousRef) {\n // Everything open belongs to the context being replaced, including\n // a full screen dialog that is already up.\n this.closeAll();\n }\n\n let dialogRef!: DialogRef<T, R>;\n\n const cdkRef = this.cdkDialog.open<R, D, T>(component, {\n container: {\n type: FullScreenDialog,\n providers: () => [\n { provide: DIALOG_CONFIG, useValue: dialogConfig },\n ],\n },\n providers: (cdkDialogRef: CdkDialogRef<R, T>) => {\n dialogRef = new DialogRef<T, R>(cdkDialogRef, dialogConfig.disableCloseEvents, true);\n\n return [\n { provide: DialogRef, useValue: dialogRef },\n { provide: DIALOG_DATA, useValue: dialogConfig.data },\n { provide: DIALOG_CONFIG, useValue: dialogConfig },\n { provide: DIALOG_COMPONENT, useValue: component },\n ];\n },\n data: dialogConfig.data,\n role: dialogConfig.role,\n ariaModal: true,\n ariaLabel: dialogConfig.ariaLabel || null,\n ariaLabelledBy: dialogConfig.ariaLabelledBy || null,\n ariaDescribedBy: dialogConfig.ariaDescribedBy || null,\n direction: dialogConfig.direction ?? undefined,\n viewContainerRef: dialogConfig.viewContainerRef,\n injector: dialogConfig.injector,\n // The dialog covers the page on its own, so there is nothing left\n // for a scrim to dim.\n hasBackdrop: false,\n panelClass: [FULL_SCREEN_PANEL_CLASS, OPENING_CLASS],\n // The CDK writes the size on the panel and the global strategy then\n // drops its centering margins, which is how the panel ends up\n // covering the whole wrapper.\n width: '100%',\n height: '100%',\n positionStrategy: this.overlay.position().global(),\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n restoreFocus: this.rootTrigger ?? true,\n disableClose: true,\n });\n\n this.registerDialog(dialogRef, cdkRef, dialogConfig, previousRef);\n\n return dialogRef;\n }\n\n /** Wires a freshly created dialog into the stack and starts its animation. */\n private registerDialog<T, D, R>(\n dialogRef: DialogRef<T, R>,\n cdkRef: CdkDialogRef<R, T>,\n dialogConfig: ResolvedDialogConfig<D>,\n previousRef: DialogRef<any, any> | undefined,\n ): void {\n dialogRef.dialogInstance = cdkRef.containerInstance as unknown as DialogContainer;\n dialogRef.componentInstance = cdkRef.componentInstance ?? undefined;\n\n if (cdkRef.componentRef) {\n this.bindDataToInputs(cdkRef.componentRef, dialogConfig);\n }\n\n this.refs.push(dialogRef);\n this.syncPageState();\n\n if (previousRef) {\n setTimeout(\n () => this.startReplacingAnimation(dialogRef, previousRef),\n DIALOG_HANDOVER_DELAY_MS,\n );\n } else {\n this.startOpenAnimation(dialogRef);\n }\n\n // Restoring starts with the exit animation, so the dialog underneath is\n // already coming back while this one is fading out.\n dialogRef.beforeClosed().subscribe(() => this.restorePreviousDialog(dialogRef));\n dialogRef.afterClosed().subscribe(() => this.removeRef(dialogRef));\n // Hiding and showing can also come straight from the reference, so the\n // page state is driven by what the dialogs report rather than by the\n // calls that went through this service.\n dialogRef.hiddenChanged().subscribe(() => this.syncPageState());\n }\n\n /**\n * Hides every dialog that is on screen, the full screen one included, with\n * the closing animation. They stay alive with their content and state, the\n * page underneath becomes usable, and showAll() puts them back. The promise\n * resolves once they are all out of sight.\n */\n public hideAll(): Promise<void> {\n const visible = this.refs.filter((ref) => !ref.isHidden && !ref.isClosing);\n\n return Promise.all(visible.map((ref) => ref.hide())).then(() => undefined);\n }\n\n /**\n * Brings the dialogs back on screen, whether they were hidden one by one or\n * all at once: the dialog that was on top returns, along with the full\n * screen dialog it sits in. Dialogs hidden behind another dialog stay\n * hidden, since that is where they belong once the stack is back.\n */\n public showAll(): void {\n const topRef = this.topRef();\n\n if (!topRef) {\n return;\n }\n\n const fullScreenRef = this.fullScreenDialog;\n\n // The full screen dialog is the context the top one sits in, so it\n // comes back first and the dialog on top ends up on top, with the focus.\n if (fullScreenRef && fullScreenRef !== topRef && fullScreenRef.isHidden) {\n fullScreenRef.show();\n }\n\n if (topRef.isHidden) {\n topRef.show();\n }\n }\n\n /** Closes every open dialog, including the hidden and the full screen ones. */\n public closeAll(): Promise<void> {\n // Closed from the bottom up so a closing dialog never brings back a\n // hidden dialog that is about to close as well.\n return Promise.all([...this.refs].map((ref) => ref.close())).then(() => undefined);\n }\n\n /** Closes the regular dialogs and leaves a full screen dialog alone. */\n private closeRegularDialogs(): Promise<void> {\n const closing = this.refs\n .filter((ref) => !ref.isFullScreen)\n .map((ref) => ref.close());\n\n return Promise.all(closing).then(() => undefined);\n }\n\n private mergeConfig<D>(config: DialogConfig<D>): ResolvedDialogConfig<D> {\n return {\n data: config.data,\n bindDataToInputs: config.bindDataToInputs ?? false,\n disableCloseEvents: config.disableCloseEvents ?? false,\n previousDialog: config.previousDialog ?? 'close',\n role: config.role ?? 'dialog',\n ariaLabel: config.ariaLabel ?? '',\n ariaLabelledBy: config.ariaLabelledBy ?? '',\n ariaDescribedBy: config.ariaDescribedBy ?? '',\n scheme: config.scheme ?? 'inherit',\n direction: config.direction ?? null,\n viewContainerRef: config.viewContainerRef,\n injector: config.injector ?? this.injector,\n };\n }\n\n /**\n * Hides or closes the dialog that is on screen. Its scrim stays up until\n * the dialog taking over is ready for it, so the page behind never\n * brightens between the two dialogs.\n */\n private dismissPrevious(\n previousRef: DialogRef<any, any>,\n behavior: PreviousDialog,\n ): Promise<void> {\n previousRef.overlayRef.backdropElement?.classList.add(SCRIM_KEPT_CLASS);\n\n return behavior === 'hide' ? previousRef.hide() : this.closeRegularDialogs();\n }\n\n private startOpenAnimation(dialogRef: DialogRef<any, any>): void {\n const overlayRef = dialogRef.overlayRef;\n const panel = overlayRef.overlayElement;\n const backdrop = overlayRef.backdropElement;\n\n // The overlay is inserted already rendered. Keep an initial class for\n // one frame, force style calculation, then remove it so CSS transitions\n // have a real from/to state.\n requestAnimationFrame(() => {\n setTimeout(() => {\n panel.getBoundingClientRect();\n panel.classList.remove(OPENING_CLASS);\n backdrop?.classList.remove(OPENING_CLASS);\n }, 100);\n });\n\n dialogRef.dialogInstance?.startEnterAnimation();\n }\n\n /** Opening animation for a dialog that took the place of another one. */\n private startReplacingAnimation(\n dialogRef: DialogRef<any, any>,\n previousRef: DialogRef<any, any>,\n ): void {\n if (dialogRef.isClosing) {\n return;\n }\n\n const panel = dialogRef.overlayRef.overlayElement;\n const backdrop = dialogRef.overlayRef.backdropElement;\n\n this.beginScrimHandover(previousRef, dialogRef);\n\n panel.getBoundingClientRect();\n panel.classList.remove(OPENING_CLASS);\n backdrop?.classList.remove(OPENING_CLASS);\n\n this.endScrimHandover(previousRef, dialogRef);\n\n dialogRef.dialogInstance?.startEnterAnimation();\n }\n\n /** Opening animation for a dialog coming back from behind a closing one. */\n private startRestoringAnimation(\n closingRef: DialogRef<any, any>,\n previousRef: DialogRef<any, any>,\n ): void {\n if (previousRef.isClosing) {\n return;\n }\n\n this.beginScrimHandover(closingRef, previousRef);\n previousRef.show();\n this.endScrimHandover(closingRef, previousRef);\n }\n\n /**\n * Moves both scrims to their new value in a single frame, without a\n * transition on either side, so the dim behind the dialogs never changes.\n */\n private beginScrimHandover(fromRef: DialogRef<any, any>, toRef: DialogRef<any, any>): void {\n const from = fromRef.overlayRef.backdropElement;\n const to = toRef.overlayRef.backdropElement;\n\n // Nothing to hand the scrim over to, e.g. a full screen dialog: the\n // outgoing scrim fades out on its own instead.\n if (!to) {\n return;\n }\n\n from?.classList.add(SCRIM_INSTANT_CLASS);\n from?.classList.remove(SCRIM_KEPT_CLASS);\n to?.classList.add(SCRIM_INSTANT_CLASS);\n }\n\n /** Gives the scrims their transitions back once the handover is painted. */\n private endScrimHandover(fromRef: DialogRef<any, any>, toRef: DialogRef<any, any>): void {\n const from = fromRef.overlayRef.backdropElement;\n const to = toRef.overlayRef.backdropElement;\n\n requestAnimationFrame(() => {\n from?.classList.remove(SCRIM_INSTANT_CLASS);\n to?.classList.remove(SCRIM_INSTANT_CLASS);\n });\n }\n\n private bindDataToInputs<T, D>(\n componentRef: ComponentRef<T>,\n config: ResolvedDialogConfig<D>,\n ): void {\n if (!config.bindDataToInputs || !this.canBindDataToInputs(config.data)) {\n return;\n }\n\n // setInput runs Angular's normal input pipeline, so input setters,\n // transforms, signal inputs, and change detection are handled for us.\n Object.entries(config.data).forEach(([inputName, inputValue]) => {\n componentRef.setInput(inputName, inputValue);\n });\n }\n\n private canBindDataToInputs(data: unknown): data is Record<string, unknown> {\n return typeof data === 'object' && data !== null && !Array.isArray(data);\n }\n\n /** Last dialog of the stack that is not closing yet. */\n private topRef(): DialogRef<any, any> | undefined {\n for (let index = this.refs.length - 1; index >= 0; index--) {\n if (!this.refs[index].isClosing) {\n return this.refs[index];\n }\n }\n\n return undefined;\n }\n\n /**\n * Same, without the full screen dialog: it hosts the dialogs opened on top\n * of it, so it is never the one that gets hidden or closed to make room.\n */\n private topRegularRef(): DialogRef<any, any> | undefined {\n const ref = this.topRef();\n\n return ref?.isFullScreen ? undefined : ref;\n }\n\n private restorePreviousDialog(ref: DialogRef<any, any>): void {\n const index = this.refs.indexOf(ref);\n\n if (index < 1) {\n return;\n }\n\n for (let previousIndex = index - 1; previousIndex >= 0; previousIndex--) {\n const previousRef = this.refs[previousIndex];\n\n if (previousRef.isClosing) {\n continue;\n }\n\n // The closing dialog gets the same head start it was given when it\n // took the screen, and keeps the scrim until then. Nothing to keep\n // when the dialog underneath has no scrim of its own.\n if (previousRef.overlayRef.backdropElement) {\n ref.overlayRef.backdropElement?.classList.add(SCRIM_KEPT_CLASS);\n }\n\n setTimeout(\n () => this.startRestoringAnimation(ref, previousRef),\n DIALOG_HANDOVER_DELAY_MS,\n );\n return;\n }\n }\n\n private removeRef(ref: DialogRef<any, any>): void {\n const index = this.refs.indexOf(ref);\n\n if (index === -1) {\n return;\n }\n\n this.refs.splice(index, 1);\n\n if (this.refs.length === 0) {\n this.rootTrigger = null;\n }\n\n this.syncPageState();\n }\n\n /**\n * State that belongs to the dialogs as a whole rather than to one of them:\n * page scrolling, the page being hidden from assistive technology, and\n * where focus sits. Applied in a task of its own, so a dialog handing the\n * screen over to another one does not give the page back and take it again\n * within the same frame.\n */\n private syncPageState(): void {\n if (this.pageStateQueued) {\n return;\n }\n\n this.pageStateQueued = true;\n\n setTimeout(() => {\n this.pageStateQueued = false;\n this.applyPageState();\n });\n }\n\n private applyPageState(): void {\n const hasVisibleDialog = this.refs.some((ref) => !ref.isHidden);\n\n if (hasVisibleDialog) {\n this.scrollBlock.enable();\n } else {\n this.scrollBlock.disable();\n }\n\n if (this.refs.length === 0) {\n // Nothing is open anymore: the CDK gives the page back to assistive\n // technology on its own, so there is nothing left to restore here.\n this.pageAriaHidden.clear();\n return;\n }\n\n if (hasVisibleDialog) {\n this.hidePageFromAssistiveTechnology();\n return;\n }\n\n this.exposePageToAssistiveTechnology();\n this.releaseFocus();\n }\n\n /**\n * Gives the page back to assistive technology while every dialog is hidden.\n * The CDK hides it for as long as a dialog is open, which would otherwise\n * leave nothing to read at all once the dialogs are out of sight.\n */\n private exposePageToAssistiveTechnology(): void {\n if (this.pageAriaHidden.size > 0) {\n return;\n }\n\n const container = this.overlayContainer.getContainerElement();\n\n Array.from(container.parentElement?.children ?? []).forEach((sibling) => {\n const value = sibling.getAttribute('aria-hidden');\n\n if (sibling === container || value === null) {\n return;\n }\n\n this.pageAriaHidden.set(sibling, value);\n sibling.removeAttribute('aria-hidden');\n });\n }\n\n /** Hides the page again as soon as a dialog is back on screen. */\n private hidePageFromAssistiveTechnology(): void {\n this.pageAriaHidden.forEach((value, element) => {\n element.setAttribute('aria-hidden', value);\n });\n\n this.pageAriaHidden.clear();\n }\n\n /**\n * Focus follows the dialogs off the screen: it goes back to whatever opened\n * the stack, so the page stays usable with the keyboard while the dialogs\n * wait behind it. Focus that already moved somewhere else is left alone.\n */\n private releaseFocus(): void {\n const activeElement = this.document.activeElement;\n\n if (this.rootTrigger && (!activeElement || activeElement === this.document.body)) {\n this.rootTrigger.focus();\n }\n }\n\n private getFocusedElement(): HTMLElement | null {\n const activeElement = this.document.activeElement;\n return activeElement instanceof HTMLElement ? activeElement : null;\n }\n}\n","import { Component } from '@angular/core';\nimport { TypeHeadline } from '../../../styles/typography/type-headline';\n\n@Component({\n selector: 'md3-dialog-header',\n imports: [\n TypeHeadline\n ],\n templateUrl: './dialog-header.html',\n styleUrl: './dialog-header.scss',\n})\nexport class DialogHeader {\n}\n","<ng-content select=\"[md3-icon-element]\"></ng-content>\n<div class=\"md3-dialog-title\">\n <md3-type-headline size=\"small\">\n <ng-content></ng-content>\n </md3-type-headline>\n</div>","import { Component } from '@angular/core';\nimport { TypeBody } from '../../../styles/typography/type-body';\n\n@Component({\n selector: 'md3-dialog-body',\n imports: [\n TypeBody\n ],\n templateUrl: './dialog-body.html',\n styleUrl: './dialog-body.scss',\n host: {\n 'class': 'md3-scrollable',\n },\n})\nexport class DialogBody {\n}\n","<md3-type-body size=\"medium\">\n <ng-content></ng-content>\n</md3-type-body>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'md3-dialog-actions',\n imports: [],\n templateUrl: './dialog-actions.html',\n styleUrl: './dialog-actions.scss',\n})\nexport class DialogActions {\n}\n","<div class=\"md3-actions\">\n <ng-content></ng-content>\n</div>","import { Component, input, signal, Signal } from '@angular/core';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { IconButtonWidth } from '../../../types/icon-button-width.type';\n\n/**\n * Header of a full screen dialog: a leading icon button to leave the dialog,\n * the headline, and a trailing action. It sticks to the top of the dialog while\n * the content scrolls underneath.\n */\n@Component({\n selector: 'md3-fullscreen-dialog-header',\n imports: [\n ],\n templateUrl: './full-screen-dialog-header.html',\n styleUrl: './full-screen-dialog-header.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: FullScreenDialogHeader,\n },\n ],\n})\nexport class FullScreenDialogHeader implements ButtonContext {\n // context values\n buttonContextSize: Signal<ButtonSize> = signal('small');\n buttonContextWidth: Signal<IconButtonWidth> = signal('default');\n}\n","<ng-content select=\"[md3-icon-button][md3-header-leading]\"></ng-content>\n<div class=\"md3-title-container\">\n <ng-content></ng-content>\n</div>\n<div class=\"md3-actions-container\">\n <ng-content select=\"[md3-header-trailing]\"></ng-content>\n</div>\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { InjectionToken, Type } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { MenuConfig } from '../../interfaces/menu-config.interface';\nimport { Menu } from './menu';\n\nexport const MENU_DATA = new InjectionToken<unknown>('MD3_MENU_DATA');\nexport const MENU_CONFIG = new InjectionToken<MenuConfig>('MD3_MENU_CONFIG');\nexport const MENU_COMPONENT = new InjectionToken<Type<unknown>>('MD3_MENU_COMPONENT');\n\nconst MENU_EXIT_ANIMATION_FALLBACK_MS = 300;\n\nexport class MenuRef<T = unknown, R = unknown> {\n private readonly closed = new Subject<R | undefined>();\n private isClosed = false;\n\n public menuInstance?: Menu;\n /**\n * Filled by MenuService after the user component is attached. Keeping the\n * instance here lets callers imperatively update inputs when that is useful.\n */\n public componentInstance?: T;\n\n constructor(\n private readonly overlayRef: OverlayRef,\n private readonly previouslyFocusedElement: HTMLElement | null\n ) {\n }\n\n public close(result?: R): void {\n if (this.isClosed) {\n return;\n }\n\n this.isClosed = true;\n this.startCloseAnimation().then(() => {\n // Disposing the overlay removes the wrapper, the backdrop, and the\n // dynamically attached content component in one operation.\n this.overlayRef.dispose();\n\n this.previouslyFocusedElement?.focus();\n\n this.closed.next(result);\n this.closed.complete();\n });\n }\n\n private startCloseAnimation(): Promise<void> {\n let panel = this.overlayRef.overlayElement;\n let animatedElement = panel.querySelector<HTMLElement>('.md3-menu-container') ?? panel;\n\n panel.classList.add('md3-menu-closing');\n this.menuInstance?.showMenu(false);\n\n return new Promise((resolve) => {\n let isResolved = false;\n let timeoutId = setTimeout(done, MENU_EXIT_ANIMATION_FALLBACK_MS);\n\n function done(): void {\n if (isResolved) {\n return;\n }\n\n isResolved = true;\n clearTimeout(timeoutId);\n animatedElement.removeEventListener('transitionend', onTransitionEnd);\n resolve();\n }\n\n function onTransitionEnd(event: TransitionEvent): void {\n if (event.target === animatedElement) {\n done();\n }\n }\n\n animatedElement.addEventListener('transitionend', onTransitionEnd);\n });\n }\n\n public afterClosed(): Observable<R | undefined> {\n return this.closed.asObservable();\n }\n}\n","import { CdkPortalOutlet, ComponentPortal } from '@angular/cdk/portal';\nimport { AfterContentInit, Component, ComponentRef, effect, ElementRef, inject, Injector, signal, Type, viewChild } from '@angular/core';\nimport { MenuConfig } from '../../interfaces/menu-config.interface';\nimport { MENU_CONFIG } from './menu-ref';\n\n@Component({\n selector: 'md3-menu',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: './menu.html',\n styleUrl: './menu.scss',\n host: {\n 'class': 'md3-menu-container',\n 'role': 'menu',\n '[class.md3-visible]': 'isVisible()',\n '[class.md3-inactive]': '!isActive()',\n '[class.md-scheme-dark]': 'scheme() == \"dark\"',\n '[class.md-scheme-light]': 'scheme() == \"light\"',\n '[dir]': 'direction()',\n },\n})\nexport class Menu implements AfterContentInit {\n private readonly portalOutlet = viewChild<CdkPortalOutlet>(CdkPortalOutlet);\n\n protected readonly config = inject<MenuConfig>(MENU_CONFIG, { optional: true }) ?? {};\n protected menuColors = signal<'standard' | 'vibrant'>('standard');\n protected isVisible = signal<boolean>(false);\n protected scheme = signal<'inherit' | 'dark' | 'light'>('inherit');\n protected direction = signal<null | 'ltr' | 'rtl'>(null);\n \n public isActive = signal<boolean>(true);\n \n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n constructor(private el: ElementRef) {\n effect((onCleanup) => {\n const color = 'md3-' + this.menuColors();\n this.element.classList.add(color);\n\n onCleanup(() => {\n this.element.classList.remove(color);\n });\n });\n\n this.menuColors.set(this.config.menuColors ?? 'standard');\n this.scheme.set(this.config.scheme ?? 'inherit');\n this.direction.set(this.config.direction ?? null);\n }\n\n ngAfterContentInit(): void {\n requestAnimationFrame(() => {\n this.showMenu(true);\n });\n }\n\n public showMenu(value: boolean): void {\n this.isVisible.set(value);\n }\n \n /**\n * The service creates this wrapper first, then calls this method to mount\n * the user supplied component into the dialog container.\n */\n public attachContent<T>(component: Type<T>, injector: Injector): ComponentRef<T> {\n const portal = new ComponentPortal(component, null, injector);\n\n return this.portalOutlet()!.attachComponentPortal(portal);\n }\n}\n","<ng-template cdkPortalOutlet></ng-template>","import {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n} from '@angular/cdk/overlay';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentRef, ElementRef, inject, Injectable, Injector, Type, ViewContainerRef } from '@angular/core';\nimport { MenuConfig, MenuPositionOrigin, MenuPositionX, MenuPositionY, MenuScrollStrategy } from '../../interfaces/menu-config.interface';\nimport { MENU_COMPONENT, MENU_CONFIG, MENU_DATA, MenuRef } from './menu-ref';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Menu } from './menu';\nimport { filter, take } from 'rxjs';\n\ninterface ResolvedMenuConfig<D = unknown> extends MenuConfig<D> {\n data: D | undefined;\n bindDataToInputs: boolean;\n isSubMenu: boolean;\n menuColors: 'standard' | 'vibrant';\n xPosition: MenuPositionX;\n yPosition: MenuPositionY;\n overlapTrigger: boolean;\n offsetX: number;\n offsetY: number;\n viewportMargin: number;\n positions?: ConnectedPosition[];\n scrollStrategy: MenuScrollStrategy;\n scheme: 'inherit' | 'dark' | 'light';\n direction: null | 'ltr' | 'rtl';\n viewContainerRef?: ViewContainerRef;\n injector: Injector;\n}\n\ninterface InternalMenuConfig<D = unknown> extends MenuConfig<D> {\n isSubMenu?: boolean;\n}\n\ninterface CreatedMenuOverlay {\n overlayRef: OverlayRef;\n positionStrategy?: FlexibleConnectedPositionStrategy;\n origin: ResolvedMenuOrigin;\n}\n\ntype ResolvedMenuOrigin = Element | { height?: number; width?: number; x: number; y: number };\ntype ClientRect = Pick<DOMRectReadOnly, 'bottom' | 'height' | 'left' | 'right' | 'top' | 'width' | 'x' | 'y'>;\ntype SubMenuPositionX = Extract<MenuPositionX, 'before' | 'after'>;\ntype SubMenuVerticalAlignment = 'top' | 'bottom';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class MenuService {\n private readonly overlay = inject(Overlay);\n private readonly injector = inject(Injector);\n private readonly document = inject(DOCUMENT);\n\n public open<T, D = unknown, R = unknown>(\n component: Type<T>,\n config: MenuConfig<D> = {},\n ): MenuRef<T, R> {\n const menuConfig = this.mergeConfig(config);\n const previouslyFocusedElement = this.getFocusedElement();\n const triggerElement = this.resolveTriggerElement(menuConfig.origin, previouslyFocusedElement);\n const menuOverlay = this.createOverlay(menuConfig, previouslyFocusedElement);\n const overlayRef = menuOverlay.overlayRef;\n const menuRef = new MenuRef<T, R>(\n overlayRef,\n previouslyFocusedElement\n );\n const injector = this.createInjector(component, menuConfig, menuRef);\n\n // The overlay hosts the MD3 menu shell. The shell is responsible for\n // the surface markup and receives the dynamic content through a portal.\n const menuPortal = new ComponentPortal(\n Menu,\n menuConfig.viewContainerRef ?? null,\n injector,\n );\n const menuComponentRef = overlayRef.attach(menuPortal);\n const contentComponentRef = menuComponentRef.instance.attachContent(component, injector);\n\n this.bindDataToInputs(contentComponentRef, menuConfig);\n this.flipPositionIfPushBreaksAnchor(menuOverlay, menuConfig);\n menuRef.componentInstance = contentComponentRef.instance;\n menuRef.menuInstance = menuComponentRef.instance;\n this.bindTriggerActiveState(triggerElement, overlayRef, menuRef);\n this.startOpenAnimation(overlayRef);\n this.connectCloseEvents(overlayRef, menuRef);\n\n return menuRef;\n }\n\n public openSubMenu<T, D = unknown, R = unknown>(\n component: Type<T>,\n config: MenuConfig<D> = {},\n ): MenuRef<T, R> {\n const xPosition = this.getSubMenuXPosition(config.xPosition);\n const yPosition = config.yPosition ?? 'below';\n const offsetX = config.offsetX ?? 0;\n const offsetY = config.offsetY ?? 0;\n\n const subMenuConfig: InternalMenuConfig<D> = {\n ...config,\n isSubMenu: true,\n xPosition,\n yPosition,\n overlapTrigger: config.overlapTrigger ?? true,\n offsetX,\n offsetY,\n scheme: config.scheme ?? 'inherit',\n direction: config.direction ?? null,\n };\n\n return this.open<T, D, R>(component, subMenuConfig);\n }\n\n private mergeConfig<D>(config: MenuConfig<D>): ResolvedMenuConfig<D> {\n const viewportMargin = this.getViewportMargin(config.viewportMargin);\n\n return {\n data: config.data,\n bindDataToInputs: config.bindDataToInputs ?? false,\n isSubMenu: (config as InternalMenuConfig<D>).isSubMenu ?? false,\n menuColors: config.menuColors ?? 'standard',\n xPosition: config.xPosition ?? 'start',\n yPosition: config.yPosition ?? 'below',\n overlapTrigger: config.overlapTrigger ?? false,\n offsetX: config.offsetX ?? 0,\n offsetY: config.offsetY ?? 4,\n viewportMargin,\n positions: config.positions,\n scrollStrategy: config.scrollStrategy ?? 'reposition',\n scheme: config.scheme ?? 'inherit',\n direction: config.direction ?? null,\n viewContainerRef: config.viewContainerRef,\n injector: config.injector ?? this.injector,\n };\n }\n\n private createOverlay(\n config: ResolvedMenuConfig,\n fallbackOrigin: HTMLElement | null,\n ): CreatedMenuOverlay {\n const origin = this.resolveOrigin(config.origin, fallbackOrigin);\n const positionStrategy = this.overlay.position()\n .flexibleConnectedTo(origin)\n .withFlexibleDimensions(false)\n .withGrowAfterOpen(true)\n .withPush(true)\n .withViewportMargin(config.viewportMargin)\n .withPositions(config.positions ?? this.getInitialConnectedPositions(config))\n .withTransformOriginOn('.md3-menu-container');\n\n const overlayConfig = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: ['md3-menu-scrim', 'md3-menu-opening'],\n panelClass: ['md3-menu-panel', 'md3-menu-opening'],\n positionStrategy,\n scrollStrategy: this.getScrollStrategy(config.scrollStrategy),\n });\n\n return {\n overlayRef: this.overlay.create(overlayConfig),\n positionStrategy: config.positions ? undefined : positionStrategy,\n origin,\n };\n }\n\n private bindTriggerActiveState<T, R>(\n triggerElement: HTMLElement | null,\n overlayRef: OverlayRef,\n menuRef: MenuRef<T, R>,\n ): void {\n if (!triggerElement) {\n return;\n }\n\n const removeActiveClass = () => triggerElement.classList.remove('md3-menu-active');\n\n triggerElement.classList.add('md3-menu-active');\n menuRef.afterClosed().pipe(take(1)).subscribe(removeActiveClass);\n overlayRef.detachments().pipe(take(1)).subscribe(removeActiveClass);\n }\n\n private resolveOrigin(\n origin: MenuPositionOrigin | undefined,\n fallbackOrigin: HTMLElement | null,\n ): ResolvedMenuOrigin {\n const resolvedOrigin = origin ?? fallbackOrigin;\n\n if (resolvedOrigin) {\n if (this.isMouseEvent(resolvedOrigin)) {\n if (resolvedOrigin.currentTarget instanceof HTMLElement) {\n return resolvedOrigin.currentTarget;\n }\n\n return {\n x: resolvedOrigin.clientX,\n y: resolvedOrigin.clientY,\n };\n }\n\n if (this.isElementRef(resolvedOrigin)) {\n return resolvedOrigin.nativeElement;\n }\n\n return resolvedOrigin as ResolvedMenuOrigin;\n }\n\n const viewport = this.document.defaultView;\n\n return {\n x: (viewport?.innerWidth ?? 0) / 2,\n y: (viewport?.innerHeight ?? 0) / 2,\n };\n }\n\n private resolveTriggerElement(\n origin: MenuPositionOrigin | undefined,\n fallbackOrigin: HTMLElement | null,\n ): HTMLElement | null {\n const resolvedOrigin = origin ?? fallbackOrigin;\n\n if (!resolvedOrigin) {\n return null;\n }\n\n if (this.isMouseEvent(resolvedOrigin)) {\n return resolvedOrigin.currentTarget instanceof HTMLElement\n ? resolvedOrigin.currentTarget\n : null;\n }\n\n if (this.isElementRef(resolvedOrigin)) {\n return resolvedOrigin.nativeElement;\n }\n\n return resolvedOrigin instanceof HTMLElement ? resolvedOrigin : null;\n }\n\n private flipPositionIfPushBreaksAnchor(\n menuOverlay: CreatedMenuOverlay,\n config: ResolvedMenuConfig,\n ): void {\n if (!menuOverlay.positionStrategy) {\n return;\n }\n\n menuOverlay.overlayRef.updatePosition();\n\n const fallbackPosition = this.getFallbackPositionAfterPush(\n config,\n this.getOriginClientRect(menuOverlay.origin),\n menuOverlay.overlayRef.overlayElement.getBoundingClientRect(),\n );\n\n if (!fallbackPosition) {\n return;\n }\n\n menuOverlay.positionStrategy.withPositions([fallbackPosition]);\n menuOverlay.overlayRef.updatePosition();\n }\n\n private getInitialConnectedPositions(config: ResolvedMenuConfig): ConnectedPosition[] {\n return [this.getPreferredConnectedPosition(config)];\n }\n\n private getPreferredConnectedPosition(config: ResolvedMenuConfig): ConnectedPosition {\n if (config.isSubMenu) {\n return this.createSubMenuConnectedPosition(\n this.getSubMenuXPosition(config.xPosition),\n this.getSubMenuVerticalAlignment(config.yPosition),\n config.offsetX,\n config.offsetY,\n );\n }\n\n return this.createConnectedPosition(config.xPosition, config.yPosition, config);\n }\n\n private getFallbackPositionAfterPush(\n config: ResolvedMenuConfig,\n originRect: ClientRect,\n overlayRect: ClientRect,\n ): ConnectedPosition | null {\n const xPosition = this.shouldFlipXPosition(\n config,\n originRect,\n overlayRect,\n )\n ? this.getFallbackXPosition(config.xPosition)\n : config.xPosition;\n const yPosition = this.shouldFlipYPosition(\n config,\n originRect,\n overlayRect,\n )\n ? this.getFallbackYPosition(config.yPosition)\n : config.yPosition;\n\n if (xPosition === config.xPosition && yPosition === config.yPosition) {\n return null;\n }\n\n return this.getPreferredConnectedPosition({\n ...config,\n xPosition,\n yPosition,\n });\n }\n\n private shouldFlipXPosition(\n config: ResolvedMenuConfig,\n originRect: ClientRect,\n overlayRect: ClientRect,\n ): boolean {\n const tolerance = config.viewportMargin;\n\n switch (config.xPosition) {\n case 'before':\n return overlayRect.right > originRect.left + tolerance;\n\n case 'after':\n return overlayRect.left < originRect.right - tolerance;\n\n case 'start':\n return originRect.left < overlayRect.left - tolerance\n || originRect.left > overlayRect.right + tolerance;\n\n case 'end':\n return originRect.right < overlayRect.left - tolerance\n || originRect.right > overlayRect.right + tolerance;\n\n case 'center':\n default:\n return false;\n }\n }\n\n private shouldFlipYPosition(\n config: ResolvedMenuConfig,\n originRect: ClientRect,\n overlayRect: ClientRect,\n ): boolean {\n const tolerance = config.viewportMargin;\n\n if (config.isSubMenu) {\n const anchorY = config.yPosition === 'above' ? originRect.bottom : originRect.top;\n\n return anchorY < overlayRect.top - tolerance\n || anchorY > overlayRect.bottom + tolerance;\n }\n\n if (config.overlapTrigger) {\n const anchorY = config.yPosition === 'above' ? originRect.bottom : originRect.top;\n\n return anchorY < overlayRect.top - tolerance\n || anchorY > overlayRect.bottom + tolerance;\n }\n\n switch (config.yPosition) {\n case 'above':\n return overlayRect.bottom > originRect.top + tolerance;\n\n case 'below':\n return overlayRect.top < originRect.bottom - tolerance;\n\n case 'center':\n default:\n return false;\n }\n }\n\n private createConnectedPosition(\n xPosition: MenuPositionX,\n yPosition: MenuPositionY,\n config: ResolvedMenuConfig,\n ): ConnectedPosition {\n const horizontal = this.getHorizontalPosition(xPosition);\n const vertical = this.getVerticalPosition(yPosition, config.overlapTrigger);\n\n return {\n ...horizontal,\n ...vertical,\n offsetX: config.offsetX,\n offsetY: this.getOffsetY(yPosition, config),\n panelClass: [\n 'md3-menu-position-' + xPosition,\n 'md3-menu-position-' + yPosition,\n ],\n };\n }\n\n private createSubMenuConnectedPosition(\n xPosition: SubMenuPositionX,\n yAlignment: SubMenuVerticalAlignment,\n offsetX: number,\n offsetY: number,\n ): ConnectedPosition {\n const horizontal = this.getHorizontalPosition(xPosition);\n const yPosition = yAlignment === 'top' ? 'below' : 'above';\n\n return {\n ...horizontal,\n originY: yAlignment,\n overlayY: yAlignment,\n offsetX: this.getSubMenuOffsetX(xPosition, offsetX),\n offsetY: this.getSubMenuOffsetY(yAlignment, offsetY),\n panelClass: [\n 'md3-menu-position-' + xPosition,\n 'md3-menu-position-' + yPosition,\n 'md3-menu-position-submenu',\n ],\n };\n }\n\n private getHorizontalPosition(position: MenuPositionX): Pick<ConnectedPosition, 'originX' | 'overlayX'> {\n switch (position) {\n case 'end':\n return {\n originX: 'end',\n overlayX: 'end',\n };\n\n case 'before':\n return {\n originX: 'start',\n overlayX: 'end',\n };\n\n case 'after':\n return {\n originX: 'end',\n overlayX: 'start',\n };\n\n case 'center':\n return {\n originX: 'center',\n overlayX: 'center',\n };\n\n case 'start':\n default:\n return {\n originX: 'start',\n overlayX: 'start',\n };\n }\n }\n\n private getVerticalPosition(\n position: MenuPositionY,\n overlapTrigger: boolean,\n ): Pick<ConnectedPosition, 'originY' | 'overlayY'> {\n switch (position) {\n case 'above':\n return {\n originY: overlapTrigger ? 'bottom' : 'top',\n overlayY: 'bottom',\n };\n\n case 'center':\n return {\n originY: 'center',\n overlayY: 'center',\n };\n\n case 'below':\n default:\n return {\n originY: overlapTrigger ? 'top' : 'bottom',\n overlayY: 'top',\n };\n }\n }\n\n private getFallbackXPosition(position: MenuPositionX): MenuPositionX {\n switch (position) {\n case 'start':\n return 'end';\n\n case 'end':\n return 'start';\n\n case 'before':\n return 'after';\n\n case 'after':\n return 'before';\n\n case 'center':\n default:\n return 'center';\n }\n }\n\n private getSubMenuXPosition(position: MenuPositionX | undefined): SubMenuPositionX {\n return position === 'before' ? 'before' : 'after';\n }\n\n private getFallbackYPosition(position: MenuPositionY): MenuPositionY {\n switch (position) {\n case 'above':\n return 'below';\n\n case 'below':\n return 'above';\n\n case 'center':\n default:\n return 'center';\n }\n }\n\n private getSubMenuVerticalAlignment(position: MenuPositionY): SubMenuVerticalAlignment {\n return position === 'above' ? 'bottom' : 'top';\n }\n\n private getOriginClientRect(origin: ResolvedMenuOrigin): ClientRect {\n if ('getBoundingClientRect' in origin) {\n return origin.getBoundingClientRect();\n }\n\n return {\n x: origin.x,\n y: origin.y,\n top: origin.y,\n right: origin.x,\n bottom: origin.y,\n left: origin.x,\n width: 0,\n height: 0,\n };\n }\n\n private getViewportMargin(configuredMargin: number | undefined): number {\n const minimumMargin = this.getHalfEmInPixels();\n\n return Math.max(configuredMargin ?? minimumMargin, minimumMargin);\n }\n\n private getHalfEmInPixels(): number {\n const viewport = this.document.defaultView;\n const fontSize = viewport?.getComputedStyle(this.document.documentElement).fontSize;\n const pixels = fontSize ? Number.parseFloat(fontSize) * 0.5 : 8;\n\n return Number.isFinite(pixels) ? pixels : 8;\n }\n\n private getOffsetY(position: MenuPositionY, config: ResolvedMenuConfig): number {\n if (config.overlapTrigger || position === 'center') {\n return 0;\n }\n\n return position === 'above'\n ? config.offsetY * -1\n : config.offsetY;\n }\n\n private getSubMenuOffsetX(position: SubMenuPositionX, offsetX: number): number {\n return position === 'before' ? offsetX * -1 : offsetX;\n }\n\n private getSubMenuOffsetY(\n alignment: SubMenuVerticalAlignment,\n offsetY: number,\n ): number {\n return alignment === 'bottom' ? offsetY * -1 : offsetY;\n }\n\n private getScrollStrategy(scrollStrategy: MenuScrollStrategy) {\n switch (scrollStrategy) {\n case 'block':\n return this.overlay.scrollStrategies.block();\n\n case 'close':\n return this.overlay.scrollStrategies.close();\n\n case 'noop':\n return this.overlay.scrollStrategies.noop();\n\n case 'reposition':\n default:\n return this.overlay.scrollStrategies.reposition();\n }\n }\n\n private isMouseEvent(origin: MenuPositionOrigin | HTMLElement): origin is MouseEvent {\n return typeof MouseEvent !== 'undefined' && origin instanceof MouseEvent;\n }\n\n private isElementRef(origin: Exclude<MenuPositionOrigin, MouseEvent>): origin is ElementRef<HTMLElement> {\n return typeof origin === 'object'\n && origin !== null\n && 'nativeElement' in origin\n && origin.nativeElement instanceof HTMLElement;\n }\n\n private startOpenAnimation(overlayRef: OverlayRef): void {\n const panel = overlayRef.overlayElement;\n const backdrop = overlayRef.backdropElement;\n\n // The overlay is inserted already rendered. Keep an initial class for\n // one frame, force style calculation, then remove it so CSS transitions\n // have a real from/to state.\n requestAnimationFrame(() => {\n setTimeout(() => {\n panel.getBoundingClientRect();\n panel.classList.remove('md3-menu-opening');\n backdrop?.classList.remove('md3-menu-opening');\n }, 100);\n });\n }\n\n private createInjector<T, D, R>(\n component: Type<T>,\n config: ResolvedMenuConfig<D>,\n menuRef: MenuRef<T, R>,\n ): Injector {\n return Injector.create({\n parent: config.injector,\n providers: [\n // These tokens make the menu controllable from the dynamic\n // component without coupling that component to the service.\n { provide: MenuRef, useValue: menuRef },\n { provide: MENU_DATA, useValue: config.data },\n { provide: MENU_CONFIG, useValue: config },\n { provide: MENU_COMPONENT, useValue: component },\n ],\n });\n }\n\n private bindDataToInputs<T, D>(\n componentRef: ComponentRef<T>,\n config: ResolvedMenuConfig<D>,\n ): void {\n if (!config.bindDataToInputs || !this.canBindDataToInputs(config.data)) {\n return;\n }\n\n // setInput runs Angular's normal input pipeline, so input setters,\n // transforms, signal inputs, and change detection are handled for us.\n Object.entries(config.data).forEach(([inputName, inputValue]) => {\n componentRef.setInput(inputName, inputValue);\n });\n }\n\n private connectCloseEvents<T, R>(\n overlayRef: OverlayRef,\n menuRef: MenuRef<T, R>,\n ): void {\n overlayRef.backdropClick().pipe(take(1)).subscribe(() => menuRef.close());\n overlayRef.keydownEvents().pipe(\n filter((event) => event.key === 'Escape'),\n take(1),\n ).subscribe(() => menuRef.close());\n }\n\n private getFocusedElement(): HTMLElement | null {\n const activeElement = this.document.activeElement;\n return activeElement instanceof HTMLElement ? activeElement : null;\n }\n\n private canBindDataToInputs(data: unknown): data is Record<string, unknown> {\n return typeof data === 'object' && data !== null && !Array.isArray(data);\n }\n}\n","import { booleanAttribute, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'md3-menu-group',\n imports: [],\n templateUrl: './menu-group.html',\n styleUrl: './menu-group.scss',\n host: {\n 'role': 'group',\n },\n})\nexport class MenuGroup {\n}\n","<ng-content></ng-content>\n","import { Component, contentChildren, ElementRef, input, model } from '@angular/core';\nimport { StateComponent } from '../../common/state-component';\nimport { IconElement } from '../../common/icon-element';\nimport { InputElement } from '../../common/input-element';\nimport { MaterialIcon } from '../../common/material-icon/material-icon';\nimport { TypeBody, TypeLabel, TypeTitle } from '../../../../public-api';\n\n@Component({\n selector: 'button[md3-menu-item], a[md3-menu-item]',\n imports: [\n InputElement,\n StateComponent,\n MaterialIcon,\n TypeLabel,\n TypeBody,\n TypeTitle,\n ],\n templateUrl: './menu-item.html',\n styleUrl: './menu-item.scss',\n host: {\n '(click)': 'onHostClick()',\n },\n})\nexport class MenuItem {\n public label = input<string>('', {\n alias: 'label',\n });\n\n public supportingText = input<string | null>(null, {\n alias: 'supporting-text',\n });\n\n public trailingText = input<string | null>(null, {\n alias: 'trailing-text',\n });\n\n public selected = model<boolean | null>(null, {\n alias: 'selected'\n });\n\n private iconElements = contentChildren(IconElement);\n \n public get leading(): IconElement | undefined {\n return this.iconElements().find((icon) => icon.iconType() === 'leading');\n }\n\n public get trailing(): IconElement | undefined {\n return this.iconElements().find((icon) => icon.iconType() === 'trailing');\n }\n\n public get showLeadingIcon(): boolean {\n return (!!this.leading && !this.selected()) || this.selected() == true;\n }\n\n public onHostClick(): void {\n const selected = this.selected();\n if (selected === null) {\n return;\n }\n\n this.selected.set(!selected);\n }\n\n constructor(private el: ElementRef<HTMLElement>) {\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement;\n }\n}\n","@if (selected() !== null) {\n <input type=\"checkbox\" md3-input-element [checked]=\"selected()\">\n}\n\n<div class=\"md3-menu-item-container\" md3-state-component>\n <div class=\"md3-menu-item-leading\" [class.has-icon]=\"showLeadingIcon\">\n <ng-content select=\"[md3-icon-element=leading]\"></ng-content>\n @if (!leading) {\n <md3-icon>check</md3-icon>\n }\n </div>\n\n <div class=\"md3-menu-item-content\">\n <md3-type-label size=\"large\">{{ label() }}</md3-type-label>\n @if (supportingText()?.length) {\n <md3-type-body size=\"small\">{{ supportingText() }}</md3-type-body>\n }\n </div>\n\n <div class=\"md3-menu-item-trailing\">\n <ng-content select=\"md3-badge\"></ng-content>\n @if (trailingText()?.length) {\n <md3-type-title size=\"small\">{{ trailingText() }}</md3-type-title>\n }\n <ng-content select=\"[md3-icon-element=trailing]\"></ng-content>\n </div>\n</div>","import { Component, input, signal, Signal } from '@angular/core';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../../interfaces/button-context.interface';\nimport { TypeTitle } from '../../../styles/typography/type-title';\nimport { ButtonSize } from '../../../types/button-size.type';\nimport { IconButtonWidth } from '../../../types/icon-button-width.type';\n\n@Component({\n selector: 'md3-side-sheet-header',\n imports: [\n TypeTitle\n ],\n templateUrl: './side-sheet-header.html',\n styleUrl: './side-sheet-header.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: SideSheetHeader,\n },\n ],\n})\nexport class SideSheetHeader implements ButtonContext {\n public title = input<string>('', {\n alias: 'title',\n });\n \n // context values\n buttonContextSize: Signal<ButtonSize> = signal(\"small\");\n buttonContextWidth: Signal<IconButtonWidth> = signal(\"default\");\n}\n","<ng-content select=\"[md3-icon-button][leading]\"></ng-content>\n<div class=\"md3-title-container\">\n <md3-type-title size=\"large\">{{ title() }}</md3-type-title>\n</div>\n<ng-content select=\"[md3-icon-button][trailing]\"></ng-content>","import { CdkScrollable } from '@angular/cdk/scrolling';\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'md3-side-sheet-body',\n imports: [],\n templateUrl: './side-sheet-body.html',\n styleUrl: './side-sheet-body.scss',\n host: {\n class: 'md3-scrollable',\n },\n hostDirectives: [\n CdkScrollable\n ],\n})\nexport class SideSheetBody {\n}\n","<ng-content></ng-content>","import { booleanAttribute, Component, input } from '@angular/core';\n\n@Component({\n selector: 'md3-side-sheet-actions',\n imports: [],\n templateUrl: './side-sheet-actions.html',\n styleUrl: './side-sheet-actions.scss',\n host: {\n '[class.md3-style-divider]': 'showDivider()',\n },\n})\nexport class SideSheetActions {\n public showDivider = input<boolean, unknown>(false, {\n alias: 'show-divider',\n transform: booleanAttribute\n });\n}\n","<ng-content></ng-content>","import { OverlayRef } from '@angular/cdk/overlay';\nimport { InjectionToken, TemplateRef } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { SnackbarConfig } from '../../interfaces/snackbar-config.interface';\nimport { Snackbar } from './snackbar';\n\nexport const SNACKBAR_MESSAGE = new InjectionToken<string | TemplateRef<unknown>>('MD3_SNACKBAR_MESSAGE');\nexport const SNACKBAR_ACTION_LABEL = new InjectionToken<string | undefined>('MD3_SNACKBAR_ACTION_LABEL');\nexport const SNACKBAR_CONFIG = new InjectionToken<SnackbarConfig>('MD3_SNACKBAR_CONFIG');\n\nconst SNACKBAR_EXIT_ANIMATION_FALLBACK_MS = 300;\n\nexport type SnackbarDismissReason = 'timeout' | 'action' | 'manual';\n\nexport interface SnackbarDismiss<R = unknown> {\n reason: SnackbarDismissReason;\n result?: R;\n}\n\nexport class SnackbarRef<R = unknown> {\n private readonly closed = new Subject<SnackbarDismiss<R>>();\n private readonly actionTriggered = new Subject<void>();\n private isClosed = false;\n private overlayRef?: OverlayRef;\n private timeoutId?: ReturnType<typeof setTimeout>;\n private timerStartedAt = 0;\n private remainingMs: number;\n\n public snackbarInstance?: Snackbar;\n\n constructor(private readonly duration: number) {\n this.remainingMs = duration;\n }\n\n /**\n * Called by SnackbarService once this snackbar is dequeued and actually\n * attached to the overlay. Queued-but-never-shown refs never get one, and\n * close() below handles that case without trying to animate or dispose.\n */\n public attachOverlay(overlayRef: OverlayRef): void {\n this.overlayRef = overlayRef;\n }\n\n public startTimer(): void {\n if (this.isClosed || this.duration <= 0 || this.timeoutId) {\n return;\n }\n\n this.timerStartedAt = Date.now();\n this.timeoutId = setTimeout(() => this.close('timeout'), this.remainingMs);\n }\n\n public pauseTimer(): void {\n if (!this.timeoutId) {\n return;\n }\n\n clearTimeout(this.timeoutId);\n this.timeoutId = undefined;\n this.remainingMs = Math.max(0, this.remainingMs - (Date.now() - this.timerStartedAt));\n }\n\n public resumeTimer(): void {\n if (this.timeoutId || this.isClosed || this.duration <= 0 || this.remainingMs <= 0) {\n return;\n }\n\n this.startTimer();\n }\n\n public triggerAction(result?: R): void {\n if (this.isClosed) {\n return;\n }\n\n this.actionTriggered.next();\n this.close('action', result);\n }\n\n public close(reason: SnackbarDismissReason = 'manual', result?: R): void {\n if (this.isClosed) {\n return;\n }\n\n this.isClosed = true;\n\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = undefined;\n }\n\n if (!this.overlayRef) {\n // Still sitting in the queue — nothing was ever attached, so\n // there's nothing to animate or dispose.\n this.closed.next({ reason, result });\n this.closed.complete();\n this.actionTriggered.complete();\n return;\n }\n\n this.startCloseAnimation().then(() => {\n this.overlayRef!.dispose();\n this.closed.next({ reason, result });\n this.closed.complete();\n this.actionTriggered.complete();\n });\n }\n\n public onAction(): Observable<void> {\n return this.actionTriggered.asObservable();\n }\n\n public afterDismissed(): Observable<SnackbarDismiss<R>> {\n return this.closed.asObservable();\n }\n\n private startCloseAnimation(): Promise<void> {\n const panel = this.overlayRef!.overlayElement;\n const animatedElement = panel.querySelector<HTMLElement>('.md3-snackbar-container') ?? panel;\n\n panel.classList.add('md3-snackbar-closing');\n this.snackbarInstance?.isActive.set(false);\n\n return new Promise((resolve) => {\n let isResolved = false;\n const timeoutId = setTimeout(done, SNACKBAR_EXIT_ANIMATION_FALLBACK_MS);\n\n function done(): void {\n if (isResolved) {\n return;\n }\n\n isResolved = true;\n clearTimeout(timeoutId);\n animatedElement.removeEventListener('transitionend', onTransitionEnd);\n resolve();\n }\n\n function onTransitionEnd(event: TransitionEvent): void {\n if (event.target === animatedElement) {\n done();\n }\n }\n\n animatedElement.addEventListener('transitionend', onTransitionEnd);\n });\n }\n}\n","import { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { Component, ElementRef, HostListener, OnDestroy, OnInit, Signal, TemplateRef, effect, inject, signal } from '@angular/core';\nimport { Button } from '../buttons/button/button';\nimport { IconButton } from '../buttons/icon-button/icon-button';\nimport { MaterialIcon } from '../common/material-icon/material-icon';\nimport { LayoutService } from '../../foundations/layout.service';\nimport { SnackbarConfig } from '../../interfaces/snackbar-config.interface';\nimport { SNACKBAR_ACTION_LABEL, SNACKBAR_CONFIG, SNACKBAR_MESSAGE, SnackbarRef } from './snackbar-ref';\nimport { IconElement, TypeBody } from '../../../public-api';\n\n@Component({\n selector: 'md3-snackbar',\n imports: [\n NgClass,\n NgTemplateOutlet,\n TypeBody,\n Button,\n IconButton,\n MaterialIcon,\n IconElement,\n ],\n templateUrl: './snackbar.html',\n styleUrl: './snackbar.scss',\n})\nexport class Snackbar implements OnInit, OnDestroy {\n private readonly snackbarRef = inject(SnackbarRef, { optional: true });\n private readonly layout = inject(LayoutService);\n\n public isActive = signal<boolean>(false);\n\n protected readonly config = inject<SnackbarConfig>(SNACKBAR_CONFIG, { optional: true }) ?? {};\n protected readonly message = inject<string | TemplateRef<unknown>>(SNACKBAR_MESSAGE, { optional: true }) ?? '';\n protected readonly actionLabel = inject<string | undefined>(SNACKBAR_ACTION_LABEL, { optional: true });\n\n protected get role(): string {\n return this.config.politeness === 'assertive' ? 'alert' : 'status';\n }\n\n protected get isTemplateMessage(): boolean {\n return this.message instanceof TemplateRef;\n }\n\n protected get templateMessage(): TemplateRef<unknown> {\n return this.message as TemplateRef<unknown>;\n }\n\n protected get textMessage(): string {\n return this.message as string;\n }\n\n protected get templateContext(): unknown {\n return this.config.data ?? null;\n }\n\n protected get isStacked(): boolean {\n return !!this.config.stackedAction && !!this.actionLabel;\n }\n\n constructor(private readonly el: ElementRef<HTMLElement>) {\n effect(() => {\n const inset = this.layout.bottomInset() + (this.config.bottomOffset ?? 0);\n this.el.nativeElement.style.setProperty('--md3-snackbar-bottom-inset', `${inset}px`);\n });\n\n effect(() => {\n if (this.layout.isCompact()) {\n this.el.nativeElement.classList.add('md3-full-width');\n } else {\n this.el.nativeElement.classList.remove('md3-full-width');\n }\n });\n }\n\n @HostListener('pointerenter')\n @HostListener('focusin')\n protected onInteractionStart(): void {\n this.snackbarRef?.pauseTimer();\n }\n\n @HostListener('pointerleave')\n @HostListener('focusout')\n protected onInteractionEnd(): void {\n this.snackbarRef?.resumeTimer();\n }\n\n ngOnInit(): void {\n requestAnimationFrame(() => {\n this.isActive.set(true);\n });\n\n this.snackbarRef?.startTimer();\n }\n\n ngOnDestroy(): void {\n this.snackbarRef?.pauseTimer();\n }\n\n protected onActionClick(): void {\n this.snackbarRef?.triggerAction();\n }\n\n protected onCloseClick(): void {\n this.snackbarRef?.close('manual');\n }\n}\n","<div\n class=\"md3-snackbar-container\"\n [class.md3-active]=\"isActive()\"\n [class.md3-snackbar-stacked]=\"isStacked\"\n [ngClass]=\"{\n 'md-scheme-light': config.scheme == 'dark',\n 'md-scheme-dark': config.scheme == 'light',\n }\"\n [attr.dir]=\"config.direction ?? null\"\n [attr.role]=\"role\"\n [attr.aria-live]=\"config.politeness ?? 'polite'\"\n [attr.aria-label]=\"config.ariaLabel || null\">\n <div class=\"md3-snackbar-message\">\n @if (isTemplateMessage) {\n <ng-container *ngTemplateOutlet=\"templateMessage; context: templateContext\"></ng-container>\n } @else {\n <div md3-type-body size=\"medium\">{{ textMessage }}</div>\n }\n </div>\n\n @if (actionLabel) {\n <button md3-button type=\"button\" class=\"md3-snackbar-action\" button-type=\"text\" button-size=\"small\" (click)=\"onActionClick()\">\n {{ actionLabel }}\n </button>\n }\n\n @if (config.showCloseIcon) {\n <button md3-icon-button type=\"button\" class=\"md3-snackbar-close\" button-type=\"standard\" button-size=\"small\" aria-label=\"Dismiss\" (click)=\"onCloseClick()\">\n <md3-icon md3-icon-element>close</md3-icon>\n </button>\n }\n</div>\n","import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Injectable, Injector, TemplateRef, inject } from '@angular/core';\nimport { SnackbarConfig, SnackbarPoliteness } from '../../interfaces/snackbar-config.interface';\nimport { Snackbar } from './snackbar';\nimport { SNACKBAR_ACTION_LABEL, SNACKBAR_CONFIG, SNACKBAR_MESSAGE, SnackbarRef } from './snackbar-ref';\n\nconst DEFAULT_DURATION_MS = 4000;\n\ninterface ResolvedSnackbarConfig extends SnackbarConfig {\n showCloseIcon: boolean;\n stackedAction: boolean;\n duration: number;\n politeness: SnackbarPoliteness;\n replaceCurrent: boolean;\n ariaLabel: string;\n scheme: 'inherit' | 'dark' | 'light';\n direction: null | 'ltr' | 'rtl';\n position: 'start' | 'center' | 'end';\n bottomOffset: number;\n injector: Injector;\n}\n\n// Internally every queued snackbar is tracked as SnackbarRef<unknown> — the\n// caller-facing generic <R> only matters for the ref that open() hands back,\n// so it's applied once at that single return point instead of threaded\n// through the queue/active bookkeeping.\ninterface QueuedSnackbar {\n message: string | TemplateRef<unknown>;\n actionLabel: string | undefined;\n config: ResolvedSnackbarConfig;\n ref: SnackbarRef;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SnackbarService {\n private readonly overlay = inject(Overlay);\n private readonly injector = inject(Injector);\n\n private readonly queue: QueuedSnackbar[] = [];\n private active?: QueuedSnackbar;\n\n /**\n * Opens a snackbar. Only one is ever visible at a time — if another is\n * already showing, this one waits in a FIFO queue unless\n * config.replaceCurrent is set.\n *\n * message can be a plain string, or a TemplateRef for cases like a\n * progress indicator that needs to keep re-rendering as the caller's own\n * state changes. The surrounding surface, action button, close icon,\n * positioning, and animation are always owned by the Snackbar shell —\n * there's no arbitrary custom-component API, since that's how you end up\n * with something that isn't a snackbar anymore per MD3.\n *\n * config.onAction, if provided, is called when the action button (never\n * the close icon) is clicked — an alternative to ref.onAction().subscribe()\n * for callers that don't want to hold onto the returned ref.\n */\n public open<D = unknown, R = unknown>(\n message: string | TemplateRef<D>,\n actionLabel?: string,\n config: SnackbarConfig<D> = {},\n ): SnackbarRef<R> {\n const snackbarConfig = this.mergeConfig(config);\n\n if (snackbarConfig.showCloseIcon && actionLabel) {\n throw new Error(\n 'Snackbar cannot have both an action and a close icon — Material Design 3 snackbars support only one.',\n );\n }\n\n const ref = new SnackbarRef(snackbarConfig.duration);\n const queued: QueuedSnackbar = {\n message,\n actionLabel,\n config: snackbarConfig,\n ref,\n };\n\n ref.afterDismissed().subscribe(() => this.onDismissed(queued));\n\n if (snackbarConfig.onAction) {\n // Only ever fires for the action button — SnackbarRef.actionTriggered\n // is exclusively raised from the action button's click handler, never\n // from the close icon, which just closes without emitting.\n ref.onAction().subscribe(() => snackbarConfig.onAction!());\n }\n\n if (snackbarConfig.replaceCurrent && this.active) {\n this.queue.unshift(queued);\n this.active.ref.close('manual');\n } else if (this.active) {\n this.queue.push(queued);\n } else {\n this.show(queued);\n }\n\n return ref as SnackbarRef<R>;\n }\n\n /** Dismisses whichever snackbar is currently showing, if any. */\n public dismiss<R = unknown>(result?: R): void {\n this.active?.ref.close('manual', result);\n }\n\n /** Dismisses the visible snackbar and clears everything still queued. */\n public dismissAll(): void {\n const stillQueued = this.queue.splice(0, this.queue.length);\n stillQueued.forEach((item) => item.ref.close('manual'));\n this.active?.ref.close('manual');\n }\n\n private show(queued: QueuedSnackbar): void {\n this.active = queued;\n\n const overlayRef = this.createOverlay(queued.config);\n queued.ref.attachOverlay(overlayRef);\n\n const injector = this.createInjector(queued);\n const portal = new ComponentPortal(Snackbar, queued.config.viewContainerRef ?? null, injector);\n const componentRef = overlayRef.attach(portal);\n\n queued.ref.snackbarInstance = componentRef.instance;\n }\n\n private onDismissed(queued: QueuedSnackbar): void {\n if (this.active === queued) {\n this.active = undefined;\n } else {\n const index = this.queue.indexOf(queued);\n\n if (index !== -1) {\n this.queue.splice(index, 1);\n }\n\n return;\n }\n\n const next = this.queue.shift();\n\n if (next) {\n this.show(next);\n }\n }\n\n private mergeConfig(config: SnackbarConfig): ResolvedSnackbarConfig {\n return {\n data: config.data,\n showCloseIcon: config.showCloseIcon ?? false,\n stackedAction: config.stackedAction ?? false,\n onAction: config.onAction,\n duration: config.duration ?? DEFAULT_DURATION_MS,\n politeness: config.politeness ?? 'polite',\n replaceCurrent: config.replaceCurrent ?? false,\n ariaLabel: config.ariaLabel ?? '',\n scheme: config.scheme ?? 'inherit',\n direction: config.direction ?? null,\n position: config.position ?? 'start',\n bottomOffset: config.bottomOffset ?? 0,\n viewContainerRef: config.viewContainerRef,\n injector: config.injector ?? this.injector,\n };\n }\n\n private createOverlay(config: ResolvedSnackbarConfig): OverlayRef {\n let panelClass = ['md3-snackbar-panel', 'md3-position-' + config.position];\n if (config.direction !== null) {\n panelClass.push('md3-direction-' + config.direction);\n }\n\n const overlayConfig = new OverlayConfig({\n hasBackdrop: false,\n panelClass: panelClass,\n positionStrategy: this.overlay.position().global(),\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n });\n\n return this.overlay.create(overlayConfig);\n }\n\n private createInjector(queued: QueuedSnackbar): Injector {\n return Injector.create({\n parent: queued.config.injector,\n providers: [\n { provide: SnackbarRef, useValue: queued.ref },\n { provide: SNACKBAR_MESSAGE, useValue: queued.message },\n { provide: SNACKBAR_ACTION_LABEL, useValue: queued.actionLabel },\n { provide: SNACKBAR_CONFIG, useValue: queued.config },\n ],\n });\n }\n}\n","// types\nexport * from './types/text-size.type';\nexport * from './types/text-color.type';\nexport * from './types/card-type.type';\nexport * from './types/button-size.type';\nexport * from './types/button-type.type';\nexport * from './types/icon-button-type.type';\nexport * from './types/icon-button-width.type';\nexport * from './types/split-button-type.type';\nexport * from './types/button-group-type.type';\nexport * from './types/button-group-selection.type';\nexport * from './types/fab-size.type';\nexport * from './types/fab-type.type';\nexport * from './types/slider-size.type';\nexport * from './types/dialog-role.type';\nexport * from './types/chip-type.type';\nexport * from './types/chip-style.type';\nexport * from './types/list-leading-type.type';\nexport * from './types/list-leading-size.type';\nexport * from './types/carousel-layout.type';\nexport * from './types/carousel-alignment.type';\nexport * from './types/carousel-orientation.type';\nexport * from './types/carousel-item-size.type';\n\n// interfaces\nexport * from './interfaces/dialog-config.interface';\nexport * from './interfaces/full-screen-dialog-config.interface';\nexport * from './interfaces/menu-config.interface';\nexport * from './interfaces/side-sheet-config.interface';\nexport * from './interfaces/snackbar-config.interface';\nexport * from './interfaces/carousel-arrangement.interface';\nexport * from './interfaces/carousel-keyline.interface';\nexport * from './interfaces/carousel-strategy.interface';\n\n// typography\nexport * from './styles/typography/type-display';\nexport * from './styles/typography/type-headline';\nexport * from './styles/typography/type-title';\nexport * from './styles/typography/type-body';\nexport * from './styles/typography/type-label';\n\n// foundations\nexport * from './foundations/layout.service';\nexport * from './foundations/scaffold/scaffold';\nexport * from './foundations/scaffold-bar';\nexport * from './foundations/scaffold-rail';\nexport * from './foundations/scaffold-pane';\nexport * from './foundations/grid';\nexport * from './foundations/grid-item';\n\n// common components and directives\nexport * from './components/common/input-element';\nexport * from './components/common/state-component';\nexport * from './components/common/icon-element';\nexport * from './components/common/material-icon/material-icon';\nexport * from './components/common/divider';\nexport * from './components/common/badge';\nexport * from './components/common/avatar';\n\n// buttons\nexport * from './components/buttons/button/button';\nexport * from './components/buttons/floating-action-button/floating-action-button';\nexport * from './components/buttons/icon-button/icon-button';\nexport * from './components/buttons/split-button/split-button';\nexport * from './components/buttons/button-group/button-group';\n\n// cards\nexport * from './components/card/card';\n\n// carousel\nexport * from './components/carousel/carousel';\nexport * from './components/carousel/carousel-item/carousel-item';\nexport * from './components/carousel/carousel-arrangement';\nexport * from './components/carousel/carousel-keylines';\n\n// chips\nexport * from './components/chips/chips';\n\n// selection controls\nexport * from './components/selection-controls/checkbox/checkbox';\nexport * from './components/selection-controls/radio-button/radio-button';\nexport * from './components/selection-controls/switch/switch';\n\n// sliders\nexport * from './components/slider/slider';\n\n// list\nexport * from './components/list/list';\nexport * from './components/list/list-item/list-item';\nexport * from './components/list/list-leading/list-leading';\nexport * from './components/list/list-slot';\n\n// loading and progress\nexport * from './components/loading-and-progress/loading-indicator/loading-indicator';\nexport * from './components/loading-and-progress/linear-progress-indicator/linear-progress-indicator';\nexport * from './components/loading-and-progress/circular-progress-indicator/circular-progress-indicator';\n\n// app bar\nexport * from './components/app-bar/app-bar';\nexport * from './components/app-bar/app-bar-logo';\n\n// navigations\nexport * from './components/navigations/navigation-item/navigation-item';\nexport * from './components/navigations/navigation-group/navigation-group';\nexport * from './components/navigations/navigation-rail/navigation-rail';\nexport * from './components/navigations/navigation-bar/navigation-bar';\n\n// text fields\nexport * from './components/text-field/text-field';\nexport * from './components/text-field/supporting-text';\n\n// dialogs\nexport * from './components/dialog/dialog';\nexport * from './components/dialog/dialog-ref';\nexport * from './components/dialog/dialog.service';\nexport * from './components/dialog/dialog-header/dialog-header';\nexport * from './components/dialog/dialog-body/dialog-body';\nexport * from './components/dialog/dialog-actions/dialog-actions';\nexport * from './components/dialog/full-screen-dialog/full-screen-dialog';\nexport * from './components/dialog/full-screen-dialog-header/full-screen-dialog-header';\n\n// menus\nexport * from './components/menu/menu';\nexport * from './components/menu/menu-ref';\nexport * from './components/menu/menu.service';\nexport * from './components/menu/menu-group/menu-group';\nexport * from './components/menu/menu-item/menu-item';\n\n// sheets\nexport * from './components/sheets/side-sheet/side-sheet-ref';\nexport * from './components/sheets/sheets.service';\nexport * from './components/sheets/side-sheet-header/side-sheet-header';\nexport * from './components/sheets/side-sheet-body/side-sheet-body';\nexport * from './components/sheets/side-sheet-actions/side-sheet-actions';\n\n// snackbar\nexport * from './components/snackbar/snackbar';\nexport * from './components/snackbar/snackbar-ref';\nexport * from './components/snackbar/snackbar.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LayoutService","i1.StateComponent","CdkDialog"],"mappings":";;;;;;;;;;;;;;;;;MAWa,WAAW,CAAA;AAOD,IAAA,EAAA;IANZ,IAAI,GAAG,KAAK,CAAuB,SAAS;6EAAC;IAC7C,KAAK,GAAG,KAAK,CAAwB,SAAS;8EAAC;IAC/C,UAAU,GAAG,KAAK,CAAmB,KAAK,kFAC7C,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEF,IAAA,WAAA,CAAmB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AACjB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;YACzC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGA7BS,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAPvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE,kBAAkB;AAC3B,wBAAA,wBAAwB,EAAE,cAAc;AAC3C;AACJ,iBAAA;;;MCCY,YAAY,CAAA;AAOF,IAAA,EAAA;IANZ,IAAI,GAAG,KAAK,CAAuB,SAAS;6EAAC;IAC7C,KAAK,GAAG,KAAK,CAAwB,SAAS;8EAAC;IAC/C,UAAU,GAAG,KAAK,CAAmB,KAAK,kFAC7C,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEF,IAAA,WAAA,CAAmB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AACjB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;YACzC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGA7BS,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAPxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,wCAAwC;AAClD,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE,mBAAmB;AAC5B,wBAAA,wBAAwB,EAAE,cAAc;AAC3C;AACJ,iBAAA;;;MCCY,SAAS,CAAA;AAOC,IAAA,EAAA;IANZ,IAAI,GAAG,KAAK,CAAuB,SAAS;6EAAC;IAC7C,KAAK,GAAG,KAAK,CAAwB,SAAS;8EAAC;IAC/C,UAAU,GAAG,KAAK,CAAmB,KAAK,kFAC7C,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEF,IAAA,WAAA,CAAmB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AACjB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;YACzC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGA7BS,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAPrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE,gBAAgB;AACzB,wBAAA,wBAAwB,EAAE,cAAc;AAC3C;AACJ,iBAAA;;;MCCY,QAAQ,CAAA;AAOE,IAAA,EAAA;IANZ,IAAI,GAAG,KAAK,CAAuB,SAAS;6EAAC;IAC7C,KAAK,GAAG,KAAK,CAAwB,SAAS;8EAAC;IAC/C,UAAU,GAAG,KAAK,CAAmB,KAAK,kFAC7C,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEF,IAAA,WAAA,CAAmB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AACjB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;YACzC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGA7BS,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAPpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE,eAAe;AACxB,wBAAA,wBAAwB,EAAE,cAAc;AAC3C;AACJ,iBAAA;;;MCCY,SAAS,CAAA;AAOC,IAAA,EAAA;IANZ,IAAI,GAAG,KAAK,CAAuB,SAAS;6EAAC;IAC7C,KAAK,GAAG,KAAK,CAAwB,SAAS;8EAAC;IAC/C,UAAU,GAAG,KAAK,CAAmB,KAAK,kFAC7C,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEF,IAAA,WAAA,CAAmB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AACjB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;YACzC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGA7BS,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAPrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE,gBAAgB;AACzB,wBAAA,wBAAwB,EAAE,cAAc;AAC3C;AACJ,iBAAA;;;MCIY,aAAa,CAAA;AACL,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;;;IAG/C,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE3C,IAAA,YAAY,GAAkC;QAC3D,SAAS,EAAE,uBAAuB;QAClC,QAAQ,EAAE,+CAA+C;QACzD,UAAU,EAAE,+CAA+C;QAC3D,OAAO,EAAE,6CAA6C;QACtD,aAAa,EAAE,oBAAoB;KAC7B;AAEO,IAAA,aAAa,GAAmC;AAC7D,QAAA,SAAS,EAAE,wBAAwB;AACnC,QAAA,QAAQ,EAAE,+CAA+C;AACzD,QAAA,UAAU,EAAE;KACN;AAEF,IAAA,WAAW;AACX,IAAA,UAAU;AACV,IAAA,4BAA4B;AAC5B,IAAA,4BAA4B;IAE3B,aAAa,GAAG,MAAM,CAAS,CAAC;sFAAC;IACjC,cAAc,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC;uFAAC;AAE3E;;;;;;AAMG;IACM,WAAW,GAAG,MAAM,CAAS,CAAC;oFAAC;IAExB,QAAQ,GAAG,QAAQ,CAC/B,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC5B,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,OAAO;QACP,KAAK,EAAE,MAAM,CAAC,UAAU;QACxB,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC,CACN,EACD;AACI,QAAA,YAAY,EAAE;YACV,KAAK,EAAE,MAAM,CAAC,UAAU;YACxB,MAAM,EAAE,MAAM,CAAC;AAClB;AACJ,KAAA,CACJ;IAEe,UAAU,GAAG,QAAQ,CACjC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAClE,GAAG,CAAC,CAAC,KAAK,KAAmB;QACzB,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE;AAC9C,YAAA,OAAO,SAAS;QACpB;QAEA,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;AAC7C,YAAA,OAAO,QAAQ;QACnB;QAEA,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;AAC/C,YAAA,OAAO,UAAU;QACrB;QAEA,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AAC5C,YAAA,OAAO,OAAO;QAClB;AAEA,QAAA,OAAO,aAAa;IACxB,CAAC,CAAC,CACL,EACD,EAAE,YAAY,EAAE,UAA2B,EAAE,CAChD;IAEe,WAAW,GAAG,QAAQ,CAClC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CACnE,GAAG,CAAC,CAAC,KAAK,KAAoB;QAC1B,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;AAC/C,YAAA,OAAO,SAAS;QACpB;QAEA,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AAC9C,YAAA,OAAO,QAAQ;QACnB;AAEA,QAAA,OAAO,UAAU;IACrB,CAAC,CAAC,CACL,EACD,EAAE,YAAY,EAAE,UAA4B,EAAE,CACjD;IAEe,SAAS,GAAG,MAAM,CAC7B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAqB,IAAI,KAAK;kFAChE;IAEe,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS;kFAAC;IAC3D,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ;iFAAC;IACzD,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,UAAU;mFAAC;IAC7D,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,OAAO;gFAAC;IACvD,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,KAAK,aAAa;qFAAC;AAElE,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK;IAC5C,CAAC;mFAAC;IAEc,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;oFAAC;AAEhD,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MAAK;AACpD,QAAA,QAAQ,IAAI,CAAC,UAAU,EAAE;AACrB,YAAA,KAAK,SAAS;AACV,gBAAA,OAAO,gBAAgB;AAE3B,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,iBAAiB;AAE5B,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,aAAa;AACd,gBAAA,OAAO,iBAAiB;;IAEpC,CAAC;gGAAC;IAEK,QAAQ,GAAG,MAAM,CAAU,IAAI;iFAAC;AAEvC,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC;AAC/D,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;AACrE,QAAA,CAAC,CAAC;;;;;QAMF,IAAI,CAAC,MAAM,EAAE;AACR,aAAA,IAAI,CACD,MAAM,CAAC,CAAC,KAAK,KAA6B,KAAK,YAAY,aAAa,CAAC,EACzE,kBAAkB,EAAE;aAEvB,SAAS,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACpD;AAEO,IAAA,YAAY,CAAC,SAAwB,EAAA;QACxC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,GAAG,SAAS;AAC7C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC;IAEQ,mBAAmB,GAAA;QACvB,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B;AAEO,IAAA,gBAAgB,CAAC,OAAoB,EAAA;AACxC,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO;QAEzB,MAAM,MAAM,GAAG,MAAK;AAChB,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS;AAEnC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;AACrC,QAAA,CAAC;AAED,QAAA,MAAM,EAAE;AAER,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAE;AAErC,QAAA,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAE7D,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAK;AACtB,YAAA,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC;AACjD,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,kBAAkB,CAAC,OAAoB,EAAA;AAC1C,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAE5B,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC/B;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B;AAEO,IAAA,sBAAsB,CAAC,OAAoB,EAAA;QAC9C,IAAI,CAAC,wBAAwB,EAAE;QAE/B,MAAM,MAAM,GAAG,MAAK;AAChB,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;YAC5C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACnF,QAAA,CAAC;AAED,QAAA,MAAM,EAAE;QAER,IAAI,CAAC,4BAA4B,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC;AAC9D,QAAA,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,OAAO,CAAC;AAElD,QAAA,IAAI,CAAC,4BAA4B,GAAG,MAAM;AAC1C,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChE;IAEO,wBAAwB,GAAA;AAC3B,QAAA,IAAI,CAAC,4BAA4B,EAAE,UAAU,EAAE;AAC/C,QAAA,IAAI,CAAC,4BAA4B,GAAG,SAAS;AAE7C,QAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE;YACnC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,4BAA4B,CAAC;AACvE,YAAA,IAAI,CAAC,4BAA4B,GAAG,SAAS;QACjD;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B;uGA1NS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA;;2FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCRY,eAAe,GAAG,IAAI,cAAc,CAAU,qBAAqB;MACnE,iBAAiB,GAAG,IAAI,cAAc,CAAkB,uBAAuB;MAC/E,oBAAoB,GAAG,IAAI,cAAc,CAAgB,0BAA0B;AAEhG,MAAM,qCAAqC,GAAG,GAAG;MAEpC,YAAY,CAAA;AAUD,IAAA,IAAA;AACC,IAAA,QAAA;AAVJ,IAAA,MAAM,GAAG,IAAI,OAAO,EAAiB;IAC9C,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAG,KAAK;AAChB,IAAA,iBAAiB;AAElB,IAAA,iBAAiB;AACjB,IAAA,aAAa;IAEpB,WAAA,CACoB,IAAmB,EAClB,QAAoB,EAAA;QADrB,IAAA,CAAA,IAAI,GAAJ,IAAI;QACH,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAE7B;AAEO,IAAA,uBAAuB,CAAC,iBAA0C,EAAA;AACrE,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAC1C,QAAA,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,QAA8B;IACzE;AAEO,IAAA,OAAO,CAAC,IAAmB,EAAA;QAC9B,IAAI,CAAC,iBAAiB,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACpD;AAEO,IAAA,YAAY,CAAC,IAAmB,EAAA;QACnC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IACzD;AAEO,IAAA,QAAQ,CAAC,OAAgB,EAAA;QAC5B,IAAI,CAAC,iBAAiB,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC1D;AAEO,IAAA,UAAU,CAAC,WAAoB,EAAA;QAClC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;IAClE;IAEO,IAAI,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC;IACvC;IAEO,IAAI,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC;IACvC;AAEO,IAAA,KAAK,CAAC,MAAU,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;QACJ;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,MAAK;YACjC,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC1B,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,OAAO,CAAC,MAAU,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;QACJ;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC1B;IAEO,WAAW,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;IACrC;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;IAClC;IAEQ,mBAAmB,GAAA;AACvB,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO;AAEnD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC5B;AAEA,QAAA,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC;AAEpC,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC3B,IAAI,CAAC,eAAe,EAAE;AAClB,gBAAA,OAAO,EAAE;gBACT;YACJ;YAEA,IAAI,UAAU,GAAG,KAAK;YACtB,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,qCAAqC,CAAC;AAEzE,YAAA,SAAS,IAAI,GAAA;gBACT,IAAI,UAAU,EAAE;oBACZ;gBACJ;gBAEA,UAAU,GAAG,IAAI;gBACjB,YAAY,CAAC,SAAS,CAAC;AACvB,gBAAA,eAAgB,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC;AACtE,gBAAA,OAAO,EAAE;YACb;YAEA,SAAS,eAAe,CAAC,KAAsB,EAAA;AAC3C,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,eAAe,EAAE;AAClC,oBAAA,IAAI,EAAE;gBACV;YACJ;AAEA,YAAA,eAAe,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC;AACtE,QAAA,CAAC,CAAC;IACN;AACH;;MC/GY,SAAS,CAAA;AAsBN,IAAA,aAAA;AACA,IAAA,EAAA;AArBK,IAAA,YAAY;AAEV,IAAA,MAAM,GAAG,MAAM,CAAkB,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;IAC/E,YAAY,GAAG,MAAM,CAAe,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAEtE,QAAQ,GAAG,MAAM,CAAU,KAAK;iFAAC;IACjC,QAAQ,GAAG,MAAM,CAAU,KAAK;iFAAC;IACjC,IAAI,GAAG,MAAM,CAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK;6EAAC;IACvD,SAAS,GAAG,MAAM,CAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS;kFAAC;IAChE,OAAO,GAAG,MAAM,CAAU,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK;gFAAC;IACrD,WAAW,GAAG,MAAM,CAAU,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK;oFAAC;AAC1D,IAAA,iBAAiB,GAAG,QAAQ,CAAgB,MAAK;AAC9D,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE;AACjE,YAAA,OAAO,OAAO;QAClB;AAEA,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;IAC3B,CAAC;0FAAC;IAEF,WAAA,CACY,aAA4B,EAC5B,EAA2B,EAAA;QAD3B,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,EAAE,GAAF,EAAE;AAEV,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE;YACpD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAChC;IAEA,kBAAkB,GAAA;QACd,qBAAqB,CAAC,MAAK;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACxB,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,SAAS,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;AAEO,IAAA,SAAS,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;IAEO,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE;IAC9B;IAEO,aAAa,CAAI,SAAkB,EAAE,QAAkB,EAAA;AAC1D,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,IAAI,EAAE,QAAQ,CAAC;QAE7F,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,MAAM,CAAC;IAC1D;uGA7DS,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACP,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvB9B,qKAIA,4kIDKQ,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAaV,SAAS,EAAA,UAAA,EAAA,CAAA;kBAhBrB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,OAAA,EACjB;wBACL,eAAe;qBAClB,EAAA,IAAA,EAGK;AACF,wBAAA,oBAAoB,EAAE,YAAY;AAClC,wBAAA,oBAAoB,EAAE,YAAY;AAClC,wBAAA,mBAAmB,EAAE,oBAAoB;AACzC,wBAAA,iBAAiB,EAAE,kBAAkB;AACrC,wBAAA,mBAAmB,EAAE,WAAW;AAChC,wBAAA,0BAA0B,EAAE,eAAe;AAC9C,qBAAA,EAAA,QAAA,EAAA,qKAAA,EAAA,MAAA,EAAA,CAAA,ohIAAA,CAAA,EAAA;;sBAGA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;MECnC,cAAc,CAAA;AAEN,IAAA,SAAS;IAEnB,WAAW,CAAI,SAAkB,EAAE,QAAkB,EAAA;QACxD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE;AAChE,YAAA,QAAQ,EAAE,QAAQ;AACrB,SAAA,CAAC;AAEF,QAAA,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,EAAE;AAEnD,QAAA,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC;AAEzF,QAAA,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,EAAE;QAEnD,OAAO;YACH,iBAAiB;YACjB,mBAAmB;SACtB;IACL;uGAnBS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACS,gBAAgB,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAftC,0CAA0C,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2GAAA,CAAA,EAAA,CAAA;;2FAc3C,cAAc,EAAA,UAAA,EAAA,CAAA;kBAhB1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,YACtB,0CAA0C,EAAA,MAAA,EAAA,CAAA,2GAAA,CAAA,EAAA;;sBAenD,SAAS;uBAAC,WAAW,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;;;MCMvD,aAAa,CAAA;AACL,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE5C;;;;AAIG;AACc,IAAA,MAAM,GAAG,IAAI,GAAG,EAAyC;IAEnE,uBAAuB,CAAC,IAAmB,EAAE,MAAuB,EAAA;QACvE,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAEvC,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE;YAChD;QACJ;AAEA,QAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;YACtB,MAAM,CAAC,MAAM,EAAE;QACnB;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC5E,MAAM,iBAAiB,GAAG,MAAM,CAAC,qBAAqB,CAAC,WAAW,CAAC;QAEnE,KAAK,CAAC,IAAI,CAAC;YACP,MAAM;YACN,iBAAiB;AACjB,YAAA,IAAI,EAAE,EAAE;AACX,SAAA,CAAC;IACN;IAEO,yBAAyB,CAAC,IAAmB,EAAE,MAAuB,EAAA;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACnC,MAAM,KAAK,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;QAExE,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACxB;QACJ;;;QAIA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC,QAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAEtB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B;IACJ;AAEO,IAAA,aAAa,CAChB,SAAkB,EAClB,MAAA,GAA6B,EAAE,EAAA;QAE/B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;QAEhD,IAAI,CAAC,KAAK,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,CAAA,GAAA,EAAM,WAAW,CAAC,IAAI,CAAA,iCAAA,CAAmC,CAAC;QAC9E;AAEA,QAAA,IAAI,WAAW,CAAC,aAAa,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QACpC;aAAO;YACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE;QACrC;QAEA,MAAM,QAAQ,GAAG,IAAI,YAAY,CAC7B,WAAW,CAAC,IAAI,EAChB,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAwB,CAAC,CACjE;AACD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC;AACtE,QAAA,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAC3F,SAAS,EACT,QAAQ,CACX;AAED,QAAA,QAAQ,CAAC,uBAAuB,CAAC,iBAAiB,CAAC;AACnD,QAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,WAAW,CAAC;AACvD,QAAA,QAAQ,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,QAAQ;AACzD,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAwB,CAAC;AAEzC,QAAA,OAAO,QAAQ;IACnB;AAEO,IAAA,cAAc,CAAc,IAAA,GAAsB,KAAK,EAAE,MAAU,EAAA;AACtE,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC;IAC7D;;AAGQ,IAAA,WAAW,CAAC,IAAmB,EAAA;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QAEnC,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC;AAEQ,IAAA,cAAc,CAAC,IAAmB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;QAEzC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;QAChC;AAEA,QAAA,OAAO,KAAK;IAChB;AAEQ,IAAA,WAAW,CAAI,MAA0B,EAAA;QAC7C,OAAO;YACH,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,KAAK;AAClD,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,KAAK;AAC1B,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,SAAS;AAC9B,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK;AAC5B,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;AAChC,YAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK;YAC5C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;AACzC,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;SAC7C;IACL;AAEQ,IAAA,cAAc,CAClB,SAAkB,EAClB,MAAkC,EAClC,QAA4B,EAAA;QAE5B,OAAO,QAAQ,CAAC,MAAM,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC,QAAQ;AACvB,YAAA,SAAS,EAAE;AACP,gBAAA,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;AACnD,gBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE;AAChD,gBAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,SAAS,EAAE;AACzD,aAAA;AACJ,SAAA,CAAC;IACN;IAEQ,gBAAgB,CACpB,YAA6B,EAC7B,MAAkC,EAAA;AAElC,QAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACpE;QACJ;AAEA,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,KAAI;AAC5D,YAAA,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;AAChD,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,mBAAmB,CAAC,IAAa,EAAA;AACrC,QAAA,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5E;AAEQ,IAAA,kBAAkB,CAAC,KAA2B,EAAA;AAClD,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAEhC,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;AAC5B,YAAA,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;QACzB;IACJ;AAEQ,IAAA,oBAAoB,CAAC,KAA2B,EAAA;QACpD,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AAE5B,QAAA,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;AAErB,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACjB,GAAG,CAAC,OAAO,EAAE;AACjB,QAAA,CAAC,CAAC;IACN;IAEQ,kBAAkB,CAAC,KAA2B,EAAE,QAAsB,EAAA;QAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AAE1C,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd;QACJ;QAEA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE;IACrC;AAEQ,IAAA,aAAa,CAAC,KAAuC,EAAA;QACzD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAA,OAAO,SAAS;QACpB;AAEA,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5C;uGA3LS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA;;2FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;MCjBY,QAAQ,CAAA;IACT,WAAW,GAAG,SAAS,CAAC,aAAa,mFAAI,IAAI,EAAE,eAAe,EAAA,CAAG;IACjE,SAAS,GAAG,SAAS,CAAC,WAAW,iFAAI,IAAI,EAAE,eAAe,EAAA,CAAG;IAC7D,cAAc,GAAG,SAAS,CAA0B,gBAAgB;uFAAC;AACrE,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IAEtC,eAAe,GAAA;AACX,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;QAE5C,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,WAAW,CAAC;QAC7D;QAEA,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC;QACzD;QAEA,IAAI,cAAc,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,cAAc,CAAC,aAAa,CAAC;QACpE;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAElC,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,WAAW,CAAC;QAC/D;QAEA,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,KAAK,EAAE,SAAS,CAAC;QAC3D;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE;IAC1C;uGAtCS,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,+JACsC,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACnB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECftE,k0BAkB4D,yoDDVpD,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,QAAQ,EAAA,UAAA,EAAA,CAAA;kBARpB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,OAAA,EACf;wBACL,eAAe;AAClB,qBAAA,EAAA,QAAA,EAAA,k0BAAA,EAAA,MAAA,EAAA,CAAA,ilDAAA,CAAA,EAAA;AAK+B,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,aAAa,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAC1C,WAAW,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,eAAe,EAAE,sEACR,gBAAgB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEXnE,WAAW,CAAA;IACb,MAAM,GAAG,KAAK,CAAC,QAAQ,6EAC1B,KAAK,EAAE,kBAAkB,EAAA,CAC3B;uGAHO,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;MCCY,YAAY,CAAA;IACd,MAAM,GAAG,KAAK,CAAC,QAAQ,6EAC1B,KAAK,EAAE,mBAAmB,EAAA,CAC5B;uGAHO,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;MCSY,YAAY,CAAA;AAMT,IAAA,EAAA;AACA,IAAA,MAAA;IANL,IAAI,GAAG,KAAK,CAAC,QAAQ,2EACxB,KAAK,EAAE,mBAAmB,EAAA,CAC5B;IAEF,WAAA,CACY,EAAc,EACd,MAAqB,EAAA;QADrB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,MAAM,GAAN,MAAM;QAEd,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,MAAM,EAAE;gBACvB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;YACvD;iBAAO;gBACH,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;YACzD;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,MAAM,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;QACzD;IACJ;uGAtBS,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,aAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBATxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,gBAAgB;AAC1B,qBAAA;AACD,oBAAA,cAAc,EAAE;wBACZ,aAAa;AAChB,qBAAA;AACJ,iBAAA;;;ACRD,MAAM,qBAAqB,GAAkC;AACzD,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,aAAa,EAAE,EAAE;CACpB;MASY,IAAI,CAAA;AACI,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;;IAG/B,IAAI,GAAG,KAAK,CAAqB,SAAS,4EACtD,KAAK,EAAE,MAAM,EAAA,CACf;AAEiB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gFAAC;uGARlG,IAAI,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAJ,IAAI,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,EAAA,cAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAJ,IAAI,EAAA,UAAA,EAAA,CAAA;kBAPhB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE,UAAU;AACnB,wBAAA,2BAA2B,EAAE,WAAW;AAC3C;AACJ,iBAAA;;;MCTY,QAAQ,CAAA;AACD,IAAA,OAAO,GAAG,KAAK,CAAC,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,CAAA,EAC7B,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,eAAe,EAAA,CAC5B;IAEiB,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAA,KAAA,EAAQ,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE;6EAAC;uGANzD,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAPpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gCAAgC;AAC1C,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE,eAAe;AACxB,wBAAA,qBAAqB,EAAE,QAAQ;AAClC;AACJ,iBAAA;;;MCAY,YAAY,CAAA;AACD,IAAA,EAAA;AAApB,IAAA,WAAA,CAAoB,EAAgC,EAAA;QAAhC,IAAA,CAAA,EAAE,GAAF,EAAE;IAAkC;AAExD,IAAA,IAAW,aAAa,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAChC;uGALS,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBANxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE;AACZ;AACJ,iBAAA;;;MCCY,cAAc,CAAA;AAKX,IAAA,EAAA;AACA,IAAA,QAAA;AALJ,IAAA,UAAU;IACV,gBAAgB,GAAG,MAAM,CAAU,IAAI;yFAAC;IAEhD,WAAA,CACY,EAA2B,EAC3B,QAAmB,EAAA;QADnB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAEhB,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBACzB,IAAI,CAAC,MAAM,EAAE;YACjB;iBAAO;gBACH,IAAI,CAAC,OAAO,EAAE;YAClB;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;QACJ,IAAI,CAAC,IAAI,EAAE;IACf;IAEQ,IAAI,GAAA;QACR,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;YAC7C;QACJ;AAEA,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAC3C,2BAA2B,CACL;QAE1B,IAAI,CAAC,KAAK,EAAE;;YAER,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAmB;YAC5D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;AAEhD,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CACrB,IAAI,CAAC,EAAE,CAAC,aAAa,EACrB,KAAK,CACR;QAEL;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;IAC3B;AAEO,IAAA,aAAa,CAAC,KAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;IACpC;IAEQ,MAAM,GAAA;QACV,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAC1D,IAAI,CAAC,IAAI,EAAE;IACf;IAEQ,OAAO,GAAA;QACX,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC;AAC7D,QAAA,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;IAC/B;AAGA,IAAA,aAAa,CAAC,KAAmB,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB;QACJ;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAC1D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACnC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;AAElC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,CAAC;AACzD,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,CAAC;AACzD,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI,CAAC;IAC7D;uGA1ES,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,qBAAqB;AAC/B,qBAAA;AACJ,iBAAA;;sBA6DI,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;;MC5D9B,WAAW,CAAA;AAKA,IAAA,EAAA;IAJb,QAAQ,GAAG,KAAK,CAAgB,IAAI,gFACvC,KAAK,EAAE,kBAAkB,EAAA,CAC3B;AAEF,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;IAAgB;AAEtC,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGATS,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBANvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE;AACZ;AACJ,iBAAA;;;MCKY,YAAY,CAAA;AAmBD,IAAA,EAAA;IAlBb,WAAW,GAAG,KAAK,CAAsC,iBAAiB,mFAC7E,KAAK,EAAE,cAAc,EAAA,CACvB;AACK,IAAA,QAAQ,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EAC3C,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IACK,SAAS,GAAG,KAAK,CAA2D,QAAQ,iFACvF,KAAK,EAAE,YAAY,EAAA,CACrB;IACK,QAAQ,GAAG,KAAK,CAAoB,EAAE,gFACzC,KAAK,EAAE,WAAW,EAAA,CACpB;AACK,IAAA,aAAa,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EAChD,KAAK,EAAE,gBAAgB;QACvB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEF,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AAClB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YACpD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEpC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAEtE,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,iBAAiB,EAAE;gBACzC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;AAExC,gBAAA,IAAI,SAAS,IAAI,UAAU,EAAE;oBACzB,SAAS,GAAG,IAAI;gBACpB;YACJ;AAEA,YAAA,IAAI,SAAS,KAAK,IAAI,EAAE;gBACpB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;YAClD;YAEA,SAAS,CAAC,MAAK;AACX,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;AACnE,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGApDS,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,61BCZzB,2BAAyB,EAAA,MAAA,EAAA,CAAA,q8CAAA,CAAA,EAAA,CAAA;;2FDYZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAVxB,SAAS;+BACI,UAAU,EAAA,OAAA,EACX,EAAE,EAAA,IAAA,EAGL;AACF,wBAAA,oBAAoB,EAAE,YAAY;AAClC,wBAAA,4BAA4B,EAAE,iBAAiB;AAClD,qBAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,q8CAAA,CAAA,EAAA;;;MELQ,OAAO,CAAA;IACT,WAAW,GAAG,KAAK,CAAgB,IAAI,mFAC1C,KAAK,EAAE,MAAM,EAAA,CACf;uGAHO,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAP,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAP,OAAO,EAAA,UAAA,EAAA,CAAA;kBAHnB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;MCIY,KAAK,CAAA;AAMM,IAAA,EAAA;AALb,IAAA,OAAO,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,CAAA,EAC1C,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEF,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;IACtB;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGAXS,KAAK,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAL,KAAK,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAL,KAAK,EAAA,UAAA,EAAA,CAAA;kBANjB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,IAAI,EAAE;AACF,wBAAA,mBAAmB,EAAE,WAAW;AACnC,qBAAA;AACJ,iBAAA;;;MCKY,MAAM,CAAA;AACf,IAAA,WAAA,GAAA,EAAgB;uGADP,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAN,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAN,MAAM,EAAA,UAAA,EAAA,CAAA;kBATlB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE,YAAY;AACxB,qBAAA;AACD,oBAAA,cAAc,EAAE;wBACZ,cAAc;AACjB,qBAAA;AACJ,iBAAA;;;ACIM,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAAgB,oBAAoB,CAAC;;MCG5E,MAAM,CAAA;AAmCK,IAAA,EAAA;IAlCZ,OAAO,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE7B,IAAA,OAAO,CAAC,KAAY,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC5B;QACJ;QAEA,IAAI,IAAI,CAAC,OAAO,EAAE,sBAAsB,IAAI,KAAK,QAAQ,EAAE;YACvD;QACJ;QAEA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;YAC7B,OAAO,CAAC,KAAK;AACjB,QAAA,CAAC,CAAC;IACN;IAEO,UAAU,GAAG,KAAK,CAAa,OAAO,kFACzC,KAAK,EAAE,aAAa,EAAA,CACtB;IACK,UAAU,GAAG,KAAK,CAAa,QAAQ,kFAC1C,KAAK,EAAE,aAAa,EAAA,CACtB;AACK,IAAA,SAAS,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EAC5C,KAAK,EAAE,gBAAgB;QACvB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IACK,UAAU,GAAG,KAAK,CAAiB,IAAI,kFAC1C,KAAK,EAAE,UAAU,EAAA,CACnB;AAEK,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,iBAAiB,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;sFAAC;AACxF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,iBAAiB,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;sFAAC;AACxF,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,oBAAoB,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;yFAAC;AAEpG,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AAClB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;YAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;YAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI;YAEzC,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;AACxC,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC;YAC7E;iBAAO;gBACH,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;YAC/D;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;IAEO,eAAe,GAAA;QAClB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC/B,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AAClB,gBAAA,OAAO,OAAO;YAClB;AAEA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;uGA9ES,MAAM,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAN,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAM,k1BClBnB,qMAI8D,EAAA,MAAA,EAAA,CAAA,qnOAAA,CAAA,EAAA,CAAA;;2FDcjD,MAAM,EAAA,UAAA,EAAA,CAAA;kBAZlB,SAAS;+BACI,mCAAmC,EAAA,OAAA,EACpC,EAAE,EAAA,IAAA,EAGL;AACF,wBAAA,oBAAoB,EAAE,oBAAoB;qBAC7C,EAAA,cAAA,EACe;wBACZ;AACH,qBAAA,EAAA,QAAA,EAAA,qMAAA,EAAA,MAAA,EAAA,CAAA,qnOAAA,CAAA,EAAA;;sBAKA,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;MEHxB,oBAAoB,CAAA;AAiBT,IAAA,EAAA;IAhBZ,OAAO,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAEzD,UAAU,GAAG,KAAK,CAAU,OAAO,kFACtC,KAAK,EAAE,aAAa,EAAA,CACtB;IACK,UAAU,GAAG,KAAK,CAAU,eAAe,kFAC9C,KAAK,EAAE,aAAa,EAAA,CACtB;AACK,IAAA,UAAU,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,CAAA,EAC7C,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEK,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,iBAAiB,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;sFAAC;AACxF,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,qBAAqB,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;0FAAC;AAEvG,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AAClB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;YAChD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YAEtC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;AAC7C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YAC7C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YAEtC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;AAC7C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGAvCS,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,onBClBjC,uKAIM,EAAA,MAAA,EAAA,CAAA,o8GAAA,CAAA,EAAA,CAAA;;2FDcO,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAZhC,SAAS;+BACI,6BAA6B,EAAA,OAAA,EAC9B,EAAE,EAAA,IAAA,EAGL;AACF,wBAAA,0BAA0B,EAAE,qBAAqB;qBACpD,EAAA,cAAA,EACe;wBACZ;AACH,qBAAA,EAAA,QAAA,EAAA,uKAAA,EAAA,MAAA,EAAA,CAAA,o8GAAA,CAAA,EAAA;;;MEGQ,UAAU,CAAA;AA8CC,IAAA,EAAA;IA7CZ,OAAO,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE7B,IAAA,OAAO,CAAC,KAAY,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YAC5B;QACJ;QAEA,IAAI,IAAI,CAAC,OAAO,EAAE,sBAAsB,IAAI,KAAK,QAAQ,EAAE;YACvD;QACJ;QAEA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;YAC7B,OAAO,CAAC,KAAK;AACjB,QAAA,CAAC,CAAC;IACN;IAEO,UAAU,GAAG,KAAK,CAAa,OAAO,kFACzC,KAAK,EAAE,aAAa,EAAA,CACtB;IACK,UAAU,GAAG,KAAK,CAAiB,QAAQ,kFAC9C,KAAK,EAAE,aAAa,EAAA,CACtB;IACK,WAAW,GAAG,KAAK,CAAkB,SAAS,mFACjD,KAAK,EAAE,cAAc,EAAA,CACvB;AACK,IAAA,SAAS,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EAC5C,KAAK,EAAE,gBAAgB;QACvB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IACK,UAAU,GAAG,KAAK,CAAiB,IAAI,kFAC1C,KAAK,EAAE,UAAU,EAAA,CACnB;AAEK,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,iBAAiB,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;sFAAC;AACxF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,IAAI;QACvD,IAAI,WAAW,EAAE;YACb,OAAO,WAAW,IAAI,UAAU,GAAG,UAAU,GAAG,WAAW;QAC/D;AAEA,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE;IAC5B,CAAC;sFAAC;AACK,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,kBAAkB,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;uFAAC;AAC3F,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,oBAAoB,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;yFAAC;AAEpG,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AAClB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;YAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;YAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;YAC5C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI;YAEzC,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;AACxC,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC;YAC7E;iBAAO;gBACH,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;YAC/D;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;IAEO,eAAe,GAAA;QAClB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC/B,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AAClB,gBAAA,OAAO,OAAO;YAClB;AAEA,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;IACN;uGAlGS,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,u+BCnBvB,oFACyB,EAAA,MAAA,EAAA,CAAA,mxMAAA,CAAA,EAAA,CAAA;;2FDkBZ,UAAU,EAAA,UAAA,EAAA,CAAA;kBAZtB,SAAS;+BACI,6CAA6C,EAAA,OAAA,EAC9C,EAAE,EAAA,IAAA,EAGL;AACF,wBAAA,oBAAoB,EAAE,oBAAoB;qBAC7C,EAAA,cAAA,EACe;wBACZ;AACH,qBAAA,EAAA,QAAA,EAAA,oFAAA,EAAA,MAAA,EAAA,CAAA,mxMAAA,CAAA,EAAA;;sBAKA,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;MEExB,WAAW,CAAA;AAsBA,IAAA,EAAA;IArBb,UAAU,GAAG,KAAK,CAAa,OAAO,kFACzC,KAAK,EAAE,aAAa,EAAA,CACtB;IACK,UAAU,GAAG,KAAK,CAAkB,QAAQ,kFAC/C,KAAK,EAAE,aAAa,EAAA,CACtB;AAEK,IAAA,gBAAgB,GAAG,KAAK,CAAmB,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,8BAAA,EAAA,CAAA,EAClD,KAAK,EAAE,oBAAoB;QAC3B,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IAEM,MAAM,GAAG,YAAY,CAAS,MAAM;+EAAC;IACrC,WAAW,GAAG,eAAe,CAAa,UAAU;oFAAC;;AAG7D,IAAA,iBAAiB,GAAuB,IAAI,CAAC,UAAU;AACvD,IAAA,iBAAiB,GAA4B,IAAI,CAAC,UAAU;IAC5D,kBAAkB,GAA4B,MAAM,CAAC,SAAS;2FAAC;IAC/D,oBAAoB,GAAqB,MAAM,CAAC,KAAK;6FAAC;AAEtD,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AAClB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACtC,gBAAA,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBAE/B,IAAI,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE;oBACrD;gBACJ;AAEA,gBAAA,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACjF,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGA5DS,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAAA,EAAA,EAAA,SAAA,EAPT;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,WAAW;AAC3B,aAAA;AACJ,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAeqC,MAAM,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EACM,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtChE,yOAC8E,EAAA,MAAA,EAAA,CAAA,0sLAAA,CAAA,EAAA,CAAA;;2FDuBjE,WAAW,EAAA,UAAA,EAAA,CAAA;kBAhBvB,SAAS;+BACI,kBAAkB,EAAA,OAAA,EACnB,EACR,EAAA,IAAA,EAGK;AACF,wBAAA,MAAM,EAAE,OAAO;qBAClB,EAAA,SAAA,EACU;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAA,WAAa;AAC3B,yBAAA;AACJ,qBAAA,EAAA,QAAA,EAAA,yOAAA,EAAA,MAAA,EAAA,CAAA,0sLAAA,CAAA,EAAA;AAeqC,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,MAAM,gGACM,UAAU,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEhBnD,WAAW,CAAA;AAiCA,IAAA,EAAA;AAhCe,IAAA,OAAO,CAAC,KAAmB,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,QAAQ,EAAE;YACpC;QACJ;QAEA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAEhD,IAAI,CAAC,YAAY,EAAE;YACf;QACJ;AAEA,QAAA,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;AACvC,QAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IACrC;IAEO,UAAU,GAA4B,KAAK,CAAa,OAAO,kFAClE,KAAK,EAAE,aAAa,EAAA,CACtB;IACK,SAAS,GAAiC,KAAK,CAAkB,UAAU,iFAC9E,KAAK,EAAE,YAAY,EAAA,CACrB;IACK,cAAc,GAAsC,KAAK,CAAuB,MAAM,sFACzF,KAAK,EAAE,WAAW,EAAA,CACpB;IAEM,OAAO,GAAG,eAAe,CAAS,MAAM,+EAAI,WAAW,EAAE,IAAI,EAAA,CAAG;IAChE,WAAW,GAAG,eAAe,CAAa,UAAU,mFAAI,WAAW,EAAE,IAAI,EAAA,CAAG;;AAGpF,IAAA,iBAAiB,GAAuB,IAAI,CAAC,UAAU;AACvD,IAAA,sBAAsB,GAAiC,IAAI,CAAC,cAAc;AAE1E,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AAClB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;YAC3C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YAErC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE;AAEvC,YAAA,IAAI,SAAS,IAAI,MAAM,EAAE;gBACrB,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,gBAAA,CAAC,CAAC;YACN;iBAAO;gBACH,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBAC/B,IAAI,CAAC,eAAe,EAAE;AAC1B,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,SAAS,IAAI,QAAQ,EAAE;oBACvB,IAAI,CAAC,wBAAwB,EAAE;gBACnC;YACJ;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;AAEQ,IAAA,eAAe,CAAC,KAAmB,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAE3B,QAAA,IAAI,EAAE,MAAM,YAAY,IAAI,CAAC,EAAE;AAC3B,YAAA,OAAO,SAAS;QACpB;QAEA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;YACnC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AACxC,QAAA,CAAC,CAAC;IACN;IAEQ,wBAAwB,GAAA;AAC5B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE;AAC5B,QAAA,CAAC,CAAC;QAEF,IAAI,YAAY,EAAE;AACd,YAAA,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC;QAC3C;IACJ;AAEQ,IAAA,oBAAoB,CAAC,YAAiC,EAAA;QAC1D,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC/B,YAAA,IAAI,IAAI,IAAI,YAAY,EAAE;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAC9B;AACJ,QAAA,CAAC,CAAC;IACN;IAEQ,UAAU,GAAA;QACd,OAAO;YACH,GAAG,IAAI,CAAC,OAAO,EAAE;YACjB,GAAG,IAAI,CAAC,WAAW,EAAE;SACxB;IACL;uGA9GS,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,SAAA,EAPT;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,WAAW;AAC3B,aAAA;AACJ,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EA4ByC,MAAM,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EACE,UAAU,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjDhE,qHAAiH,EAAA,MAAA,EAAA,CAAA,k4GAAA,CAAA,EAAA,CAAA;;2FDsBpG,WAAW,EAAA,UAAA,EAAA,CAAA;kBAdvB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,IAAA,EAGtB;AACF,wBAAA,MAAM,EAAE,OAAO;qBAClB,EAAA,SAAA,EACU;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAA,WAAa;AAC3B,yBAAA;AACJ,qBAAA,EAAA,QAAA,EAAA,qHAAA,EAAA,MAAA,EAAA,CAAA,k4GAAA,CAAA,EAAA;;sBAGA,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;AAyBS,aAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,MAAM,CAAA,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACrB,UAAU,CAAA,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEjC1E,IAAI,CAAA;AAaD,IAAA,EAAA;AACA,IAAA,KAAA;IAbL,QAAQ,GAAG,KAAK,CAAW,UAAU,gFACxC,KAAK,EAAE,WAAW,EAAA,CACpB;AAEK,IAAA,aAAa,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EAChD,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IAEM,WAAW,GAAG,MAAM,CAAU,KAAK;oFAAC;IAE5C,WAAA,CACY,EAAc,EACd,KAAqB,EAAA;QADrB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,KAAK,GAAL,KAAK;AAEb,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;gBAC5C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC7C,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;AAE9B,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;oBACrB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;gBAC9C;YACJ;iBAAO;gBACH,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAChD,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC;YAC5C;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;IAEA,eAAe,GAAA;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE;QAClD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,IAAI,UAAU,CAAC;IAC/C;uGAhDS,IAAI,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAJ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAI,gbChBjB,6BACA,EAAA,MAAA,EAAA,CAAA,4kDAAA,CAAA,EAAA,CAAA;;2FDea,IAAI,EAAA,UAAA,EAAA,CAAA;kBAZhB,SAAS;+BACI,yCAAyC,EAAA,OAAA,EAC1C,EAAE,EAAA,cAAA,EAMK;wBACZ;AACH,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,4kDAAA,CAAA,EAAA;;;AEVL;AACA,MAAM,WAAW,GAAG,GAAG;AAEvB,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAA;AAClD,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC;AAC9C;AAYA;;;;;;AAMG;AACH,SAAS,cAAc,CACnB,aAAqB,EACrB,SAAiB,EACjB,UAAkB,EAClB,WAAmB,EACnB,UAAkB,EAAA;IAElB,MAAM,iBAAiB,GAAG,CAAC,UAAU,GAAG,WAAW,GAAG,CAAC,IAAI,SAAS;AACpE,IAAA,OAAO,CAAC,aAAa,GAAG,iBAAiB,KAAK,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC;AAC/E;AAEA;;;;AAIG;AACH,SAAS,GAAG,CACR,aAAqB,EACrB,eAAuB,EACvB,YAAoB,EACpB,YAAoB,EACpB,UAAkB,EAClB,WAAmB,EACnB,UAAkB,EAClB,eAAuB,EACvB,QAAgB,EAAA;IAEhB,IAAI,SAAS,GAAG,KAAK,CAAC,eAAe,EAAE,YAAY,EAAE,YAAY,CAAC;IAClE,IAAI,SAAS,GAAG,eAAe;IAC/B,IAAI,UAAU,GAAG,CAAC,eAAe,GAAG,SAAS,IAAI,CAAC;AAElD,IAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,UAAU;AAC3F,IAAA,MAAM,KAAK,GAAG,aAAa,GAAG,QAAQ;IAEtC,IAAI,UAAU,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;AAC7B,QAAA,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC;IACvE;SAAO,IAAI,UAAU,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;AACpC,QAAA,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC;IACvE;AAEA,IAAA,IAAI,UAAU,KAAK,CAAC,EAAE;QAClB,SAAS,GAAG,CAAC;IACjB;AAEA,IAAA,SAAS,GAAG,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC;IACzF,UAAU,GAAG,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC;;IAGxC,IAAI,WAAW,GAAG,CAAC,IAAI,SAAS,KAAK,eAAe,EAAE;QAClD,MAAM,gBAAgB,GAAG,CAAC,eAAe,GAAG,SAAS,IAAI,UAAU;AACnE,QAAA,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW;AAC5D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC;AACtE,QAAA,MAAM,SAAS,GAAG,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE/C,UAAU,IAAI,CAAC,SAAS,GAAG,UAAU,IAAI,WAAW;QACpD,SAAS,IAAI,CAAC,SAAS,GAAG,UAAU,IAAI,UAAU;IACtD;IAEA,OAAO;QACH,SAAS;QACT,UAAU;QACV,UAAU;QACV,WAAW;QACX,SAAS;QACT,UAAU;AACV,QAAA,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC;KAC/G;AACL;AAEA,SAAS,OAAO,CACZ,SAAiB,EACjB,UAAkB,EAClB,SAAiB,EACjB,UAAkB,EAClB,WAAmB,EACnB,UAAkB,EAAA;AAElB,IAAA,IAAI,SAAS,IAAI,CAAC,EAAE;AAChB,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE;AACrD,QAAA,OAAO,SAAS,GAAG,UAAU,IAAI,UAAU,GAAG,SAAS;IAC3D;IAEA,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE;QAClC,OAAO,SAAS,GAAG,SAAS;IAChC;AAEA,IAAA,OAAO,IAAI;AACf;AAEA,SAAS,IAAI,CACT,eAAuB,EACvB,SAAiB,EACjB,UAAkB,EAClB,SAAiB,EACjB,UAAkB,EAClB,WAAmB,EACnB,UAAkB,EAClB,QAAgB,EAAA;AAEhB,IAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE;QACjF,OAAO,MAAM,CAAC,iBAAiB;IACnC;;;IAIA,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,SAAS,CAAC,GAAG,QAAQ;AAC3D;AAEA;;;;;AAKG;AACH,SAAS,yBAAyB,CAC9B,aAAqB,EACrB,eAAuB,EACvB,eAAuB,EACvB,YAAoB,EACpB,YAAoB,EACpB,WAAqB,EACrB,YAAsB,EACtB,WAAqB,EAAA;AAErB,IAAA,IAAI,IAA2B;IAC/B,IAAI,QAAQ,GAAG,CAAC;AAEhB,IAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AAClC,QAAA,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE;AACpC,YAAA,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;gBAClC,MAAM,SAAS,GAAG,GAAG,CACjB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,QAAQ,CACX;gBAED,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;oBACrC,IAAI,GAAG,SAAS;AAEhB,oBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;AACjB,wBAAA,OAAO,IAAI;oBACf;gBACJ;AAEA,gBAAA,QAAQ,EAAE;YACd;QACJ;IACJ;;AAGA,IAAA,OAAO,IAAI,IAAI;AACX,QAAA,SAAS,EAAE,aAAa;AACxB,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,UAAU,EAAE,CAAC;AACb,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,SAAS,EAAE,CAAC;AACZ,QAAA,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,iBAAiB;KACjC;AACL;AAEA;;;;;;AAMG;AACH,SAAS,eAAe,CAAC,SAAoB,EAAE,SAAiB,EAAA;AAC5D,IAAA,IAAI,OAAO,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS;IAC7F,IAAI,OAAO,GAAG,KAAK;AAEnB,IAAA,OAAO,OAAO,GAAG,CAAC,KAAK,SAAS,CAAC,UAAU,GAAG,CAAC,IAAI,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;AAC3E,QAAA,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE;YAC1B,SAAS,CAAC,UAAU,EAAE;QAC1B;aAAO;YACH,SAAS,CAAC,WAAW,EAAE;QAC3B;QAEA,OAAO,GAAG,IAAI;AACd,QAAA,OAAO,EAAE;IACb;AAEA,IAAA,OAAO,OAAO;AAClB;AAEA;;;;;;AAMG;AACI,MAAM,mBAAmB,GAAqB;;AAEjD,IAAA,IAAI,EAAE,IAAI;AAEV,IAAA,OAAO,CAAC,OAAgC,EAAA;AACpC,QAAA,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO;QAE7F,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;QACzD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC;;AAGzD,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC;QACvE,MAAM,gBAAgB,GAAG,CAAC,eAAe,GAAG,eAAe,IAAI,CAAC;AAEhE,QAAA,IAAI,WAAW,GAAG,aAAa,IAAI,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,QAAA,IAAI,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;;AAGzB,QAAA,IAAI,SAAS,KAAK,QAAQ,EAAE;AACxB,YAAA,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;AACnD,YAAA,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;QACzD;QAEA,MAAM,aAAa,GAAG;AAChB,cAAA,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY;cAC3C,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;AAE7C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,eAAe,CAAC,CAAC;AAC9E,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,CAAC;QACzF,MAAM,WAAW,GAAa,EAAE;AAEhC,QAAA,KAAK,IAAI,KAAK,GAAG,aAAa,EAAE,KAAK,IAAI,aAAa,EAAE,KAAK,EAAE,EAAE;AAC7D,YAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B;QAEA,IAAI,WAAW,GAAG,yBAAyB,CACvC,aAAa,EACb,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,CACd;QAED,IAAI,OAAO,GAAG,eAAe,CAAC,WAAW,EAAE,SAAS,CAAC;;;AAIrD,QAAA,IAAI,WAAW,CAAC,WAAW,KAAK,CAAC,IAAI,WAAW,CAAC,UAAU,KAAK,CAAC,IAAI,aAAa,GAAG,CAAC,GAAG,YAAY,EAAE;AACnG,YAAA,WAAW,CAAC,UAAU,GAAG,CAAC;YAC1B,OAAO,GAAG,IAAI;QAClB;QAEA,IAAI,OAAO,EAAE;AACT,YAAA,WAAW,GAAG,yBAAyB,CACnC,aAAa,EACb,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,CAAC,WAAW,CAAC,UAAU,CAAC,EACxB,CAAC,WAAW,CAAC,WAAW,CAAC,EACzB,CAAC,WAAW,CAAC,UAAU,CAAC,CAC3B;QACL;QAEA,OAAO;YACH,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,UAAU,EAAE,WAAW,CAAC,UAAU;SACrC;IACL,CAAC;;AAGL;;;;;AAKG;AACI,MAAM,mBAAmB,GAA6C;AACzE,IAAA,cAAc,EAAE,mBAAmB;;;AClTvC;AACA,MAAM,qBAAqB,GAAG,GAAG;AAEjC,SAAS,IAAI,CAAC,IAAY,EAAE,EAAU,EAAE,QAAgB,EAAA;IACpD,OAAO,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,QAAQ;AACxC;AAQA;;;;;;AAMG;AACH,SAAS,UAAU,CACf,IAAe,EACf,WAAgC,EAChC,UAAkB,EAAA;AAElB,IAAA,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,WAAW;AAE7F,IAAA,MAAM,MAAM,GAAa;QACrB,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QACtD,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;KAC3D;AACD,IAAA,MAAM,KAAK,GAAa;AACpB,QAAA,GAAG,IAAI,KAAK,CAAS,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACtE,QAAA,GAAG,IAAI,KAAK,CAAS,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;KACtE;AAED,IAAA,MAAM,KAAK,GAAa;QACpB,UAAU;AACV,QAAA,GAAG,MAAM;QACT,GAAG,IAAI,KAAK,CAAS,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,QAAA,GAAG,KAAK;QACR,UAAU;KACb;AAED,IAAA,MAAM,eAAe,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM;AACzC,IAAA,MAAM,cAAc,GAAG,eAAe,GAAG,UAAU,GAAG,CAAC;;AAGvD,IAAA,IAAI,MAAM,GAAG,CAAC,UAAU;IACxB,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAClC,QAAA,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,CAAC;QAC7B,MAAM,IAAI,IAAI;AACd,QAAA,OAAO,GAAG;AACd,IAAA,CAAC,CAAC;;;;AAKF,IAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC;AAE5C,IAAA,MAAM,QAAQ,GAAsB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;QAC5D,SAAS,EAAE,QAAQ,GAAG,CAAC,KAAK,GAAG,eAAe,IAAI,SAAS;AAC3D,QAAA,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC;AAC5B,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,OAAO,EAAE,KAAK,IAAI,eAAe,IAAI,KAAK,IAAI,cAAc;QAC5D,QAAQ,EAAE,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;AACtD,KAAA,CAAC,CAAC;IAEH,OAAO;QACH,QAAQ;AACR,QAAA,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG,CAAC;QACpC,eAAe;QACf,cAAc;KACjB;AACL;AAEA;;;;;;;AAOG;AACH,SAAS,UAAU,CAAC,WAAgC,EAAE,SAA4B,EAAA;AAI9E,IAAA,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW;AAE/C,IAAA,MAAM,WAAW,GAAc,SAAS,KAAK;UACvC,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;UACpF,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE;;AAGzC,IAAA,MAAM,YAAY,GAAgB,CAAC,WAAW,CAAC;AAC/C,IAAA,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,WAAW;IAE/C,OAAO,WAAW,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE;AACxC,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;AACjB,YAAA,WAAW,EAAE;QACjB;aAAO;AACH,YAAA,YAAY,EAAE;QAClB;QAEA,YAAY,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IACpD;;AAGA,IAAA,MAAM,UAAU,GAAgB,CAAC,WAAW,CAAC;IAC7C,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,WAAW;IAE5C,OAAO,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,EAAE;AAC1D,QAAA,IAAI,WAAW,GAAG,UAAU,EAAE;AAC1B,YAAA,WAAW,EAAE;QACjB;aAAO;AACH,YAAA,YAAY,EAAE;QAClB;QAEA,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IAClD;AAEA,IAAA,MAAM,OAAO,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,UAAU,CAAC;AACnE,IAAA,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,GAAG;UACrC,WAAW,CAAC;AACd,UAAE,WAAW,CAAC,SAAS,GAAG,qBAAqB;IAEnD,OAAO;AACH,QAAA,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AACvE,QAAA,WAAW,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;KACvC;AACL;AAEA;;AAEG;AACG,SAAU,aAAa,CACzB,WAAgC,EAChC,SAA4B,EAC5B,SAAiB,EACjB,aAAqB,EAAA;AAErB,IAAA,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC;AAEjE,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC;AAClC,IAAA,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU;AAChE,IAAA,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU;;;AAI7E,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC;AACjE,IAAA,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC,SAAS;IAEnD,OAAO;QACH,WAAW;QACX,KAAK;QACL,WAAW;QACX,QAAQ,EAAE,WAAW,CAAC,SAAS;QAC/B,eAAe;QACf,aAAa;QACb,SAAS;QACT,SAAS;QACT,UAAU,EAAE,SAAS,GAAG,aAAa;KACxC;AACL;AAEA;;;;;;AAMG;AACH,SAAS,aAAa,CAAC,QAA0B,EAAE,YAAoB,EAAA;AACnE,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU;IAC/D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU;AAC1C,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU;AAEjE,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,GAAG,YAAY,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,IAAI,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAE1F,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,UAAU,GAAG,QAAQ,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC;AAC3E;AAEA;;;;AAIG;AACH,SAAS,OAAO,CAAC,QAA0B,EAAE,UAAkB,EAAA;AAC3D,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ;IAE1B,IAAI,KAAK,GAAG,CAAC;AACb,IAAA,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,UAAU,EAAE;AACjE,QAAA,KAAK,EAAE;IACX;AAEA,IAAA,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;QACvB,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC;IAEA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAC7B,IAAA,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;IACvB,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AAE5C,IAAA,IAAI,IAAI,IAAI,CAAC,EAAE;AACX,QAAA,OAAO,IAAI;IACf;IAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAEhF,OAAO;QACH,UAAU;AACV,QAAA,eAAe,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,eAAe;AAC3E,QAAA,cAAc,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,cAAc;AACxE,QAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;YAC3C,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAEjC,OAAO;AACH,gBAAA,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC9D,gBAAA,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC9D,gBAAA,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC;AACjE,gBAAA,OAAO,EAAE,QAAQ,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;AAC1D,gBAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;aAChD;AACL,QAAA,CAAC,CAAC;KACL;AACL;AAEA;;AAEG;AACG,SAAU,YAAY,CAAC,QAA0B,EAAE,YAAoB,EAAA;IACzE,OAAO,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACnE;AAEA;;AAEG;AACH,SAAS,YAAY,CAAC,QAA2B,EAAE,YAAoB,EAAA;IACnE,IAAI,KAAK,GAAG,CAAC;AACb,IAAA,OAAO,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,YAAY,EAAE;AAC5E,QAAA,KAAK,EAAE;IACX;IAEA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;AAChC,IAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC1C,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAEjG,IAAA,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC;AAC/B;AAEA;;;;;AAKG;AACG,SAAU,WAAW,CAAC,UAAkB,EAAE,QAA0B,EAAA;IACtE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,WAAW;IAEjE,IAAI,UAAU,IAAI,CAAC,SAAS,GAAG,UAAU,IAAI,CAAC,EAAE;AAC5C,QAAA,OAAO,OAAO;IAClB;IAEA,IAAI,UAAU,IAAI,CAAC,UAAU,GAAG,SAAS,IAAI,CAAC,EAAE;AAC5C,QAAA,OAAO,QAAQ;IACnB;AAEA,IAAA,OAAO,OAAO;AAClB;AAEA;;;;;;AAMG;AACG,SAAU,mBAAmB,CAC/B,QAA0B,EAC1B,KAA2B,EAC3B,KAAa,EACb,YAAoB,EAAA;AAEpB,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ;AAC7B,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK;AAE1B,IAAA,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,CAAC,GAAG,YAAY,GAAG,KAAK,CAAC,UAAU;AAEtF,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAE1C,IAAA,IAAI,YAAY,GAAG,KAAK,CAAC,SAAS,IAAI,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE;QACjE,OAAO;AACH,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,SAAS,EAAE,KAAK;SACnB;IACL;AAEA,IAAA,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC;AAEjE,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;AACjE,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;IAEjE,OAAO;AACH,QAAA,MAAM,EAAE,YAAY,GAAG,UAAU,GAAG,CAAC;QACrC,UAAU;AACV,QAAA,IAAI,EAAE,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC;AACvC,QAAA,SAAS,EAAE,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,GAAG,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAClF,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,IAAI,QAAQ,IAAI,GAAG,CAAC;QAC5E,SAAS,EAAE,UAAU,GAAG,GAAG;KAC9B;AACL;AAEA;;AAEG;AACG,SAAU,UAAU,CAAC,QAA0B,EAAE,KAAa,EAAA;IAChE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC;AACvE;AAEA;;;;;AAKG;AACG,SAAU,oBAAoB,CAAC,QAA0B,EAAE,KAAa,EAAA;IAC1E,OAAO,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,QAAQ;AAC1D;AAEA;;AAEG;AACG,SAAU,oBAAoB,CAAC,QAA0B,EAAE,YAAoB,EAAA;AACjF,IAAA,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,EAAE;AACxB,QAAA,OAAO,CAAC;IACZ;IAEA,OAAO,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC;AACjE;;AChWA;;;;;;;;;;;AAWG;MAUU,YAAY,CAAA;AAiBD,IAAA,EAAA;;IAfJ,SAAS,GAAG,MAAM,CAAS,CAAC;kFAAC;;IAG7B,UAAU,GAAG,MAAM,CAAS,CAAC;mFAAC;;IAG9B,OAAO,GAAG,MAAM,CAAU,KAAK;gFAAC;AAEhD;;;;AAIG;IACa,IAAI,GAAG,MAAM,CAAmB,OAAO;6EAAC;AAExD,IAAA,WAAA,CAAoB,EAA2B,EAAA;QAA3B,IAAA,CAAA,EAAE,GAAF,EAAE;AAClB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAChC;AAEA;;;;;AAKG;IACI,aAAa,CAAC,QAA8B,EAAE,QAAgB,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;AAEhC,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;YACvC;QACJ;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC;QACtC,KAAK,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAA,EAAG,QAAQ,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC;QACzE,KAAK,CAAC,WAAW,CAAC,+BAA+B,EAAE,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI,CAAC;QACnE,KAAK,CAAC,WAAW,CAAC,4BAA4B,EAAE,CAAA,EAAG,QAAQ,CAAC,MAAM,CAAA,EAAA,CAAI,CAAC;QACvE,KAAK,CAAC,WAAW,CAAC,gCAAgC,EAAE,CAAA,EAAG,QAAQ,CAAC,SAAS,CAAA,CAAE,CAAC;QAE5E,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,QAAQ,CAAC,UAAU,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC5C;QAEA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,QAAQ,CAAC,SAAS,EAAE;YACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1C;QAEA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChC;QAEA,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,OAAO,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC;QAChE;IACJ;uGApES,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,yJCzBzB,oFAGA,EAAA,MAAA,EAAA,CAAA,2vCAAA,CAAA,EAAA,CAAA;;2FDsBa,YAAY,EAAA,UAAA,EAAA,CAAA;kBATxB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,IAAA,EAGvB;AACF,wBAAA,MAAM,EAAE,OAAO;AACf,wBAAA,sBAAsB,EAAE,OAAO;AAClC,qBAAA,EAAA,QAAA,EAAA,oFAAA,EAAA,MAAA,EAAA,CAAA,2vCAAA,CAAA,EAAA;;;AEWL;;;;;AAKG;AACG,SAAU,wBAAwB,CAAC,KAAc,EAAA;AACnD,IAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;AACvD,QAAA,OAAO,SAAS;IACpB;AAEA,IAAA,IAAI,KAAa;AAEjB,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3B,KAAK,GAAG,KAAK;IACjB;SAAO;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACtC,QAAA,KAAK,GAAG,KAAK,CAAC,MAAM,KAAK;AACrB,cAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;cAClC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B;AAEA,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS;AAClE;AAEA;AACA,MAAM,mBAAmB,GAAG,GAAG;AAE/B;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAUU,QAAQ,CAAA;AAyLG,IAAA,EAAA;;IAvLb,cAAc,GAAG,KAAK,CAAiB,cAAc,sFACxD,KAAK,EAAE,iBAAiB,EAAA,CAC1B;;IAGK,SAAS,GAAG,KAAK,CAAoB,OAAO,iFAC/C,KAAK,EAAE,WAAW,EAAA,CACpB;;IAGK,WAAW,GAAG,KAAK,CAAsB,YAAY,mFACxD,KAAK,EAAE,aAAa,EAAA,CACtB;;AAGK,IAAA,QAAQ,GAAG,KAAK,CAAkB,GAAG,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACxC,KAAK,EAAE,WAAW;QAClB,SAAS,EAAE,eAAe,EAAA,CAC5B;;AAGK,IAAA,gBAAgB,GAAG,KAAK,CAAkB,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,8BAAA,EAAA,CAAA,EAC/C,KAAK,EAAE,qBAAqB;QAC5B,SAAS,EAAE,eAAe,EAAA,CAC5B;;AAGK,IAAA,gBAAgB,GAAG,KAAK,CAAkB,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,8BAAA,EAAA,CAAA,EAC/C,KAAK,EAAE,qBAAqB;QAC5B,SAAS,EAAE,eAAe,EAAA,CAC5B;;AAGK,IAAA,GAAG,GAAG,KAAK,CAAkB,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,KAAA,EAAA,8BAAA,EAAA,CAAA,EACjC,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,eAAe,EAAA,CAC5B;AAEF;;;;;;;;AAQG;AACI,IAAA,WAAW,GAAG,KAAK,CAA8B,SAAS,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,CAAA,EAC7D,KAAK,EAAE,cAAc;QACrB,SAAS,EAAE,wBAAwB,EAAA,CACrC;AAEF;;;;;;AAMG;IACI,KAAK,GAAG,KAAK,CAAS,CAAC;8EAAC;;IAGf,KAAK,GAAG,eAAe,CAAe,YAAY,6EAAI,WAAW,EAAE,IAAI,EAAA,CAAG;AAE1F;;;;;AAKG;AACa,IAAA,IAAI,GAAG,QAAQ,CAAU,MAAM,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI;6EAAC;AAEvF,IAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAA6B,UAAU;iFAAC;IAErE,aAAa,GAAG,MAAM,CAAS,CAAC;sFAAC;IAExB,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE5E;;;;;AAKG;AACc,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAEtB,OAAO;YACH,GAAG;AACH,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,GAAG;AAC/B,YAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,GAAG,GAAG;AAC3C,YAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,GAAG,GAAG;SAC9C;IACL,CAAC;gFAAC;;AAGc,IAAA,WAAW,GAAG,QAAQ,CAAkC,MAAK;AACzE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM;AACrC,QAAA,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;AAE/D,QAAA,IAAI,aAAa,IAAI,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE;AACxD,YAAA,OAAO,SAAS;QACpB;QAEA,OAAO,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC;YACtD,aAAa;YACb,QAAQ;YACR,YAAY;YACZ,YAAY;YACZ,SAAS;AACT,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC9B,SAAA,CAAC;IACN,CAAC;oFAAC;;AAGc,IAAA,QAAQ,GAAG,QAAQ,CAA+B,MAAK;AACnE,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;QAEtC,IAAI,CAAC,WAAW,EAAE;AACd,YAAA,OAAO,SAAS;QACpB;QAEA,OAAO,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;IAClG,CAAC;iFAAC;;AAGiB,IAAA,UAAU,GAAG,QAAQ,CAAW,MAAK;AACpD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAEhC,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,OAAO,EAAE;QACb;QAEA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChF,CAAC;mFAAC;AAEF;;;;;;AAMG;AACa,IAAA,SAAS,GAAG,QAAQ,CAAS,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,IAAI,CAAC;kFAAC;AAEnF;;;;;;AAMG;AACa,IAAA,cAAc,GAAG,QAAQ,CAAqB,MAAK;AAC/D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAEhC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE;AACrB,YAAA,OAAO,SAAS;QACpB;AAEA,QAAA,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,KAAK;IAC3D,CAAC;uFAAC;IAEc,OAAO,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;gFAAC;;AAGpD,IAAA,KAAK,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;8EAAC;IAEhE,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAE3D,IAAA,cAAc;IACd,KAAK,GAAG,CAAC;AAEjB;;;;;;AAMG;AACK,IAAA,aAAa;AAErB,IAAA,WAAA,CAAoB,EAA2B,EAAA;QAA3B,IAAA,CAAA,EAAE,GAAF,EAAE;;;QAGlB,eAAe,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AAErC,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB;YACJ;AAEA,YAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACzD,YAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAE9B,SAAS,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC1C,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB;YACJ;YAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa;YAE9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE;YAC9C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE;YACpD,MAAM,UAAU,GAAG,MAAK;AACpB,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAClC,YAAA,CAAC;AAED,YAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAChE,YAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;AACnD,YAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvE,YAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjE,YAAA,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAEtE,SAAS,CAAC,MAAK;AACX,gBAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACjC,gBAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAChD,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,CAAC;AACtD,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,UAAU,CAAC;AACvD,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC;AACjD,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,YAAY,EAAE,UAAU,CAAC;AAC1D,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;;;QAIF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,aAAa,EAAE;AACxB,QAAA,CAAC,CAAC;;;;QAKF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;AAEpC,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;gBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,8BAA8B,CAAC;gBACjE;YACJ;AAEA,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,CAAC;AACjF,QAAA,CAAC,CAAC;;;QAIF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YAEhC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBAC9B;YACJ;;;YAIA,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;AAE3C,YAAA,IAAI,OAAO,KAAK,KAAK,EAAE;AACnB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;gBACvB;YACJ;YAEA,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC;AAEtD,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE;AAC5C,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;YACnC;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAChC;;AAGA,IAAA,IAAc,KAAK,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,KAAK,KAAK;eAC/B,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,KAAK;IAC7D;AAGU,IAAA,SAAS,CAAC,KAAoB,EAAA;;;AAGpC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,GAAG,YAAY;AACvD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,YAAY,GAAG,WAAW;AAExD,QAAA,QAAQ,KAAK,CAAC,GAAG;AACb,YAAA,KAAK,OAAO;gBACR,IAAI,CAAC,IAAI,EAAE;gBACX;AACJ,YAAA,KAAK,QAAQ;gBACT,IAAI,CAAC,QAAQ,EAAE;gBACf;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBACrB;AACJ,YAAA,KAAK,KAAK;gBACN,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACpC;AACJ,YAAA;gBACI;;QAGR,KAAK,CAAC,cAAc,EAAE;IAC1B;AAEA;;;;;AAKG;AAEO,IAAA,SAAS,CAAC,KAAiB,EAAA;AACjC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAE3B,QAAA,IAAI,EAAE,MAAM,YAAY,IAAI,CAAC,EAAE;YAC3B;QACJ;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE7E,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC7B;IACJ;;AAGO,IAAA,aAAa,CAAC,KAAa,EAAE,QAAA,GAA2B,QAAQ,EAAA;AACnE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAEhC,IAAI,CAAC,QAAQ,EAAE;YACX;QACJ;QAEA,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;AAE3C,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC;IACpE;IAEO,IAAI,GAAA;QACP,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC;IAEO,QAAQ,GAAA;QACX,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC;IAEQ,OAAO,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB;QACJ;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC;IACrE;AAEA;;;;;AAKG;IACK,YAAY,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC;IAC7D;IAEQ,QAAQ,CAAC,MAAc,EAAE,QAAwB,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB;QACJ;QAEA,MAAM,YAAY,GAAG,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO;AAE3E,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,QAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC;AACnC,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,MAAM;YACnC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,QAAQ;AAC7C,SAAA,CAAC;QAEF,IAAI,CAAC,iBAAiB,EAAE;IAC5B;IAEQ,gBAAgB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ;QACJ;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC;YACd,IAAI,CAAC,aAAa,EAAE;AACxB,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,iBAAiB,EAAE;IAC5B;;IAGQ,iBAAiB,GAAA;AACrB,QAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,EAAE,mBAAmB,CAAC;IAC3F;IAEQ,mBAAmB,GAAA;AACvB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAEhC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAC9B;QACJ;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;;;AAIlC,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;AAClC,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;gBAC3C;YACJ;AAEA,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS;QAClC;;;AAIA,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE;YACtE;QACJ;QAEA,MAAM,KAAK,GAAG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC;AAEpD,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB;IACJ;AAEA;;;;;AAKG;IACK,aAAa,GAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAE1B,IAAI,CAAC,QAAQ,EAAE;YACX;QACJ;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;QAChC,KAAK,CAAC,WAAW,CAAC,4BAA4B,EAAE,CAAA,EAAG,QAAQ,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC;AAC3E,QAAA,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,CAAA,EAAG,IAAI,CAAC,aAAa,EAAE,CAAA,EAAA,CAAI,CAAC;AAC9E,QAAA,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAA,EAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAA,EAAA,CAAI,CAAC;AAElE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;QACxC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC;AAClD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC1B,YAAA,IAAI,CAAC,aAAa,CACd,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,EACzD,QAAQ,CAAC,QAAQ,CACpB;YAED,MAAM,KAAK,GAAG,CAAA,EAAG,KAAK,GAAG,CAAC,CAAA,IAAA,EAAO,SAAS,CAAA,CAAE;YAE5C,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,KAAK,EAAE;gBACnD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC;YAClD;AACJ,QAAA,CAAC,CAAC;IACN;uGAheS,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAgEqC,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9JtE,ubAWA,EAAA,MAAA,EAAA,CAAA,qsCAAA,CAAA,EAAA,CAAA;;2FDmFa,QAAQ,EAAA,UAAA,EAAA,CAAA;kBATpB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,IAAA,EAGlB;AACF,wBAAA,MAAM,EAAE,OAAO;AACf,wBAAA,sBAAsB,EAAE,UAAU;AACrC,qBAAA,EAAA,QAAA,EAAA,ubAAA,EAAA,MAAA,EAAA,CAAA,qsCAAA,CAAA,EAAA;AAkEqD,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,YAAY,QAAE,EAAE,WAAW,EAAE,IAAI,EAAE,gEAUvB,UAAU,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA;sBAwN3E,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;sBAiClC,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MEvZ1B,UAAU,CAAA;uGAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE;AACb,iBAAA;;MAYY,KAAK,CAAA;AAsCM,IAAA,EAAA;IArCb,QAAQ,GAAG,KAAK,CAAW,QAAQ,gFACtC,KAAK,EAAE,WAAW,EAAA,CACpB;IAEK,SAAS,GAAG,KAAK,CAAY,SAAS,iFACzC,KAAK,EAAE,YAAY,EAAA,CACrB;IAEK,gBAAgB,GAAG,MAAM,CAAO;AACnC,QAAA,KAAK,EAAE,aAAa;AACvB,KAAA,CAAC;AAEQ,IAAA,eAAe,CAAC,KAAY,EAAA;QAClC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;IAChC;IAEQ,MAAM,GAAG,YAAY,CAAC,UAAU;+EAAC;IACjC,YAAY,GAAG,eAAe,CAAC,WAAW;qFAAC;AAE5C,IAAA,UAAU,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,CAAA,EAC7C,KAAK,EAAE,SAAS;QAChB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEK,IAAA,UAAU,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,CAAA,EAC7C,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IAEK,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC;gFAAC;IAC3F,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,KAAK,UAAU,CAAC;iFAAC;IAC7F,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,QAAQ;qFAAC;AAC1D,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,QAAQ;sFAAC;AAC9E,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,OAAO;kFAAC;IACpF,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,OAAO;kFAAC;AAE7D,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AAClB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;YACrC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGA5DS,KAAK,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAL,KAAK,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gDAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAkBgB,UAAU,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EACD,WAAW,6CCxCtD,m/BAsBM,EAAA,MAAA,EAAA,CAAA,uiOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDPE,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,YAAY,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKP,KAAK,EAAA,UAAA,EAAA,CAAA;kBATjB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gDAAgD,EAAA,OAAA,EACjD;wBACL,cAAc;wBACd,YAAY;AACf,qBAAA,EAAA,QAAA,EAAA,m/BAAA,EAAA,MAAA,EAAA,CAAA,uiOAAA,CAAA,EAAA;AAsB6B,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,UAAU,iGACD,WAAW,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MExBzC,QAAQ,CAAA;IACV,OAAO,GAAG,KAAK,CAA8B,SAAS,+EACzD,KAAK,EAAE,SAAS,EAAA,CAClB;IAEM,cAAc,GAAG,SAAS,CAAiB,cAAc;uFAAC;IAC1D,KAAK,GAAG,YAAY,CAAC,YAAY;8EAAC;IAClC,WAAW,GAAG,YAAY,CAAC,eAAe;oFAAC;IAC3C,YAAY,GAAG,MAAM,CAAC,KAAK;qFAAC;IAC5B,gBAAgB,GAAG,MAAM,CAAC,KAAK;yFAAC;AAEjC,IAAA,iBAAiB,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,qBAAqB;QAC5B,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IAEQ,YAAY,GAAgD,aAAa;IAC5E,KAAK,GAAG,MAAM,CAAiB,KAAK;8EAAC;AAElC,IAAA,WAAW,GAAG,QAAQ,CAA8B,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO;oFAAC;AAE1G,IAAA,UAAU,GAAG,QAAQ,CAAU,MAAK;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QACxC;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,KAAK;QAChB;QAEA,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IAC1C,CAAC;mFAAC;IAEM,kBAAkB,GAAG,MAAM,CAAU,KAAK;2FAAC;IAC5C,UAAU,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,kBAAkB,EAAE;mFAAC;AAEtE,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACnE,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;YACzC,IAAI,CAAC,KAAK,EAAE;gBACR;YACJ;AAEA,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAEhC,YAAA,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAK;AAC1D,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACvC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACpC,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,QAAQ,GAAG,OAAO,gBAAgB,KAAK;AACzC,kBAAE;AACF,kBAAE,IAAI,gBAAgB,CAAC,MAAK;AACxB,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,wBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;oBAClC;AAEA,oBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACpC,gBAAA,CAAC,CAAC;AACN,YAAA,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE;AACrB,gBAAA,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;AACvE,aAAA,CAAC;YAEF,SAAS,CAAC,MAAK;gBACX,WAAW,CAAC,WAAW,EAAE;gBACzB,QAAQ,EAAE,UAAU,EAAE;AAC1B,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;YAClC,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B;YACJ;AAEA,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9B,YAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YAEpC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AAChD,gBAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAClC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACxC,YAAA,CAAC,CAAC;YAEF,SAAS,CAAC,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC;AAChD,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,gBAAgB,CAAC,KAAuB,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAClC;QACJ;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAClC;IAEQ,WAAW,CAAC,QAAwB,KAAK,EAAA;AAC7C,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,KAAK;AAC1B,cAAE;cACA,aAAa;AAEnB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;AAEQ,IAAA,kBAAkB,CAAC,KAAuB,EAAA;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;IAChE;IAEQ,kBAAkB,CAAC,QAAwB,KAAK,EAAA;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;AAEA,QAAA,MAAM,aAAa,GAAG,KAAK,KAAK,IAAI;AACpC,QAAA,MAAM,OAAO,GAAG,KAAK,KAAK,IAAI;AAE9B,QAAA,IAAI,KAAK,CAAC,aAAa,KAAK,aAAa,EAAE;AACvC,YAAA,KAAK,CAAC,aAAa,GAAG,aAAa;QACvC;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE;AAC3B,YAAA,KAAK,CAAC,OAAO,GAAG,OAAO;QAC3B;IACJ;IAEQ,oBAAoB,CAAC,QAAwB,KAAK,EAAA;AACtD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;YACrC;QACJ;AAEA,QAAA,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC3B;AAEQ,IAAA,oBAAoB,CAAC,OAAwB,EAAA;AACjD,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,KAAK;AACnC,cAAE;AACF,cAAE,OAAO,CAAC,KAAK,KAAK,IAAI;AAE5B,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;IACzC;AAEQ,IAAA,oBAAoB,CAAC,KAAuB,EAAA;AAChD,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC/C;AAEQ,IAAA,gBAAgB,CAAC,OAAwB,EAAA;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACxD;AAEQ,IAAA,sBAAsB,CAAC,OAAwB,EAAA;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE;AAC9C,YAAA,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;QACrC;IACJ;AAEQ,IAAA,mBAAmB,CAAC,KAAuB,EAAA;AAC/C,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM;IAChE;AAEQ,IAAA,eAAe,CAAC,OAAwB,EAAA;AAC5C,QAAA,OAAO,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;IAChE;AAEQ,IAAA,wBAAwB,CAAC,KAAmC,EAAA;AAChE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,OAAO;QAClD,IAAI,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,KAAK,EAAE;AACvD,YAAA,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC;QAC7C;IACJ;uGAhMS,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAMY,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACN,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAFC,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBrE,oOAMA,EAAA,MAAA,EAAA,CAAA,8kHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIQ,YAAY,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,CAAA;;2FAKT,QAAQ,EAAA,UAAA,EAAA,CAAA;kBATpB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,OAAA,EACf;wBACL,YAAY;wBACZ,cAAc;AACjB,qBAAA,EAAA,QAAA,EAAA,oOAAA,EAAA,MAAA,EAAA,CAAA,8kHAAA,CAAA,EAAA;wNASkD,cAAc,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACpC,YAAY,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACN,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;METzC,WAAW,CAAA;IACb,OAAO,GAAG,KAAK,CAA8B,SAAS,+EACzD,KAAK,EAAE,SAAS,EAAA,CAClB;IAEM,cAAc,GAAG,SAAS,CAAiB,cAAc;uFAAC;IAC1D,KAAK,GAAG,YAAY,CAAC,YAAY;8EAAC;IAClC,WAAW,GAAG,YAAY,CAAC,eAAe;oFAAC;IAC3C,YAAY,GAAG,MAAM,CAAC,KAAK;qFAAC;IAC5B,gBAAgB,GAAG,MAAM,CAAC,KAAK;yFAAC;AAEjC,IAAA,iBAAiB,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,qBAAqB;QAC5B,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IAEK,KAAK,GAAG,MAAM,CAAU,KAAK;8EAAC;AAE3B,IAAA,WAAW,GAAG,QAAQ,CAA8B,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO;oFAAC;AAE1G,IAAA,UAAU,GAAG,QAAQ,CAAU,MAAK;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QACxC;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,KAAK;QAChB;QAEA,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IAC1C,CAAC;mFAAC;IAEM,kBAAkB,GAAG,MAAM,CAAU,KAAK;2FAAC;IAC5C,UAAU,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,kBAAkB,EAAE;mFAAC;AAEtE,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACnE,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;YACzC,IAAI,CAAC,KAAK,EAAE;gBACR;YACJ;AAEA,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAEhC,YAAA,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAK;AAC1D,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC9B,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAChC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACpC,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;gBAChF,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;AAC5C,oBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC9B,oBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;gBACpC;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,QAAQ,GAAG,OAAO,gBAAgB,KAAK;AACzC,kBAAE;AACF,kBAAE,IAAI,gBAAgB,CAAC,MAAK;AACxB,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,wBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;oBAClC;AAEA,oBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACpC,gBAAA,CAAC,CAAC;AACN,YAAA,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE;AACrB,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,eAAe,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC;AACxF,aAAA,CAAC;YAEF,SAAS,CAAC,MAAK;gBACX,WAAW,CAAC,WAAW,EAAE;gBACzB,cAAc,CAAC,WAAW,EAAE;gBAC5B,QAAQ,EAAE,UAAU,EAAE;AAC1B,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;YAClC,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B;YACJ;AAEA,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9B,YAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YAEpC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AAChD,gBAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAClC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACxC,YAAA,CAAC,CAAC;YAEF,SAAS,CAAC,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC;AAChD,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,gBAAgB,CAAC,KAAuB,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAClC;QACJ;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAClC;AAEQ,IAAA,aAAa,CAAC,KAAA,GAAsC,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa,EAAA;AACnF,QAAA,OAAO,KAAK,EAAE,KAAK,IAAI,IAAI;IAC/B;IAEQ,WAAW,CAAC,QAAiB,KAAK,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;AAEQ,IAAA,kBAAkB,CAAC,KAAuB,EAAA;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;IACnC;IAEQ,kBAAkB,CAAC,QAAiB,KAAK,EAAA;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE;AAClC,YAAA,KAAK,CAAC,OAAO,GAAG,KAAK;QACzB;IACJ;AAEQ,IAAA,oBAAoB,CAAC,KAAuB,EAAA;AAChD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YAC5B;QACJ;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC5C,QAAA,IAAI,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;AAC9B,YAAA,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QAChC;IACJ;AAEQ,IAAA,oBAAoB,CAAC,OAAwB,EAAA;QACjD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,aAAa,EAAE;AAE3D,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;IACzC;IAEQ,gBAAgB,CAAC,KAAuB,EAAE,MAA0B,EAAA;QACxE,OAAO,MAAM,YAAY;eAClB,MAAM,CAAC,IAAI,KAAK;AAChB,eAAA,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;AACtB,eAAA,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;IACrC;AAEQ,IAAA,oBAAoB,CAAC,KAAuB,EAAA;AAChD,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC/C;AAEQ,IAAA,gBAAgB,CAAC,OAAwB,EAAA;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACxD;AAEQ,IAAA,sBAAsB,CAAC,OAAwB,EAAA;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE;AAC9C,YAAA,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;QACrC;IACJ;AAEQ,IAAA,mBAAmB,CAAC,KAAuB,EAAA;AAC/C,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM;IAChE;AAEQ,IAAA,eAAe,CAAC,OAAwB,EAAA;AAC5C,QAAA,OAAO,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;IAChE;AAEQ,IAAA,wBAAwB,CAAC,KAAmC,EAAA;AAChE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,OAAO;QAClD,IAAI,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,KAAK,EAAE;AACvD,YAAA,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC;QAC7C;IACJ;uGApMS,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAMS,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACN,eAAe,gHAFC,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBrE,qLAIA,EAAA,MAAA,EAAA,CAAA,0yGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDKQ,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,CAAA;;2FAKT,WAAW,EAAA,UAAA,EAAA,CAAA;kBARvB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,OAAA,EACnB;wBACL;AACH,qBAAA,EAAA,QAAA,EAAA,qLAAA,EAAA,MAAA,EAAA,CAAA,0yGAAA,CAAA,EAAA;wNASkD,cAAc,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACpC,YAAY,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACN,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEPzC,MAAM,CAAA;IACR,OAAO,GAAG,KAAK,CAA8B,SAAS,+EACzD,KAAK,EAAE,SAAS,EAAA,CAClB;IAEM,cAAc,GAAG,SAAS,CAAiB,cAAc;uFAAC;IAC1D,KAAK,GAAG,YAAY,CAAC,YAAY;8EAAC;IAClC,WAAW,GAAG,YAAY,CAAC,eAAe;oFAAC;IAC3C,YAAY,GAAG,MAAM,CAAC,KAAK;qFAAC;IAC5B,gBAAgB,GAAG,MAAM,CAAC,KAAK;yFAAC;AAEjC,IAAA,iBAAiB,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,8BAAA,EAAA,CAAA,EACpD,KAAK,EAAE,qBAAqB;QAC5B,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IAEK,KAAK,GAAG,MAAM,CAAU,KAAK;8EAAC;AAE3B,IAAA,WAAW,GAAG,QAAQ,CAA8B,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO;oFAAC;AAE1G,IAAA,UAAU,GAAG,QAAQ,CAAU,MAAK;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QACxC;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,KAAK;QAChB;QAEA,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IAC1C,CAAC;mFAAC;IAEM,kBAAkB,GAAG,MAAM,CAAU,KAAK;2FAAC;AAC5C,IAAA,UAAU,GAAG,QAAQ,CAAU,MAAK;AACvC,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC9B,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;IACpC,CAAC;mFAAC;AAEF,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACnE,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;YACzC,IAAI,CAAC,KAAK,EAAE;gBACR;YACJ;AAEA,YAAA,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AACpC,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AAEhC,YAAA,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAK;AAC1D,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACvC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACpC,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,QAAQ,GAAG,OAAO,gBAAgB,KAAK;AACzC,kBAAE;AACF,kBAAE,IAAI,gBAAgB,CAAC,MAAK;AACxB,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,wBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;oBAClC;AAEA,oBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;AACpC,gBAAA,CAAC,CAAC;AACN,YAAA,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE;AACrB,gBAAA,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;AACvE,aAAA,CAAC;YAEF,SAAS,CAAC,MAAK;gBACX,WAAW,CAAC,WAAW,EAAE;gBACzB,QAAQ,EAAE,UAAU,EAAE;AAC1B,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;YAClC,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B;YACJ;AAEA,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9B,YAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YAEpC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AAChD,gBAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAClC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACxC,YAAA,CAAC,CAAC;YAEF,SAAS,CAAC,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC;AAChD,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,gBAAgB,CAAC,KAAuB,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAClC;QACJ;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAClC;IAEQ,WAAW,CAAC,QAAiB,KAAK,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;AAEQ,IAAA,kBAAkB,CAAC,KAAuB,EAAA;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;IACnC;IAEQ,kBAAkB,CAAC,QAAiB,KAAK,EAAA;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,EAAE;AAClC,YAAA,KAAK,CAAC,OAAO,GAAG,KAAK;QACzB;IACJ;IAEQ,oBAAoB,CAAC,QAAiB,KAAK,EAAA;AAC/C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;YACrC;QACJ;AAEA,QAAA,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC3B;AAEQ,IAAA,oBAAoB,CAAC,OAAwB,EAAA;AACjD,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI;AAE3C,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;IACzC;AAEQ,IAAA,oBAAoB,CAAC,KAAuB,EAAA;AAChD,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC/C;AAEQ,IAAA,gBAAgB,CAAC,OAAwB,EAAA;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACxD;AAEQ,IAAA,sBAAsB,CAAC,OAAwB,EAAA;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE;AAC9C,YAAA,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;QACrC;IACJ;AAEQ,IAAA,mBAAmB,CAAC,KAAuB,EAAA;AAC/C,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM;IAChE;AAEQ,IAAA,eAAe,CAAC,OAAwB,EAAA;AAC5C,QAAA,OAAO,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;IAChE;AAEQ,IAAA,wBAAwB,CAAC,KAAmC,EAAA;AAChE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,OAAO;QAClD,IAAI,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,KAAK,EAAE;AACvD,YAAA,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC;QAC7C;IACJ;uGAlLS,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAN,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAMc,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACN,eAAe,gHAFC,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBrE,2WAUA,EAAA,MAAA,EAAA,CAAA,uqLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDDQ,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,CAAA;;2FAKT,MAAM,EAAA,UAAA,EAAA,CAAA;kBARlB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,OAAA,EACb;wBACL;AACH,qBAAA,EAAA,QAAA,EAAA,2WAAA,EAAA,MAAA,EAAA,CAAA,uqLAAA,CAAA,EAAA;wNASkD,cAAc,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACpC,YAAY,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACN,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MENzC,MAAM,CAAA;AAqBK,IAAA,EAAA;IApBb,OAAO,GAAG,KAAK,CAA8B,SAAS,+EACzD,KAAK,EAAE,SAAS,EAAA,CAClB;IACK,UAAU,GAAG,KAAK,CAAa,SAAS,kFAC3C,KAAK,EAAE,aAAa,EAAA,CACtB;IACK,cAAc,GAAG,KAAK,CAAU,KAAK,sFACxC,KAAK,EAAE,kBAAkB,EAAA,CAC3B;IAEM,KAAK,GAAG,YAAY,CAAe,YAAY;8EAAC;IAChD,WAAW,GAAG,YAAY,CAAkB,eAAe;oFAAC;IAE7D,KAAK,GAAG,MAAM,CAAS,CAAC;8EAAC;IACzB,GAAG,GAAG,MAAM,CAAS,CAAC;4EAAC;IACvB,GAAG,GAAG,MAAM,CAAS,GAAG;4EAAC;IACzB,QAAQ,GAAG,MAAM,CAAS,CAAC;iFAAC;AAEzB,IAAA,WAAW,GAAG,QAAQ,CAA8B,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO;oFAAC;AAElH,IAAA,WAAA,CAAoB,EAA2B,EAAA;QAA3B,IAAA,CAAA,EAAE,GAAF,EAAE;AAClB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAA,CAAA,CAAG,CAAC;AAC9E,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;YACzC,IAAI,CAAC,KAAK,EAAE;gBACR;YACJ;AAEA,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YAE5B,MAAM,WAAW,GAAG,KAAK,CACrB,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EACzB,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAC7B,CAAC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAC3C,YAAA,CAAC,CAAC;YAEF,SAAS,CAAC,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC;AAC9C,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;YAClC,IAAI,CAAC,OAAO,EAAE;gBACV;YACJ;AAEA,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YAEpC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AAChD,gBAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAClC,gBAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACxC,YAAA,CAAC,CAAC;YAEF,SAAS,CAAC,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC;AAChD,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAChC;AAEQ,IAAA,gBAAgB,CAAC,KAAuB,EAAA;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAClC;QACJ;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IAClC;IAEQ,WAAW,CAAC,QAAgB,CAAC,EAAA;AACjC,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACpB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACpB,QAAA,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG;AACrB,QAAA,IAAI,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,GAAG;AACpD,QAAA,IAAI,QAAQ,GAAG,KAAK,KAAK;AACrB,cAAE;AACF,cAAE,CAAC,CAAC,SAAS,GAAG,GAAG,IAAI,KAAK,IAAI,GAAG;AAEvC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3D;AAEQ,IAAA,mBAAmB,CAAC,KAAA,GAAsC,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa,EAAA;QACzF,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;AAEA,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK;AACpB,cAAE;AACF,cAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACvB,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK;AACpB,cAAE;AACF,cAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QAEvB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IAClD;AAEQ,IAAA,kBAAkB,CAAC,KAAA,GAAsC,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa,EAAA;QACxF,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;AAEA,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC;IACzC;IAEQ,kBAAkB,CAAC,QAAgB,CAAC,EAAA;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;AAEA,QAAA,KAAK,CAAC,aAAa,GAAG,KAAK;IAC/B;IAEQ,oBAAoB,CAAC,QAAgB,CAAC,EAAA;AAC1C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;YACrC;QACJ;AAEA,QAAA,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAC3B;AAEQ,IAAA,oBAAoB,CAAC,OAAwB,EAAA;AACjD,QAAA,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAEtD,IAAI,CAAC,mBAAmB,EAAE;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;AAC9B,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;IACzC;AAEQ,IAAA,sBAAsB,CAAC,OAAwB,EAAA;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE;AAC9C,YAAA,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;QACrC;IACJ;uGA3JS,MAAM,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAN,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAM,ghBAW4B,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACH,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BvE,0wBAsBA,6qNDZQ,QAAQ,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKH,MAAM,EAAA,UAAA,EAAA,CAAA;kBARlB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,OAAA,EACb;wBACL,QAAQ;AACX,qBAAA,EAAA,QAAA,EAAA,0wBAAA,EAAA,MAAA,EAAA,CAAA,qnNAAA,CAAA,EAAA;AAe0C,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,YAAY,6FACH,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEpB1D,IAAI,CAAA;AAIO,IAAA,EAAA;IAHb,OAAO,GAAG,KAAK,CAA4B,YAAY;gFAAC;IACxD,IAAI,GAAG,KAAK,CAA2B,UAAU;6EAAC;AAEzD,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AAClB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;YAEnC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAC1C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGA1BS,IAAI,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAJ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAI,mUCPjB,2BAAyB,EAAA,MAAA,EAAA,CAAA,6rFAAA,CAAA,EAAA,CAAA;;2FDOZ,IAAI,EAAA,UAAA,EAAA,CAAA;kBALhB,SAAS;+BACI,UAAU,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,6rFAAA,CAAA,EAAA;;;MEYX,qBAAqB,CAAA;uGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6DAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,cAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,6DAA6D;AACvE,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE,yBAAyB;AACrC,qBAAA;AACD,oBAAA,cAAc,EAAE;wBACZ;AACH,qBAAA;AACJ,iBAAA;;MAeY,QAAQ,CAAA;AA8BL,IAAA,EAAA;AACA,IAAA,KAAA;IA9BL,cAAc,GAAG,KAAK,CAA6B,QAAQ,sFAC9D,KAAK,EAAE,iBAAiB,EAAA,CAC1B;IACK,QAAQ,GAAG,KAAK,CAAmB,KAAK,gFAC3C,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IAEK,WAAW,GAAY,KAAK;IAC3B,UAAU,GAAY,KAAK;IAC3B,QAAQ,GAAG,YAAY,CAAC,QAAQ;iFAAC;IACjC,WAAW,GAAG,YAAY,CAAC,WAAW;oFAAC;IACvC,MAAM,GAAG,YAAY,CAAC,MAAM;+EAAC;AAE9B,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AAEtC,QAAA,IAAI,QAAQ,IAAI,WAAW,EAAE;AACzB,YAAA,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,IAAI;QAC/D;AAEA,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IAC1B,CAAC;mFAAC;AAEK,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACnC,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE;IAC3G,CAAC;wFAAC;IAEF,WAAA,CACY,EAAc,EACd,KAAqB,EAAA;QADrB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,KAAK,GAAL,KAAK;AAEb,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,SAAS,GAAG,sBAAsB,GAAG,IAAI,CAAC,cAAc,EAAE;YAChE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YAErC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACxB,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;YAC9C;iBAAO;AACH,gBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;YACjD;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;IAEA,eAAe,GAAA;QACX,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE;AAEhD,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,IAAI,OAAO;AAEpC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;YAC1C,IAAI,CAAC,qBAAqB,EAAE;QAChC;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,eAAe;AAE7C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;QACnC;IACJ;AAGU,IAAA,SAAS,CAAC,KAAiB,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACzF;QACJ;QAEA,IAAI,CAAC,UAAU,EAAE;IACrB;AAGU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC7E;QACJ;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YAC5C;QACJ;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,EAAE;QAE5C,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;QAEA,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,KAAK,EAAE;QACb,IAAI,CAAC,UAAU,EAAE;IACrB;IAEQ,qBAAqB,GAAA;AACzB,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IACjE;IAEQ,uBAAuB,GAAA;QAC3B,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AACxC,YAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AACnF,QAAA,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;IAChE;IAEQ,cAAc,GAAA;AAClB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAmB,OAAO,CAAC,CAAC;IAC/E;IAEQ,UAAU,GAAA;QACd,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC/C;AAEQ,IAAA,cAAc,CAAC,MAA0B,EAAA;QAC7C,OAAO,MAAM,YAAY,gBAAgB;IAC7C;uGA5HS,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,8lBAUe,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACL,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAChB,MAAM,iHCzCxC,oPAG2D,EAAA,MAAA,EAAA,CAAA,o4EAAA,CAAA,EAAA,CAAA;;2FD0B9C,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAXpB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8EAA8E,EAAA,IAAA,EAGlF;AACF,wBAAA,sBAAsB,EAAE,cAAc;qBACzC,EAAA,cAAA,EACe;wBACZ;AACH,qBAAA,EAAA,QAAA,EAAA,oPAAA,EAAA,MAAA,EAAA,CAAA,o4EAAA,CAAA,EAAA;qXAY+B,QAAQ,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACL,WAAW,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAChB,MAAM,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA;sBA8DnC,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;sBASlC,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MEvG1B,WAAW,CAAA;AAKR,IAAA,EAAA;IAJL,IAAI,GAAG,KAAK,CAAkB,MAAM;6EAAC;IACrC,IAAI,GAAG,KAAK,CAAkB,OAAO;6EAAC;AAE7C,IAAA,WAAA,CACY,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AAEV,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;uGA5BS,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,kUCTxB,2BAAyB,EAAA,MAAA,EAAA,CAAA,yiDAAA,CAAA,EAAA,CAAA;;2FDSZ,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,SAAS;+BACI,kBAAkB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,yiDAAA,CAAA,EAAA;;;MEGnB,QAAQ,CAAA;AAKG,IAAA,EAAA;IAJb,QAAQ,GAAG,KAAK,CAAC,QAAQ,+EAC5B,KAAK,EAAE,eAAe,EAAA,CACxB;AAEF,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;IAAgB;AAEtC,IAAA,IAAW,aAAa,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAChC;uGATS,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBANpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,IAAI,EAAE;AACF,wBAAA,sBAAsB,EAAE,YAAY;AACvC,qBAAA;AACJ,iBAAA;;;MCCY,gBAAgB,CAAA;AAUb,IAAA,EAAA;IATL,SAAS,GAAG,KAAK,CAAU,KAAK;kFAAC;IACjC,IAAI,GAAG,KAAK,CAAS,EAAE;6EAAC;AAExB,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;+EAAC;AAEF,IAAA,WAAA,CACY,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;IAEd;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;AACzC,YAAA,OAAO,EAAE;QACb;AAEA,QAAA,OAAO,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE;IAC3E;uGAxBS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,sVCR7B,8PAIM,EAAA,MAAA,EAAA,CAAA,imkBAAA,CAAA,EAAA,CAAA;;2FDIO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,WACxB,EAAE,EAAA,QAAA,EAAA,8PAAA,EAAA,MAAA,EAAA,CAAA,imkBAAA,CAAA,EAAA;;;MEIF,uBAAuB,CAAA;IACzB,aAAa,GAAG,KAAK,CAAU,KAAK;sFAAC;IACrC,SAAS,GAAG,KAAK,CAAQ,CAAC;kFAAC;IAC3B,QAAQ,GAAG,KAAK,CAAS,CAAC;iFAAC;AAE3B,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;AACd,YAAA,OAAO,CAAC;QACZ;AAEA,QAAA,IAAI,QAAQ,GAAG,GAAG,EAAE;AAChB,YAAA,OAAO,GAAG;QACd;AAEA,QAAA,OAAO,QAAQ;IACnB,CAAC;sFAAC;AAEF,IAAA,WAAA,GAAA;IACA;uGAnBS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,0fCRpC,kaAOM,EAAA,MAAA,EAAA,CAAA,+yJAAA,CAAA,EAAA,CAAA;;2FDCO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,WAChC,EAAE,EAAA,QAAA,EAAA,kaAAA,EAAA,MAAA,EAAA,CAAA,+yJAAA,CAAA,EAAA;;;MEIF,yBAAyB,CAAA;IAC3B,aAAa,GAAG,KAAK,CAAU,KAAK;sFAAC;IACrC,SAAS,GAAG,KAAK,CAAQ,CAAC;kFAAC;IAC3B,QAAQ,GAAG,KAAK,CAAS,CAAC;iFAAC;AAE3B,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;AACd,YAAA,OAAO,CAAC;QACZ;AAEA,QAAA,IAAI,QAAQ,GAAG,GAAG,EAAE;AAChB,YAAA,OAAO,GAAG;QACd;AAEA,QAAA,OAAO,QAAQ;IACnB,CAAC;sFAAC;AAEF,IAAA,WAAA,GAAA;IACA;uGAnBS,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,4fCRtC,2XAKM,EAAA,MAAA,EAAA,CAAA,igHAAA,CAAA,EAAA,CAAA;;2FDGO,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,WAClC,EAAE,EAAA,QAAA,EAAA,2XAAA,EAAA,MAAA,EAAA,CAAA,igHAAA,CAAA,EAAA;;;MECF,UAAU,CAAA;uGAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oBAAoB;AACjC,iBAAA;;;MC6BY,MAAM,CAAA;AAsEH,IAAA,EAAA;AACA,IAAA,aAAA;IAtEL,KAAK,GAAG,KAAK,CAAgB,IAAI,6EACpC,KAAK,EAAE,WAAW,EAAA,CACpB;IAEK,QAAQ,GAAG,KAAK,CAAgB,IAAI,gFACvC,KAAK,EAAE,cAAc,EAAA,CACvB;IAEK,UAAU,GAAG,KAAK,CAAa,OAAO,kFACzC,KAAK,EAAE,UAAU,EAAA,CACnB;IAEK,oBAAoB,GAAG,KAAK,CAAuB,SAAS,4FAC/D,KAAK,EAAE,cAAc,EAAA,CACvB;AAEK,IAAA,QAAQ,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EAC3C,KAAK,EAAE,WAAW;QAClB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEK,IAAA,aAAa,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EAChD,KAAK,EAAE,gBAAgB;QACvB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IAEM,IAAI,GAAG,YAAY,CAAC,UAAU;6EAAC;IAC/B,MAAM,GAAG,YAAY,CAAC,MAAM;+EAAC;IAE9B,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;gFAAC;IACvC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;kFAAC;IAE3C,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;uFAAC;IACpE,eAAe,GAAG,MAAM,CAAU,KAAK;wFAAC;IAEvC,cAAc,GAAG,CAAC;AAClB,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;QAE9B,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE;AAClC,YAAA,OAAO,CAAC;QACZ;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAE7B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;QACvC,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM;AAE7C,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACnB,YAAA,OAAO,CAAC,WAAW,GAAG,GAAG,GAAG,CAAC,IAAI,QAAQ;QAC7C;AAEA,QAAA,OAAO,CAAC,WAAW,GAAG,GAAG,GAAG,GAAG,IAAI,QAAQ;IAC/C,CAAC;6FAAC;AAEM,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAElD,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,OAAO,CAAC;QACZ;QAEA,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC;IACpF,CAAC;uFAAC;;IAGK,iBAAiB,GAAuB,MAAM,CAAC,OAAO;0FAAC;IAE9D,WAAA,CACY,EAAc,EACd,aAA4B,EAAA;QAD5B,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,aAAa,GAAb,aAAa;QAErB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;AAExD,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YAEvC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAEhC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,cAAc,GAAG,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,EAAE;YAExE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;YAE1C,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;AACjD,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;YAC7D,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;AAClE,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AACtC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAElD,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAC1B,2BAA2B,EAC3B,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI,CAClB;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAC1B,0BAA0B,EAC1B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,QAAQ,EAAE,CAC7D;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CACzB,eAAe,EACf,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,CAAC,CACnD;AACL,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;IAEQ,gBAAgB,CAAC,QAAgB,EAAE,cAAsB,EAAA;QAC7D,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,OAAO,CAAC;QACZ;QAEA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC;IACpE;IAEQ,iBAAiB,CAAC,QAAgB,EAAE,cAAsB,EAAA;AAC9D,QAAA,OAAO,cAAc,GAAG,CAAC,IAAI,QAAQ,IAAI,cAAc;IAC3D;AAEQ,IAAA,qBAAqB,CAAC,SAAiB,EAAA;AAC3C,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE;YACnC;QACJ;QAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC;AACnD,QAAA,MAAM,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,cAAc;QAEpD,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,gBAAgB,EAAE;YAC5C;QACJ;QAEA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;IACnC;AAEQ,IAAA,oBAAoB,CAAC,IAAgB,EAAA;QACzC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO;AACzC,aAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC;IAC7D;IAEQ,eAAe,GAAA;AACnB,QAAA,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;AACzC,YAAA,OAAO,EAAE;QACb;AAEA,QAAA,OAAO,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE;IAC3E;uGA1KS,MAAM,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAN,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,SAAA,EAbJ;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,MAAM;AACtB,aAAA;SACJ,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAmC2B,UAAU,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACR,MAAM,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7DxC,4oFAgEA,g/RDlDQ,YAAY,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,SAAS,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,WAAW,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAiBN,MAAM,EAAA,UAAA,EAAA,CAAA;kBAtBlB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,OAAA,EACd;wBACL,YAAY;wBACZ,SAAS;wBACT,WAAW;qBACd,EAAA,SAAA,EAGU;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAA,MAAQ;AACtB,yBAAA;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,sBAAsB,EAAE,kBAAkB;AAC1C,wBAAA,uBAAuB,EAAE,YAAY;AACrC,wBAAA,4BAA4B,EAAE,mBAAmB;AACpD,qBAAA,EAAA,QAAA,EAAA,4oFAAA,EAAA,MAAA,EAAA,CAAA,w7RAAA,CAAA,EAAA;AA6B2B,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,aAAA,EAAA,CAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,UAAU,wFACR,MAAM,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MExC3B,cAAc,CAAA;AACN,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC7C,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5C,IAAA,cAAc,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EACjD,KAAK,EAAE,kBAAkB;QACzB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IAEM,KAAK,GAAG,eAAe,CAAc,WAAW;8EAAC;AAElD,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,IAAI,CAAC;iFAAC;IAEpD,KAAK,GAAG,YAAY,CAAQ,KAAK;8EAAC;AAEzC,IAAA,IAAW,aAAa,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ;IACzC;AAEA,IAAA,IAAqC,MAAM,GAAA;QACvC,OAAO,IAAI,CAAC,aAAa;IAC7B;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAChC;uGAzBS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EASsB,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAIrB,KAAK,kQClC5C,kjBAeM,EAAA,MAAA,EAAA,CAAA,88FAAA,CAAA,EAAA,CAAA;;2FDMO,cAAc,EAAA,UAAA,EAAA,CAAA;kBAhB1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uCAAuC,EAAA,QAAA,EACvC,YAAY,EAAA,OAAA,EACb,EAAE,EAAA,IAAA,EAGL;AACF,wBAAA,8BAA8B,EAAE,uBAAuB;qBAC1D,EAAA,cAAA,EACe;AACZ,wBAAA;AACI,4BAAA,SAAS,EAAE,gBAAgB;AAC3B,4BAAA,MAAM,EAAE,CAAC,yBAAyB,EAAE,uBAAuB,CAAC;AAC/D;AACJ,qBAAA,EAAA,QAAA,EAAA,kjBAAA,EAAA,MAAA,EAAA,CAAA,88FAAA,CAAA,EAAA;AAW4C,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,WAAW,uFAIrB,KAAK,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA;sBAMvC,WAAW;uBAAC,kBAAkB;;;ME1BtB,eAAe,CAAA;AACP,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AAE9C,IAAA,KAAK,GAAG,KAAK;yFAAU;AAEvB,IAAA,cAAc,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EACjD,KAAK,EAAE,kBAAkB;QACzB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEF,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAChC;uGAZS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECd5B,uMAKiD,EAAA,MAAA,EAAA,CAAA,0cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDCzC,SAAS,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAQJ,eAAe,EAAA,UAAA,EAAA,CAAA;kBAX3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB;wBACL,SAAS;qBACZ,EAAA,IAAA,EAGK;AACF,wBAAA,8BAA8B,EAAE,kBAAkB;AACrD,qBAAA,EAAA,QAAA,EAAA,uMAAA,EAAA,MAAA,EAAA,CAAA,0cAAA,CAAA,EAAA;;;MEoBQ,cAAc,CAAA;AACN,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AACpC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAE/C,QAAQ,GAAG,KAAK,CAAC,KAAK,gFACzB,KAAK,EAAE,UAAU,EAAA,CACnB;AAEK,IAAA,cAAc,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EACjD,KAAK,EAAE,kBAAkB;QACzB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;AAEK,IAAA,kBAAkB,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,8BAAA,EAAA,CAAA,EACrD,KAAK,EAAE,sBAAsB;QAC7B,SAAS,EAAE,gBAAgB,EAAA,CAC7B;IAEK,cAAc,GAAG,KAAK,CAAiB,MAAM,sFAChD,KAAK,EAAE,iBAAiB,EAAA,CAC1B;IAEK,aAAa,GAAG,KAAK,CAAkB,SAAS,qFACnD,KAAK,EAAE,kBAAkB,EAAA,CAC3B;IAEK,YAAY,GAAG,KAAK,CAAiB,UAAU,oFAClD,KAAK,EAAE,iBAAiB,EAAA,CAC1B;AAEe,IAAA,uBAAuB,GAAG,QAAQ,CAAkB,MAAK;AACtE,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE;AAChC,YAAA,OAAO,QAAQ;QACnB;AAEA,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC/B,CAAC;gGAAC;AAEe,IAAA,sBAAsB,GAAG,QAAQ,CAAiB,MAAK;AACpE,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE;AAChC,YAAA,OAAO,OAAO;QAClB;AAEA,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE;IAC9B,CAAC;+FAAC;IAEM,SAAS,GAAG,eAAe,CAAc,WAAW;kFAAC;IACrD,oBAAoB,GAAG,YAAY,CAAuB,oBAAoB;6FAAC;IAEhF,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,IAAI,QAAQ,CAAC;uFAAC;IAC7F,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,IAAI,UAAU,CAAC;yFAAC;IACjG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE;+EAAC;;IAG7D,iBAAiB,GAAuB,MAAM,CAAC,OAAO;0FAAC;AACvD,IAAA,qBAAqB,GAAoB,IAAI,CAAC,QAAQ;AAEtD,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,IAAI,cAAc,IAAI,MAAM,EAAE;gBAC1B;YACJ;AAEA,YAAA,MAAM,cAAc,GAAG,YAAY,GAAG,cAAc;YAEpD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;YAE1C,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;AACjD,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE;YACnE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;YAErC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,QAAQ,GAAG,eAAe,GAAI,IAAI,CAAC,sBAAsB,EAAE;YACjE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAEpC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3C,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAChC;IAEO,MAAM,GAAA;AACT,QAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IACjC;IAEO,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;IAEO,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;uGA3GS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,SAAA,EAVZ;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,cAAc;AAC9B,aAAA;SACJ,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAmDgD,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACM,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/E1F,wlCAqBM,m4LDLE,UAAU,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,WAAW,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,YAAY,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAcP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAnB1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,OAAA,EACtB;wBACL,UAAU;wBACV,WAAW;wBACX,YAAY;qBACf,EAAA,SAAA,EAGU;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAA,cAAgB;AAC9B,yBAAA;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,sBAAsB,EAAE,iBAAiB;AAC5C,qBAAA,EAAA,QAAA,EAAA,wlCAAA,EAAA,MAAA,EAAA,CAAA,20LAAA,CAAA,EAAA;AAgDgD,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,WAAW,sGACM,oBAAoB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEnE7E,aAAa,CAAA;AACL,IAAA,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AACpC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,cAAc,GAAG,QAAQ,CAAmB,MAAK;QAC9D,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,SAAS,EAAE;AAC/C,YAAA,OAAO,UAAU;QACrB;AAEA,QAAA,OAAO,YAAY;IACvB,CAAC;uFAAC;AAEF,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE;YACpD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;YAElC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AACzC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAChC;uGAxBS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,8ECZ1B,mKAIM,EAAA,MAAA,EAAA,CAAA,63DAAA,CAAA,EAAA,CAAA;;2FDQO,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,WACrB,EACR,EAAA,QAAA,EAAA,mKAAA,EAAA,MAAA,EAAA,CAAA,63DAAA,CAAA,EAAA;;;MEgBQ,SAAS,CAAA;IACX,KAAK,GAAG,KAAK,CAAgB,IAAI,6EACpC,KAAK,EAAE,OAAO,EAAA,CAChB;IACK,SAAS,GAAG,KAAK,CAAwB,QAAQ,iFACpD,KAAK,EAAE,YAAY,EAAA,CACrB;IACK,YAAY,GAAG,KAAK,CAAmB,KAAK,oFAC/C,KAAK,EAAE,eAAe,EAAA,CACxB;IACK,OAAO,GAAG,KAAK,CAAkB,SAAS,+EAC7C,KAAK,EAAE,SAAS,EAAA,CAClB;IAEM,cAAc,GAAG,SAAS,CAAa,gBAAgB;uFAAC;IACxD,KAAK,GAAG,YAAY,CAAC,YAAY;8EAAC;IAClC,YAAY,GAAG,eAAe,CAAC,WAAW,oFAAI,WAAW,EAAE,IAAI,EAAA,CAAG;IAClE,WAAW,GAAG,eAAe,CAAC,UAAU,mFAAI,WAAW,EAAE,IAAI,EAAA,CAAG;IAChE,WAAW,GAAG,YAAY,CAAC,eAAe;oFAAC;IAC3C,YAAY,GAAG,MAAM,CAAC,KAAK;qFAAC;IAC5B,gBAAgB,GAAG,MAAM,CAAC,KAAK;yFAAC;;;;IAIhC,qBAAqB,GAAkB,IAAI;AAE5C,IAAA,WAAW,GAAG,QAAQ,CAA8B,MAAK;AAC5D,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC,OAAO,EAAE;QACzB;AAEA,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO;IACtC,CAAC;oFAAC;AAEK,IAAA,UAAU,GAAG,QAAQ,CAAU,MAAK;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;QAClC,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QACxC;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,KAAK;QAChB;QAEA,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;IAC1C,CAAC;mFAAC;AAEK,IAAA,SAAS,GAAG,QAAQ,CAAqB,MAAK;AACjD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AAEnC,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI,EAAE;AAC9B,YAAA,OAAO,SAAS;QACpB;AAEA,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;kFAAC;IACK,WAAW,GAAG,MAAM,CAAC,CAAC;oFAAC;;IAG9B,iBAAiB,GAAuB,MAAM,CAAC,OAAO;0FAAC;AAEvD,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,IAAI,CAAC,KAAK,EAAE;gBACR;YACJ;AAEA,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa;YACvC,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,UAAU;AAEnE,YAAA,WAAW,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;AAC3C,YAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;YAEtC,IAAI,UAAU,EAAE;AACZ,gBAAA,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC;YACzC;AAEA,YAAA,MAAM,WAAW,GAAG,KAAK,CACrB,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,EAC/B,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,EAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,EAC9B,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CACpC,CAAC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;gBAEtC,IAAI,UAAU,EAAE;AACZ,oBAAA,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;oBACjC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,YAAY,GAAG,IAAI;gBAC9D;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,QAAQ,GAAG,OAAO,gBAAgB,KAAK;AACzC,kBAAE;AACF,kBAAE,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;AACxE,YAAA,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE;AAC3B,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,eAAe,EAAE,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC;AACjG,aAAA,CAAC;YAEF,SAAS,CAAC,MAAK;gBACX,WAAW,CAAC,WAAW,EAAE;gBACzB,QAAQ,EAAE,UAAU,EAAE;AAC1B,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE;YAClC,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B;YACJ;AAEA,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAE9B,YAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAEpF,SAAS,CAAC,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC;AAChD,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa;YACtD,IAAI,CAAC,SAAS,EAAE;gBACZ;YACJ;YAEA,MAAM,UAAU,GAAY,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC,IAAI,KAAK;AAC9F,YAAA,MAAM,WAAW,GAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,KAAK;YAEjI,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,sBAAsB,EAAE,UAAU,CAAC;YAC9D,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,EAAE,WAAW,CAAC;AACpE,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,oBAAoB,CAAC,KAAuB,EAAA;QAChD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AACxC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC9D;AAEQ,IAAA,gBAAgB,CAAC,OAAwB,EAAA;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACxD;AAEQ,IAAA,mBAAmB,CAAC,KAAuB,EAAA;QAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC;;;;;;;;;;QAWtD,MAAM,wBAAwB,GAAG,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,IAAI,CAAC,qBAAqB;QAErG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,wBAAwB;IAC5D;AAEQ,IAAA,eAAe,CAAC,OAAwB,EAAA;AAC5C,QAAA,OAAO,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC;IAChE;AAEQ,IAAA,wBAAwB,CAAC,KAAmC,EAAA;QAChE,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,OAAO;AAClD,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;QAElC,IAAI,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,KAAK,EAAE;AAC9C,YAAA,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC;QAC7C;IACJ;uGAtLS,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAPP;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,SAAS;AACzB,aAAA;SACJ,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiB4B,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EACF,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EACZ,UAAU,8FACb,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1CtD,olCAyBA,EAAA,MAAA,EAAA,CAAA,gzSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDZQ,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAWF,SAAS,EAAA,UAAA,EAAA,CAAA;kBAdrB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,OAAA,EACjB;wBACL,OAAO;qBACV,EAAA,SAAA,EAGU;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAA,SAAW;AACzB,yBAAA;AACJ,qBAAA,EAAA,QAAA,EAAA,olCAAA,EAAA,MAAA,EAAA,CAAA,gzSAAA,CAAA,EAAA;AAgB8C,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,gBAAgB,sFAClC,YAAY,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACF,WAAW,CAAA,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACnC,UAAU,QAAE,EAAE,WAAW,EAAE,IAAI,EAAE,0FACpC,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MElCzC,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,IAAI,EAAE;AACF,wBAAA,OAAO,EAAE;AACZ;AACJ,iBAAA;;;MCAY,WAAW,GAAG,IAAI,cAAc,CAAU,iBAAiB;MAC3D,aAAa,GAAG,IAAI,cAAc,CAAe,mBAAmB;MACpE,gBAAgB,GAAG,IAAI,cAAc,CAAgB,sBAAsB;AAExF,MAAM,iCAAiC,GAAG,GAAG;AAC7C,MAAM,YAAY,GAAG,mBAAmB;MAE3B,SAAS,CAAA;AAiCG,IAAA,MAAA;AAGD,IAAA,YAAA;AAnCH,IAAA,MAAM,GAAG,IAAI,OAAO,EAAiB;AACrC,IAAA,OAAO,GAAG,IAAI,OAAO,EAAQ;AAC7B,IAAA,aAAa,GAAG,IAAI,OAAO,EAAW;IAC/C,YAAY,GAAyB,IAAI;IACzC,YAAY,GAAG,KAAK;IACpB,YAAY,GAAG,KAAK;IACpB,MAAM,GAAG,KAAK;;AAGf,IAAA,cAAc;AACrB;;;AAGG;AACI,IAAA,iBAAiB;;AAGxB,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU;IACjC;;AAGA,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,YAAY;IAC5B;;AAGA,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,MAAM;IACtB;IAEA,WAAA,CACqB,MAA0B,EAC3C,kBAA2B;;AAEX,IAAA,YAAA,GAAwB,KAAK,EAAA;QAH5B,IAAA,CAAA,MAAM,GAAN,MAAM;QAGP,IAAA,CAAA,YAAY,GAAZ,YAAY;;;;QAK5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE3E,IAAI,CAAC,kBAAkB,EAAE;YACrB,IAAI,CAAC,kBAAkB,EAAE;QAC7B;IACJ;;AAGO,IAAA,KAAK,CAAC,MAAU,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,OAAO,IAAI,CAAC,YAAY;QAC5B;QAEA,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpF,OAAO,IAAI,CAAC,YAAY;IAC5B;AAEA;;;;;AAKG;IACI,IAAI,GAAA;QACP,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;AAClC,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC5B;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAE7B,QAAA,OAAO,IAAI,CAAC,uBAAuB,EAAE;IACzC;AAEA;;;;AAIG;IACI,IAAI,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,IAAI,CAAC;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;QAClC;AAEA,QAAA,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE;IACzC;;IAGO,YAAY,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;IACtC;;IAGO,aAAa,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC5C;IAEO,WAAW,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;IACrC;IAEQ,kBAAkB,GAAA;;;AAGtB,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACnD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,GAAG,OAAO;YAC7D,IAAI,CAAC,KAAK,EAAE;AAChB,QAAA,CAAC,CAAC;;;AAIF,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAC1B,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EACnF,IAAI,CAAC,CAAC,CAAC,CACV,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YAClB,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,GAAG,UAAU;YAChE,IAAI,CAAC,KAAK,EAAE;AAChB,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,iBAAiB,CAAC,QAAiB,EAAA;AACvC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AACzC,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc;AACvC,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe;QAE3C,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC;QAC9C,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC;;;QAIlD,IAAI,QAAQ,EAAE;AACV,YAAA,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;QACnC;aAAO;AACH,YAAA,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC;QAClC;IACJ;IAEQ,YAAY,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB;QACJ;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;IAC3B;IAEQ,mBAAmB,GAAA;AACvB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AACzC,QAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM;QAE/B,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC7D,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAC/D,QAAA,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,KAAK,CAAC;;;AAIrC,QAAA,OAAO,UAAU,GAAG,IAAI,CAAC,uBAAuB,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;IAC1E;;IAGQ,uBAAuB,GAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,cAAc,IAAI,KAAK;AAE5D,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC3B,IAAI,UAAU,GAAG,KAAK;YACtB,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,iCAAiC,CAAC;AAEnE,YAAA,SAAS,IAAI,GAAA;gBACT,IAAI,UAAU,EAAE;oBACZ;gBACJ;gBAEA,UAAU,GAAG,IAAI;gBACjB,YAAY,CAAC,SAAS,CAAC;AACvB,gBAAA,OAAO,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC;AAC7D,gBAAA,OAAO,EAAE;YACb;YAEA,SAAS,eAAe,CAAC,KAAsB,EAAA;AAC3C,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE;AAC1B,oBAAA,IAAI,EAAE;gBACV;YACJ;AAEA,YAAA,OAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC;AAC9D,QAAA,CAAC,CAAC;IACN;;AAGQ,IAAA,MAAM,CAAC,MAAU,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB;QACJ;;;QAIA,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC1B;AACH;;ACjOD;;;;AAIG;AASG,MAAO,MAAO,SAAQ,kBAAkB,CAAA;IACzB,OAAO,GAAG,SAAS,CAA0B,SAAS;gFAAC;IAEjE,QAAQ,GAAG,MAAM,CAAU,KAAK;iFAAC;AAErB,IAAA,MAAM,GAAG,MAAM,CAAe,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AAEzF,IAAA,IAAW,cAAc,GAAA;QACrB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,IAAI,IAAI;IAChD;AAEA;;;;AAIG;IACI,mBAAmB,GAAA;QACtB,qBAAqB,CAAC,MAAK;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,SAAS,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;IAEO,cAAc,GAAA;QACjB,IAAI,CAAC,eAAe,EAAE;IAC1B;uGA5BS,MAAM,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAN,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBnB,gaAUA,EAAA,MAAA,EAAA,CAAA,24DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIQ,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,MAAM,EAAA,UAAA,EAAA,CAAA;kBARlB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,OAAA,EACb;wBACL,eAAe;AAClB,qBAAA,EAAA,QAAA,EAAA,gaAAA,EAAA,MAAA,EAAA,CAAA,24DAAA,CAAA,EAAA;qEAK6D,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEb3E;;;;;AAKG;AASG,MAAO,gBAAiB,SAAQ,kBAAkB,CAAA;IACnC,OAAO,GAAG,SAAS,CAA0B,SAAS;gFAAC;IACvD,WAAW,GAAG,SAAS,CAAC,aAAa,mFAAI,IAAI,EAAE,eAAe,EAAA,CAAG;IACjE,SAAS,GAAG,SAAS,CAAC,WAAW,iFAAI,IAAI,EAAE,eAAe,EAAA,CAAG;AAC7D,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IAExC,QAAQ,GAAG,MAAM,CAAU,KAAK;iFAAC;AAErB,IAAA,MAAM,GAAG,MAAM,CAAe,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AAEzF,IAAA,IAAW,cAAc,GAAA;QACrB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,IAAI,IAAI;IAChD;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;;;QAIlC,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,WAAW,CAAC;QAC7D;QAEA,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,SAAS,CAAC;QACzD;IACJ;IAEgB,WAAW,GAAA;AACvB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAElC,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,WAAW,CAAC;QAC/D;QAEA,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,KAAK,EAAE,SAAS,CAAC;QAC3D;QAEA,KAAK,CAAC,WAAW,EAAE;IACvB;IAEO,mBAAmB,GAAA;QACtB,qBAAqB,CAAC,MAAK;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,SAAS,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;IAEO,cAAc,GAAA;QACjB,IAAI,CAAC,eAAe,EAAE;IAC1B;uGAxDS,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,6QAEuC,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACnB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxB/E,0kCAyBA,ogFDTQ,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAR5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACL,eAAe;AAClB,qBAAA,EAAA,QAAA,EAAA,0kCAAA,EAAA,MAAA,EAAA,CAAA,48EAAA,CAAA,EAAA;AAK6D,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAC9B,aAAa,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAC1C,WAAW,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AECjF,MAAM,WAAW,GAAG,kBAAkB;AACtC,MAAM,uBAAuB,GAAG,6BAA6B;AAC7D,MAAM,aAAa,GAAG,oBAAoB;AAC1C,MAAM,gBAAgB,GAAG,uBAAuB;AAChD,MAAM,mBAAmB,GAAG,0BAA0B;AAEtD;;;;AAIG;AACH,MAAM,wBAAwB,GAAG,GAAG;MAKvB,aAAa,CAAA;AACL,IAAA,SAAS,GAAG,MAAM,CAACE,QAAS,CAAC;AAC7B,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;;IAG3B,IAAI,GAA0B,EAAE;AAEjD;;;AAGG;AACc,IAAA,cAAc,GAAG,IAAI,GAAG,EAAmB;AAE5D;;;AAGG;IACc,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;;IAG5D,WAAW,GAAuB,IAAI;IAEtC,eAAe,GAAG,KAAK;AAE/B,IAAA,IAAW,WAAW,GAAA;QAClB,OAAO,IAAI,CAAC,IAAI;IACpB;;AAGA,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnD;;AAGA,IAAA,IAAW,gBAAgB,GAAA;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,YAAY,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IACtE;AAEO,IAAA,IAAI,CACP,SAAkB,EAClB,MAAA,GAA0B,EAAE,EAAA;QAE5B,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAE7C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC/C;;;;AAKA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE;QAExC,IAAI,WAAW,EAAE;YACb,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,cAAc,CAAC;QAClE;AAEA,QAAA,IAAI,SAA2B;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAU,SAAS,EAAE;;;;AAInD,YAAA,SAAS,EAAE;AACP,gBAAA,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,MAAM;AACb,oBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE;AACrD,iBAAA;AACJ,aAAA;;;AAGD,YAAA,SAAS,EAAE,CAAC,YAAgC,KAAI;gBAC5C,SAAS,GAAG,IAAI,SAAS,CAAO,YAAY,EAAE,YAAY,CAAC,kBAAkB,CAAC;gBAE9E,OAAO;AACH,oBAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;oBAC3C,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE;AACrD,oBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE;AAClD,oBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE;iBACrD;YACL,CAAC;YACD,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,IAAI,EAAE,YAAY,CAAC,IAAI;AACvB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,IAAI;AACzC,YAAA,cAAc,EAAE,YAAY,CAAC,cAAc,IAAI,IAAI;AACnD,YAAA,eAAe,EAAE,YAAY,CAAC,eAAe,IAAI,IAAI;AACrD,YAAA,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,SAAS;YAC9C,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;YAC/C,QAAQ,EAAE,YAAY,CAAC,QAAQ;AAC/B,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,CAAC,kBAAkB,EAAE,aAAa,CAAC;AAClD,YAAA,UAAU,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC;AACxC,YAAA,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;AAClC,iBAAA,MAAM;AACN,iBAAA,kBAAkB;AAClB,iBAAA,gBAAgB,EAAE;;YAEvB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE;;;AAGpD,YAAA,YAAY,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;;;AAGtC,YAAA,YAAY,EAAE,IAAI;AACrB,SAAA,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC;AAEjE,QAAA,OAAO,SAAS;IACpB;AAEA;;;;AAIG;AACI,IAAA,cAAc,CACjB,SAAkB,EAClB,MAAA,GAAoC,EAAE,EAAA;QAEtC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAE7C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAC/C;;;AAIA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE;QAEjC,IAAI,WAAW,EAAE;;;YAGb,IAAI,CAAC,QAAQ,EAAE;QACnB;AAEA,QAAA,IAAI,SAA2B;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAU,SAAS,EAAE;AACnD,YAAA,SAAS,EAAE;AACP,gBAAA,IAAI,EAAE,gBAAgB;gBACtB,SAAS,EAAE,MAAM;AACb,oBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE;AACrD,iBAAA;AACJ,aAAA;AACD,YAAA,SAAS,EAAE,CAAC,YAAgC,KAAI;AAC5C,gBAAA,SAAS,GAAG,IAAI,SAAS,CAAO,YAAY,EAAE,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC;gBAEpF,OAAO;AACH,oBAAA,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE;oBAC3C,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE;AACrD,oBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE;AAClD,oBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE;iBACrD;YACL,CAAC;YACD,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,IAAI,EAAE,YAAY,CAAC,IAAI;AACvB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,IAAI;AACzC,YAAA,cAAc,EAAE,YAAY,CAAC,cAAc,IAAI,IAAI;AACnD,YAAA,eAAe,EAAE,YAAY,CAAC,eAAe,IAAI,IAAI;AACrD,YAAA,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,SAAS;YAC9C,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;YAC/C,QAAQ,EAAE,YAAY,CAAC,QAAQ;;;AAG/B,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,UAAU,EAAE,CAAC,uBAAuB,EAAE,aAAa,CAAC;;;;AAIpD,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;YACd,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE;YAClD,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE;AACpD,YAAA,YAAY,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;AACtC,YAAA,YAAY,EAAE,IAAI;AACrB,SAAA,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC;AAEjE,QAAA,OAAO,SAAS;IACpB;;AAGQ,IAAA,cAAc,CAClB,SAA0B,EAC1B,MAA0B,EAC1B,YAAqC,EACrC,WAA4C,EAAA;AAE5C,QAAA,SAAS,CAAC,cAAc,GAAG,MAAM,CAAC,iBAA+C;QACjF,SAAS,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,SAAS;AAEnE,QAAA,IAAI,MAAM,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC;QAC5D;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QACzB,IAAI,CAAC,aAAa,EAAE;QAEpB,IAAI,WAAW,EAAE;AACb,YAAA,UAAU,CACN,MAAM,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,EAC1D,wBAAwB,CAC3B;QACL;aAAO;AACH,YAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;QACtC;;;AAIA,QAAA,SAAS,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC/E,QAAA,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;;;;AAIlE,QAAA,SAAS,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IACnE;AAEA;;;;;AAKG;IACI,OAAO,GAAA;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAE1E,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC;IAC9E;AAEA;;;;;AAKG;IACI,OAAO,GAAA;AACV,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAE5B,IAAI,CAAC,MAAM,EAAE;YACT;QACJ;AAEA,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB;;;QAI3C,IAAI,aAAa,IAAI,aAAa,KAAK,MAAM,IAAI,aAAa,CAAC,QAAQ,EAAE;YACrE,aAAa,CAAC,IAAI,EAAE;QACxB;AAEA,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;YACjB,MAAM,CAAC,IAAI,EAAE;QACjB;IACJ;;IAGO,QAAQ,GAAA;;;AAGX,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC;IACtF;;IAGQ,mBAAmB,GAAA;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC;aAChB,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY;aACjC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;AAE9B,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC;IACrD;AAEQ,IAAA,WAAW,CAAI,MAAuB,EAAA;QAC1C,OAAO;YACH,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,KAAK;AAClD,YAAA,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,KAAK;AACtD,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,OAAO;AAChD,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ;AAC7B,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;AACjC,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,EAAE;AAC3C,YAAA,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,EAAE;AAC7C,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;AAClC,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;YACnC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;AACzC,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;SAC7C;IACL;AAEA;;;;AAIG;IACK,eAAe,CACnB,WAAgC,EAChC,QAAwB,EAAA;QAExB,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAEvE,QAAA,OAAO,QAAQ,KAAK,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE;IAChF;AAEQ,IAAA,kBAAkB,CAAC,SAA8B,EAAA;AACrD,QAAA,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU;AACvC,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc;AACvC,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe;;;;QAK3C,qBAAqB,CAAC,MAAK;YACvB,UAAU,CAAC,MAAK;gBACZ,KAAK,CAAC,qBAAqB,EAAE;AAC7B,gBAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;AACrC,gBAAA,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;YAC7C,CAAC,EAAE,GAAG,CAAC;AACX,QAAA,CAAC,CAAC;AAEF,QAAA,SAAS,CAAC,cAAc,EAAE,mBAAmB,EAAE;IACnD;;IAGQ,uBAAuB,CAC3B,SAA8B,EAC9B,WAAgC,EAAA;AAEhC,QAAA,IAAI,SAAS,CAAC,SAAS,EAAE;YACrB;QACJ;AAEA,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,cAAc;AACjD,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,eAAe;AAErD,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC;QAE/C,KAAK,CAAC,qBAAqB,EAAE;AAC7B,QAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;AAEzC,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC;AAE7C,QAAA,SAAS,CAAC,cAAc,EAAE,mBAAmB,EAAE;IACnD;;IAGQ,uBAAuB,CAC3B,UAA+B,EAC/B,WAAgC,EAAA;AAEhC,QAAA,IAAI,WAAW,CAAC,SAAS,EAAE;YACvB;QACJ;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,WAAW,CAAC;QAChD,WAAW,CAAC,IAAI,EAAE;AAClB,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC;IAClD;AAEA;;;AAGG;IACK,kBAAkB,CAAC,OAA4B,EAAE,KAA0B,EAAA;AAC/E,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,eAAe;AAC/C,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe;;;QAI3C,IAAI,CAAC,EAAE,EAAE;YACL;QACJ;AAEA,QAAA,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;AACxC,QAAA,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC1C;;IAGQ,gBAAgB,CAAC,OAA4B,EAAE,KAA0B,EAAA;AAC7E,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,eAAe;AAC/C,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe;QAE3C,qBAAqB,CAAC,MAAK;AACvB,YAAA,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC;AAC3C,YAAA,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC;AAC7C,QAAA,CAAC,CAAC;IACN;IAEQ,gBAAgB,CACpB,YAA6B,EAC7B,MAA+B,EAAA;AAE/B,QAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACpE;QACJ;;;AAIA,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,KAAI;AAC5D,YAAA,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;AAChD,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,mBAAmB,CAAC,IAAa,EAAA;AACrC,QAAA,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5E;;IAGQ,MAAM,GAAA;AACV,QAAA,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;YACxD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE;AAC7B,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B;QACJ;AAEA,QAAA,OAAO,SAAS;IACpB;AAEA;;;AAGG;IACK,aAAa,GAAA;AACjB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;QAEzB,OAAO,GAAG,EAAE,YAAY,GAAG,SAAS,GAAG,GAAG;IAC9C;AAEQ,IAAA,qBAAqB,CAAC,GAAwB,EAAA;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAEpC,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACX;QACJ;AAEA,QAAA,KAAK,IAAI,aAAa,GAAG,KAAK,GAAG,CAAC,EAAE,aAAa,IAAI,CAAC,EAAE,aAAa,EAAE,EAAE;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;AAE5C,YAAA,IAAI,WAAW,CAAC,SAAS,EAAE;gBACvB;YACJ;;;;AAKA,YAAA,IAAI,WAAW,CAAC,UAAU,CAAC,eAAe,EAAE;gBACxC,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACnE;AAEA,YAAA,UAAU,CACN,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,WAAW,CAAC,EACpD,wBAAwB,CAC3B;YACD;QACJ;IACJ;AAEQ,IAAA,SAAS,CAAC,GAAwB,EAAA;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAEpC,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd;QACJ;QAEA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAE1B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QAC3B;QAEA,IAAI,CAAC,aAAa,EAAE;IACxB;AAEA;;;;;;AAMG;IACK,aAAa,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB;QACJ;AAEA,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAE3B,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;YAC5B,IAAI,CAAC,cAAc,EAAE;AACzB,QAAA,CAAC,CAAC;IACN;IAEQ,cAAc,GAAA;AAClB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QAE/D,IAAI,gBAAgB,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;QAC7B;aAAO;AACH,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;QAC9B;QAEA,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;;;AAGxB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;YAC3B;QACJ;QAEA,IAAI,gBAAgB,EAAE;YAClB,IAAI,CAAC,+BAA+B,EAAE;YACtC;QACJ;QAEA,IAAI,CAAC,+BAA+B,EAAE;QACtC,IAAI,CAAC,YAAY,EAAE;IACvB;AAEA;;;;AAIG;IACK,+BAA+B,GAAA;QACnC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE;YAC9B;QACJ;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE;AAE7D,QAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACpE,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC;YAEjD,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;gBACzC;YACJ;YAEA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;AACvC,YAAA,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC;AAC1C,QAAA,CAAC,CAAC;IACN;;IAGQ,+BAA+B,GAAA;QACnC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,OAAO,KAAI;AAC3C,YAAA,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC;AAC9C,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;IAC/B;AAEA;;;;AAIG;IACK,YAAY,GAAA;AAChB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;AAEjD,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,aAAa,IAAI,aAAa,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC9E,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;QAC5B;IACJ;IAEQ,iBAAiB,GAAA;AACrB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;QACjD,OAAO,aAAa,YAAY,WAAW,GAAG,aAAa,GAAG,IAAI;IACtE;uGA9jBS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFV,MAAM,EAAA,CAAA;;2FAET,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;MC7BY,YAAY,CAAA;uGAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXzB,wMAKM,EAAA,MAAA,EAAA,CAAA,gTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDCE,YAAY,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKP,YAAY,EAAA,UAAA,EAAA,CAAA;kBARxB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,OAAA,EACpB;wBACL;AACH,qBAAA,EAAA,QAAA,EAAA,wMAAA,EAAA,MAAA,EAAA,CAAA,gTAAA,CAAA,EAAA;;;MEOQ,UAAU,CAAA;uGAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdvB,kFAEgB,EAAA,MAAA,EAAA,CAAA,4JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIR,QAAQ,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAQH,UAAU,EAAA,UAAA,EAAA,CAAA;kBAXtB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB;wBACL;qBACH,EAAA,IAAA,EAGK;AACF,wBAAA,OAAO,EAAE,gBAAgB;AAC5B,qBAAA,EAAA,QAAA,EAAA,kFAAA,EAAA,MAAA,EAAA,CAAA,4JAAA,CAAA,EAAA;;;MEJQ,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,8ECR1B,oEAEM,EAAA,MAAA,EAAA,CAAA,wGAAA,CAAA,EAAA,CAAA;;2FDMO,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,WACrB,EAAE,EAAA,QAAA,EAAA,oEAAA,EAAA,MAAA,EAAA,CAAA,wGAAA,CAAA,EAAA;;;AECf;;;;AAIG;MAcU,sBAAsB,CAAA;;IAE/B,iBAAiB,GAAuB,MAAM,CAAC,OAAO;0FAAC;IACvD,kBAAkB,GAA4B,MAAM,CAAC,SAAS;2FAAC;uGAHtD,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,SAAA,EAPpB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,sBAAsB;AACtC,aAAA;AACJ,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBL,yQAOA,EAAA,MAAA,EAAA,CAAA,kiBAAA,CAAA,EAAA,CAAA;;2FDgBa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAblC,SAAS;+BACI,8BAA8B,EAAA,OAAA,EAC/B,EACR,EAAA,SAAA,EAGU;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAA,sBAAwB;AACtC,yBAAA;AACJ,qBAAA,EAAA,QAAA,EAAA,yQAAA,EAAA,MAAA,EAAA,CAAA,kiBAAA,CAAA,EAAA;;;MEfQ,SAAS,GAAG,IAAI,cAAc,CAAU,eAAe;MACvD,WAAW,GAAG,IAAI,cAAc,CAAa,iBAAiB;MAC9D,cAAc,GAAG,IAAI,cAAc,CAAgB,oBAAoB;AAEpF,MAAM,+BAA+B,GAAG,GAAG;MAE9B,OAAO,CAAA;AAYK,IAAA,UAAA;AACA,IAAA,wBAAA;AAZJ,IAAA,MAAM,GAAG,IAAI,OAAO,EAAiB;IAC9C,QAAQ,GAAG,KAAK;AAEjB,IAAA,YAAY;AACnB;;;AAGG;AACI,IAAA,iBAAiB;IAExB,WAAA,CACqB,UAAsB,EACtB,wBAA4C,EAAA;QAD5C,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,wBAAwB,GAAxB,wBAAwB;IAE7C;AAEO,IAAA,KAAK,CAAC,MAAU,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;QACJ;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,MAAK;;;AAGjC,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AAEzB,YAAA,IAAI,CAAC,wBAAwB,EAAE,KAAK,EAAE;AAEtC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC1B,QAAA,CAAC,CAAC;IACN;IAEQ,mBAAmB,GAAA;AACvB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc;QAC1C,IAAI,eAAe,GAAG,KAAK,CAAC,aAAa,CAAc,qBAAqB,CAAC,IAAI,KAAK;AAEtF,QAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC;AAElC,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC3B,IAAI,UAAU,GAAG,KAAK;YACtB,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,+BAA+B,CAAC;AAEjE,YAAA,SAAS,IAAI,GAAA;gBACT,IAAI,UAAU,EAAE;oBACZ;gBACJ;gBAEA,UAAU,GAAG,IAAI;gBACjB,YAAY,CAAC,SAAS,CAAC;AACvB,gBAAA,eAAe,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC;AACrE,gBAAA,OAAO,EAAE;YACb;YAEA,SAAS,eAAe,CAAC,KAAsB,EAAA;AAC3C,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,eAAe,EAAE;AAClC,oBAAA,IAAI,EAAE;gBACV;YACJ;AAEA,YAAA,eAAe,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC;AACtE,QAAA,CAAC,CAAC;IACN;IAEO,WAAW,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;IACrC;AACH;;MC5DY,IAAI,CAAA;AAeO,IAAA,EAAA;IAdH,YAAY,GAAG,SAAS,CAAkB,eAAe;qFAAC;AAExD,IAAA,MAAM,GAAG,MAAM,CAAa,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;IAC3E,UAAU,GAAG,MAAM,CAAyB,UAAU;mFAAC;IACvD,SAAS,GAAG,MAAM,CAAU,KAAK;kFAAC;IAClC,MAAM,GAAG,MAAM,CAA+B,SAAS;+EAAC;IACxD,SAAS,GAAG,MAAM,CAAuB,IAAI;kFAAC;IAEjD,QAAQ,GAAG,MAAM,CAAU,IAAI;iFAAC;AAEvC,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;AAEA,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;AAClB,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YACxC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjC,SAAS,CAAC,MAAK;gBACX,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC;AACzD,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;IACrD;IAEA,kBAAkB,GAAA;QACd,qBAAqB,CAAC,MAAK;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvB,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,QAAQ,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;AAEA;;;AAGG;IACI,aAAa,CAAI,SAAkB,EAAE,QAAkB,EAAA;QAC1D,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC;QAE7D,OAAO,IAAI,CAAC,YAAY,EAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC;IAC7D;uGAhDS,IAAI,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAJ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAI,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAC8C,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvB9E,6CAA2C,y9FDQnC,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAcV,IAAI,EAAA,UAAA,EAAA,CAAA;kBAjBhB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,OAAA,EACX;wBACL,eAAe;qBAClB,EAAA,IAAA,EAGK;AACF,wBAAA,OAAO,EAAE,oBAAoB;AAC7B,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,qBAAqB,EAAE,aAAa;AACpC,wBAAA,sBAAsB,EAAE,aAAa;AACrC,wBAAA,wBAAwB,EAAE,oBAAoB;AAC9C,wBAAA,yBAAyB,EAAE,qBAAqB;AAChD,wBAAA,OAAO,EAAE,aAAa;AACzB,qBAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,i6FAAA,CAAA,EAAA;+IAG0D,eAAe,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME6BjE,WAAW,CAAA;AACH,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAErC,IAAA,IAAI,CACP,SAAkB,EAClB,MAAA,GAAwB,EAAE,EAAA;QAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAC3C,QAAA,MAAM,wBAAwB,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACzD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,EAAE,wBAAwB,CAAC;QAC9F,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,wBAAwB,CAAC;AAC5E,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU;QACzC,MAAM,OAAO,GAAG,IAAI,OAAO,CACvB,UAAU,EACV,wBAAwB,CAC3B;AACD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC;;;AAIpE,QAAA,MAAM,UAAU,GAAG,IAAI,eAAe,CAClC,IAAI,EACJ,UAAU,CAAC,gBAAgB,IAAI,IAAI,EACnC,QAAQ,CACX;QACD,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;AACtD,QAAA,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC;AAExF,QAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,UAAU,CAAC;AACtD,QAAA,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE,UAAU,CAAC;AAC5D,QAAA,OAAO,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,QAAQ;AACxD,QAAA,OAAO,CAAC,YAAY,GAAG,gBAAgB,CAAC,QAAQ;QAChD,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC;AAChE,QAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;AACnC,QAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC;AAE5C,QAAA,OAAO,OAAO;IAClB;AAEO,IAAA,WAAW,CACd,SAAkB,EAClB,MAAA,GAAwB,EAAE,EAAA;QAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5D,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,OAAO;AAC7C,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;AACnC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;AAEnC,QAAA,MAAM,aAAa,GAA0B;AACzC,YAAA,GAAG,MAAM;AACT,YAAA,SAAS,EAAE,IAAI;YACf,SAAS;YACT,SAAS;AACT,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;YAC7C,OAAO;YACP,OAAO;AACP,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;AAClC,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;SACtC;QAED,OAAO,IAAI,CAAC,IAAI,CAAU,SAAS,EAAE,aAAa,CAAC;IACvD;AAEQ,IAAA,WAAW,CAAI,MAAqB,EAAA;QACxC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC;QAEpE,OAAO;YACH,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,KAAK;AAClD,YAAA,SAAS,EAAG,MAAgC,CAAC,SAAS,IAAI,KAAK;AAC/D,YAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,UAAU;AAC3C,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,OAAO;AACtC,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,OAAO;AACtC,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,KAAK;AAC9C,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC;AAC5B,YAAA,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC;YAC5B,cAAc;YACd,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,YAAY;AACrD,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;AAClC,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;YACnC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;AACzC,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;SAC7C;IACL;IAEQ,aAAa,CACjB,MAA0B,EAC1B,cAAkC,EAAA;AAElC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;AAChE,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;aACzC,mBAAmB,CAAC,MAAM;aAC1B,sBAAsB,CAAC,KAAK;aAC5B,iBAAiB,CAAC,IAAI;aACtB,QAAQ,CAAC,IAAI;AACb,aAAA,kBAAkB,CAAC,MAAM,CAAC,cAAc;aACxC,aAAa,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC;aAC3E,qBAAqB,CAAC,qBAAqB,CAAC;AAEjD,QAAA,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;AACpC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;AACrD,YAAA,UAAU,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,CAAC;YAClD,gBAAgB;YAChB,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC;AAChE,SAAA,CAAC;QAEF,OAAO;YACH,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YAC9C,gBAAgB,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,GAAG,gBAAgB;YACjE,MAAM;SACT;IACL;AAEQ,IAAA,sBAAsB,CAC1B,cAAkC,EAClC,UAAsB,EACtB,OAAsB,EAAA;QAEtB,IAAI,CAAC,cAAc,EAAE;YACjB;QACJ;AAEA,QAAA,MAAM,iBAAiB,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAElF,QAAA,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAC/C,QAAA,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC;AAChE,QAAA,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC;IACvE;IAEQ,aAAa,CACjB,MAAsC,EACtC,cAAkC,EAAA;AAElC,QAAA,MAAM,cAAc,GAAG,MAAM,IAAI,cAAc;QAE/C,IAAI,cAAc,EAAE;AAChB,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;AACnC,gBAAA,IAAI,cAAc,CAAC,aAAa,YAAY,WAAW,EAAE;oBACrD,OAAO,cAAc,CAAC,aAAa;gBACvC;gBAEA,OAAO;oBACH,CAAC,EAAE,cAAc,CAAC,OAAO;oBACzB,CAAC,EAAE,cAAc,CAAC,OAAO;iBAC5B;YACL;AAEA,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;gBACnC,OAAO,cAAc,CAAC,aAAa;YACvC;AAEA,YAAA,OAAO,cAAoC;QAC/C;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;QAE1C,OAAO;YACH,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,IAAI,CAAC,IAAI,CAAC;YAClC,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,IAAI,CAAC,IAAI,CAAC;SACtC;IACL;IAEQ,qBAAqB,CACzB,MAAsC,EACtC,cAAkC,EAAA;AAElC,QAAA,MAAM,cAAc,GAAG,MAAM,IAAI,cAAc;QAE/C,IAAI,CAAC,cAAc,EAAE;AACjB,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;AACnC,YAAA,OAAO,cAAc,CAAC,aAAa,YAAY;kBACzC,cAAc,CAAC;kBACf,IAAI;QACd;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;YACnC,OAAO,cAAc,CAAC,aAAa;QACvC;QAEA,OAAO,cAAc,YAAY,WAAW,GAAG,cAAc,GAAG,IAAI;IACxE;IAEQ,8BAA8B,CAClC,WAA+B,EAC/B,MAA0B,EAAA;AAE1B,QAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;YAC/B;QACJ;AAEA,QAAA,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE;QAEvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,4BAA4B,CACtD,MAAM,EACN,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,MAAM,CAAC,EAC5C,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAChE;QAED,IAAI,CAAC,gBAAgB,EAAE;YACnB;QACJ;QAEA,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAAC,CAAC;AAC9D,QAAA,WAAW,CAAC,UAAU,CAAC,cAAc,EAAE;IAC3C;AAEQ,IAAA,4BAA4B,CAAC,MAA0B,EAAA;QAC3D,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACvD;AAEQ,IAAA,6BAA6B,CAAC,MAA0B,EAAA;AAC5D,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC,8BAA8B,CACtC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,EAC1C,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,SAAS,CAAC,EAClD,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,OAAO,CACjB;QACL;AAEA,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;IACnF;AAEQ,IAAA,4BAA4B,CAChC,MAA0B,EAC1B,UAAsB,EACtB,WAAuB,EAAA;QAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CACtC,MAAM,EACN,UAAU,EACV,WAAW;cAET,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS;AAC5C,cAAE,MAAM,CAAC,SAAS;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CACtC,MAAM,EACN,UAAU,EACV,WAAW;cAET,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS;AAC5C,cAAE,MAAM,CAAC,SAAS;AAEtB,QAAA,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE;AAClE,YAAA,OAAO,IAAI;QACf;QAEA,OAAO,IAAI,CAAC,6BAA6B,CAAC;AACtC,YAAA,GAAG,MAAM;YACT,SAAS;YACT,SAAS;AACZ,SAAA,CAAC;IACN;AAEQ,IAAA,mBAAmB,CACvB,MAA0B,EAC1B,UAAsB,EACtB,WAAuB,EAAA;AAEvB,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc;AAEvC,QAAA,QAAQ,MAAM,CAAC,SAAS;AACpB,YAAA,KAAK,QAAQ;gBACT,OAAO,WAAW,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,GAAG,SAAS;AAE1D,YAAA,KAAK,OAAO;gBACR,OAAO,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,SAAS;AAE1D,YAAA,KAAK,OAAO;gBACR,OAAO,UAAU,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,GAAG;uBACrC,UAAU,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,SAAS;AAE1D,YAAA,KAAK,KAAK;gBACN,OAAO,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,GAAG;uBACtC,UAAU,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,GAAG,SAAS;AAE3D,YAAA,KAAK,QAAQ;AACb,YAAA;AACI,gBAAA,OAAO,KAAK;;IAExB;AAEQ,IAAA,mBAAmB,CACvB,MAA0B,EAC1B,UAAsB,EACtB,WAAuB,EAAA;AAEvB,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc;AAEvC,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AAClB,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,KAAK,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG;AAEjF,YAAA,OAAO,OAAO,GAAG,WAAW,CAAC,GAAG,GAAG;AAC5B,mBAAA,OAAO,GAAG,WAAW,CAAC,MAAM,GAAG,SAAS;QACnD;AAEA,QAAA,IAAI,MAAM,CAAC,cAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,KAAK,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG;AAEjF,YAAA,OAAO,OAAO,GAAG,WAAW,CAAC,GAAG,GAAG;AAC5B,mBAAA,OAAO,GAAG,WAAW,CAAC,MAAM,GAAG,SAAS;QACnD;AAEA,QAAA,QAAQ,MAAM,CAAC,SAAS;AACpB,YAAA,KAAK,OAAO;gBACR,OAAO,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,GAAG,SAAS;AAE1D,YAAA,KAAK,OAAO;gBACR,OAAO,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,SAAS;AAE1D,YAAA,KAAK,QAAQ;AACb,YAAA;AACI,gBAAA,OAAO,KAAK;;IAExB;AAEQ,IAAA,uBAAuB,CAC3B,SAAwB,EACxB,SAAwB,EACxB,MAA0B,EAAA;QAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;AACxD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC;QAE3E,OAAO;AACH,YAAA,GAAG,UAAU;AACb,YAAA,GAAG,QAAQ;YACX,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC;AAC3C,YAAA,UAAU,EAAE;AACR,gBAAA,oBAAoB,GAAG,SAAS;AAChC,gBAAA,oBAAoB,GAAG,SAAS;AACnC,aAAA;SACJ;IACL;AAEQ,IAAA,8BAA8B,CAClC,SAA2B,EAC3B,UAAoC,EACpC,OAAe,EACf,OAAe,EAAA;QAEf,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC;AACxD,QAAA,MAAM,SAAS,GAAG,UAAU,KAAK,KAAK,GAAG,OAAO,GAAG,OAAO;QAE1D,OAAO;AACH,YAAA,GAAG,UAAU;AACb,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC;YACnD,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC;AACpD,YAAA,UAAU,EAAE;AACR,gBAAA,oBAAoB,GAAG,SAAS;AAChC,gBAAA,oBAAoB,GAAG,SAAS;gBAChC,2BAA2B;AAC9B,aAAA;SACJ;IACL;AAEQ,IAAA,qBAAqB,CAAC,QAAuB,EAAA;QACjD,QAAQ,QAAQ;AACZ,YAAA,KAAK,KAAK;gBACN,OAAO;AACH,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,KAAK;iBAClB;AAEL,YAAA,KAAK,QAAQ;gBACT,OAAO;AACH,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,QAAQ,EAAE,KAAK;iBAClB;AAEL,YAAA,KAAK,OAAO;gBACR,OAAO;AACH,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,QAAQ,EAAE,OAAO;iBACpB;AAEL,YAAA,KAAK,QAAQ;gBACT,OAAO;AACH,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,QAAQ,EAAE,QAAQ;iBACrB;AAEL,YAAA,KAAK,OAAO;AACZ,YAAA;gBACI,OAAO;AACH,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,QAAQ,EAAE,OAAO;iBACpB;;IAEb;IAEQ,mBAAmB,CACvB,QAAuB,EACvB,cAAuB,EAAA;QAEvB,QAAQ,QAAQ;AACZ,YAAA,KAAK,OAAO;gBACR,OAAO;oBACH,OAAO,EAAE,cAAc,GAAG,QAAQ,GAAG,KAAK;AAC1C,oBAAA,QAAQ,EAAE,QAAQ;iBACrB;AAEL,YAAA,KAAK,QAAQ;gBACT,OAAO;AACH,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,QAAQ,EAAE,QAAQ;iBACrB;AAEL,YAAA,KAAK,OAAO;AACZ,YAAA;gBACI,OAAO;oBACH,OAAO,EAAE,cAAc,GAAG,KAAK,GAAG,QAAQ;AAC1C,oBAAA,QAAQ,EAAE,KAAK;iBAClB;;IAEb;AAEQ,IAAA,oBAAoB,CAAC,QAAuB,EAAA;QAChD,QAAQ,QAAQ;AACZ,YAAA,KAAK,OAAO;AACR,gBAAA,OAAO,KAAK;AAEhB,YAAA,KAAK,KAAK;AACN,gBAAA,OAAO,OAAO;AAElB,YAAA,KAAK,QAAQ;AACT,gBAAA,OAAO,OAAO;AAElB,YAAA,KAAK,OAAO;AACR,gBAAA,OAAO,QAAQ;AAEnB,YAAA,KAAK,QAAQ;AACb,YAAA;AACI,gBAAA,OAAO,QAAQ;;IAE3B;AAEQ,IAAA,mBAAmB,CAAC,QAAmC,EAAA;QAC3D,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,OAAO;IACrD;AAEQ,IAAA,oBAAoB,CAAC,QAAuB,EAAA;QAChD,QAAQ,QAAQ;AACZ,YAAA,KAAK,OAAO;AACR,gBAAA,OAAO,OAAO;AAElB,YAAA,KAAK,OAAO;AACR,gBAAA,OAAO,OAAO;AAElB,YAAA,KAAK,QAAQ;AACb,YAAA;AACI,gBAAA,OAAO,QAAQ;;IAE3B;AAEQ,IAAA,2BAA2B,CAAC,QAAuB,EAAA;QACvD,OAAO,QAAQ,KAAK,OAAO,GAAG,QAAQ,GAAG,KAAK;IAClD;AAEQ,IAAA,mBAAmB,CAAC,MAA0B,EAAA;AAClD,QAAA,IAAI,uBAAuB,IAAI,MAAM,EAAE;AACnC,YAAA,OAAO,MAAM,CAAC,qBAAqB,EAAE;QACzC;QAEA,OAAO;YACH,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,CAAC,EAAE,MAAM,CAAC,CAAC;YACX,GAAG,EAAE,MAAM,CAAC,CAAC;YACb,KAAK,EAAE,MAAM,CAAC,CAAC;YACf,MAAM,EAAE,MAAM,CAAC,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC,CAAC;AACd,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,CAAC;SACZ;IACL;AAEQ,IAAA,iBAAiB,CAAC,gBAAoC,EAAA;AAC1D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE;QAE9C,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,aAAa,EAAE,aAAa,CAAC;IACrE;IAEQ,iBAAiB,GAAA;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AAC1C,QAAA,MAAM,QAAQ,GAAG,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ;AACnF,QAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;AAE/D,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC;IAC/C;IAEQ,UAAU,CAAC,QAAuB,EAAE,MAA0B,EAAA;QAClE,IAAI,MAAM,CAAC,cAAc,IAAI,QAAQ,KAAK,QAAQ,EAAE;AAChD,YAAA,OAAO,CAAC;QACZ;QAEA,OAAO,QAAQ,KAAK;AAChB,cAAE,MAAM,CAAC,OAAO,GAAG,CAAC;AACpB,cAAE,MAAM,CAAC,OAAO;IACxB;IAEQ,iBAAiB,CAAC,QAA0B,EAAE,OAAe,EAAA;AACjE,QAAA,OAAO,QAAQ,KAAK,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO;IACzD;IAEQ,iBAAiB,CACrB,SAAmC,EACnC,OAAe,EAAA;AAEf,QAAA,OAAO,SAAS,KAAK,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO;IAC1D;AAEQ,IAAA,iBAAiB,CAAC,cAAkC,EAAA;QACxD,QAAQ,cAAc;AAClB,YAAA,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAEhD,YAAA,KAAK,OAAO;gBACR,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAEhD,YAAA,KAAK,MAAM;gBACP,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAE/C,YAAA,KAAK,YAAY;AACjB,YAAA;gBACI,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;;IAE7D;AAEQ,IAAA,YAAY,CAAC,MAAwC,EAAA;QACzD,OAAO,OAAO,UAAU,KAAK,WAAW,IAAI,MAAM,YAAY,UAAU;IAC5E;AAEQ,IAAA,YAAY,CAAC,MAA+C,EAAA;QAChE,OAAO,OAAO,MAAM,KAAK;AAClB,eAAA,MAAM,KAAK;AACX,eAAA,eAAe,IAAI;AACnB,eAAA,MAAM,CAAC,aAAa,YAAY,WAAW;IACtD;AAEQ,IAAA,kBAAkB,CAAC,UAAsB,EAAA;AAC7C,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc;AACvC,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe;;;;QAK3C,qBAAqB,CAAC,MAAK;YACvB,UAAU,CAAC,MAAK;gBACZ,KAAK,CAAC,qBAAqB,EAAE;AAC7B,gBAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC;AAC1C,gBAAA,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAClD,CAAC,EAAE,GAAG,CAAC;AACX,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,cAAc,CAClB,SAAkB,EAClB,MAA6B,EAC7B,OAAsB,EAAA;QAEtB,OAAO,QAAQ,CAAC,MAAM,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC,QAAQ;AACvB,YAAA,SAAS,EAAE;;;AAGP,gBAAA,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;gBACvC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;AAC7C,gBAAA,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC1C,gBAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE;AACnD,aAAA;AACJ,SAAA,CAAC;IACN;IAEQ,gBAAgB,CACpB,YAA6B,EAC7B,MAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACpE;QACJ;;;AAIA,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,KAAI;AAC5D,YAAA,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;AAChD,QAAA,CAAC,CAAC;IACN;IAEQ,kBAAkB,CACtB,UAAsB,EACtB,OAAsB,EAAA;QAEtB,UAAU,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;AACzE,QAAA,UAAU,CAAC,aAAa,EAAE,CAAC,IAAI,CAC3B,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,EACzC,IAAI,CAAC,CAAC,CAAC,CACV,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtC;IAEQ,iBAAiB,GAAA;AACrB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;QACjD,OAAO,aAAa,YAAY,WAAW,GAAG,aAAa,GAAG,IAAI;IACtE;AAEQ,IAAA,mBAAmB,CAAC,IAAa,EAAA;AACrC,QAAA,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5E;uGAxmBS,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFR,MAAM,EAAA,CAAA;;2FAET,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;MCxCY,SAAS,CAAA;uGAAT,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,qHCXtB,6BACA,EAAA,MAAA,EAAA,CAAA,otCAAA,CAAA,EAAA,CAAA;;2FDUa,SAAS,EAAA,UAAA,EAAA,CAAA;kBATrB,SAAS;+BACI,gBAAgB,EAAA,OAAA,EACjB,EAAE,EAAA,IAAA,EAGL;AACF,wBAAA,MAAM,EAAE,OAAO;AAClB,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,otCAAA,CAAA,EAAA;;;MEcQ,QAAQ,CAAA;AAwCG,IAAA,EAAA;IAvCb,KAAK,GAAG,KAAK,CAAS,EAAE,6EAC3B,KAAK,EAAE,OAAO,EAAA,CAChB;IAEK,cAAc,GAAG,KAAK,CAAgB,IAAI,sFAC7C,KAAK,EAAE,iBAAiB,EAAA,CAC1B;IAEK,YAAY,GAAG,KAAK,CAAgB,IAAI,oFAC3C,KAAK,EAAE,eAAe,EAAA,CACxB;IAEK,QAAQ,GAAG,KAAK,CAAiB,IAAI,gFACxC,KAAK,EAAE,UAAU,EAAA,CACnB;IAEM,YAAY,GAAG,eAAe,CAAC,WAAW;qFAAC;AAEnD,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC;IAC5E;AAEA,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,KAAK,UAAU,CAAC;IAC7E;AAEA,IAAA,IAAW,eAAe,GAAA;QACtB,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI;IAC1E;IAEO,WAAW,GAAA;AACd,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;YACnB;QACJ;QAEA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAChC;AAEA,IAAA,WAAA,CAAoB,EAA2B,EAAA;QAA3B,IAAA,CAAA,EAAE,GAAF,EAAE;IACtB;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa;IAChC;uGA7CS,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAiBsB,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxCtD,2+BA0BM,uhIDhBE,YAAY,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,cAAc,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,YAAY,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,SAAS,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,QAAQ,oHACR,SAAS,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAQJ,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAhBpB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yCAAyC,EAAA,OAAA,EAC1C;wBACL,YAAY;wBACZ,cAAc;wBACd,YAAY;wBACZ,SAAS;wBACT,QAAQ;wBACR,SAAS;qBACZ,EAAA,IAAA,EAGK;AACF,wBAAA,SAAS,EAAE,eAAe;AAC7B,qBAAA,EAAA,QAAA,EAAA,2+BAAA,EAAA,MAAA,EAAA,CAAA,+9HAAA,CAAA,EAAA;olBAmBsC,WAAW,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEpBzC,eAAe,CAAA;IACjB,KAAK,GAAG,KAAK,CAAS,EAAE,6EAC3B,KAAK,EAAE,OAAO,EAAA,CAChB;;IAGF,iBAAiB,GAAuB,MAAM,CAAC,OAAO;0FAAC;IACvD,kBAAkB,GAA4B,MAAM,CAAC,SAAS;2FAAC;uGAPtD,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAPb;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,eAAe;AAC/B,aAAA;SACJ,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClBL,mPAI8D,yeDKtD,SAAS,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAWJ,eAAe,EAAA,UAAA,EAAA,CAAA;kBAd3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACL;qBACH,EAAA,SAAA,EAGU;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAA,eAAiB;AAC/B,yBAAA;AACJ,qBAAA,EAAA,QAAA,EAAA,mPAAA,EAAA,MAAA,EAAA,CAAA,ibAAA,CAAA,EAAA;;;MEHQ,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,8KCf1B,2BAAyB,EAAA,MAAA,EAAA,CAAA,yCAAA,CAAA,EAAA,CAAA;;2FDeZ,aAAa,EAAA,UAAA,EAAA,CAAA;kBAZzB,SAAS;+BACI,qBAAqB,EAAA,OAAA,EACtB,EAAE,EAAA,IAAA,EAGL;AACF,wBAAA,KAAK,EAAE,gBAAgB;qBAC1B,EAAA,cAAA,EACe;wBACZ;AACH,qBAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,yCAAA,CAAA,EAAA;;;MEFQ,gBAAgB,CAAA;AAClB,IAAA,WAAW,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,CAAA,EAC9C,KAAK,EAAE,cAAc;QACrB,SAAS,EAAE,gBAAgB,EAAA,CAC7B;uGAJO,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,+SCX7B,2BAAyB,EAAA,MAAA,EAAA,CAAA,yPAAA,CAAA,EAAA,CAAA;;2FDWZ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAT5B,SAAS;+BACI,wBAAwB,EAAA,OAAA,EACzB,EAAE,EAAA,IAAA,EAGL;AACF,wBAAA,2BAA2B,EAAE,eAAe;AAC/C,qBAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,yPAAA,CAAA,EAAA;;;MEHQ,gBAAgB,GAAG,IAAI,cAAc,CAAgC,sBAAsB;MAC3F,qBAAqB,GAAG,IAAI,cAAc,CAAqB,2BAA2B;MAC1F,eAAe,GAAG,IAAI,cAAc,CAAiB,qBAAqB;AAEvF,MAAM,mCAAmC,GAAG,GAAG;MASlC,WAAW,CAAA;AAWS,IAAA,QAAA;AAVZ,IAAA,MAAM,GAAG,IAAI,OAAO,EAAsB;AAC1C,IAAA,eAAe,GAAG,IAAI,OAAO,EAAQ;IAC9C,QAAQ,GAAG,KAAK;AAChB,IAAA,UAAU;AACV,IAAA,SAAS;IACT,cAAc,GAAG,CAAC;AAClB,IAAA,WAAW;AAEZ,IAAA,gBAAgB;AAEvB,IAAA,WAAA,CAA6B,QAAgB,EAAA;QAAhB,IAAA,CAAA,QAAQ,GAAR,QAAQ;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ;IAC/B;AAEA;;;;AAIG;AACI,IAAA,aAAa,CAAC,UAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;IAChC;IAEO,UAAU,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YACvD;QACJ;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC;IAC9E;IAEO,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB;QACJ;AAEA,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IACzF;IAEO,WAAW,GAAA;QACd,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE;YAChF;QACJ;QAEA,IAAI,CAAC,UAAU,EAAE;IACrB;AAEO,IAAA,aAAa,CAAC,MAAU,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;QACJ;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;IAChC;AAEO,IAAA,KAAK,CAAC,MAAA,GAAgC,QAAQ,EAAE,MAAU,EAAA;AAC7D,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;QACJ;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AAEpB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;QAC9B;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;;;YAGlB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;YAC/B;QACJ;AAEA,QAAA,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,MAAK;AACjC,YAAA,IAAI,CAAC,UAAW,CAAC,OAAO,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AACnC,QAAA,CAAC,CAAC;IACN;IAEO,QAAQ,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IAC9C;IAEO,cAAc,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;IACrC;IAEQ,mBAAmB,GAAA;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAW,CAAC,cAAc;QAC7C,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,CAAc,yBAAyB,CAAC,IAAI,KAAK;AAE5F,QAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC;QAC3C,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAE1C,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC3B,IAAI,UAAU,GAAG,KAAK;YACtB,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,mCAAmC,CAAC;AAEvE,YAAA,SAAS,IAAI,GAAA;gBACT,IAAI,UAAU,EAAE;oBACZ;gBACJ;gBAEA,UAAU,GAAG,IAAI;gBACjB,YAAY,CAAC,SAAS,CAAC;AACvB,gBAAA,eAAe,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC;AACrE,gBAAA,OAAO,EAAE;YACb;YAEA,SAAS,eAAe,CAAC,KAAsB,EAAA;AAC3C,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,eAAe,EAAE;AAClC,oBAAA,IAAI,EAAE;gBACV;YACJ;AAEA,YAAA,eAAe,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC;AACtE,QAAA,CAAC,CAAC;IACN;AACH;;MC3HY,QAAQ,CAAA;AAkCY,IAAA,EAAA;IAjCZ,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACrD,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IAExC,QAAQ,GAAG,MAAM,CAAU,KAAK;iFAAC;AAErB,IAAA,MAAM,GAAG,MAAM,CAAiB,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AAC1E,IAAA,OAAO,GAAG,MAAM,CAAgC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;IAC3F,WAAW,GAAG,MAAM,CAAqB,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEtG,IAAA,IAAc,IAAI,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,WAAW,GAAG,OAAO,GAAG,QAAQ;IACtE;AAEA,IAAA,IAAc,iBAAiB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,OAAO,YAAY,WAAW;IAC9C;AAEA,IAAA,IAAc,eAAe,GAAA;QACzB,OAAO,IAAI,CAAC,OAA+B;IAC/C;AAEA,IAAA,IAAc,WAAW,GAAA;QACrB,OAAO,IAAI,CAAC,OAAiB;IACjC;AAEA,IAAA,IAAc,eAAe,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI;IACnC;AAEA,IAAA,IAAc,SAAS,GAAA;AACnB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW;IAC5D;AAEA,IAAA,WAAA,CAA6B,EAA2B,EAAA;QAA3B,IAAA,CAAA,EAAE,GAAF,EAAE;QAC3B,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;AACzE,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,6BAA6B,EAAE,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC;AACxF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE;gBACzB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACzD;iBAAO;gBACH,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAC5D;AACJ,QAAA,CAAC,CAAC;IACN;IAIU,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE;IAClC;IAIU,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;IACnC;IAEA,QAAQ,GAAA;QACJ,qBAAqB,CAAC,MAAK;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE;IAClC;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE;IAClC;IAEU,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE;IACrC;IAEU,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC;IACrC;uGA/ES,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBrB,8vCAgCA,EAAA,MAAA,EAAA,CAAA,wkFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnBQ,OAAO,oFACP,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,QAAQ,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,MAAM,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,UAAU,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,YAAY,sIACZ,WAAW,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKN,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAdpB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,OAAA,EACf;wBACL,OAAO;wBACP,gBAAgB;wBAChB,QAAQ;wBACR,MAAM;wBACN,UAAU;wBACV,YAAY;wBACZ,WAAW;AACd,qBAAA,EAAA,QAAA,EAAA,8vCAAA,EAAA,MAAA,EAAA,CAAA,wkFAAA,CAAA,EAAA;;sBAqDA,YAAY;uBAAC,cAAc;;sBAC3B,YAAY;uBAAC,SAAS;;sBAKtB,YAAY;uBAAC,cAAc;;sBAC3B,YAAY;uBAAC,UAAU;;;AEzE5B,MAAM,mBAAmB,GAAG,IAAI;MA8BnB,eAAe,CAAA;AACP,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAE3B,KAAK,GAAqB,EAAE;AACrC,IAAA,MAAM;AAEd;;;;;;;;;;;;;;;AAeG;AACI,IAAA,IAAI,CACP,OAAgC,EAChC,WAAoB,EACpB,SAA4B,EAAE,EAAA;QAE9B,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAE/C,QAAA,IAAI,cAAc,CAAC,aAAa,IAAI,WAAW,EAAE;AAC7C,YAAA,MAAM,IAAI,KAAK,CACX,sGAAsG,CACzG;QACL;QAEA,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC;AACpD,QAAA,MAAM,MAAM,GAAmB;YAC3B,OAAO;YACP,WAAW;AACX,YAAA,MAAM,EAAE,cAAc;YACtB,GAAG;SACN;AAED,QAAA,GAAG,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAE9D,QAAA,IAAI,cAAc,CAAC,QAAQ,EAAE;;;;AAIzB,YAAA,GAAG,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,MAAM,cAAc,CAAC,QAAS,EAAE,CAAC;QAC9D;QAEA,IAAI,cAAc,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,EAAE;AAC9C,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnC;AAAO,aAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B;aAAO;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACrB;AAEA,QAAA,OAAO,GAAqB;IAChC;;AAGO,IAAA,OAAO,CAAc,MAAU,EAAA;QAClC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC5C;;IAGO,UAAU,GAAA;AACb,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC3D,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;IACpC;AAEQ,IAAA,IAAI,CAAC,MAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;QAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;AACpD,QAAA,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC5C,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,IAAI,IAAI,EAAE,QAAQ,CAAC;QAC9F,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QAE9C,MAAM,CAAC,GAAG,CAAC,gBAAgB,GAAG,YAAY,CAAC,QAAQ;IACvD;AAEQ,IAAA,WAAW,CAAC,MAAsB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS;QAC3B;aAAO;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;AAExC,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/B;YAEA;QACJ;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;QAE/B,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACnB;IACJ;AAEQ,IAAA,WAAW,CAAC,MAAsB,EAAA;QACtC,OAAO;YACH,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK;AAC5C,YAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,KAAK;YAC5C,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,mBAAmB;AAChD,YAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,QAAQ;AACzC,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,KAAK;AAC9C,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;AACjC,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;AAClC,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;AACnC,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,OAAO;AACpC,YAAA,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,CAAC;YACtC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;AACzC,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;SAC7C;IACL;AAEQ,IAAA,aAAa,CAAC,MAA8B,EAAA;QAChD,IAAI,UAAU,GAAG,CAAC,oBAAoB,EAAE,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC1E,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE;YAC3B,UAAU,CAAC,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC;QACxD;AAEA,QAAA,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;AACpC,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,UAAU,EAAE,UAAU;YACtB,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE;YAClD,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE;AACvD,SAAA,CAAC;QAEF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;IAC7C;AAEQ,IAAA,cAAc,CAAC,MAAsB,EAAA;QACzC,OAAO,QAAQ,CAAC,MAAM,CAAC;AACnB,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;AAC9B,YAAA,SAAS,EAAE;gBACP,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,EAAE;gBAC9C,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE;gBACvD,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,EAAE;gBAChE,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;AACxD,aAAA;AACJ,SAAA,CAAC;IACN;uGA3JS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFZ,MAAM,EAAA,CAAA;;2FAET,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACpCD;;ACAA;;AAEG;;;;"}