@almoamendev/ngx-md3 0.7.2 → 0.7.3

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/viewport.service.ts","../../../projects/ngx-md3/src/lib/foundations/layout.service.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet-ref.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet-snap.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet-surface.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet-surface.html","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet.html","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/standard-bottom-sheet.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/standard-bottom-sheet.html","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet-outlet.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet.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/layout/layout.ts","../../../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/dialog/dialog-ref.ts","../../../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/toolbar/toolbar.ts","../../../projects/ngx-md3/src/lib/components/toolbar/toolbar.html","../../../projects/ngx-md3/src/lib/components/toolbar/toolbar-item.ts","../../../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.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/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 { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map, startWith } 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/**\n * The state of the window and of the document, for the whole application.\n *\n * This service is a singleton on purpose. A layout region can appear more than once — a page\n * scaffold, and a contained layout inside a full screen dialog — and each one keeps its own\n * scroll and inset state in its own {@link LayoutService}. The window size, the breakpoints,\n * the reading direction and the color scheme belong to the document, so they live here and\n * every layout reads the same values.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ViewportService {\n private readonly document = inject(DOCUMENT);\n private readonly breakpointObserver = inject(BreakpointObserver);\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 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\n public setDirection(direction: 'ltr' | 'rtl'): void {\n this.document.documentElement.dir = direction;\n this.direction.set(direction);\n }\n}\n","import { effect, inject, Injectable, signal, computed, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { Md3NavigationMode, ViewportService } from './viewport.service';\n\nexport type FloatingBarSide = 'blockStart' | 'blockEnd';\n\nexport interface FloatingInset {\n blockStart: number;\n blockEnd: number;\n}\n\nexport type { Md3NavigationMode };\n\n/**\n * The state of one layout container: what its main pane scrolls, and what its floating bars\n * cover.\n *\n * The service is provided at the root, and the page scaffold uses that root instance. A\n * contained layout — `md3-layout`, the one a full screen dialog holds — provides its own\n * instance instead, so a toolbar inside it reads the scroll and the insets of that layout and\n * never of the page behind it.\n *\n * The window size, the breakpoints, the reading direction and the color scheme belong to the\n * document, not to a container. They live in {@link ViewportService}, and every instance of\n * this service exposes the same signals, so an instance stays a complete view of the layout.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LayoutService {\n private readonly viewportService = inject(ViewportService);\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 mainPaneSub?: Subscription;\n private mainPaneEl?: HTMLElement;\n private panesContainerResizeObserver?: ResizeObserver;\n private panesContainerResizeListener?: () => void;\n\n /** Floating bars currently registered, keyed by the measured element. */\n private readonly floatingBars = new Map<HTMLElement, { side: FloatingBarSide; observer: ResizeObserver; }>();\n\n /** How far the main pane must move before the scroll direction flips. Stops jitter. */\n private static readonly scrollDirectionThreshold = 64;\n private scrollPosition = 0;\n\n readonly mainScrollTop = signal<number>(0);\n readonly mainIsScrolled = computed<boolean>(() => this.mainScrollTop() > 0);\n\n /**\n * True while the main pane moves down, false while it moves up. A small threshold keeps\n * a jitter from flipping the value. Components that react to scrolling — the app bar and\n * the toolbar — read this, so they can never disagree.\n */\n readonly isScrollingDown = signal<boolean>(false);\n\n /**\n * Distance, in pixels, between the bottom of the container and the bottom edge of\n * the .md3-panes-container — i.e. whatever the bottom bar currently reserves, or 0 when\n * there is none. Overlay-based components anchored to the bottom (like Snackbar) read\n * this so they never render lower than the panes container.\n */\n readonly bottomInset = signal<number>(0);\n\n /**\n * Space a floating bar covers but does not reserve, per logical block side.\n *\n * A floating toolbar in a bar region leaves the layout flow, so its grid track collapses\n * and the content flows under it. This signal reports what it covers, so the layout can\n * pad the main pane and overlays can stay clear of it.\n *\n * A floating toolbar in a *rail* region stays in the flow and reserves its own space, so\n * it never appears here.\n */\n readonly floatingInset = signal<FloatingInset>({ blockStart: 0, blockEnd: 0 });\n\n /**\n * The distance from the bottom that an anchored overlay must keep clear. It covers both\n * the reserved bottom bar and any floating bottom bar over it.\n */\n readonly bottomSafeInset = computed<number>(() => this.bottomInset() + this.floatingInset().blockEnd);\n\n // The state of the window and of the document. It is shared by every layout, so these are\n // the same signals on every instance of this service.\n public readonly viewport = this.viewportService.viewport;\n public readonly widthClass = this.viewportService.widthClass;\n public readonly heightClass = this.viewportService.heightClass;\n public readonly direction = this.viewportService.direction;\n public readonly isCompact = this.viewportService.isCompact;\n public readonly isMedium = this.viewportService.isMedium;\n public readonly isExpanded = this.viewportService.isExpanded;\n public readonly isLarge = this.viewportService.isLarge;\n public readonly isExtraLarge = this.viewportService.isExtraLarge;\n public readonly isPortrait = this.viewportService.isPortrait;\n public readonly isLandscape = this.viewportService.isLandscape;\n public readonly preferredNavigationMode = this.viewportService.preferredNavigationMode;\n public darkMode = this.viewportService.darkMode;\n\n constructor() {\n // Keep the scroll direction in step with the position. Anything that writes\n // mainScrollTop drives it, so the app bar and the toolbar always agree.\n effect(() => {\n this.updateScrollDirection(this.mainScrollTop());\n });\n\n // Reset the main pane to the top after every completed navigation — otherwise a\n // scrolled-down list page leaves the next page's content scrolled down too, since the\n // pane itself never 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.viewportService.setDirection(direction);\n }\n\n private scrollMainPaneToTop(): void {\n this.mainPaneEl?.scrollTo({ top: 0 });\n this.mainScrollTop.set(0);\n this.resetScrollDirection();\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 this.resetScrollDirection();\n }\n\n private resetScrollDirection(): void {\n this.scrollPosition = 0;\n this.isScrollingDown.set(false);\n }\n\n private updateScrollDirection(scrollTop: number): void {\n if (scrollTop === this.scrollPosition) {\n return;\n }\n\n const offset = scrollTop - this.scrollPosition;\n\n if (Math.abs(offset) <= LayoutService.scrollDirectionThreshold) {\n return;\n }\n\n this.isScrollingDown.set(offset > 0);\n this.scrollPosition = scrollTop;\n }\n\n public registerPanesContainer(element: HTMLElement): void {\n this.unregisterPanesContainer();\n\n const update = () => {\n const rect = element.getBoundingClientRect();\n const bottom = element.ownerDocument.defaultView?.innerHeight ?? 0;\n this.bottomInset.set(Math.max(0, Math.round(bottom - 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 /**\n * Register a floating bar so the layout and the overlays know what it covers.\n *\n * Call this for a floating toolbar in a *bar* region only. A rail region keeps the toolbar\n * in the layout flow, so it reserves its space and needs no inset.\n */\n public registerFloatingBar(element: HTMLElement, side: FloatingBarSide): void {\n this.unregisterFloatingBar(element);\n\n const observer = new ResizeObserver(() => this.measureFloatingBars());\n observer.observe(element);\n\n this.floatingBars.set(element, { side, observer });\n this.measureFloatingBars();\n }\n\n public unregisterFloatingBar(element: HTMLElement): void {\n const entry = this.floatingBars.get(element);\n\n if (!entry) {\n return;\n }\n\n entry.observer.disconnect();\n this.floatingBars.delete(element);\n this.measureFloatingBars();\n }\n\n private measureFloatingBars(): void {\n let blockStart = 0;\n let blockEnd = 0;\n\n for (const [element, entry] of this.floatingBars) {\n const size = this.measureBlockSize(element);\n\n if (entry.side === 'blockStart') {\n blockStart = Math.max(blockStart, size);\n } else {\n blockEnd = Math.max(blockEnd, size);\n }\n }\n\n // Read the current value untracked. A component registers its floating bar from an\n // effect, so a tracked read would make that effect depend on the signal that the same\n // run writes. The cleanup measures an empty map and writes 0, the body measures the bar\n // and writes its size, and the effect dirties itself again on every run. That loop never\n // settles, and change detection never finishes.\n const current = untracked(this.floatingInset);\n\n // Only write on a real change. The main pane padding reads this value, and padding\n // changes the panes container size, which fires the observer again.\n if (current.blockStart === blockStart && current.blockEnd === blockEnd) {\n return;\n }\n\n this.floatingInset.set({ blockStart, blockEnd });\n }\n\n /**\n * `offsetHeight` ignores transforms. So a toolbar that scrolling has hidden or collapsed\n * still reports its expanded size, and the content padding never moves while the user\n * scrolls.\n */\n private measureBlockSize(element: HTMLElement): number {\n if (typeof getComputedStyle === 'undefined') {\n return element.offsetHeight || 0;\n }\n\n const styles = getComputedStyle(element);\n const start = Number.parseFloat(styles.marginBlockStart) || 0;\n const end = Number.parseFloat(styles.marginBlockEnd) || 0;\n\n return Math.max(0, Math.round(element.offsetHeight + start + end));\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 { DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentRef, InjectionToken, signal, Signal, Type } from '@angular/core';\nimport { filter, Observable, Subject, take, takeUntil } from 'rxjs';\nimport {\n BottomSheetConfig,\n BottomSheetState,\n BottomSheetSurfaceHost,\n StandardBottomSheetHost,\n} from '../../../interfaces/bottom-sheet-config.interface';\n\nexport const BOTTOM_SHEET_DATA = new InjectionToken<unknown>('MD3_BOTTOM_SHEET_DATA');\nexport const BOTTOM_SHEET_CONFIG = new InjectionToken<BottomSheetConfig>('MD3_BOTTOM_SHEET_CONFIG');\nexport const BOTTOM_SHEET_COMPONENT = new InjectionToken<Type<unknown>>('MD3_BOTTOM_SHEET_COMPONENT');\n\n/** Long enough to outlast the surface transition, which the transitionend listener usually beats. */\nconst BOTTOM_SHEET_EXIT_ANIMATION_FALLBACK_MS = 600;\nconst BOTTOM_SHEET_DRAGGING_CLASS = 'md3-bottom-sheet-dragging';\n\n/** A modal sheet has one height, so it reports the same state a standard sheet does when open. */\nconst ALWAYS_EXPANDED: Signal<BottomSheetState> = signal<BottomSheetState>('expanded').asReadonly();\n\n/**\n * What both kinds of bottom sheet have in common: closing once, animating out before the shell\n * goes away, and reporting the result. The two shells differ in what they are hosted by — a CDK\n * overlay or a scaffold outlet — so each subclass owns its own exit and teardown.\n *\n * This class stays the DI token, so a component written for one kind of sheet can be opened as\n * the other without changing how it injects its reference.\n */\nexport abstract class BottomSheetRef<T = unknown, R = unknown> {\n protected readonly closed = new Subject<R | undefined>();\n protected closeStarted = false;\n private closeSettled = false;\n\n /** Surface hosting the sheet. Filled in by BottomSheetService once the shell is created. */\n public sheetInstance?: BottomSheetSurfaceHost;\n /** Filled by BottomSheetService after the sheet component is attached. */\n public componentInstance?: T;\n\n /** Whether the sheet started closing. */\n public get isClosing(): boolean {\n return this.closeStarted;\n }\n\n /** Height the sheet is resting at. A modal sheet is only ever fully open. */\n public get state(): Signal<BottomSheetState> {\n return ALWAYS_EXPANDED;\n }\n\n /** Closes the sheet. The promise resolves once the exit animation is done. */\n public close(result?: R): Promise<void> {\n if (this.closeStarted) {\n return Promise.resolve();\n }\n\n this.closeStarted = true;\n\n return this.startCloseAnimation().then(() => this.finishClose(result));\n }\n\n public afterClosed(): Observable<R | undefined> {\n return this.closed.asObservable();\n }\n\n /**\n * Wires the shell to this reference. Called by BottomSheetService, since the shell is\n * created before this reference exists and cannot reach it through DI.\n */\n public attachContainer(container: BottomSheetSurfaceHost): void {\n this.sheetInstance = container;\n\n container.dismissed.pipe(take(1)).subscribe(() => this.close());\n }\n\n /** Moves a standard sheet to its expanded height. Modal sheets have only one height. */\n public expand(): void {\n }\n\n /** Moves a standard sheet back to its collapsed height. */\n public collapse(): void {\n }\n\n /** Switches a standard sheet between its two heights. */\n public toggle(): void {\n }\n\n public setCollapsedHeight(height: number | string): void {\n }\n\n public setExpandedHeight(height: number | string): void {\n }\n\n public setDismissible(value: boolean): void {\n }\n\n protected abstract startCloseAnimation(): Promise<void>;\n\n protected abstract finishClose(result?: R): void;\n\n /** Resolves when the surface finished animating, with a timeout as a safety net. */\n protected waitForSurfaceAnimation(fallback?: HTMLElement | null): Promise<void> {\n const surface = this.sheetInstance?.surfaceElement ?? fallback ?? null;\n\n if (!surface) {\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n let isResolved = false;\n const timeoutId = setTimeout(done, BOTTOM_SHEET_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 sheet is gone. */\n protected settle(result?: R): void {\n if (this.closeSettled) {\n return;\n }\n\n this.closeStarted = true;\n this.closeSettled = true;\n this.closed.next(result);\n this.closed.complete();\n }\n}\n\n/**\n * A modal bottom sheet is a single overlay, not a stack like dialogs can be, so this is a\n * smaller version of DialogRef: no hide/show, no full screen variant, closing is always the\n * only way out.\n */\nexport class ModalBottomSheetRef<T = unknown, R = unknown> extends BottomSheetRef<T, R> {\n constructor(\n private readonly cdkRef: CdkDialogRef<R, T>,\n ) {\n super();\n\n this.cdkRef.closed.pipe(take(1)).subscribe((result) => this.settle(result));\n this.connectCloseEvents();\n }\n\n /** Overlay hosting the sheet, useful to reach the panel and the scrim. */\n public get overlayRef(): OverlayRef {\n return this.cdkRef.overlayRef;\n }\n\n public override attachContainer(container: BottomSheetSurfaceHost): void {\n super.attachContainer(container);\n\n container.dragProgress.pipe(\n takeUntil(this.closed),\n ).subscribe((progress) => this.trackDragProgress(progress));\n }\n\n protected startCloseAnimation(): Promise<void> {\n const overlayRef = this.cdkRef.overlayRef;\n\n // Closing during a drag, from the Escape key for instance, leaves the scrim held\n // where the drag left it, so it is handed back to CSS before the exit animation.\n overlayRef.backdropElement?.classList.remove(BOTTOM_SHEET_DRAGGING_CLASS);\n overlayRef.backdropElement?.style.removeProperty('--md3-drag-remaining');\n\n overlayRef.overlayElement.classList.add('md3-bottom-sheet-closing');\n overlayRef.backdropElement?.classList.add('md3-bottom-sheet-closing');\n this.sheetInstance?.setActive(false);\n\n return this.waitForSurfaceAnimation(overlayRef.overlayElement);\n }\n\n protected finishClose(result?: R): void {\n this.cdkRef.close(result);\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 sheet can animate out.\n this.cdkRef.backdropClick.pipe(take(1)).subscribe(() => this.close());\n\n this.cdkRef.keydownEvents.pipe(\n filter((event) => event.key === 'Escape' && !hasModifierKey(event)),\n take(1),\n ).subscribe((event) => {\n event.preventDefault();\n this.close();\n });\n }\n\n /** Fades the scrim along with the sheet being dragged, and hands it back to CSS on release. */\n private trackDragProgress(progress: number): void {\n const backdrop = this.cdkRef.overlayRef.backdropElement;\n\n if (!backdrop || this.closeStarted) {\n return;\n }\n\n if (progress <= 0) {\n backdrop.classList.remove(BOTTOM_SHEET_DRAGGING_CLASS);\n backdrop.style.removeProperty('--md3-drag-remaining');\n\n return;\n }\n\n backdrop.classList.add(BOTTOM_SHEET_DRAGGING_CLASS);\n backdrop.style.setProperty('--md3-drag-remaining', `${1 - progress}`);\n }\n}\n\n/**\n * A standard bottom sheet lives in a scaffold outlet rather than an overlay, so there is no\n * scrim to fade and nothing to dispose but the component itself. In exchange it can be moved\n * between its two heights while it is open.\n */\nexport class StandardBottomSheetRef<T = unknown, R = unknown> extends BottomSheetRef<T, R> {\n private sheetComponentRef?: ComponentRef<unknown>;\n private host?: StandardBottomSheetHost;\n\n constructor(\n private readonly onClosed: () => void,\n ) {\n super();\n }\n\n public override get state(): Signal<BottomSheetState> {\n return this.host?.state ?? ALWAYS_EXPANDED;\n }\n\n /** Called by BottomSheetService once the shell has been created in the outlet. */\n public attachSheet(componentRef: ComponentRef<unknown>, host: StandardBottomSheetHost): void {\n this.sheetComponentRef = componentRef;\n this.host = host;\n\n this.attachContainer(host);\n }\n\n public override expand(): void {\n this.host?.expand();\n }\n\n public override collapse(): void {\n this.host?.collapse();\n }\n\n public override toggle(): void {\n this.host?.toggle();\n }\n\n public override setCollapsedHeight(height: number | string): void {\n this.host?.setCollapsedHeight(height);\n }\n\n public override setExpandedHeight(height: number | string): void {\n this.host?.setExpandedHeight(height);\n }\n\n public override setDismissible(value: boolean): void {\n this.host?.setDismissible(value);\n }\n\n /**\n * Tears the sheet down without an exit animation, for when the outlet holding it is going\n * away and there is nothing left to animate in.\n */\n public dispose(result?: R): void {\n if (this.closeStarted && !this.sheetComponentRef) {\n return;\n }\n\n this.closeStarted = true;\n this.finishClose(result);\n }\n\n protected startCloseAnimation(): Promise<void> {\n this.sheetInstance?.setActive(false);\n\n return this.waitForSurfaceAnimation();\n }\n\n protected finishClose(result?: R): void {\n this.sheetComponentRef?.destroy();\n this.sheetComponentRef = undefined;\n this.host = undefined;\n this.onClosed();\n this.settle(result);\n }\n}\n","/** Movement shorter than this is still a tap rather than a drag. */\nexport const DRAG_START_THRESHOLD_PX = 4;\n\n/** Part of the segment being crossed that a drag has to cover to commit to the next snap point. */\nexport const SETTLE_DISTANCE_RATIO = 0.4;\n\n/** Speed, in pixels per millisecond, that carries the sheet to the next snap point on its own. */\nexport const FLING_VELOCITY = 0.5;\n\n/** A release this long after the last move is a stop, so the speed before it no longer counts. */\nexport const VELOCITY_TIMEOUT_MS = 100;\n\nexport interface SnapSettleInput {\n /**\n * Snap offsets in pixels below the fully expanded position, ascending: expanded first,\n * then collapsed, then dismissed when dragging that far is allowed.\n */\n points: number[];\n\n /** Offset the drag started from. */\n origin: number;\n\n /** Offset the drag ended at. */\n offset: number;\n\n /** Signed speed of the last move in pixels per millisecond, positive downwards. */\n velocity: number;\n\n /** Time between the last move and the release, so a finger that stopped is not a fling. */\n idleTime: number;\n}\n\n/**\n * Picks the snap point a released drag settles on, as an index into `points`.\n *\n * A drag only ever moves one point at a time: it commits to the neighbour in the direction of\n * travel once it has covered enough of the gap, or immediately when it was thrown hard enough,\n * and otherwise falls back to where it started. A modal sheet is the two-point case of this —\n * resting and dismissed — which is why generalizing the gesture leaves it behaving the same.\n */\nexport function settleTarget(input: SnapSettleInput): number {\n const { points, origin, offset, velocity, idleTime } = input;\n\n if (points.length === 0) {\n return 0;\n }\n\n const originIndex = nearestPointIndex(points, origin);\n\n if (idleTime < VELOCITY_TIMEOUT_MS && Math.abs(velocity) > FLING_VELOCITY) {\n return clampIndex(originIndex + (velocity > 0 ? 1 : -1), points.length);\n }\n\n const direction = Math.sign(offset - points[originIndex]);\n\n if (direction === 0) {\n return originIndex;\n }\n\n const targetIndex = clampIndex(originIndex + direction, points.length);\n const segment = Math.abs(points[targetIndex] - points[originIndex]);\n const travelled = Math.abs(offset - points[originIndex]);\n\n return segment > 0 && travelled >= segment * SETTLE_DISTANCE_RATIO ? targetIndex : originIndex;\n}\n\n/** Snap point the given offset sits closest to. Ties go to the lower index. */\nexport function nearestPointIndex(points: number[], offset: number): number {\n let nearest = 0;\n\n for (let index = 1; index < points.length; index++) {\n if (Math.abs(points[index] - offset) < Math.abs(points[nearest] - offset)) {\n nearest = index;\n }\n }\n\n return nearest;\n}\n\nfunction clampIndex(index: number, length: number): number {\n return Math.min(Math.max(index, 0), length - 1);\n}\n","import { Component, computed, effect, ElementRef, inject, input, NgZone, signal, viewChild } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport {\n BottomSheetState,\n BottomSheetSurfaceHost,\n BottomSheetType,\n} from '../../../interfaces/bottom-sheet-config.interface';\nimport { DRAG_START_THRESHOLD_PX, settleTarget } from './bottom-sheet-snap';\n\n/**\n * The MD3 bottom sheet surface: the rounded panel, its drag handle and the gesture that moves\n * it. Both shells wrap this — the modal one inside a CDK dialog container, the standard one\n * inside a scaffold outlet — and project their own portal outlet into it, which is what lets\n * the CDK keep the outlet in its own template while the markup lives here once.\n *\n * The surface reports gestures through observables instead of acting on them, because it is\n * created before the sheet's reference exists and cannot reach it through DI.\n */\n@Component({\n selector: 'md3-bottom-sheet-surface',\n imports: [],\n templateUrl: './bottom-sheet-surface.html',\n styleUrl: './bottom-sheet-surface.scss',\n host: {\n '[class.md3-mode-standard]': 'mode() === \"standard\"',\n '[class.md3-mode-modal]': 'mode() === \"modal\"',\n '[class.md3-hide-handle]': '!showHandle()',\n '[class.md3-draggable]': 'allowGestures()',\n '[class.md3-dragging]': 'isDragging()',\n '[class.md3-expanded]': 'state() === \"expanded\"',\n },\n})\nexport class BottomSheetSurface implements BottomSheetSurfaceHost {\n private readonly surface = viewChild<ElementRef<HTMLElement>>('surface');\n private readonly zone = inject(NgZone);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private readonly dismissedSheet = new Subject<void>();\n private readonly draggedSheet = new Subject<number>();\n private readonly settledSheet = new Subject<BottomSheetState>();\n\n public readonly mode = input<BottomSheetType>('modal');\n public readonly showHandle = input<boolean>(true);\n public readonly allowGestures = input<boolean>(true);\n public readonly dismissible = input<boolean>(false);\n public readonly initialState = input<BottomSheetState>('collapsed');\n public readonly scheme = input<'inherit' | 'dark' | 'light'>('inherit');\n public readonly direction = input<null | 'ltr' | 'rtl'>(null);\n public readonly handleLabel = input<string>('Resize sheet');\n public readonly controlsId = input<string>('');\n\n protected readonly isActive = signal<boolean>(false);\n protected readonly isDragging = signal<boolean>(false);\n\n /** How far below the fully expanded position the sheet currently sits, in pixels. */\n private readonly dragOffset = signal<number>(0);\n\n /**\n * Snap offsets in pixels, ascending: expanded, then collapsed for a standard sheet, then\n * dismissed where dragging that far is allowed. Measured rather than derived from the\n * configured CSS lengths, so `em`, `dvh` and the rest resolve themselves.\n */\n private readonly snapPoints = signal<number[]>([0]);\n private readonly settledIndex = signal<number>(0);\n\n public readonly state = computed<BottomSheetState>(() => {\n return this.settledIndex() === 0 ? 'expanded' : 'collapsed';\n });\n\n protected readonly isHandleInteractive = computed<boolean>(() => {\n return this.mode() === 'standard' && this.allowGestures() && this.showHandle();\n });\n\n /**\n * Only set when a drag has to be seen out past where the stylesheet would leave the sheet,\n * so the exit carries on the way the drag was going instead of doubling back.\n */\n private readonly exitTransform = signal<string | null>(null);\n\n /**\n * Left to the stylesheet unless the component has a position of its own to impose — a drag\n * in progress, or the resting offset of a collapsed standard sheet. The closed and fully\n * open positions stay in CSS so they apply as soon as the element is inserted, which is\n * what the enter transition needs to have somewhere to run from.\n */\n protected readonly surfaceTransform = computed<string | null>(() => {\n if (!this.isActive()) {\n return this.exitTransform();\n }\n\n const offset = this.dragOffset();\n\n return offset > 0 ? `translateY(${offset}px)` : null;\n });\n\n /** Pointer currently dragging the sheet, if there is one. */\n private pointerId?: number;\n /** Scrollable the drag started over, which owns the gesture while it has room to scroll. */\n private scroller: HTMLElement | null = null;\n private startY = 0;\n private lastY = 0;\n private lastTimestamp = 0;\n private velocity = 0;\n private originOffset = 0;\n private isPastThreshold = false;\n /** Set once the sheet is on its way out, so a late resize cannot pull it back into view. */\n private isExiting = false;\n\n public readonly dismissed: Observable<void> = this.dismissedSheet.asObservable();\n public readonly dragProgress: Observable<number> = this.draggedSheet.asObservable();\n public readonly stateChanges: Observable<BottomSheetState> = this.settledSheet.asObservable();\n\n constructor() {\n effect(() => {\n if (this.mode() === 'standard') {\n this.exitTransform.set('translateY(100%)');\n }\n });\n\n // Heights are CSS lengths, so anything that resizes the surface — a viewport change, a\n // new expanded height — moves the snap points with it and the sheet has to settle again.\n effect((onCleanup) => {\n const surface = this.el.nativeElement;\n const observer = new ResizeObserver(() => this.remeasure());\n\n observer.observe(surface);\n\n onCleanup(() => observer.disconnect());\n });\n }\n\n public get surfaceElement(): HTMLElement | null {\n return this.surface()?.nativeElement ?? null;\n }\n\n public startEnterAnimation(): void {\n requestAnimationFrame(() => {\n this.measure();\n\n // A modal sheet has one resting height, so only a standard sheet can open collapsed.\n const opensCollapsed = this.mode() === 'standard' && this.initialState() === 'collapsed';\n\n this.snapTo(opensCollapsed ? this.collapsedIndex() : 0, false);\n this.isActive.set(true);\n });\n }\n\n public setActive(value: boolean): void {\n if (!value) {\n this.isExiting = true;\n }\n\n this.isActive.set(value);\n }\n\n public expand(): void {\n this.snapTo(0);\n }\n\n public collapse(): void {\n this.snapTo(this.collapsedIndex());\n }\n\n public toggle(): void {\n if (this.state() === 'expanded') {\n this.collapse();\n } else {\n this.expand();\n }\n }\n\n public destroy(): void {\n this.releasePointer();\n }\n\n protected onHandleKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.expand();\n }\n\n // Collapsing is as far as the keyboard goes, even when a drag could dismiss the sheet:\n // there is no undo for a dismissal reached by arrow key.\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.collapse();\n }\n }\n\n protected onPointerDown(event: PointerEvent): void {\n // Only the first pointer down drags: a second finger, or a mouse button other than\n // the primary one, leaves context menus and multi-touch alone.\n if (!this.allowGestures() || this.pointerId !== undefined || !event.isPrimary) {\n return;\n }\n\n if (event.pointerType === 'mouse' && event.button !== 0) {\n return;\n }\n\n this.measure();\n\n this.pointerId = event.pointerId;\n this.startY = this.lastY = event.clientY;\n this.lastTimestamp = event.timeStamp;\n this.velocity = 0;\n this.originOffset = this.dragOffset();\n this.isPastThreshold = false;\n this.scroller = this.findScroller(event.target);\n\n // Tracking a drag at pointer rate has nothing to tell the rest of the application,\n // and the signals it writes schedule their own change detection.\n this.zone.runOutsideAngular(() => {\n this.surfaceElement?.addEventListener('touchmove', this.onTouchMove, { passive: false });\n window.addEventListener('pointermove', this.onPointerMove);\n window.addEventListener('pointerup', this.onPointerUp);\n window.addEventListener('pointercancel', this.onPointerCancel);\n });\n }\n\n private readonly onPointerMove = (event: PointerEvent): void => {\n if (event.pointerId !== this.pointerId) {\n return;\n }\n\n if (!this.isPastThreshold && !this.tryStartDrag(event)) {\n return;\n }\n\n const elapsed = event.timeStamp - this.lastTimestamp;\n\n if (elapsed > 0) {\n this.velocity = (event.clientY - this.lastY) / elapsed;\n this.lastY = event.clientY;\n this.lastTimestamp = event.timeStamp;\n }\n\n this.setDragOffset(this.clampToRange(this.originOffset + event.clientY - this.startY));\n };\n\n private readonly onPointerUp = (event: PointerEvent): void => {\n if (event.pointerId !== this.pointerId) {\n return;\n }\n\n if (!this.isPastThreshold) {\n this.releasePointer();\n\n return;\n }\n\n const points = this.snapPoints();\n const target = settleTarget({\n points,\n origin: this.originOffset,\n offset: this.dragOffset(),\n velocity: this.velocity,\n idleTime: event.timeStamp - this.lastTimestamp,\n });\n\n this.releasePointer();\n\n if (target === this.dismissIndex()) {\n this.slideOut(points[target]);\n this.zone.run(() => this.dismissedSheet.next());\n } else {\n this.snapTo(target);\n }\n\n this.suppressClickAfterDrag();\n };\n\n private readonly onPointerCancel = (event: PointerEvent): void => {\n if (event.pointerId === this.pointerId) {\n const wasDragging = this.isPastThreshold;\n\n this.releasePointer();\n\n if (wasDragging) {\n this.snapTo(this.settledIndex());\n }\n }\n };\n\n /** Keeps the browser from scrolling or overscrolling underneath an ongoing drag. */\n private readonly onTouchMove = (event: TouchEvent): void => {\n if (this.isPastThreshold && event.cancelable) {\n event.preventDefault();\n }\n };\n\n /**\n * Decides who owns the gesture on the first move that leaves the tap threshold. Downward\n * moves over content that still has somewhere to scroll belong to the content, and so do\n * upward moves once the sheet is already as far up as it goes — in both cases the sheet\n * lets go of the gesture for good.\n */\n private tryStartDrag(event: PointerEvent): boolean {\n const distance = event.clientY - this.startY;\n\n if (Math.abs(distance) < DRAG_START_THRESHOLD_PX) {\n return false;\n }\n\n const isDownward = distance > 0;\n const isBlocked = isDownward\n ? (this.scroller?.scrollTop ?? 0) > 0\n : this.dragOffset() <= this.snapPoints()[0];\n\n if (isBlocked) {\n this.releasePointer();\n\n return false;\n }\n\n // Starting from where the threshold was crossed keeps the sheet from jumping under\n // the pointer on the first frame of the drag.\n this.startY = this.lastY = event.clientY;\n this.isPastThreshold = true;\n this.isDragging.set(true);\n\n return true;\n }\n\n /** Re-reads the geometry the snap points are derived from. */\n private measure(): void {\n const expanded = this.el.nativeElement.offsetHeight;\n\n if (expanded <= 0) {\n return;\n }\n\n if (this.mode() === 'modal') {\n this.snapPoints.set([0, expanded]);\n\n return;\n }\n\n // The peek strip a standard sheet reserves is the height of the element it was placed\n // in — the standard shell's host, which the scaffold row sizes to the collapsed height.\n // Measuring beats resolving the configured CSS length by hand.\n const collapsed = this.el.nativeElement.parentElement?.getBoundingClientRect().height ?? expanded;\n const points = [0, Math.max(0, expanded - collapsed)];\n\n if (this.dismissible()) {\n points.push(expanded);\n }\n\n this.snapPoints.set(points);\n }\n\n /** Settles the sheet again after its geometry moved underneath it. */\n public remeasure(): void {\n if (this.pointerId !== undefined || this.isExiting) {\n return;\n }\n\n this.measure();\n\n const points = this.snapPoints();\n const index = Math.min(this.settledIndex(), points.length - 1);\n\n this.settledIndex.set(index);\n this.dragOffset.set(points[index]);\n }\n\n private snapTo(index: number, notify: boolean = true): void {\n const points = this.snapPoints();\n const target = Math.min(Math.max(index, 0), points.length - 1);\n const previous = this.state();\n\n this.settledIndex.set(target);\n this.setDragOffset(points[target]);\n\n if (notify && this.state() !== previous) {\n this.zone.run(() => this.settledSheet.next(this.state()));\n }\n }\n\n /**\n * Sees the drag out of the viewport rather than back to a snap point, so a dismissed sheet\n * keeps going the way it was dragged. The fade comes from the exit animation the sheet's\n * reference starts right after, which finds the surface already on its way out.\n */\n private slideOut(offset: number): void {\n this.isExiting = true;\n this.exitTransform.set(`translateY(${offset}px)`);\n this.setDragOffset(offset);\n }\n\n private setDragOffset(offset: number): void {\n const dismissOffset = this.snapPoints()[this.dismissIndex() ?? -1];\n\n this.dragOffset.set(offset);\n this.draggedSheet.next(dismissOffset > 0 ? Math.min(1, offset / dismissOffset) : 0);\n }\n\n /** Index a drag has to reach for the sheet to be dismissed, when it can be at all. */\n private dismissIndex(): number | undefined {\n if (this.mode() === 'modal') {\n return 1;\n }\n\n return this.dismissible() ? this.snapPoints().length - 1 : undefined;\n }\n\n private collapsedIndex(): number {\n return Math.min(1, this.snapPoints().length - 1);\n }\n\n private clampToRange(offset: number): number {\n const points = this.snapPoints();\n\n return Math.min(Math.max(offset, points[0]), points[points.length - 1]);\n }\n\n private releasePointer(): void {\n if (this.pointerId === undefined) {\n return;\n }\n\n this.pointerId = undefined;\n this.isPastThreshold = false;\n this.scroller = null;\n this.isDragging.set(false);\n\n this.surfaceElement?.removeEventListener('touchmove', this.onTouchMove);\n window.removeEventListener('pointermove', this.onPointerMove);\n window.removeEventListener('pointerup', this.onPointerUp);\n window.removeEventListener('pointercancel', this.onPointerCancel);\n }\n\n /**\n * A drag that ended over a button would otherwise still click it, so the click that\n * follows the release is swallowed. Nothing else fires in between, and the listener is\n * dropped right after in case the release happened over something unclickable.\n */\n private suppressClickAfterDrag(): void {\n const surface = this.surfaceElement;\n\n if (!surface) {\n return;\n }\n\n const onClick = (event: MouseEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n surface.addEventListener('click', onClick, { capture: true, once: true });\n setTimeout(() => surface.removeEventListener('click', onClick, { capture: true }));\n }\n\n /** Nearest scrollable between the pointer and the surface, if the drag started over one. */\n private findScroller(target: EventTarget | null): HTMLElement | null {\n const surface = this.surfaceElement;\n let node = target instanceof HTMLElement ? target : null;\n\n while (node && surface?.contains(node)) {\n if (node.scrollHeight > node.clientHeight && this.isScrollable(node)) {\n return node;\n }\n\n node = node.parentElement;\n }\n\n return null;\n }\n\n private isScrollable(element: HTMLElement): boolean {\n const overflowY = getComputedStyle(element).overflowY;\n\n return overflowY === 'auto' || overflowY === 'scroll';\n }\n}\n","<div\n #surface\n class=\"md3-bottom-sheet-container\"\n [class.md3-active]=\"isActive()\"\n [class.md-scheme-dark]=\"scheme() === 'dark'\"\n [class.md-scheme-light]=\"scheme() === 'light'\"\n [style.transform]=\"surfaceTransform()\"\n [attr.dir]=\"direction() ?? null\"\n (pointerdown)=\"onPointerDown($event)\">\n @if (isHandleInteractive()) {\n <button\n type=\"button\"\n class=\"md3-bottom-sheet-handle\"\n [attr.aria-label]=\"handleLabel()\"\n [attr.aria-expanded]=\"state() === 'expanded'\"\n [attr.aria-controls]=\"controlsId() || null\"\n (click)=\"toggle()\"\n (keydown)=\"onHandleKeydown($event)\"></button>\n } @else {\n <div class=\"md3-bottom-sheet-handle\" aria-hidden=\"true\"></div>\n }\n <ng-content></ng-content>\n</div>\n","import { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { Component, inject, ViewChild } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BOTTOM_SHEET_CONFIG } from './bottom-sheet-ref';\nimport { BottomSheetSurface } from './bottom-sheet-surface';\nimport {\n BottomSheetConfig,\n BottomSheetContainer,\n BottomSheetState,\n} from '../../../interfaces/bottom-sheet-config.interface';\n\n/**\n * Modal bottom sheet shell. Like Dialog, it extends the CDK dialog container so focus\n * trapping, focus restoration and the ARIA attributes are handled by the CDK, while the\n * surface it wraps owns the MD3 panel, the drag handle and the animation. A modal sheet is\n * always an overlay above the page; the standard variant docks into the scaffold instead and\n * uses the same surface from a different shell.\n */\n@Component({\n selector: 'md3-bottom-sheet',\n imports: [\n CdkPortalOutlet,\n BottomSheetSurface,\n ],\n templateUrl: './bottom-sheet.html',\n styleUrl: './bottom-sheet.scss',\n})\nexport class BottomSheet extends CdkDialogContainer implements BottomSheetContainer {\n // Static, because BottomSheetService wires this shell to the sheet's reference as soon as\n // the CDK has created it, which is before any change detection has run over the view.\n @ViewChild(BottomSheetSurface, { static: true })\n private readonly surface!: BottomSheetSurface;\n\n protected readonly config = inject<BottomSheetConfig>(BOTTOM_SHEET_CONFIG, { optional: true }) ?? {};\n\n public get surfaceElement(): HTMLElement | null {\n return this.surface.surfaceElement;\n }\n\n public get dismissed(): Observable<void> {\n return this.surface.dismissed;\n }\n\n public get dragProgress(): Observable<number> {\n return this.surface.dragProgress;\n }\n\n public get stateChanges(): Observable<BottomSheetState> {\n return this.surface.stateChanges;\n }\n\n public startEnterAnimation(): void {\n this.surface.startEnterAnimation();\n }\n\n public setActive(value: boolean): void {\n this.surface.setActive(value);\n }\n\n public recaptureFocus(): void {\n this._recaptureFocus();\n }\n\n public override ngOnDestroy(): void {\n this.surface.destroy();\n super.ngOnDestroy();\n }\n}\n","<!-- The role and aria attributes live on the host element, applied by the CDK dialog container.\n The portal outlet stays in this template, as the CDK requires, and is projected into the\n shared surface. -->\n<md3-bottom-sheet-surface\n [showHandle]=\"config.handle ?? true\"\n [allowGestures]=\"config.gestures ?? true\"\n [scheme]=\"config.scheme ?? 'inherit'\"\n [direction]=\"config.direction ?? null\">\n <ng-template cdkPortalOutlet></ng-template>\n</md3-bottom-sheet-surface>\n","import { CdkPortalOutlet, ComponentPortal } from '@angular/cdk/portal';\nimport {\n Component,\n ComponentRef,\n effect,\n ElementRef,\n inject,\n Injector,\n isDevMode,\n OnDestroy,\n signal,\n Signal,\n Type,\n ViewChild,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BOTTOM_SHEET_CONFIG } from './bottom-sheet-ref';\nimport { BottomSheetSurface } from './bottom-sheet-surface';\nimport {\n BottomSheetConfig,\n BottomSheetState,\n StandardBottomSheetHost,\n} from '../../../interfaces/bottom-sheet-config.interface';\n\nlet nextRegionId = 0;\n\n/**\n * Standard bottom sheet shell: page furniture rather than a dialog. It docks into the\n * scaffold's sheet region and floats over the content from there, above the bottom bar and\n * without a scrim, leaving the page scrolling, clickable and focusable behind it. Nothing here\n * traps focus or handles Escape, which is the whole difference from the modal shell — the\n * surface, the handle and the gesture are shared.\n */\n@Component({\n selector: 'md3-standard-bottom-sheet',\n imports: [\n CdkPortalOutlet,\n BottomSheetSurface,\n ],\n templateUrl: './standard-bottom-sheet.html',\n styleUrl: './standard-bottom-sheet.scss',\n host: {\n 'role': 'region',\n '[attr.id]': 'regionId',\n '[attr.aria-label]': 'label() || null',\n '[attr.aria-labelledby]': 'labelledBy() || null',\n },\n})\nexport class StandardBottomSheet implements StandardBottomSheetHost, OnDestroy {\n @ViewChild(CdkPortalOutlet, { static: true })\n private readonly portalOutlet!: CdkPortalOutlet;\n\n @ViewChild(BottomSheetSurface, { static: true })\n private readonly surface!: BottomSheetSurface;\n\n protected readonly config = inject<BottomSheetConfig>(BOTTOM_SHEET_CONFIG, { optional: true }) ?? {};\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Named so the drag handle can point `aria-controls` at the region it expands. */\n public readonly regionId = `md3-bottom-sheet-${nextRegionId++}`;\n\n public readonly showHandle = signal<boolean>(this.config.handle ?? true);\n public readonly allowGestures = signal<boolean>(this.config.gestures ?? true);\n public readonly dismissible = signal<boolean>(this.config.dismissible ?? false);\n public readonly initialState = signal<BottomSheetState>(this.config.initialState ?? 'collapsed');\n public readonly label = signal<string>(this.config.label ?? '');\n public readonly labelledBy = signal<string>(this.config.labelledBy ?? '');\n public readonly collapsedHeight = signal<string>(toCssLength(this.config.collapsedHeight, '10em'));\n public readonly expandedHeight = signal<string>(toCssLength(this.config.expandedHeight, '70dvh'));\n\n /**\n * Whatever had focus when the sheet opened, so it can be handed back — but only if the\n * sheet still holds focus when it closes, rather than yanking it off whatever the user\n * moved on to in the meantime.\n */\n private readonly previouslyFocused = document.activeElement as HTMLElement | null;\n\n constructor() {\n effect(() => {\n const element = this.el.nativeElement;\n\n element.style.setProperty('--md3-bottom-sheet-collapsed-height', this.collapsedHeight());\n element.style.setProperty('--md3-bottom-sheet-expanded-height', this.expandedHeight());\n });\n\n if (isDevMode() && !this.config.label && !this.config.labelledBy) {\n console.warn(\n 'A standard bottom sheet without a `label` or `labelledBy` is not exposed as a '\n + 'landmark to assistive technology. Pass one in the sheet configuration.',\n );\n }\n }\n\n public get state(): Signal<BottomSheetState> {\n return this.surface.state;\n }\n\n public get surfaceElement(): HTMLElement | null {\n return this.surface.surfaceElement;\n }\n\n public get dismissed(): Observable<void> {\n return this.surface.dismissed;\n }\n\n public get dragProgress(): Observable<number> {\n return this.surface.dragProgress;\n }\n\n public get stateChanges(): Observable<BottomSheetState> {\n return this.surface.stateChanges;\n }\n\n public startEnterAnimation(): void {\n this.surface.startEnterAnimation();\n }\n\n public setActive(value: boolean): void {\n this.surface.setActive(value);\n }\n\n public expand(): void {\n this.surface.expand();\n }\n\n public collapse(): void {\n this.surface.collapse();\n }\n\n public toggle(): void {\n this.surface.toggle();\n }\n\n public setCollapsedHeight(value: number | string): void {\n this.collapsedHeight.set(toCssLength(value, '10em'));\n this.surface.remeasure();\n }\n\n public setExpandedHeight(value: number | string): void {\n this.expandedHeight.set(toCssLength(value, '70dvh'));\n this.surface.remeasure();\n }\n\n public setDismissible(value: boolean): void {\n this.dismissible.set(value);\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 ngOnDestroy(): void {\n this.surface.destroy();\n\n if (this.el.nativeElement.contains(document.activeElement)) {\n this.previouslyFocused?.focus();\n }\n }\n}\n\nfunction toCssLength(value: number | string | undefined, fallback: string): string {\n if (value === undefined) {\n return fallback;\n }\n\n return typeof value === 'number' ? `${value}px` : value;\n}\n","<md3-bottom-sheet-surface\n mode=\"standard\"\n [showHandle]=\"showHandle()\"\n [allowGestures]=\"allowGestures()\"\n [dismissible]=\"dismissible()\"\n [initialState]=\"initialState()\"\n [controlsId]=\"regionId\"\n [scheme]=\"config.scheme ?? 'inherit'\"\n [direction]=\"config.direction ?? null\">\n <ng-template cdkPortalOutlet></ng-template>\n</md3-bottom-sheet-surface>\n","import { Component, ComponentRef, Injector, ViewChild, ViewContainerRef } from '@angular/core';\nimport { StandardBottomSheet } from './standard-bottom-sheet';\n\n/**\n * Host attached into the scaffold's sheet outlet, where standard bottom sheets are created.\n * It is attached as soon as the outlet registers and takes no space at any point: the sheets\n * it holds are positioned against the region around it, so a replacement can open while the\n * sheet it replaces is still animating out without either of them disturbing the layout.\n */\n@Component({\n selector: 'md3-bottom-sheet-outlet',\n template: '<ng-container #container></ng-container>',\n styles: [`\n :host {\n display: block;\n }\n `],\n})\nexport class BottomSheetOutlet {\n @ViewChild('container', { read: ViewContainerRef, static: true })\n private readonly container!: ViewContainerRef;\n\n public createSheet(injector: Injector): ComponentRef<StandardBottomSheet> {\n const sheetComponentRef = this.container.createComponent(StandardBottomSheet, { injector });\n\n // The shell's view has to exist before its portal outlet can take the content.\n sheetComponentRef.changeDetectorRef.detectChanges();\n\n return sheetComponentRef;\n }\n}\n","import { Dialog as CdkDialog, DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { CdkPortalOutlet, ComponentPortal } from '@angular/cdk/portal';\nimport { ComponentRef, inject, Injectable, Injector, Type } from '@angular/core';\nimport { BottomSheet } from './bottom-sheet';\nimport { BottomSheetOutlet } from './bottom-sheet-outlet';\nimport {\n BOTTOM_SHEET_COMPONENT,\n BOTTOM_SHEET_CONFIG,\n BOTTOM_SHEET_DATA,\n BottomSheetRef,\n ModalBottomSheetRef,\n StandardBottomSheetRef,\n} from './bottom-sheet-ref';\nimport { BottomSheetConfig, BottomSheetState, BottomSheetType } from '../../../interfaces/bottom-sheet-config.interface';\n\ninterface ResolvedBottomSheetConfig<D = unknown> extends BottomSheetConfig<D> {\n data: D | undefined;\n bindDataToInputs: boolean;\n type: BottomSheetType;\n handle: boolean;\n gestures: boolean;\n dismissible: boolean;\n initialState: BottomSheetState;\n scheme: 'inherit' | 'dark' | 'light';\n direction: null | 'ltr' | 'rtl';\n injector: Injector;\n}\n\n/** An outlet a standard sheet can be opened in, with the host attached into it. */\ninterface BottomSheetOutletState {\n outlet: CdkPortalOutlet;\n hostComponentRef: ComponentRef<BottomSheetOutlet>;\n}\n\nconst PANEL_CLASS = 'md3-bottom-sheet-panel';\nconst OPENING_CLASS = 'md3-bottom-sheet-opening';\n\n/**\n * Opens bottom sheets, in either of the two ways MD3 describes them.\n *\n * A modal sheet is a CDK dialog anchored to the bottom of the viewport, the same way a regular\n * dialog is always an overlay, so that path mirrors DialogService. A standard sheet is docked\n * into the scaffold instead, following the side sheet outlet model: it floats over the content\n * without a scrim, leaves the rest of the page usable, and needs an outlet to open into.\n *\n * One of each may be open at a time, and they replace only their own kind.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class BottomSheetService {\n private readonly cdkDialog = inject(CdkDialog);\n private readonly overlay = inject(Overlay);\n private readonly injector = inject(Injector);\n\n /**\n * Outlets registered from the page scaffold up to whatever took them over last. Standard\n * sheets always open in the outlet on top.\n */\n private readonly outlets: BottomSheetOutletState[] = [];\n\n private modalRef?: ModalBottomSheetRef<any, any>;\n private standardRef?: StandardBottomSheetRef<any, any>;\n\n /** Registers the outlet standard bottom sheets open into. Called by Scaffold. */\n public registerBottomSheetOutlet(outlet: CdkPortalOutlet): void {\n if (this.outlets.some((state) => state.outlet === outlet)) {\n return;\n }\n\n if (outlet.hasAttached()) {\n outlet.detach();\n }\n\n const portal = new ComponentPortal(BottomSheetOutlet, null, this.injector);\n\n this.outlets.push({\n outlet,\n hostComponentRef: outlet.attachComponentPortal(portal),\n });\n }\n\n public unregisterBottomSheetOutlet(outlet: CdkPortalOutlet): void {\n const index = this.outlets.findIndex((state) => state.outlet === outlet);\n\n if (index === -1) {\n return;\n }\n\n // A sheet open in this outlet goes with it, without an exit animation: the outlet is\n // being torn down, so there is nothing left to animate in.\n if (index === this.outlets.length - 1) {\n this.standardRef?.dispose();\n }\n\n this.outlets[index].outlet.detach();\n this.outlets.splice(index, 1);\n }\n\n public open<T, D = unknown, R = unknown>(\n component: Type<T>,\n config: BottomSheetConfig<D> = {},\n ): BottomSheetRef<T, R> {\n const sheetConfig = this.mergeConfig(config);\n\n return sheetConfig.type === 'standard'\n ? this.openStandard<T, D, R>(component, sheetConfig)\n : this.openModal<T, D, R>(component, sheetConfig);\n }\n\n /**\n * Closes the bottom sheet that is open. A modal sheet goes first when both kinds are up,\n * since it is the one covering the page.\n */\n public close<R = unknown>(result?: R): void {\n if (this.modalRef) {\n this.modalRef.close(result);\n\n return;\n }\n\n this.standardRef?.close(result);\n }\n\n private openModal<T, D, R>(\n component: Type<T>,\n sheetConfig: ResolvedBottomSheetConfig<D>,\n ): BottomSheetRef<T, R> {\n // Opening a new modal sheet always replaces the one that is open.\n this.modalRef?.close();\n\n let sheetRef!: ModalBottomSheetRef<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\n // shell only renders the surface.\n container: {\n type: BottomSheet,\n providers: () => [\n { provide: BOTTOM_SHEET_CONFIG, useValue: sheetConfig },\n ],\n },\n // These tokens make the sheet controllable from the dynamic\n // component without coupling that component to the service.\n providers: (cdkDialogRef: CdkDialogRef<R, T>) => {\n sheetRef = new ModalBottomSheetRef<T, R>(cdkDialogRef);\n\n return [\n { provide: BottomSheetRef, useValue: sheetRef },\n { provide: BOTTOM_SHEET_DATA, useValue: sheetConfig.data },\n { provide: BOTTOM_SHEET_CONFIG, useValue: sheetConfig },\n { provide: BOTTOM_SHEET_COMPONENT, useValue: component },\n ];\n },\n data: sheetConfig.data,\n role: 'dialog',\n ariaModal: true,\n direction: sheetConfig.direction ?? undefined,\n viewContainerRef: sheetConfig.viewContainerRef,\n injector: sheetConfig.injector,\n hasBackdrop: true,\n backdropClass: ['md3-bottom-sheet-scrim', OPENING_CLASS],\n panelClass: [PANEL_CLASS, OPENING_CLASS],\n positionStrategy: this.overlay.position()\n .global()\n .centerHorizontally()\n .bottom('0'),\n // A modal bottom sheet blocks page scrolling for as long as it is open.\n scrollStrategy: this.overlay.scrollStrategies.block(),\n // Scrim and Escape handling lives in the reference so the sheet\n // can play its exit animation before the overlay is disposed.\n disableClose: true,\n });\n\n sheetRef.attachContainer(cdkRef.containerInstance as unknown as BottomSheet);\n sheetRef.componentInstance = cdkRef.componentInstance ?? undefined;\n\n if (cdkRef.componentRef) {\n this.bindDataToInputs(cdkRef.componentRef, sheetConfig);\n }\n\n this.modalRef = sheetRef;\n this.startOpenAnimation(sheetRef);\n\n sheetRef.afterClosed().subscribe(() => {\n if (this.modalRef === sheetRef) {\n this.modalRef = undefined;\n }\n });\n\n return sheetRef;\n }\n\n private openStandard<T, D, R>(\n component: Type<T>,\n sheetConfig: ResolvedBottomSheetConfig<D>,\n ): BottomSheetRef<T, R> {\n const host = this.activeOutlet();\n\n if (!host) {\n throw new Error(\n 'No bottom sheet outlet is registered. A standard bottom sheet docks into the '\n + 'scaffold, so the layout has to be in place before one can open.',\n );\n }\n\n // Opening a new standard sheet always replaces the one that is open.\n this.standardRef?.close();\n\n const sheetRef: StandardBottomSheetRef<T, R> = new StandardBottomSheetRef<T, R>(() => {\n if (this.standardRef === sheetRef) {\n this.standardRef = undefined;\n }\n });\n\n const injector = this.createInjector(component, sheetConfig, sheetRef);\n const sheetComponentRef = host.hostComponentRef.instance.createSheet(injector);\n const contentComponentRef = sheetComponentRef.instance.attachContent(component, injector);\n\n sheetComponentRef.changeDetectorRef.detectChanges();\n\n sheetRef.attachSheet(sheetComponentRef, sheetComponentRef.instance);\n this.bindDataToInputs(contentComponentRef, sheetConfig);\n sheetRef.componentInstance = contentComponentRef.instance;\n\n this.standardRef = sheetRef;\n sheetComponentRef.instance.startEnterAnimation();\n\n return sheetRef;\n }\n\n private activeOutlet(): BottomSheetOutletState | undefined {\n return this.outlets[this.outlets.length - 1];\n }\n\n private createInjector<T, D>(\n component: Type<T>,\n config: ResolvedBottomSheetConfig<D>,\n sheetRef: BottomSheetRef<T, any>,\n ): Injector {\n return Injector.create({\n parent: config.injector,\n providers: [\n { provide: BottomSheetRef, useValue: sheetRef },\n { provide: BOTTOM_SHEET_DATA, useValue: config.data },\n { provide: BOTTOM_SHEET_CONFIG, useValue: config },\n { provide: BOTTOM_SHEET_COMPONENT, useValue: component },\n ],\n });\n }\n\n private startOpenAnimation(sheetRef: ModalBottomSheetRef<any, any>): void {\n const overlayRef = sheetRef.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\n // transitions 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 sheetRef.sheetInstance?.startEnterAnimation();\n }\n\n private mergeConfig<D>(config: BottomSheetConfig<D>): ResolvedBottomSheetConfig<D> {\n return {\n ...config,\n data: config.data,\n bindDataToInputs: config.bindDataToInputs ?? false,\n type: config.type ?? 'modal',\n handle: config.handle ?? true,\n gestures: config.gestures ?? true,\n dismissible: config.dismissible ?? false,\n initialState: config.initialState ?? 'collapsed',\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 bindDataToInputs<T, D>(\n componentRef: ComponentRef<T>,\n config: ResolvedBottomSheetConfig<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","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, effect, ElementRef, inject, OnDestroy, viewChild } from '@angular/core';\nimport { BottomSheetService } from '../../components/sheets/bottom-sheet/bottom-sheet.service';\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 bottomOutlet = viewChild('bottomOutlet', { read: CdkPortalOutlet });\n private panesContainer = viewChild<ElementRef<HTMLElement>>('panesContainer');\n private sheets = inject(SheetsService);\n private bottomSheets = inject(BottomSheetService);\n private layout = inject(LayoutService);\n private el = inject(ElementRef);\n\n constructor() {\n // Publish what a floating bar covers but does not reserve. The main pane pads itself\n // by these values, and the fallback is 0, so a layout without a floating bar is\n // unchanged. A page that needs full-bleed content sets them back to 0 on itself.\n effect(() => {\n const inset = this.layout.floatingInset();\n const host = this.el.nativeElement as HTMLElement;\n\n host.style.setProperty('--md-scaffold-floating-inset-block-start', `${inset.blockStart}px`);\n host.style.setProperty('--md-scaffold-floating-inset-block-end', `${inset.blockEnd}px`);\n });\n }\n\n ngAfterViewInit(): void {\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n const bottomOutlet = this.bottomOutlet();\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 (bottomOutlet) {\n this.bottomSheets.registerBottomSheetOutlet(bottomOutlet);\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 const bottomOutlet = this.bottomOutlet();\n\n if (startOutlet) {\n this.sheets.unregisterSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.unregisterSideSheetOutlet('end', endOutlet);\n }\n\n if (bottomOutlet) {\n this.bottomSheets.unregisterBottomSheetOutlet(bottomOutlet);\n }\n\n this.layout.unregisterPanesContainer();\n }\n}\n","<div class=\"md3-bar-region md3-bar-region-top\">\n <ng-content select=\"[md3-scaffold-bar=top]\"></ng-content>\n</div>\n\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<!-- Standard bottom sheets dock here, between the content and the bottom bar. The region\n measures zero until one opens, so it reserves nothing the rest of the time. -->\n<div class=\"md3-bottom-sheet-region\">\n <ng-template #bottomOutlet cdkPortalOutlet></ng-template>\n</div>\n\n<ng-content select=\"[md3-scaffold-rail=trailing]\"></ng-content>\n\n<div class=\"md3-bar-region md3-bar-region-bottom\">\n <ng-content select=\"[md3-scaffold-bar=bottom]\"></ng-content>\n</div>","import { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { Component } from '@angular/core';\nimport { LayoutService } from '../layout.service';\nimport { Scaffold } from '../scaffold/scaffold';\n\n/**\n * A layout region shell that fills its parent instead of the window.\n *\n * It places the same regions as `md3-scaffold` — the bar rows, the rail columns and the three\n * panes — so the same region attributes work inside it:\n *\n * ```html\n * <md3-layout>\n * <md3-toolbar md3-scaffold-bar=\"bottom\" toolbar-type=\"floating\">...</md3-toolbar>\n *\n * <div md3-scaffold-pane=\"main\">...</div>\n * </md3-layout>\n * ```\n *\n * Use it wherever a page-sized scaffold does not fit: the content of a full screen dialog, a\n * card, a preview pane. A full screen dialog is the common one, because a toolbar needs a bar\n * or a rail region and the dialog shell has none of its own.\n *\n * The layout provides its own {@link LayoutService}, so everything inside it reads the scroll\n * position and the floating insets of *this* container. A floating toolbar therefore pads the\n * main pane of the layout, and `scroll-action` follows the pane of the layout — never the page\n * behind it. The window size, the breakpoints, the reading direction and the color scheme stay\n * shared with the rest of the application.\n */\n@Component({\n selector: 'md3-layout',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: '../scaffold/scaffold.html',\n styleUrl: './layout.scss',\n providers: [\n LayoutService,\n ],\n})\nexport class Layout extends Scaffold {\n}\n","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(): boolean {\n let enabled = false;\n\n this.isSelected.update((current) => {\n if (current !== null) {\n return current;\n }\n\n enabled = true;\n return false;\n });\n\n return enabled;\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(): boolean {\n let enabled = false;\n\n this.isSelected.update((current) => {\n if (current !== null) {\n return current;\n }\n\n enabled = true;\n return false;\n });\n\n return enabled;\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 private managedButtons = new WeakSet<Button | IconButton>();\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 const buttons = this.allButtons();\n\n if (selection == 'manual') {\n // hand the control back, only for the buttons the group made selectable\n buttons.forEach((item) => {\n if (this.managedButtons.has(item)) {\n item.isSelected.set(null);\n }\n });\n\n this.managedButtons = new WeakSet();\n return;\n }\n\n if (selection == 'none') {\n buttons.forEach((item) => {\n item.isSelected.set(null);\n });\n\n this.managedButtons = new WeakSet();\n } else {\n buttons.forEach((item) => {\n if (item.enableSelection()) {\n this.managedButtons.add(item);\n }\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 { 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 { 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, inject, 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 { DIALOG_CONFIG } from '../dialog/dialog-ref';\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 '[attr.role]': 'resolvedRole()',\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 // A dialog provides its configuration to everything it holds, so this is how the bar knows\n // it is not the banner of the document.\n private readonly inDialog = !!inject(DIALOG_CONFIG, { optional: true });\n\n /**\n * The landmark role of the bar.\n *\n * A page has one banner, and the app bar of the page is it. A bar inside a dialog is not\n * the banner of the document — a banner nested in a dialog misleads a screen reader — so a\n * bar that finds itself in one carries no role. Set this input to force either value.\n */\n public barRole = input<'banner' | 'none' | null>(null, {\n alias: 'bar-role',\n });\n\n protected readonly resolvedRole = computed<string | null>(() => {\n const role = this.barRole();\n\n if (role !== null) {\n return role === 'none' ? null : role;\n }\n\n return this.inDialog ? null : 'banner';\n });\n\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\n // One source of truth. The toolbar reads the same signal, so the two bars can never\n // disagree about which way the main pane is moving.\n public isScrollingDown = computed<boolean>(() => this.layoutService.isScrollingDown());\n\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 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 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 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 { isPlatformBrowser } from '@angular/common';\nimport { Component, computed, contentChild, effect, ElementRef, inject, input, model, OnDestroy, PLATFORM_ID, Signal, signal, viewChild } from '@angular/core';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../interfaces/button-context.interface';\nimport { LayoutService } from '../../foundations/layout.service';\nimport { ScaffoldBar } from '../../foundations/scaffold-bar';\nimport { ScaffoldRail } from '../../foundations/scaffold-rail';\nimport { ButtonSize } from '../../types/button-size.type';\nimport { ToolbarAlignment } from '../../types/toolbar-alignment.type';\nimport { ToolbarColor } from '../../types/toolbar-color.type';\nimport { ToolbarOrientation } from '../../types/toolbar-orientation.type';\nimport { ToolbarRegion } from '../../types/toolbar-region.type';\nimport { ToolbarScrollAction } from '../../types/toolbar-scroll-action.type';\nimport { ToolbarType } from '../../types/toolbar-type.type';\nimport { FloatingActionButton } from '../buttons/floating-action-button/floating-action-button';\n\n/**\n * Material 3 toolbar.\n *\n * The toolbar holds the actions of the current page. Put it in a scaffold region, and the\n * region decides where it goes:\n *\n * ```html\n * <md3-toolbar md3-scaffold-bar=\"bottom\" toolbar-type=\"floating\" scroll-action=\"collapse\">\n * <md3-toolbar-item><button md3-icon-button>...</button></md3-toolbar-item>\n * <md3-toolbar-item md3-toolbar-persistent><button md3-icon-button>...</button></md3-toolbar-item>\n * <button md3-fab>...</button>\n * </md3-toolbar>\n * ```\n *\n * Every action goes inside an `md3-toolbar-item`. The toolbar projects that element only. A FAB is\n * the one exception: it sits beside the container, and a floating toolbar takes it.\n *\n * A **floating** toolbar in a *bar* region leaves the layout flow, so the content passes\n * behind it. The scaffold pads the main pane by the height it covers. In a *rail* region it\n * stays in the flow and reserves its own space, so no padding is necessary.\n *\n * A **docked** toolbar fills its region. The specification allows it in a bar region only.\n *\n * Group actions with `md3-button-group`. The toolbar has one slots region, and it keeps the\n * authored order. The space between the items follows the free space of the container, between\n * `--md-toolbar-gap-min` and `--md-toolbar-gap-max`.\n */\n@Component({\n selector: 'md3-toolbar',\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: Toolbar,\n },\n ],\n host: {\n 'role': 'toolbar',\n '[attr.aria-orientation]': 'effectiveOrientation()',\n '[class.md3-floating-region]': 'isFloatingRegion()',\n '[class.md3-bar-region]': 'isBarRegion()',\n '[class.md3-rail-region]': 'isRailRegion()',\n '[class.md3-hidden]': 'isHidden()',\n '[class.md3-collapsed]': 'isCollapsed()',\n '[class.md3-collapse-to-fab]': 'isCollapsedToFab()',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class Toolbar implements ButtonContext, OnDestroy {\n private readonly el = inject(ElementRef);\n private readonly layout = inject(LayoutService);\n\n // The scaffold region directives sit on this same host element, so `self` is correct.\n private readonly scaffoldBar = inject(ScaffoldBar, { optional: true, self: true });\n private readonly scaffoldRail = inject(ScaffoldRail, { optional: true, self: true });\n\n public toolbarType = input<ToolbarType>('floating', {\n alias: 'toolbar-type',\n });\n\n public toolbarColor = input<ToolbarColor>('standard', {\n alias: 'toolbar-color',\n });\n\n /**\n * Leave this unset to follow the region. A rail region gives `vertical`, and every other\n * placement gives `horizontal`. Read `effectiveOrientation` for the resolved value.\n */\n public orientation = input<ToolbarOrientation | null>(null, {\n alias: 'orientation',\n });\n\n public alignment = input<ToolbarAlignment>('center', {\n alias: 'alignment',\n });\n\n public scrollAction = input<ToolbarScrollAction>('none', {\n alias: 'scroll-action',\n });\n\n public fabPosition = input<'start' | 'end'>('end', {\n alias: 'fab-position',\n });\n\n /** The collapse state. Scrolling writes to it, and you can read or set it yourself. */\n public expanded = model<boolean>(true);\n\n private readonly layoutElement = viewChild<ElementRef<HTMLElement>>('layout');\n private readonly containerElement = viewChild<ElementRef<HTMLElement>>('container');\n private readonly slotsElement = viewChild<ElementRef<HTMLElement>>('slots');\n private readonly fab = contentChild(FloatingActionButton);\n\n /** Set from the DOM, because `md3-toolbar-persistent` is a plain attribute, not a directive. */\n private readonly hasPersistentItem = signal<boolean>(false);\n private readonly hasFocusWithin = signal<boolean>(false);\n private persistentObserver?: MutationObserver;\n\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /** The last published free space, to keep an unchanged measurement from writing to the DOM. */\n private lastGap = -1;\n\n public readonly isFloating = computed<boolean>(() => this.toolbarType() === 'floating');\n\n public readonly effectiveOrientation = computed<ToolbarOrientation>(() => {\n return this.orientation() ?? (this.scaffoldRail ? 'vertical' : 'horizontal');\n });\n\n /** The logical side of the scaffold region, or null outside a scaffold. */\n public readonly region = computed<ToolbarRegion | null>(() => {\n if (this.scaffoldBar) {\n return this.scaffoldBar.region() === 'top' ? 'blockStart' : 'blockEnd';\n }\n\n if (this.scaffoldRail) {\n return this.scaffoldRail.region() === 'leading' ? 'inlineStart' : 'inlineEnd';\n }\n\n return null;\n });\n\n protected readonly isBarRegion = computed<boolean>(() => !!this.scaffoldBar);\n protected readonly isRailRegion = computed<boolean>(() => !!this.scaffoldRail);\n\n /** A floating toolbar inside a scaffold region needs the region to stop clipping it. */\n protected readonly isFloatingRegion = computed<boolean>(() => {\n return this.isFloating() && (this.isBarRegion() || this.isRailRegion());\n });\n\n /** Only a floating bar covers content it does not reserve. Everything else reserves its space. */\n private readonly coversContent = computed<boolean>(() => this.isFloating() && this.isBarRegion());\n\n /** Something must survive a collapse, or a collapse is just a hide. */\n private readonly canCollapse = computed<boolean>(() => (!!this.fab() && this.isFloating()) || this.hasPersistentItem());\n\n /** With a FAB and no marked item, a collapse takes the container away and the FAB stays alone. */\n protected readonly collapsesToFab = computed<boolean>(() => !!this.fab() && this.isFloating() && !this.hasPersistentItem());\n\n /** A vertical toolbar never reacts to scrolling, and a docked one never collapses. */\n public readonly resolvedScrollAction = computed<ToolbarScrollAction>(() => {\n const action = this.scrollAction();\n\n if (action === 'none' || this.effectiveOrientation() === 'vertical') {\n return 'none';\n }\n\n if (action === 'collapse' && (!this.isFloating() || !this.canCollapse())) {\n return 'hide';\n }\n\n return action;\n });\n\n public readonly isHidden = signal<boolean>(false);\n public readonly isCollapsed = computed<boolean>(() => {\n return this.resolvedScrollAction() === 'collapse' && !this.expanded();\n });\n\n /**\n * The collapsed state in which the FAB stays alone.\n *\n * This is the state, not the capability. A FAB by itself must never take the container\n * away, because a toolbar that does not collapse keeps its items at all times.\n */\n protected readonly isCollapsedToFab = computed<boolean>(() => this.isCollapsed() && this.collapsesToFab());\n\n // button context — the container is 4em high, so the buttons inside it are small.\n public buttonContextSize: Signal<ButtonSize> = signal<ButtonSize>('small');\n\n constructor() {\n effect(() => {\n if (this.isFloating()) {\n this.element.classList.add('md3-floating');\n this.element.classList.remove('md3-docked');\n } else {\n this.element.classList.add('md3-docked');\n this.element.classList.remove('md3-floating');\n }\n });\n\n effect((onCleanup) => {\n const orientation = 'md3-' + this.effectiveOrientation();\n this.element.classList.add(orientation);\n onCleanup(() => this.element.classList.remove(orientation));\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.toolbarColor();\n this.element.classList.add(color);\n onCleanup(() => this.element.classList.remove(color));\n });\n\n effect((onCleanup) => {\n const alignment = 'md3-align-' + this.alignment();\n this.element.classList.add(alignment);\n onCleanup(() => this.element.classList.remove(alignment));\n });\n\n effect((onCleanup) => {\n const position = 'md3-fab-' + this.fabPosition();\n this.element.classList.add(position);\n onCleanup(() => this.element.classList.remove(position));\n });\n\n effect((onCleanup) => {\n const region = this.region();\n\n if (!region) {\n return;\n }\n\n const name = 'md3-region-' + region.replace(/[A-Z]/g, (letter) => '-' + letter.toLowerCase());\n this.element.classList.add(name);\n onCleanup(() => this.element.classList.remove(name));\n });\n\n // Report what a floating bar covers, so the scaffold can pad the main pane and the\n // overlays can stay above it.\n effect((onCleanup) => {\n if (!this.coversContent()) {\n return;\n }\n\n const region = this.region();\n\n if (region !== 'blockStart' && region !== 'blockEnd') {\n return;\n }\n\n const element = this.layoutElement()?.nativeElement;\n\n if (!element) {\n return;\n }\n\n this.layout.registerFloatingBar(element, region);\n\n onCleanup(() => this.layout.unregisterFloatingBar(element));\n });\n\n effect(() => {\n this.updateScrollState();\n });\n\n effect(() => {\n const element = this.layoutElement()?.nativeElement;\n\n if (element) {\n this.watchPersistentItems(element);\n }\n });\n\n // Measure again when the region gives the toolbar a different amount of space, and when\n // the items themselves change size or number.\n effect((onCleanup) => {\n if (!this.isBrowser) {\n return;\n }\n\n // Read the state that changes the geometry, so a new orientation or a collapse\n // measures again without a resize.\n this.effectiveOrientation();\n this.isCollapsed();\n this.isCollapsedToFab();\n\n const layout = this.layoutElement()?.nativeElement;\n const slots = this.slotsElement()?.nativeElement;\n\n if (!layout || !slots) {\n return;\n }\n\n // The observer reports the first size as soon as it starts, so no separate initial\n // measurement is necessary.\n const observer = new ResizeObserver(() => this.measureGap());\n observer.observe(this.element);\n observer.observe(layout);\n observer.observe(slots);\n\n onCleanup(() => observer.disconnect());\n });\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n effect(() => this.checkConfiguration());\n }\n }\n\n ngOnDestroy(): void {\n // The registration effect owns its own cleanup, so it unregisters the exact element\n // it measured.\n this.persistentObserver?.disconnect();\n this.persistentObserver = undefined;\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n protected onFocusIn(): void {\n this.hasFocusWithin.set(true);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n\n if (next && this.element.contains(next)) {\n return;\n }\n\n this.hasFocusWithin.set(false);\n }\n\n private updateScrollState(): void {\n const action = this.resolvedScrollAction();\n\n if (action === 'none') {\n this.isHidden.set(false);\n this.expanded.set(true);\n return;\n }\n\n // Keep the toolbar reachable while it holds the focus. A keyboard or screen-reader\n // user must never lose the control they are on.\n if (this.hasFocusWithin()) {\n this.isHidden.set(false);\n this.expanded.set(true);\n return;\n }\n\n const away = this.layout.mainIsScrolled() && this.layout.isScrollingDown();\n\n this.isHidden.set(action === 'hide' && away);\n this.expanded.set(action === 'hide' ? true : !away);\n }\n\n /**\n * Divide the free space of the container between the gaps.\n *\n * The measurement starts from the host, because the host holds the space the region gives\n * the toolbar. A floating container is only as wide as its content, so reading the container\n * itself would feed the gap back into the measurement and the value would never settle.\n */\n private measureGap(): void {\n const layout = this.layoutElement()?.nativeElement;\n const container = this.containerElement()?.nativeElement;\n const slots = this.slotsElement()?.nativeElement;\n\n if (!layout || !container || !slots) {\n return;\n }\n\n const vertical = this.effectiveOrientation() === 'vertical';\n const items = Array.from(slots.children) as HTMLElement[];\n const extents = items.map((item) => this.extent(item, vertical));\n\n // A collapsed item keeps its box but loses its size, and it must not keep a gap either.\n const visible = extents.filter((extent) => extent > 0.5).length;\n\n if (visible < 2) {\n this.publishGap(0);\n return;\n }\n\n const content = extents.reduce((sum, extent) => sum + extent, 0);\n const free = this.contentExtent(this.element, vertical)\n - this.paddingExtent(layout, vertical)\n - this.siblingExtent(layout, container, vertical)\n - this.paddingExtent(container, vertical)\n - content;\n\n this.publishGap(free / (visible - 1));\n }\n\n private publishGap(gap: number): void {\n // Round down, so a fraction of a pixel never pushes the last item past the container.\n const value = Math.max(0, Math.floor(gap * 100) / 100);\n\n if (value === this.lastGap) {\n return;\n }\n\n this.lastGap = value;\n this.element.style.setProperty('--md-toolbar-gap-free', `${value}px`);\n }\n\n private extent(element: HTMLElement, vertical: boolean): number {\n const rect = element.getBoundingClientRect();\n\n return vertical ? rect.height : rect.width;\n }\n\n private contentExtent(element: HTMLElement, vertical: boolean): number {\n const size = vertical ? element.clientHeight : element.clientWidth;\n\n return Math.max(0, size - this.paddingExtent(element, vertical));\n }\n\n private paddingExtent(element: HTMLElement, vertical: boolean): number {\n const style = getComputedStyle(element);\n const start = parseFloat(vertical ? style.paddingTop : style.paddingLeft) || 0;\n const end = parseFloat(vertical ? style.paddingBottom : style.paddingRight) || 0;\n\n return start + end;\n }\n\n /** What the other children of the layout take, the flex gap that separates them included. */\n private siblingExtent(layout: HTMLElement, container: HTMLElement, vertical: boolean): number {\n const style = getComputedStyle(layout);\n const gap = parseFloat(vertical ? style.rowGap : style.columnGap) || 0;\n\n return (Array.from(layout.children) as HTMLElement[])\n .filter((child) => child !== container)\n .reduce((sum, child) => sum + this.extent(child, vertical) + gap, 0);\n }\n\n private watchPersistentItems(element: HTMLElement): void {\n this.persistentObserver?.disconnect();\n\n const update = () => {\n this.hasPersistentItem.set(!!element.querySelector('.md3-toolbar-slots [md3-toolbar-persistent]'));\n };\n\n update();\n\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n this.persistentObserver = new MutationObserver(update);\n this.persistentObserver.observe(element, {\n childList: true,\n subtree: true,\n attributeFilter: ['md3-toolbar-persistent'],\n });\n }\n\n private checkConfiguration(): void {\n const explicit = this.orientation();\n const orientation = this.effectiveOrientation();\n\n if (this.isRailRegion() && !this.isFloating()) {\n this.warn('a docked toolbar needs the full window width, so it belongs in a scaffold bar region, not a rail.');\n }\n\n if (explicit === 'horizontal' && this.isRailRegion()) {\n this.warn('a horizontal toolbar does not fit a scaffold rail region. Move it to a bar region, or drop the orientation input.');\n }\n\n if (explicit === 'vertical' && this.isBarRegion()) {\n this.warn('a vertical toolbar does not fit a scaffold bar region. Move it to a rail region, or drop the orientation input.');\n }\n\n if (this.scrollAction() !== 'none' && orientation === 'vertical') {\n this.warn('a vertical toolbar ignores scroll-action.');\n }\n\n if (this.scrollAction() === 'collapse' && this.isFloating() && !this.canCollapse()) {\n this.warn('scroll-action=\"collapse\" needs a FAB, or one item with the md3-toolbar-persistent attribute. The toolbar will hide instead.');\n }\n\n if (this.scrollAction() === 'collapse' && !this.isFloating()) {\n this.warn('a docked toolbar cannot collapse to a FAB. The toolbar will hide instead.');\n }\n }\n\n private warn(message: string): void {\n console.warn(`[md3-toolbar] ${message}`);\n }\n}\n","<div class=\"md3-toolbar-layout\" #layout>\n @if (isFloating()) {\n <ng-content select=\"[md3-fab]\"></ng-content>\n }\n \n <div class=\"md3-toolbar-container\" #container>\n <div class=\"md3-toolbar-slots\" #slots>\n <ng-content select=\"md3-toolbar-item\"></ng-content>\n </div>\n </div>\n</div>\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: 'md3-toolbar-item',\n})\nexport class ToolbarItem {\n}\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 { 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 holds the content.\n *\n * The content is an `md3-layout`. The layout places the regions — the bar rows for an app bar\n * or a toolbar, the rail columns, and the panes where side sheets open — so the dialog itself\n * places nothing but the content. A content root that is not a layout gets a warning in\n * development mode, and the shell falls back to panes of its own, so a side sheet never opens\n * behind the dialog where nobody can see 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 mainPane = viewChild<ElementRef<HTMLElement>>('mainPane');\n private readonly startOutlet = viewChild('startOutlet', { read: CdkPortalOutlet });\n private readonly endOutlet = viewChild('endOutlet', { read: CdkPortalOutlet });\n private readonly sheets = inject(SheetsService);\n\n /** True while the shell holds the side sheet outlets, which happens without a layout only. */\n private ownsSideSheetOutlets = false;\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 // The content is attached by now, so the layout it brings has already taken the\n // outlets. Its panes sit under the bar regions, which is where a side sheet belongs.\n const layout = this.findContentLayout();\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n this.checkContentLayout(layout);\n }\n\n if (layout) {\n return;\n }\n\n // No layout, so the shell keeps the dialog self-sufficient. Without this the next side\n // sheet would open in the outlet underneath — the page scaffold, behind the dialog.\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n\n if (startOutlet) {\n this.sheets.registerSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.registerSideSheetOutlet('end', endOutlet);\n }\n\n this.ownsSideSheetOutlets = !!startOutlet || !!endOutlet;\n }\n\n public override ngOnDestroy(): void {\n if (this.ownsSideSheetOutlets) {\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.ownsSideSheetOutlets = false;\n }\n\n super.ngOnDestroy();\n }\n\n /**\n * The layout at the root of the content, if the content brought one.\n *\n * The root is either the layout itself, or the component that holds it — a dialog is\n * normally opened with a component whose own template starts with `md3-layout`.\n */\n private findContentLayout(): HTMLElement | null {\n const content = this.mainPane()?.nativeElement.firstElementChild as HTMLElement | null;\n\n if (!content) {\n return null;\n }\n\n if (content.tagName === 'MD3-LAYOUT') {\n return content;\n }\n\n const root = content.firstElementChild as HTMLElement | null;\n\n return root?.tagName === 'MD3-LAYOUT' ? root : null;\n }\n\n private checkContentLayout(layout: HTMLElement | null): void {\n if (layout) {\n return;\n }\n\n console.warn(\n '[md3-fullscreen-dialog] the content of a full screen dialog should start with '\n + 'md3-layout. Without it the dialog has no bar and no rail region, so an app bar or '\n + 'a toolbar has nowhere to go, and the content does not scroll on its own.',\n );\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\" #mainPane>\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';\n\n@Component({\n selector: 'md3-dialog-body',\n imports: [\n ],\n templateUrl: './dialog-body.html',\n styleUrl: './dialog-body.scss',\n host: {\n 'class': 'md3-scrollable',\n },\n})\nexport class DialogBody {\n}\n","<ng-content></ng-content>","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 { 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.bottomSafeInset() + (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/toolbar-type.type';\nexport * from './types/toolbar-color.type';\nexport * from './types/toolbar-orientation.type';\nexport * from './types/toolbar-alignment.type';\nexport * from './types/toolbar-scroll-action.type';\nexport * from './types/toolbar-region.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/bottom-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/viewport.service';\nexport * from './foundations/layout.service';\nexport * from './foundations/layout/layout';\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// toolbar\nexport * from './components/toolbar/toolbar';\nexport * from './components/toolbar/toolbar-item';\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';\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';\nexport * from './components/sheets/bottom-sheet/bottom-sheet-ref';\nexport * from './components/sheets/bottom-sheet/bottom-sheet.service';\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":["clampIndex","PANEL_CLASS","OPENING_CLASS","CdkDialog","i1.LayoutService","i1.StateComponent"],"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/viewport.service.ts","../../../projects/ngx-md3/src/lib/foundations/layout.service.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet-ref.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet-snap.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet-surface.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet-surface.html","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet.html","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/standard-bottom-sheet.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/standard-bottom-sheet.html","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet-outlet.ts","../../../projects/ngx-md3/src/lib/components/sheets/bottom-sheet/bottom-sheet.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/layout/layout.ts","../../../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/dialog/dialog-ref.ts","../../../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/toolbar/toolbar.ts","../../../projects/ngx-md3/src/lib/components/toolbar/toolbar.html","../../../projects/ngx-md3/src/lib/components/toolbar/toolbar-item.ts","../../../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.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/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 { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map, startWith } 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/**\n * The state of the window and of the document, for the whole application.\n *\n * This service is a singleton on purpose. A layout region can appear more than once — a page\n * scaffold, and a contained layout inside a full screen dialog — and each one keeps its own\n * scroll and inset state in its own {@link LayoutService}. The window size, the breakpoints,\n * the reading direction and the color scheme belong to the document, so they live here and\n * every layout reads the same values.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ViewportService {\n private readonly document = inject(DOCUMENT);\n private readonly breakpointObserver = inject(BreakpointObserver);\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 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\n public setDirection(direction: 'ltr' | 'rtl'): void {\n this.document.documentElement.dir = direction;\n this.direction.set(direction);\n }\n}\n","import { effect, inject, Injectable, signal, computed, untracked } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter, Subscription } from 'rxjs';\nimport { Md3NavigationMode, ViewportService } from './viewport.service';\n\nexport type FloatingBarSide = 'blockStart' | 'blockEnd';\n\nexport interface FloatingInset {\n blockStart: number;\n blockEnd: number;\n}\n\nexport type { Md3NavigationMode };\n\n/**\n * The state of one layout container: what its main pane scrolls, and what its floating bars\n * cover.\n *\n * The service is provided at the root, and the page scaffold uses that root instance. A\n * contained layout — `md3-layout`, the one a full screen dialog holds — provides its own\n * instance instead, so a toolbar inside it reads the scroll and the insets of that layout and\n * never of the page behind it.\n *\n * The window size, the breakpoints, the reading direction and the color scheme belong to the\n * document, not to a container. They live in {@link ViewportService}, and every instance of\n * this service exposes the same signals, so an instance stays a complete view of the layout.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LayoutService {\n private readonly viewportService = inject(ViewportService);\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 mainPaneSub?: Subscription;\n private mainPaneEl?: HTMLElement;\n private panesContainerResizeObserver?: ResizeObserver;\n private panesContainerResizeListener?: () => void;\n\n /** Floating bars currently registered, keyed by the measured element. */\n private readonly floatingBars = new Map<HTMLElement, { side: FloatingBarSide; observer: ResizeObserver; }>();\n\n /** How far the main pane must move before the scroll direction flips. Stops jitter. */\n private static readonly scrollDirectionThreshold = 64;\n private scrollPosition = 0;\n\n readonly mainScrollTop = signal<number>(0);\n readonly mainIsScrolled = computed<boolean>(() => this.mainScrollTop() > 0);\n\n /**\n * True while the main pane moves down, false while it moves up. A small threshold keeps\n * a jitter from flipping the value. Components that react to scrolling — the app bar and\n * the toolbar — read this, so they can never disagree.\n */\n readonly isScrollingDown = signal<boolean>(false);\n\n /**\n * Distance, in pixels, between the bottom of the container and the bottom edge of\n * the .md3-panes-container — i.e. whatever the bottom bar currently reserves, or 0 when\n * there is none. Overlay-based components anchored to the bottom (like Snackbar) read\n * this so they never render lower than the panes container.\n */\n readonly bottomInset = signal<number>(0);\n\n /**\n * Space a floating bar covers but does not reserve, per logical block side.\n *\n * A floating toolbar in a bar region leaves the layout flow, so its grid track collapses\n * and the content flows under it. This signal reports what it covers, so the layout can\n * pad the main pane and overlays can stay clear of it.\n *\n * A floating toolbar in a *rail* region stays in the flow and reserves its own space, so\n * it never appears here.\n */\n readonly floatingInset = signal<FloatingInset>({ blockStart: 0, blockEnd: 0 });\n\n /**\n * The distance from the bottom that an anchored overlay must keep clear. It covers both\n * the reserved bottom bar and any floating bottom bar over it.\n */\n readonly bottomSafeInset = computed<number>(() => this.bottomInset() + this.floatingInset().blockEnd);\n\n // The state of the window and of the document. It is shared by every layout, so these are\n // the same signals on every instance of this service.\n public readonly viewport = this.viewportService.viewport;\n public readonly widthClass = this.viewportService.widthClass;\n public readonly heightClass = this.viewportService.heightClass;\n public readonly direction = this.viewportService.direction;\n public readonly isCompact = this.viewportService.isCompact;\n public readonly isMedium = this.viewportService.isMedium;\n public readonly isExpanded = this.viewportService.isExpanded;\n public readonly isLarge = this.viewportService.isLarge;\n public readonly isExtraLarge = this.viewportService.isExtraLarge;\n public readonly isPortrait = this.viewportService.isPortrait;\n public readonly isLandscape = this.viewportService.isLandscape;\n public readonly preferredNavigationMode = this.viewportService.preferredNavigationMode;\n public darkMode = this.viewportService.darkMode;\n\n constructor() {\n // Keep the scroll direction in step with the position. Anything that writes\n // mainScrollTop drives it, so the app bar and the toolbar always agree.\n effect(() => {\n this.updateScrollDirection(this.mainScrollTop());\n });\n\n // Reset the main pane to the top after every completed navigation — otherwise a\n // scrolled-down list page leaves the next page's content scrolled down too, since the\n // pane itself never 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.viewportService.setDirection(direction);\n }\n\n private scrollMainPaneToTop(): void {\n this.mainPaneEl?.scrollTo({ top: 0 });\n this.mainScrollTop.set(0);\n this.resetScrollDirection();\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 this.resetScrollDirection();\n }\n\n private resetScrollDirection(): void {\n this.scrollPosition = 0;\n this.isScrollingDown.set(false);\n }\n\n private updateScrollDirection(scrollTop: number): void {\n if (scrollTop === this.scrollPosition) {\n return;\n }\n\n const offset = scrollTop - this.scrollPosition;\n\n if (Math.abs(offset) <= LayoutService.scrollDirectionThreshold) {\n return;\n }\n\n this.isScrollingDown.set(offset > 0);\n this.scrollPosition = scrollTop;\n }\n\n public registerPanesContainer(element: HTMLElement): void {\n this.unregisterPanesContainer();\n\n const update = () => {\n const rect = element.getBoundingClientRect();\n const bottom = element.ownerDocument.defaultView?.innerHeight ?? 0;\n this.bottomInset.set(Math.max(0, Math.round(bottom - 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 /**\n * Register a floating bar so the layout and the overlays know what it covers.\n *\n * Call this for a floating toolbar in a *bar* region only. A rail region keeps the toolbar\n * in the layout flow, so it reserves its space and needs no inset.\n */\n public registerFloatingBar(element: HTMLElement, side: FloatingBarSide): void {\n this.unregisterFloatingBar(element);\n\n const observer = new ResizeObserver(() => this.measureFloatingBars());\n observer.observe(element);\n\n this.floatingBars.set(element, { side, observer });\n this.measureFloatingBars();\n }\n\n public unregisterFloatingBar(element: HTMLElement): void {\n const entry = this.floatingBars.get(element);\n\n if (!entry) {\n return;\n }\n\n entry.observer.disconnect();\n this.floatingBars.delete(element);\n this.measureFloatingBars();\n }\n\n private measureFloatingBars(): void {\n let blockStart = 0;\n let blockEnd = 0;\n\n for (const [element, entry] of this.floatingBars) {\n const size = this.measureBlockSize(element);\n\n if (entry.side === 'blockStart') {\n blockStart = Math.max(blockStart, size);\n } else {\n blockEnd = Math.max(blockEnd, size);\n }\n }\n\n // Read the current value untracked. A component registers its floating bar from an\n // effect, so a tracked read would make that effect depend on the signal that the same\n // run writes. The cleanup measures an empty map and writes 0, the body measures the bar\n // and writes its size, and the effect dirties itself again on every run. That loop never\n // settles, and change detection never finishes.\n const current = untracked(this.floatingInset);\n\n // Only write on a real change. The main pane padding reads this value, and padding\n // changes the panes container size, which fires the observer again.\n if (current.blockStart === blockStart && current.blockEnd === blockEnd) {\n return;\n }\n\n this.floatingInset.set({ blockStart, blockEnd });\n }\n\n /**\n * `offsetHeight` ignores transforms. So a toolbar that scrolling has hidden or collapsed\n * still reports its expanded size, and the content padding never moves while the user\n * scrolls.\n */\n private measureBlockSize(element: HTMLElement): number {\n if (typeof getComputedStyle === 'undefined') {\n return element.offsetHeight || 0;\n }\n\n const styles = getComputedStyle(element);\n const start = Number.parseFloat(styles.marginBlockStart) || 0;\n const end = Number.parseFloat(styles.marginBlockEnd) || 0;\n\n return Math.max(0, Math.round(element.offsetHeight + start + end));\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 { DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentRef, InjectionToken, signal, Signal, Type } from '@angular/core';\nimport { filter, Observable, Subject, take, takeUntil } from 'rxjs';\nimport {\n BottomSheetConfig,\n BottomSheetState,\n BottomSheetSurfaceHost,\n StandardBottomSheetHost,\n} from '../../../interfaces/bottom-sheet-config.interface';\n\nexport const BOTTOM_SHEET_DATA = new InjectionToken<unknown>('MD3_BOTTOM_SHEET_DATA');\nexport const BOTTOM_SHEET_CONFIG = new InjectionToken<BottomSheetConfig>('MD3_BOTTOM_SHEET_CONFIG');\nexport const BOTTOM_SHEET_COMPONENT = new InjectionToken<Type<unknown>>('MD3_BOTTOM_SHEET_COMPONENT');\n\n/** Long enough to outlast the surface transition, which the transitionend listener usually beats. */\nconst BOTTOM_SHEET_EXIT_ANIMATION_FALLBACK_MS = 600;\nconst BOTTOM_SHEET_DRAGGING_CLASS = 'md3-bottom-sheet-dragging';\n\n/** A modal sheet has one height, so it reports the same state a standard sheet does when open. */\nconst ALWAYS_EXPANDED: Signal<BottomSheetState> = signal<BottomSheetState>('expanded').asReadonly();\n\n/**\n * What both kinds of bottom sheet have in common: closing once, animating out before the shell\n * goes away, and reporting the result. The two shells differ in what they are hosted by — a CDK\n * overlay or a scaffold outlet — so each subclass owns its own exit and teardown.\n *\n * This class stays the DI token, so a component written for one kind of sheet can be opened as\n * the other without changing how it injects its reference.\n */\nexport abstract class BottomSheetRef<T = unknown, R = unknown> {\n protected readonly closed = new Subject<R | undefined>();\n protected closeStarted = false;\n private closeSettled = false;\n\n /** Surface hosting the sheet. Filled in by BottomSheetService once the shell is created. */\n public sheetInstance?: BottomSheetSurfaceHost;\n /** Filled by BottomSheetService after the sheet component is attached. */\n public componentInstance?: T;\n\n /** Whether the sheet started closing. */\n public get isClosing(): boolean {\n return this.closeStarted;\n }\n\n /** Height the sheet is resting at. A modal sheet is only ever fully open. */\n public get state(): Signal<BottomSheetState> {\n return ALWAYS_EXPANDED;\n }\n\n /** Closes the sheet. The promise resolves once the exit animation is done. */\n public close(result?: R): Promise<void> {\n if (this.closeStarted) {\n return Promise.resolve();\n }\n\n this.closeStarted = true;\n\n return this.startCloseAnimation().then(() => this.finishClose(result));\n }\n\n public afterClosed(): Observable<R | undefined> {\n return this.closed.asObservable();\n }\n\n /**\n * Wires the shell to this reference. Called by BottomSheetService, since the shell is\n * created before this reference exists and cannot reach it through DI.\n */\n public attachContainer(container: BottomSheetSurfaceHost): void {\n this.sheetInstance = container;\n\n container.dismissed.pipe(take(1)).subscribe(() => this.close());\n }\n\n /** Moves a standard sheet to its expanded height. Modal sheets have only one height. */\n public expand(): void {\n }\n\n /** Moves a standard sheet back to its collapsed height. */\n public collapse(): void {\n }\n\n /** Switches a standard sheet between its two heights. */\n public toggle(): void {\n }\n\n public setCollapsedHeight(height: number | string): void {\n }\n\n public setExpandedHeight(height: number | string): void {\n }\n\n public setDismissible(value: boolean): void {\n }\n\n protected abstract startCloseAnimation(): Promise<void>;\n\n protected abstract finishClose(result?: R): void;\n\n /** Resolves when the surface finished animating, with a timeout as a safety net. */\n protected waitForSurfaceAnimation(fallback?: HTMLElement | null): Promise<void> {\n const surface = this.sheetInstance?.surfaceElement ?? fallback ?? null;\n\n if (!surface) {\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n let isResolved = false;\n const timeoutId = setTimeout(done, BOTTOM_SHEET_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 sheet is gone. */\n protected settle(result?: R): void {\n if (this.closeSettled) {\n return;\n }\n\n this.closeStarted = true;\n this.closeSettled = true;\n this.closed.next(result);\n this.closed.complete();\n }\n}\n\n/**\n * A modal bottom sheet is a single overlay, not a stack like dialogs can be, so this is a\n * smaller version of DialogRef: no hide/show, no full screen variant, closing is always the\n * only way out.\n */\nexport class ModalBottomSheetRef<T = unknown, R = unknown> extends BottomSheetRef<T, R> {\n constructor(\n private readonly cdkRef: CdkDialogRef<R, T>,\n ) {\n super();\n\n this.cdkRef.closed.pipe(take(1)).subscribe((result) => this.settle(result));\n this.connectCloseEvents();\n }\n\n /** Overlay hosting the sheet, useful to reach the panel and the scrim. */\n public get overlayRef(): OverlayRef {\n return this.cdkRef.overlayRef;\n }\n\n public override attachContainer(container: BottomSheetSurfaceHost): void {\n super.attachContainer(container);\n\n container.dragProgress.pipe(\n takeUntil(this.closed),\n ).subscribe((progress) => this.trackDragProgress(progress));\n }\n\n protected startCloseAnimation(): Promise<void> {\n const overlayRef = this.cdkRef.overlayRef;\n\n // Closing during a drag, from the Escape key for instance, leaves the scrim held\n // where the drag left it, so it is handed back to CSS before the exit animation.\n overlayRef.backdropElement?.classList.remove(BOTTOM_SHEET_DRAGGING_CLASS);\n overlayRef.backdropElement?.style.removeProperty('--md3-drag-remaining');\n\n overlayRef.overlayElement.classList.add('md3-bottom-sheet-closing');\n overlayRef.backdropElement?.classList.add('md3-bottom-sheet-closing');\n this.sheetInstance?.setActive(false);\n\n return this.waitForSurfaceAnimation(overlayRef.overlayElement);\n }\n\n protected finishClose(result?: R): void {\n this.cdkRef.close(result);\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 sheet can animate out.\n this.cdkRef.backdropClick.pipe(take(1)).subscribe(() => this.close());\n\n this.cdkRef.keydownEvents.pipe(\n filter((event) => event.key === 'Escape' && !hasModifierKey(event)),\n take(1),\n ).subscribe((event) => {\n event.preventDefault();\n this.close();\n });\n }\n\n /** Fades the scrim along with the sheet being dragged, and hands it back to CSS on release. */\n private trackDragProgress(progress: number): void {\n const backdrop = this.cdkRef.overlayRef.backdropElement;\n\n if (!backdrop || this.closeStarted) {\n return;\n }\n\n if (progress <= 0) {\n backdrop.classList.remove(BOTTOM_SHEET_DRAGGING_CLASS);\n backdrop.style.removeProperty('--md3-drag-remaining');\n\n return;\n }\n\n backdrop.classList.add(BOTTOM_SHEET_DRAGGING_CLASS);\n backdrop.style.setProperty('--md3-drag-remaining', `${1 - progress}`);\n }\n}\n\n/**\n * A standard bottom sheet lives in a scaffold outlet rather than an overlay, so there is no\n * scrim to fade and nothing to dispose but the component itself. In exchange it can be moved\n * between its two heights while it is open.\n */\nexport class StandardBottomSheetRef<T = unknown, R = unknown> extends BottomSheetRef<T, R> {\n private sheetComponentRef?: ComponentRef<unknown>;\n private host?: StandardBottomSheetHost;\n\n constructor(\n private readonly onClosed: () => void,\n ) {\n super();\n }\n\n public override get state(): Signal<BottomSheetState> {\n return this.host?.state ?? ALWAYS_EXPANDED;\n }\n\n /** Called by BottomSheetService once the shell has been created in the outlet. */\n public attachSheet(componentRef: ComponentRef<unknown>, host: StandardBottomSheetHost): void {\n this.sheetComponentRef = componentRef;\n this.host = host;\n\n this.attachContainer(host);\n }\n\n public override expand(): void {\n this.host?.expand();\n }\n\n public override collapse(): void {\n this.host?.collapse();\n }\n\n public override toggle(): void {\n this.host?.toggle();\n }\n\n public override setCollapsedHeight(height: number | string): void {\n this.host?.setCollapsedHeight(height);\n }\n\n public override setExpandedHeight(height: number | string): void {\n this.host?.setExpandedHeight(height);\n }\n\n public override setDismissible(value: boolean): void {\n this.host?.setDismissible(value);\n }\n\n /**\n * Tears the sheet down without an exit animation, for when the outlet holding it is going\n * away and there is nothing left to animate in.\n */\n public dispose(result?: R): void {\n if (this.closeStarted && !this.sheetComponentRef) {\n return;\n }\n\n this.closeStarted = true;\n this.finishClose(result);\n }\n\n protected startCloseAnimation(): Promise<void> {\n this.sheetInstance?.setActive(false);\n\n return this.waitForSurfaceAnimation();\n }\n\n protected finishClose(result?: R): void {\n this.sheetComponentRef?.destroy();\n this.sheetComponentRef = undefined;\n this.host = undefined;\n this.onClosed();\n this.settle(result);\n }\n}\n","/** Movement shorter than this is still a tap rather than a drag. */\nexport const DRAG_START_THRESHOLD_PX = 4;\n\n/** Part of the segment being crossed that a drag has to cover to commit to the next snap point. */\nexport const SETTLE_DISTANCE_RATIO = 0.4;\n\n/** Speed, in pixels per millisecond, that carries the sheet to the next snap point on its own. */\nexport const FLING_VELOCITY = 0.5;\n\n/** A release this long after the last move is a stop, so the speed before it no longer counts. */\nexport const VELOCITY_TIMEOUT_MS = 100;\n\nexport interface SnapSettleInput {\n /**\n * Snap offsets in pixels below the fully expanded position, ascending: expanded first,\n * then collapsed, then dismissed when dragging that far is allowed.\n */\n points: number[];\n\n /** Offset the drag started from. */\n origin: number;\n\n /** Offset the drag ended at. */\n offset: number;\n\n /** Signed speed of the last move in pixels per millisecond, positive downwards. */\n velocity: number;\n\n /** Time between the last move and the release, so a finger that stopped is not a fling. */\n idleTime: number;\n}\n\n/**\n * Picks the snap point a released drag settles on, as an index into `points`.\n *\n * A drag only ever moves one point at a time: it commits to the neighbour in the direction of\n * travel once it has covered enough of the gap, or immediately when it was thrown hard enough,\n * and otherwise falls back to where it started. A modal sheet is the two-point case of this —\n * resting and dismissed — which is why generalizing the gesture leaves it behaving the same.\n */\nexport function settleTarget(input: SnapSettleInput): number {\n const { points, origin, offset, velocity, idleTime } = input;\n\n if (points.length === 0) {\n return 0;\n }\n\n const originIndex = nearestPointIndex(points, origin);\n\n if (idleTime < VELOCITY_TIMEOUT_MS && Math.abs(velocity) > FLING_VELOCITY) {\n return clampIndex(originIndex + (velocity > 0 ? 1 : -1), points.length);\n }\n\n const direction = Math.sign(offset - points[originIndex]);\n\n if (direction === 0) {\n return originIndex;\n }\n\n const targetIndex = clampIndex(originIndex + direction, points.length);\n const segment = Math.abs(points[targetIndex] - points[originIndex]);\n const travelled = Math.abs(offset - points[originIndex]);\n\n return segment > 0 && travelled >= segment * SETTLE_DISTANCE_RATIO ? targetIndex : originIndex;\n}\n\n/** Snap point the given offset sits closest to. Ties go to the lower index. */\nexport function nearestPointIndex(points: number[], offset: number): number {\n let nearest = 0;\n\n for (let index = 1; index < points.length; index++) {\n if (Math.abs(points[index] - offset) < Math.abs(points[nearest] - offset)) {\n nearest = index;\n }\n }\n\n return nearest;\n}\n\nfunction clampIndex(index: number, length: number): number {\n return Math.min(Math.max(index, 0), length - 1);\n}\n","import { Component, computed, effect, ElementRef, inject, input, NgZone, signal, viewChild } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport {\n BottomSheetState,\n BottomSheetSurfaceHost,\n BottomSheetType,\n} from '../../../interfaces/bottom-sheet-config.interface';\nimport { DRAG_START_THRESHOLD_PX, settleTarget } from './bottom-sheet-snap';\n\n/**\n * The MD3 bottom sheet surface: the rounded panel, its drag handle and the gesture that moves\n * it. Both shells wrap this — the modal one inside a CDK dialog container, the standard one\n * inside a scaffold outlet — and project their own portal outlet into it, which is what lets\n * the CDK keep the outlet in its own template while the markup lives here once.\n *\n * The surface reports gestures through observables instead of acting on them, because it is\n * created before the sheet's reference exists and cannot reach it through DI.\n */\n@Component({\n selector: 'md3-bottom-sheet-surface',\n imports: [],\n templateUrl: './bottom-sheet-surface.html',\n styleUrl: './bottom-sheet-surface.scss',\n host: {\n '[class.md3-mode-standard]': 'mode() === \"standard\"',\n '[class.md3-mode-modal]': 'mode() === \"modal\"',\n '[class.md3-hide-handle]': '!showHandle()',\n '[class.md3-draggable]': 'allowGestures()',\n '[class.md3-dragging]': 'isDragging()',\n '[class.md3-expanded]': 'state() === \"expanded\"',\n },\n})\nexport class BottomSheetSurface implements BottomSheetSurfaceHost {\n private readonly surface = viewChild<ElementRef<HTMLElement>>('surface');\n private readonly zone = inject(NgZone);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n private readonly dismissedSheet = new Subject<void>();\n private readonly draggedSheet = new Subject<number>();\n private readonly settledSheet = new Subject<BottomSheetState>();\n\n public readonly mode = input<BottomSheetType>('modal');\n public readonly showHandle = input<boolean>(true);\n public readonly allowGestures = input<boolean>(true);\n public readonly dismissible = input<boolean>(false);\n public readonly initialState = input<BottomSheetState>('collapsed');\n public readonly scheme = input<'inherit' | 'dark' | 'light'>('inherit');\n public readonly direction = input<null | 'ltr' | 'rtl'>(null);\n public readonly handleLabel = input<string>('Resize sheet');\n public readonly controlsId = input<string>('');\n\n protected readonly isActive = signal<boolean>(false);\n protected readonly isDragging = signal<boolean>(false);\n\n /** How far below the fully expanded position the sheet currently sits, in pixels. */\n private readonly dragOffset = signal<number>(0);\n\n /**\n * Snap offsets in pixels, ascending: expanded, then collapsed for a standard sheet, then\n * dismissed where dragging that far is allowed. Measured rather than derived from the\n * configured CSS lengths, so `em`, `dvh` and the rest resolve themselves.\n */\n private readonly snapPoints = signal<number[]>([0]);\n private readonly settledIndex = signal<number>(0);\n\n public readonly state = computed<BottomSheetState>(() => {\n return this.settledIndex() === 0 ? 'expanded' : 'collapsed';\n });\n\n protected readonly isHandleInteractive = computed<boolean>(() => {\n return this.mode() === 'standard' && this.allowGestures() && this.showHandle();\n });\n\n /**\n * Only set when a drag has to be seen out past where the stylesheet would leave the sheet,\n * so the exit carries on the way the drag was going instead of doubling back.\n */\n private readonly exitTransform = signal<string | null>(null);\n\n /**\n * Left to the stylesheet unless the component has a position of its own to impose — a drag\n * in progress, or the resting offset of a collapsed standard sheet. The closed and fully\n * open positions stay in CSS so they apply as soon as the element is inserted, which is\n * what the enter transition needs to have somewhere to run from.\n */\n protected readonly surfaceTransform = computed<string | null>(() => {\n if (!this.isActive()) {\n return this.exitTransform();\n }\n\n const offset = this.dragOffset();\n\n return offset > 0 ? `translateY(${offset}px)` : null;\n });\n\n /** Pointer currently dragging the sheet, if there is one. */\n private pointerId?: number;\n /** Scrollable the drag started over, which owns the gesture while it has room to scroll. */\n private scroller: HTMLElement | null = null;\n private startY = 0;\n private lastY = 0;\n private lastTimestamp = 0;\n private velocity = 0;\n private originOffset = 0;\n private isPastThreshold = false;\n /** Set once the sheet is on its way out, so a late resize cannot pull it back into view. */\n private isExiting = false;\n\n public readonly dismissed: Observable<void> = this.dismissedSheet.asObservable();\n public readonly dragProgress: Observable<number> = this.draggedSheet.asObservable();\n public readonly stateChanges: Observable<BottomSheetState> = this.settledSheet.asObservable();\n\n constructor() {\n effect(() => {\n if (this.mode() === 'standard') {\n this.exitTransform.set('translateY(100%)');\n }\n });\n\n // Heights are CSS lengths, so anything that resizes the surface — a viewport change, a\n // new expanded height — moves the snap points with it and the sheet has to settle again.\n effect((onCleanup) => {\n const surface = this.el.nativeElement;\n const observer = new ResizeObserver(() => this.remeasure());\n\n observer.observe(surface);\n\n onCleanup(() => observer.disconnect());\n });\n }\n\n public get surfaceElement(): HTMLElement | null {\n return this.surface()?.nativeElement ?? null;\n }\n\n public startEnterAnimation(): void {\n requestAnimationFrame(() => {\n this.measure();\n\n // A modal sheet has one resting height, so only a standard sheet can open collapsed.\n const opensCollapsed = this.mode() === 'standard' && this.initialState() === 'collapsed';\n\n this.snapTo(opensCollapsed ? this.collapsedIndex() : 0, false);\n this.isActive.set(true);\n });\n }\n\n public setActive(value: boolean): void {\n if (!value) {\n this.isExiting = true;\n }\n\n this.isActive.set(value);\n }\n\n public expand(): void {\n this.snapTo(0);\n }\n\n public collapse(): void {\n this.snapTo(this.collapsedIndex());\n }\n\n public toggle(): void {\n if (this.state() === 'expanded') {\n this.collapse();\n } else {\n this.expand();\n }\n }\n\n public destroy(): void {\n this.releasePointer();\n }\n\n protected onHandleKeydown(event: KeyboardEvent): void {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.expand();\n }\n\n // Collapsing is as far as the keyboard goes, even when a drag could dismiss the sheet:\n // there is no undo for a dismissal reached by arrow key.\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.collapse();\n }\n }\n\n protected onPointerDown(event: PointerEvent): void {\n // Only the first pointer down drags: a second finger, or a mouse button other than\n // the primary one, leaves context menus and multi-touch alone.\n if (!this.allowGestures() || this.pointerId !== undefined || !event.isPrimary) {\n return;\n }\n\n if (event.pointerType === 'mouse' && event.button !== 0) {\n return;\n }\n\n this.measure();\n\n this.pointerId = event.pointerId;\n this.startY = this.lastY = event.clientY;\n this.lastTimestamp = event.timeStamp;\n this.velocity = 0;\n this.originOffset = this.dragOffset();\n this.isPastThreshold = false;\n this.scroller = this.findScroller(event.target);\n\n // Tracking a drag at pointer rate has nothing to tell the rest of the application,\n // and the signals it writes schedule their own change detection.\n this.zone.runOutsideAngular(() => {\n this.surfaceElement?.addEventListener('touchmove', this.onTouchMove, { passive: false });\n window.addEventListener('pointermove', this.onPointerMove);\n window.addEventListener('pointerup', this.onPointerUp);\n window.addEventListener('pointercancel', this.onPointerCancel);\n });\n }\n\n private readonly onPointerMove = (event: PointerEvent): void => {\n if (event.pointerId !== this.pointerId) {\n return;\n }\n\n if (!this.isPastThreshold && !this.tryStartDrag(event)) {\n return;\n }\n\n const elapsed = event.timeStamp - this.lastTimestamp;\n\n if (elapsed > 0) {\n this.velocity = (event.clientY - this.lastY) / elapsed;\n this.lastY = event.clientY;\n this.lastTimestamp = event.timeStamp;\n }\n\n this.setDragOffset(this.clampToRange(this.originOffset + event.clientY - this.startY));\n };\n\n private readonly onPointerUp = (event: PointerEvent): void => {\n if (event.pointerId !== this.pointerId) {\n return;\n }\n\n if (!this.isPastThreshold) {\n this.releasePointer();\n\n return;\n }\n\n const points = this.snapPoints();\n const target = settleTarget({\n points,\n origin: this.originOffset,\n offset: this.dragOffset(),\n velocity: this.velocity,\n idleTime: event.timeStamp - this.lastTimestamp,\n });\n\n this.releasePointer();\n\n if (target === this.dismissIndex()) {\n this.slideOut(points[target]);\n this.zone.run(() => this.dismissedSheet.next());\n } else {\n this.snapTo(target);\n }\n\n this.suppressClickAfterDrag();\n };\n\n private readonly onPointerCancel = (event: PointerEvent): void => {\n if (event.pointerId === this.pointerId) {\n const wasDragging = this.isPastThreshold;\n\n this.releasePointer();\n\n if (wasDragging) {\n this.snapTo(this.settledIndex());\n }\n }\n };\n\n /** Keeps the browser from scrolling or overscrolling underneath an ongoing drag. */\n private readonly onTouchMove = (event: TouchEvent): void => {\n if (this.isPastThreshold && event.cancelable) {\n event.preventDefault();\n }\n };\n\n /**\n * Decides who owns the gesture on the first move that leaves the tap threshold. Downward\n * moves over content that still has somewhere to scroll belong to the content, and so do\n * upward moves once the sheet is already as far up as it goes — in both cases the sheet\n * lets go of the gesture for good.\n */\n private tryStartDrag(event: PointerEvent): boolean {\n const distance = event.clientY - this.startY;\n\n if (Math.abs(distance) < DRAG_START_THRESHOLD_PX) {\n return false;\n }\n\n const isDownward = distance > 0;\n const isBlocked = isDownward\n ? (this.scroller?.scrollTop ?? 0) > 0\n : this.dragOffset() <= this.snapPoints()[0];\n\n if (isBlocked) {\n this.releasePointer();\n\n return false;\n }\n\n // Starting from where the threshold was crossed keeps the sheet from jumping under\n // the pointer on the first frame of the drag.\n this.startY = this.lastY = event.clientY;\n this.isPastThreshold = true;\n this.isDragging.set(true);\n\n return true;\n }\n\n /** Re-reads the geometry the snap points are derived from. */\n private measure(): void {\n const expanded = this.el.nativeElement.offsetHeight;\n\n if (expanded <= 0) {\n return;\n }\n\n if (this.mode() === 'modal') {\n this.snapPoints.set([0, expanded]);\n\n return;\n }\n\n // The peek strip a standard sheet reserves is the height of the element it was placed\n // in — the standard shell's host, which the scaffold row sizes to the collapsed height.\n // Measuring beats resolving the configured CSS length by hand.\n const collapsed = this.el.nativeElement.parentElement?.getBoundingClientRect().height ?? expanded;\n const points = [0, Math.max(0, expanded - collapsed)];\n\n if (this.dismissible()) {\n points.push(expanded);\n }\n\n this.snapPoints.set(points);\n }\n\n /** Settles the sheet again after its geometry moved underneath it. */\n public remeasure(): void {\n if (this.pointerId !== undefined || this.isExiting) {\n return;\n }\n\n this.measure();\n\n const points = this.snapPoints();\n const index = Math.min(this.settledIndex(), points.length - 1);\n\n this.settledIndex.set(index);\n this.dragOffset.set(points[index]);\n }\n\n private snapTo(index: number, notify: boolean = true): void {\n const points = this.snapPoints();\n const target = Math.min(Math.max(index, 0), points.length - 1);\n const previous = this.state();\n\n this.settledIndex.set(target);\n this.setDragOffset(points[target]);\n\n if (notify && this.state() !== previous) {\n this.zone.run(() => this.settledSheet.next(this.state()));\n }\n }\n\n /**\n * Sees the drag out of the viewport rather than back to a snap point, so a dismissed sheet\n * keeps going the way it was dragged. The fade comes from the exit animation the sheet's\n * reference starts right after, which finds the surface already on its way out.\n */\n private slideOut(offset: number): void {\n this.isExiting = true;\n this.exitTransform.set(`translateY(${offset}px)`);\n this.setDragOffset(offset);\n }\n\n private setDragOffset(offset: number): void {\n const dismissOffset = this.snapPoints()[this.dismissIndex() ?? -1];\n\n this.dragOffset.set(offset);\n this.draggedSheet.next(dismissOffset > 0 ? Math.min(1, offset / dismissOffset) : 0);\n }\n\n /** Index a drag has to reach for the sheet to be dismissed, when it can be at all. */\n private dismissIndex(): number | undefined {\n if (this.mode() === 'modal') {\n return 1;\n }\n\n return this.dismissible() ? this.snapPoints().length - 1 : undefined;\n }\n\n private collapsedIndex(): number {\n return Math.min(1, this.snapPoints().length - 1);\n }\n\n private clampToRange(offset: number): number {\n const points = this.snapPoints();\n\n return Math.min(Math.max(offset, points[0]), points[points.length - 1]);\n }\n\n private releasePointer(): void {\n if (this.pointerId === undefined) {\n return;\n }\n\n this.pointerId = undefined;\n this.isPastThreshold = false;\n this.scroller = null;\n this.isDragging.set(false);\n\n this.surfaceElement?.removeEventListener('touchmove', this.onTouchMove);\n window.removeEventListener('pointermove', this.onPointerMove);\n window.removeEventListener('pointerup', this.onPointerUp);\n window.removeEventListener('pointercancel', this.onPointerCancel);\n }\n\n /**\n * A drag that ended over a button would otherwise still click it, so the click that\n * follows the release is swallowed. Nothing else fires in between, and the listener is\n * dropped right after in case the release happened over something unclickable.\n */\n private suppressClickAfterDrag(): void {\n const surface = this.surfaceElement;\n\n if (!surface) {\n return;\n }\n\n const onClick = (event: MouseEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n surface.addEventListener('click', onClick, { capture: true, once: true });\n setTimeout(() => surface.removeEventListener('click', onClick, { capture: true }));\n }\n\n /** Nearest scrollable between the pointer and the surface, if the drag started over one. */\n private findScroller(target: EventTarget | null): HTMLElement | null {\n const surface = this.surfaceElement;\n let node = target instanceof HTMLElement ? target : null;\n\n while (node && surface?.contains(node)) {\n if (node.scrollHeight > node.clientHeight && this.isScrollable(node)) {\n return node;\n }\n\n node = node.parentElement;\n }\n\n return null;\n }\n\n private isScrollable(element: HTMLElement): boolean {\n const overflowY = getComputedStyle(element).overflowY;\n\n return overflowY === 'auto' || overflowY === 'scroll';\n }\n}\n","<div\n #surface\n class=\"md3-bottom-sheet-container\"\n [class.md3-active]=\"isActive()\"\n [class.md-scheme-dark]=\"scheme() === 'dark'\"\n [class.md-scheme-light]=\"scheme() === 'light'\"\n [style.transform]=\"surfaceTransform()\"\n [attr.dir]=\"direction() ?? null\"\n (pointerdown)=\"onPointerDown($event)\">\n @if (isHandleInteractive()) {\n <button\n type=\"button\"\n class=\"md3-bottom-sheet-handle\"\n [attr.aria-label]=\"handleLabel()\"\n [attr.aria-expanded]=\"state() === 'expanded'\"\n [attr.aria-controls]=\"controlsId() || null\"\n (click)=\"toggle()\"\n (keydown)=\"onHandleKeydown($event)\"></button>\n } @else {\n <div class=\"md3-bottom-sheet-handle\" aria-hidden=\"true\"></div>\n }\n <ng-content></ng-content>\n</div>\n","import { CdkDialogContainer } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { Component, inject, ViewChild } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BOTTOM_SHEET_CONFIG } from './bottom-sheet-ref';\nimport { BottomSheetSurface } from './bottom-sheet-surface';\nimport {\n BottomSheetConfig,\n BottomSheetContainer,\n BottomSheetState,\n} from '../../../interfaces/bottom-sheet-config.interface';\n\n/**\n * Modal bottom sheet shell. Like Dialog, it extends the CDK dialog container so focus\n * trapping, focus restoration and the ARIA attributes are handled by the CDK, while the\n * surface it wraps owns the MD3 panel, the drag handle and the animation. A modal sheet is\n * always an overlay above the page; the standard variant docks into the scaffold instead and\n * uses the same surface from a different shell.\n */\n@Component({\n selector: 'md3-bottom-sheet',\n imports: [\n CdkPortalOutlet,\n BottomSheetSurface,\n ],\n templateUrl: './bottom-sheet.html',\n styleUrl: './bottom-sheet.scss',\n})\nexport class BottomSheet extends CdkDialogContainer implements BottomSheetContainer {\n // Static, because BottomSheetService wires this shell to the sheet's reference as soon as\n // the CDK has created it, which is before any change detection has run over the view.\n @ViewChild(BottomSheetSurface, { static: true })\n private readonly surface!: BottomSheetSurface;\n\n protected readonly config = inject<BottomSheetConfig>(BOTTOM_SHEET_CONFIG, { optional: true }) ?? {};\n\n public get surfaceElement(): HTMLElement | null {\n return this.surface.surfaceElement;\n }\n\n public get dismissed(): Observable<void> {\n return this.surface.dismissed;\n }\n\n public get dragProgress(): Observable<number> {\n return this.surface.dragProgress;\n }\n\n public get stateChanges(): Observable<BottomSheetState> {\n return this.surface.stateChanges;\n }\n\n public startEnterAnimation(): void {\n this.surface.startEnterAnimation();\n }\n\n public setActive(value: boolean): void {\n this.surface.setActive(value);\n }\n\n public recaptureFocus(): void {\n this._recaptureFocus();\n }\n\n public override ngOnDestroy(): void {\n this.surface.destroy();\n super.ngOnDestroy();\n }\n}\n","<!-- The role and aria attributes live on the host element, applied by the CDK dialog container.\n The portal outlet stays in this template, as the CDK requires, and is projected into the\n shared surface. -->\n<md3-bottom-sheet-surface\n [showHandle]=\"config.handle ?? true\"\n [allowGestures]=\"config.gestures ?? true\"\n [scheme]=\"config.scheme ?? 'inherit'\"\n [direction]=\"config.direction ?? null\">\n <ng-template cdkPortalOutlet></ng-template>\n</md3-bottom-sheet-surface>\n","import { CdkPortalOutlet, ComponentPortal } from '@angular/cdk/portal';\nimport {\n Component,\n ComponentRef,\n effect,\n ElementRef,\n inject,\n Injector,\n isDevMode,\n OnDestroy,\n signal,\n Signal,\n Type,\n ViewChild,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BOTTOM_SHEET_CONFIG } from './bottom-sheet-ref';\nimport { BottomSheetSurface } from './bottom-sheet-surface';\nimport {\n BottomSheetConfig,\n BottomSheetState,\n StandardBottomSheetHost,\n} from '../../../interfaces/bottom-sheet-config.interface';\n\nlet nextRegionId = 0;\n\n/**\n * Standard bottom sheet shell: page furniture rather than a dialog. It docks into the\n * scaffold's sheet region and floats over the content from there, above the bottom bar and\n * without a scrim, leaving the page scrolling, clickable and focusable behind it. Nothing here\n * traps focus or handles Escape, which is the whole difference from the modal shell — the\n * surface, the handle and the gesture are shared.\n */\n@Component({\n selector: 'md3-standard-bottom-sheet',\n imports: [\n CdkPortalOutlet,\n BottomSheetSurface,\n ],\n templateUrl: './standard-bottom-sheet.html',\n styleUrl: './standard-bottom-sheet.scss',\n host: {\n 'role': 'region',\n '[attr.id]': 'regionId',\n '[attr.aria-label]': 'label() || null',\n '[attr.aria-labelledby]': 'labelledBy() || null',\n },\n})\nexport class StandardBottomSheet implements StandardBottomSheetHost, OnDestroy {\n @ViewChild(CdkPortalOutlet, { static: true })\n private readonly portalOutlet!: CdkPortalOutlet;\n\n @ViewChild(BottomSheetSurface, { static: true })\n private readonly surface!: BottomSheetSurface;\n\n protected readonly config = inject<BottomSheetConfig>(BOTTOM_SHEET_CONFIG, { optional: true }) ?? {};\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Named so the drag handle can point `aria-controls` at the region it expands. */\n public readonly regionId = `md3-bottom-sheet-${nextRegionId++}`;\n\n public readonly showHandle = signal<boolean>(this.config.handle ?? true);\n public readonly allowGestures = signal<boolean>(this.config.gestures ?? true);\n public readonly dismissible = signal<boolean>(this.config.dismissible ?? false);\n public readonly initialState = signal<BottomSheetState>(this.config.initialState ?? 'collapsed');\n public readonly label = signal<string>(this.config.label ?? '');\n public readonly labelledBy = signal<string>(this.config.labelledBy ?? '');\n public readonly collapsedHeight = signal<string>(toCssLength(this.config.collapsedHeight, '10em'));\n public readonly expandedHeight = signal<string>(toCssLength(this.config.expandedHeight, '70dvh'));\n\n /**\n * Whatever had focus when the sheet opened, so it can be handed back — but only if the\n * sheet still holds focus when it closes, rather than yanking it off whatever the user\n * moved on to in the meantime.\n */\n private readonly previouslyFocused = document.activeElement as HTMLElement | null;\n\n constructor() {\n effect(() => {\n const element = this.el.nativeElement;\n\n element.style.setProperty('--md3-bottom-sheet-collapsed-height', this.collapsedHeight());\n element.style.setProperty('--md3-bottom-sheet-expanded-height', this.expandedHeight());\n });\n\n if (isDevMode() && !this.config.label && !this.config.labelledBy) {\n console.warn(\n 'A standard bottom sheet without a `label` or `labelledBy` is not exposed as a '\n + 'landmark to assistive technology. Pass one in the sheet configuration.',\n );\n }\n }\n\n public get state(): Signal<BottomSheetState> {\n return this.surface.state;\n }\n\n public get surfaceElement(): HTMLElement | null {\n return this.surface.surfaceElement;\n }\n\n public get dismissed(): Observable<void> {\n return this.surface.dismissed;\n }\n\n public get dragProgress(): Observable<number> {\n return this.surface.dragProgress;\n }\n\n public get stateChanges(): Observable<BottomSheetState> {\n return this.surface.stateChanges;\n }\n\n public startEnterAnimation(): void {\n this.surface.startEnterAnimation();\n }\n\n public setActive(value: boolean): void {\n this.surface.setActive(value);\n }\n\n public expand(): void {\n this.surface.expand();\n }\n\n public collapse(): void {\n this.surface.collapse();\n }\n\n public toggle(): void {\n this.surface.toggle();\n }\n\n public setCollapsedHeight(value: number | string): void {\n this.collapsedHeight.set(toCssLength(value, '10em'));\n this.surface.remeasure();\n }\n\n public setExpandedHeight(value: number | string): void {\n this.expandedHeight.set(toCssLength(value, '70dvh'));\n this.surface.remeasure();\n }\n\n public setDismissible(value: boolean): void {\n this.dismissible.set(value);\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 ngOnDestroy(): void {\n this.surface.destroy();\n\n if (this.el.nativeElement.contains(document.activeElement)) {\n this.previouslyFocused?.focus();\n }\n }\n}\n\nfunction toCssLength(value: number | string | undefined, fallback: string): string {\n if (value === undefined) {\n return fallback;\n }\n\n return typeof value === 'number' ? `${value}px` : value;\n}\n","<md3-bottom-sheet-surface\n mode=\"standard\"\n [showHandle]=\"showHandle()\"\n [allowGestures]=\"allowGestures()\"\n [dismissible]=\"dismissible()\"\n [initialState]=\"initialState()\"\n [controlsId]=\"regionId\"\n [scheme]=\"config.scheme ?? 'inherit'\"\n [direction]=\"config.direction ?? null\">\n <ng-template cdkPortalOutlet></ng-template>\n</md3-bottom-sheet-surface>\n","import { Component, ComponentRef, Injector, ViewChild, ViewContainerRef } from '@angular/core';\nimport { StandardBottomSheet } from './standard-bottom-sheet';\n\n/**\n * Host attached into the scaffold's sheet outlet, where standard bottom sheets are created.\n * It is attached as soon as the outlet registers and takes no space at any point: the sheets\n * it holds are positioned against the region around it, so a replacement can open while the\n * sheet it replaces is still animating out without either of them disturbing the layout.\n */\n@Component({\n selector: 'md3-bottom-sheet-outlet',\n template: '<ng-container #container></ng-container>',\n styles: [`\n :host {\n display: block;\n }\n `],\n})\nexport class BottomSheetOutlet {\n @ViewChild('container', { read: ViewContainerRef, static: true })\n private readonly container!: ViewContainerRef;\n\n public createSheet(injector: Injector): ComponentRef<StandardBottomSheet> {\n const sheetComponentRef = this.container.createComponent(StandardBottomSheet, { injector });\n\n // The shell's view has to exist before its portal outlet can take the content.\n sheetComponentRef.changeDetectorRef.detectChanges();\n\n return sheetComponentRef;\n }\n}\n","import { Dialog as CdkDialog, DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { CdkPortalOutlet, ComponentPortal } from '@angular/cdk/portal';\nimport { ComponentRef, inject, Injectable, Injector, Type } from '@angular/core';\nimport { BottomSheet } from './bottom-sheet';\nimport { BottomSheetOutlet } from './bottom-sheet-outlet';\nimport {\n BOTTOM_SHEET_COMPONENT,\n BOTTOM_SHEET_CONFIG,\n BOTTOM_SHEET_DATA,\n BottomSheetRef,\n ModalBottomSheetRef,\n StandardBottomSheetRef,\n} from './bottom-sheet-ref';\nimport { BottomSheetConfig, BottomSheetState, BottomSheetType } from '../../../interfaces/bottom-sheet-config.interface';\n\ninterface ResolvedBottomSheetConfig<D = unknown> extends BottomSheetConfig<D> {\n data: D | undefined;\n bindDataToInputs: boolean;\n type: BottomSheetType;\n handle: boolean;\n gestures: boolean;\n dismissible: boolean;\n initialState: BottomSheetState;\n scheme: 'inherit' | 'dark' | 'light';\n direction: null | 'ltr' | 'rtl';\n injector: Injector;\n}\n\n/** An outlet a standard sheet can be opened in, with the host attached into it. */\ninterface BottomSheetOutletState {\n outlet: CdkPortalOutlet;\n hostComponentRef: ComponentRef<BottomSheetOutlet>;\n}\n\nconst PANEL_CLASS = 'md3-bottom-sheet-panel';\nconst OPENING_CLASS = 'md3-bottom-sheet-opening';\n\n/**\n * Opens bottom sheets, in either of the two ways MD3 describes them.\n *\n * A modal sheet is a CDK dialog anchored to the bottom of the viewport, the same way a regular\n * dialog is always an overlay, so that path mirrors DialogService. A standard sheet is docked\n * into the scaffold instead, following the side sheet outlet model: it floats over the content\n * without a scrim, leaves the rest of the page usable, and needs an outlet to open into.\n *\n * One of each may be open at a time, and they replace only their own kind.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class BottomSheetService {\n private readonly cdkDialog = inject(CdkDialog);\n private readonly overlay = inject(Overlay);\n private readonly injector = inject(Injector);\n\n /**\n * Outlets registered from the page scaffold up to whatever took them over last. Standard\n * sheets always open in the outlet on top.\n */\n private readonly outlets: BottomSheetOutletState[] = [];\n\n private modalRef?: ModalBottomSheetRef<any, any>;\n private standardRef?: StandardBottomSheetRef<any, any>;\n\n /** Registers the outlet standard bottom sheets open into. Called by Scaffold. */\n public registerBottomSheetOutlet(outlet: CdkPortalOutlet): void {\n if (this.outlets.some((state) => state.outlet === outlet)) {\n return;\n }\n\n if (outlet.hasAttached()) {\n outlet.detach();\n }\n\n const portal = new ComponentPortal(BottomSheetOutlet, null, this.injector);\n\n this.outlets.push({\n outlet,\n hostComponentRef: outlet.attachComponentPortal(portal),\n });\n }\n\n public unregisterBottomSheetOutlet(outlet: CdkPortalOutlet): void {\n const index = this.outlets.findIndex((state) => state.outlet === outlet);\n\n if (index === -1) {\n return;\n }\n\n // A sheet open in this outlet goes with it, without an exit animation: the outlet is\n // being torn down, so there is nothing left to animate in.\n if (index === this.outlets.length - 1) {\n this.standardRef?.dispose();\n }\n\n this.outlets[index].outlet.detach();\n this.outlets.splice(index, 1);\n }\n\n public open<T, D = unknown, R = unknown>(\n component: Type<T>,\n config: BottomSheetConfig<D> = {},\n ): BottomSheetRef<T, R> {\n const sheetConfig = this.mergeConfig(config);\n\n return sheetConfig.type === 'standard'\n ? this.openStandard<T, D, R>(component, sheetConfig)\n : this.openModal<T, D, R>(component, sheetConfig);\n }\n\n /**\n * Closes the bottom sheet that is open. A modal sheet goes first when both kinds are up,\n * since it is the one covering the page.\n */\n public close<R = unknown>(result?: R): void {\n if (this.modalRef) {\n this.modalRef.close(result);\n\n return;\n }\n\n this.standardRef?.close(result);\n }\n\n private openModal<T, D, R>(\n component: Type<T>,\n sheetConfig: ResolvedBottomSheetConfig<D>,\n ): BottomSheetRef<T, R> {\n // Opening a new modal sheet always replaces the one that is open.\n this.modalRef?.close();\n\n let sheetRef!: ModalBottomSheetRef<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\n // shell only renders the surface.\n container: {\n type: BottomSheet,\n providers: () => [\n { provide: BOTTOM_SHEET_CONFIG, useValue: sheetConfig },\n ],\n },\n // These tokens make the sheet controllable from the dynamic\n // component without coupling that component to the service.\n providers: (cdkDialogRef: CdkDialogRef<R, T>) => {\n sheetRef = new ModalBottomSheetRef<T, R>(cdkDialogRef);\n\n return [\n { provide: BottomSheetRef, useValue: sheetRef },\n { provide: BOTTOM_SHEET_DATA, useValue: sheetConfig.data },\n { provide: BOTTOM_SHEET_CONFIG, useValue: sheetConfig },\n { provide: BOTTOM_SHEET_COMPONENT, useValue: component },\n ];\n },\n data: sheetConfig.data,\n role: 'dialog',\n ariaModal: true,\n direction: sheetConfig.direction ?? undefined,\n viewContainerRef: sheetConfig.viewContainerRef,\n injector: sheetConfig.injector,\n hasBackdrop: true,\n backdropClass: ['md3-bottom-sheet-scrim', OPENING_CLASS],\n panelClass: [PANEL_CLASS, OPENING_CLASS],\n positionStrategy: this.overlay.position()\n .global()\n .centerHorizontally()\n .bottom('0'),\n // A modal bottom sheet blocks page scrolling for as long as it is open.\n scrollStrategy: this.overlay.scrollStrategies.block(),\n // Scrim and Escape handling lives in the reference so the sheet\n // can play its exit animation before the overlay is disposed.\n disableClose: true,\n });\n\n sheetRef.attachContainer(cdkRef.containerInstance as unknown as BottomSheet);\n sheetRef.componentInstance = cdkRef.componentInstance ?? undefined;\n\n if (cdkRef.componentRef) {\n this.bindDataToInputs(cdkRef.componentRef, sheetConfig);\n }\n\n this.modalRef = sheetRef;\n this.startOpenAnimation(sheetRef);\n\n sheetRef.afterClosed().subscribe(() => {\n if (this.modalRef === sheetRef) {\n this.modalRef = undefined;\n }\n });\n\n return sheetRef;\n }\n\n private openStandard<T, D, R>(\n component: Type<T>,\n sheetConfig: ResolvedBottomSheetConfig<D>,\n ): BottomSheetRef<T, R> {\n const host = this.activeOutlet();\n\n if (!host) {\n throw new Error(\n 'No bottom sheet outlet is registered. A standard bottom sheet docks into the '\n + 'scaffold, so the layout has to be in place before one can open.',\n );\n }\n\n // Opening a new standard sheet always replaces the one that is open.\n this.standardRef?.close();\n\n const sheetRef: StandardBottomSheetRef<T, R> = new StandardBottomSheetRef<T, R>(() => {\n if (this.standardRef === sheetRef) {\n this.standardRef = undefined;\n }\n });\n\n const injector = this.createInjector(component, sheetConfig, sheetRef);\n const sheetComponentRef = host.hostComponentRef.instance.createSheet(injector);\n const contentComponentRef = sheetComponentRef.instance.attachContent(component, injector);\n\n sheetComponentRef.changeDetectorRef.detectChanges();\n\n sheetRef.attachSheet(sheetComponentRef, sheetComponentRef.instance);\n this.bindDataToInputs(contentComponentRef, sheetConfig);\n sheetRef.componentInstance = contentComponentRef.instance;\n\n this.standardRef = sheetRef;\n sheetComponentRef.instance.startEnterAnimation();\n\n return sheetRef;\n }\n\n private activeOutlet(): BottomSheetOutletState | undefined {\n return this.outlets[this.outlets.length - 1];\n }\n\n private createInjector<T, D>(\n component: Type<T>,\n config: ResolvedBottomSheetConfig<D>,\n sheetRef: BottomSheetRef<T, any>,\n ): Injector {\n return Injector.create({\n parent: config.injector,\n providers: [\n { provide: BottomSheetRef, useValue: sheetRef },\n { provide: BOTTOM_SHEET_DATA, useValue: config.data },\n { provide: BOTTOM_SHEET_CONFIG, useValue: config },\n { provide: BOTTOM_SHEET_COMPONENT, useValue: component },\n ],\n });\n }\n\n private startOpenAnimation(sheetRef: ModalBottomSheetRef<any, any>): void {\n const overlayRef = sheetRef.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\n // transitions 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 sheetRef.sheetInstance?.startEnterAnimation();\n }\n\n private mergeConfig<D>(config: BottomSheetConfig<D>): ResolvedBottomSheetConfig<D> {\n return {\n ...config,\n data: config.data,\n bindDataToInputs: config.bindDataToInputs ?? false,\n type: config.type ?? 'modal',\n handle: config.handle ?? true,\n gestures: config.gestures ?? true,\n dismissible: config.dismissible ?? false,\n initialState: config.initialState ?? 'collapsed',\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 bindDataToInputs<T, D>(\n componentRef: ComponentRef<T>,\n config: ResolvedBottomSheetConfig<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","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, effect, ElementRef, inject, OnDestroy, viewChild } from '@angular/core';\nimport { BottomSheetService } from '../../components/sheets/bottom-sheet/bottom-sheet.service';\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 bottomOutlet = viewChild('bottomOutlet', { read: CdkPortalOutlet });\n private panesContainer = viewChild<ElementRef<HTMLElement>>('panesContainer');\n private sheets = inject(SheetsService);\n private bottomSheets = inject(BottomSheetService);\n private layout = inject(LayoutService);\n private el = inject(ElementRef);\n\n constructor() {\n // Publish what a floating bar covers but does not reserve. The main pane pads itself\n // by these values, and the fallback is 0, so a layout without a floating bar is\n // unchanged. A page that needs full-bleed content sets them back to 0 on itself.\n effect(() => {\n const inset = this.layout.floatingInset();\n const host = this.el.nativeElement as HTMLElement;\n\n host.style.setProperty('--md-scaffold-floating-inset-block-start', `${inset.blockStart}px`);\n host.style.setProperty('--md-scaffold-floating-inset-block-end', `${inset.blockEnd}px`);\n });\n }\n\n ngAfterViewInit(): void {\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n const bottomOutlet = this.bottomOutlet();\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 (bottomOutlet) {\n this.bottomSheets.registerBottomSheetOutlet(bottomOutlet);\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 const bottomOutlet = this.bottomOutlet();\n\n if (startOutlet) {\n this.sheets.unregisterSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.unregisterSideSheetOutlet('end', endOutlet);\n }\n\n if (bottomOutlet) {\n this.bottomSheets.unregisterBottomSheetOutlet(bottomOutlet);\n }\n\n this.layout.unregisterPanesContainer();\n }\n}\n","<div class=\"md3-bar-region md3-bar-region-top\">\n <ng-content select=\"[md3-scaffold-bar=top]\"></ng-content>\n</div>\n\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<!-- Standard bottom sheets dock here, between the content and the bottom bar. The region\n measures zero until one opens, so it reserves nothing the rest of the time. -->\n<div class=\"md3-bottom-sheet-region\">\n <ng-template #bottomOutlet cdkPortalOutlet></ng-template>\n</div>\n\n<ng-content select=\"[md3-scaffold-rail=trailing]\"></ng-content>\n\n<div class=\"md3-bar-region md3-bar-region-bottom\">\n <ng-content select=\"[md3-scaffold-bar=bottom]\"></ng-content>\n</div>","import { CdkPortalOutlet } from '@angular/cdk/portal';\nimport { Component } from '@angular/core';\nimport { LayoutService } from '../layout.service';\nimport { Scaffold } from '../scaffold/scaffold';\n\n/**\n * A layout region shell that fills its parent instead of the window.\n *\n * It places the same regions as `md3-scaffold` — the bar rows, the rail columns and the three\n * panes — so the same region attributes work inside it:\n *\n * ```html\n * <md3-layout>\n * <md3-toolbar md3-scaffold-bar=\"bottom\" toolbar-type=\"floating\">...</md3-toolbar>\n *\n * <div md3-scaffold-pane=\"main\">...</div>\n * </md3-layout>\n * ```\n *\n * Use it wherever a page-sized scaffold does not fit: the content of a full screen dialog, a\n * card, a preview pane. A full screen dialog is the common one, because a toolbar needs a bar\n * or a rail region and the dialog shell has none of its own.\n *\n * The layout provides its own {@link LayoutService}, so everything inside it reads the scroll\n * position and the floating insets of *this* container. A floating toolbar therefore pads the\n * main pane of the layout, and `scroll-action` follows the pane of the layout — never the page\n * behind it. The window size, the breakpoints, the reading direction and the color scheme stay\n * shared with the rest of the application.\n */\n@Component({\n selector: 'md3-layout',\n imports: [\n CdkPortalOutlet,\n ],\n templateUrl: '../scaffold/scaffold.html',\n styleUrl: './layout.scss',\n providers: [\n LayoutService,\n ],\n})\nexport class Layout extends Scaffold {\n}\n","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(): boolean {\n let enabled = false;\n\n this.isSelected.update((current) => {\n if (current !== null) {\n return current;\n }\n\n enabled = true;\n return false;\n });\n\n return enabled;\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(): boolean {\n let enabled = false;\n\n this.isSelected.update((current) => {\n if (current !== null) {\n return current;\n }\n\n enabled = true;\n return false;\n });\n\n return enabled;\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 private managedButtons = new WeakSet<Button | IconButton>();\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 const buttons = this.allButtons();\n\n if (selection == 'manual') {\n // hand the control back, only for the buttons the group made selectable\n buttons.forEach((item) => {\n if (this.managedButtons.has(item)) {\n item.isSelected.set(null);\n }\n });\n\n this.managedButtons = new WeakSet();\n return;\n }\n\n if (selection == 'none') {\n buttons.forEach((item) => {\n item.isSelected.set(null);\n });\n\n this.managedButtons = new WeakSet();\n } else {\n buttons.forEach((item) => {\n if (item.enableSelection()) {\n this.managedButtons.add(item);\n }\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 { 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 { 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, inject, 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 { DIALOG_CONFIG } from '../dialog/dialog-ref';\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 '[attr.role]': 'resolvedRole()',\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 // A dialog provides its configuration to everything it holds, so this is how the bar knows\n // it is not the banner of the document.\n private readonly inDialog = !!inject(DIALOG_CONFIG, { optional: true });\n\n /**\n * The landmark role of the bar.\n *\n * A page has one banner, and the app bar of the page is it. A bar inside a dialog is not\n * the banner of the document — a banner nested in a dialog misleads a screen reader — so a\n * bar that finds itself in one carries no role. Set this input to force either value.\n */\n public barRole = input<'banner' | 'none' | null>(null, {\n alias: 'bar-role',\n });\n\n protected readonly resolvedRole = computed<string | null>(() => {\n const role = this.barRole();\n\n if (role !== null) {\n return role === 'none' ? null : role;\n }\n\n return this.inDialog ? null : 'banner';\n });\n\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\n // One source of truth. The toolbar reads the same signal, so the two bars can never\n // disagree about which way the main pane is moving.\n public isScrollingDown = computed<boolean>(() => this.layoutService.isScrollingDown());\n\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 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 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 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 { isPlatformBrowser } from '@angular/common';\nimport { Component, computed, contentChild, effect, ElementRef, inject, input, model, OnDestroy, PLATFORM_ID, Signal, signal, viewChild } from '@angular/core';\nimport { ButtonContext, MD3_BUTTON_CONTEXT } from '../../interfaces/button-context.interface';\nimport { LayoutService } from '../../foundations/layout.service';\nimport { ScaffoldBar } from '../../foundations/scaffold-bar';\nimport { ScaffoldRail } from '../../foundations/scaffold-rail';\nimport { ButtonSize } from '../../types/button-size.type';\nimport { ToolbarAlignment } from '../../types/toolbar-alignment.type';\nimport { ToolbarColor } from '../../types/toolbar-color.type';\nimport { ToolbarOrientation } from '../../types/toolbar-orientation.type';\nimport { ToolbarRegion } from '../../types/toolbar-region.type';\nimport { ToolbarScrollAction } from '../../types/toolbar-scroll-action.type';\nimport { ToolbarType } from '../../types/toolbar-type.type';\nimport { FloatingActionButton } from '../buttons/floating-action-button/floating-action-button';\n\n/**\n * Material 3 toolbar.\n *\n * The toolbar holds the actions of the current page. Put it in a scaffold region, and the\n * region decides where it goes:\n *\n * ```html\n * <md3-toolbar md3-scaffold-bar=\"bottom\" toolbar-type=\"floating\" scroll-action=\"collapse\">\n * <md3-toolbar-item><button md3-icon-button>...</button></md3-toolbar-item>\n * <md3-toolbar-item md3-toolbar-persistent><button md3-icon-button>...</button></md3-toolbar-item>\n * <button md3-fab>...</button>\n * </md3-toolbar>\n * ```\n *\n * Every action goes inside an `md3-toolbar-item`. The toolbar projects that element only. A FAB is\n * the one exception: it sits beside the container, and a floating toolbar takes it.\n *\n * A **floating** toolbar in a *bar* region leaves the layout flow, so the content passes\n * behind it. The scaffold pads the main pane by the height it covers. In a *rail* region it\n * stays in the flow and reserves its own space, so no padding is necessary.\n *\n * A **docked** toolbar fills its region. The specification allows it in a bar region only.\n *\n * Group actions with `md3-button-group`. The toolbar has one slots region, and it keeps the\n * authored order. The space between the items follows the free space of the container, between\n * `--md-toolbar-gap-min` and `--md-toolbar-gap-max`.\n */\n@Component({\n selector: 'md3-toolbar',\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.scss',\n providers: [\n {\n provide: MD3_BUTTON_CONTEXT,\n useExisting: Toolbar,\n },\n ],\n host: {\n 'role': 'toolbar',\n '[attr.aria-orientation]': 'effectiveOrientation()',\n '[class.md3-floating-region]': 'isFloatingRegion()',\n '[class.md3-bar-region]': 'isBarRegion()',\n '[class.md3-rail-region]': 'isRailRegion()',\n '[class.md3-hidden]': 'isHidden()',\n '[class.md3-collapsed]': 'isCollapsed()',\n '[class.md3-collapse-to-fab]': 'isCollapsedToFab()',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'onFocusOut($event)',\n },\n})\nexport class Toolbar implements ButtonContext, OnDestroy {\n private readonly el = inject(ElementRef);\n private readonly layout = inject(LayoutService);\n\n // The scaffold region directives sit on this same host element, so `self` is correct.\n private readonly scaffoldBar = inject(ScaffoldBar, { optional: true, self: true });\n private readonly scaffoldRail = inject(ScaffoldRail, { optional: true, self: true });\n\n public toolbarType = input<ToolbarType>('floating', {\n alias: 'toolbar-type',\n });\n\n public toolbarColor = input<ToolbarColor>('standard', {\n alias: 'toolbar-color',\n });\n\n /**\n * Leave this unset to follow the region. A rail region gives `vertical`, and every other\n * placement gives `horizontal`. Read `effectiveOrientation` for the resolved value.\n */\n public orientation = input<ToolbarOrientation | null>(null, {\n alias: 'orientation',\n });\n\n public alignment = input<ToolbarAlignment>('center', {\n alias: 'alignment',\n });\n\n public scrollAction = input<ToolbarScrollAction>('none', {\n alias: 'scroll-action',\n });\n\n public fabPosition = input<'start' | 'end'>('end', {\n alias: 'fab-position',\n });\n\n /** The collapse state. Scrolling writes to it, and you can read or set it yourself. */\n public expanded = model<boolean>(true);\n\n private readonly layoutElement = viewChild<ElementRef<HTMLElement>>('layout');\n private readonly containerElement = viewChild<ElementRef<HTMLElement>>('container');\n private readonly slotsElement = viewChild<ElementRef<HTMLElement>>('slots');\n private readonly fab = contentChild(FloatingActionButton);\n\n /** Set from the DOM, because `md3-toolbar-persistent` is a plain attribute, not a directive. */\n private readonly hasPersistentItem = signal<boolean>(false);\n private readonly hasFocusWithin = signal<boolean>(false);\n private persistentObserver?: MutationObserver;\n\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /** The last published free space, to keep an unchanged measurement from writing to the DOM. */\n private lastGap = -1;\n\n public readonly isFloating = computed<boolean>(() => this.toolbarType() === 'floating');\n\n public readonly effectiveOrientation = computed<ToolbarOrientation>(() => {\n return this.orientation() ?? (this.scaffoldRail ? 'vertical' : 'horizontal');\n });\n\n /** The logical side of the scaffold region, or null outside a scaffold. */\n public readonly region = computed<ToolbarRegion | null>(() => {\n if (this.scaffoldBar) {\n return this.scaffoldBar.region() === 'top' ? 'blockStart' : 'blockEnd';\n }\n\n if (this.scaffoldRail) {\n return this.scaffoldRail.region() === 'leading' ? 'inlineStart' : 'inlineEnd';\n }\n\n return null;\n });\n\n protected readonly isBarRegion = computed<boolean>(() => !!this.scaffoldBar);\n protected readonly isRailRegion = computed<boolean>(() => !!this.scaffoldRail);\n\n /** A floating toolbar inside a scaffold region needs the region to stop clipping it. */\n protected readonly isFloatingRegion = computed<boolean>(() => {\n return this.isFloating() && (this.isBarRegion() || this.isRailRegion());\n });\n\n /** Only a floating bar covers content it does not reserve. Everything else reserves its space. */\n private readonly coversContent = computed<boolean>(() => this.isFloating() && this.isBarRegion());\n\n /** Something must survive a collapse, or a collapse is just a hide. */\n private readonly canCollapse = computed<boolean>(() => (!!this.fab() && this.isFloating()) || this.hasPersistentItem());\n\n /** With a FAB and no marked item, a collapse takes the container away and the FAB stays alone. */\n protected readonly collapsesToFab = computed<boolean>(() => !!this.fab() && this.isFloating() && !this.hasPersistentItem());\n\n /** A vertical toolbar never reacts to scrolling, and a docked one never collapses. */\n public readonly resolvedScrollAction = computed<ToolbarScrollAction>(() => {\n const action = this.scrollAction();\n\n if (action === 'none' || this.effectiveOrientation() === 'vertical') {\n return 'none';\n }\n\n if (action === 'collapse' && (!this.isFloating() || !this.canCollapse())) {\n return 'hide';\n }\n\n return action;\n });\n\n public readonly isHidden = signal<boolean>(false);\n public readonly isCollapsed = computed<boolean>(() => {\n return this.resolvedScrollAction() === 'collapse' && !this.expanded();\n });\n\n /**\n * The collapsed state in which the FAB stays alone.\n *\n * This is the state, not the capability. A FAB by itself must never take the container\n * away, because a toolbar that does not collapse keeps its items at all times.\n */\n protected readonly isCollapsedToFab = computed<boolean>(() => this.isCollapsed() && this.collapsesToFab());\n\n // button context — the container is 4em high, so the buttons inside it are small.\n public buttonContextSize: Signal<ButtonSize> = signal<ButtonSize>('small');\n\n constructor() {\n effect(() => {\n if (this.isFloating()) {\n this.element.classList.add('md3-floating');\n this.element.classList.remove('md3-docked');\n } else {\n this.element.classList.add('md3-docked');\n this.element.classList.remove('md3-floating');\n }\n });\n\n effect((onCleanup) => {\n const orientation = 'md3-' + this.effectiveOrientation();\n this.element.classList.add(orientation);\n onCleanup(() => this.element.classList.remove(orientation));\n });\n\n effect((onCleanup) => {\n const color = 'md3-color-' + this.toolbarColor();\n this.element.classList.add(color);\n onCleanup(() => this.element.classList.remove(color));\n });\n\n effect((onCleanup) => {\n const alignment = 'md3-align-' + this.alignment();\n this.element.classList.add(alignment);\n onCleanup(() => this.element.classList.remove(alignment));\n });\n\n effect((onCleanup) => {\n const position = 'md3-fab-' + this.fabPosition();\n this.element.classList.add(position);\n onCleanup(() => this.element.classList.remove(position));\n });\n\n effect((onCleanup) => {\n const region = this.region();\n\n if (!region) {\n return;\n }\n\n const name = 'md3-region-' + region.replace(/[A-Z]/g, (letter) => '-' + letter.toLowerCase());\n this.element.classList.add(name);\n onCleanup(() => this.element.classList.remove(name));\n });\n\n // Report what a floating bar covers, so the scaffold can pad the main pane and the\n // overlays can stay above it.\n effect((onCleanup) => {\n if (!this.coversContent()) {\n return;\n }\n\n const region = this.region();\n\n if (region !== 'blockStart' && region !== 'blockEnd') {\n return;\n }\n\n const element = this.layoutElement()?.nativeElement;\n\n if (!element) {\n return;\n }\n\n this.layout.registerFloatingBar(element, region);\n\n onCleanup(() => this.layout.unregisterFloatingBar(element));\n });\n\n effect(() => {\n this.updateScrollState();\n });\n\n effect(() => {\n const element = this.layoutElement()?.nativeElement;\n\n if (element) {\n this.watchPersistentItems(element);\n }\n });\n\n // Measure again when the region gives the toolbar a different amount of space, and when\n // the items themselves change size or number.\n effect((onCleanup) => {\n if (!this.isBrowser) {\n return;\n }\n\n // Read the state that changes the geometry, so a new orientation or a collapse\n // measures again without a resize.\n this.effectiveOrientation();\n this.isCollapsed();\n this.isCollapsedToFab();\n\n const layout = this.layoutElement()?.nativeElement;\n const slots = this.slotsElement()?.nativeElement;\n\n if (!layout || !slots) {\n return;\n }\n\n // The observer reports the first size as soon as it starts, so no separate initial\n // measurement is necessary.\n const observer = new ResizeObserver(() => this.measureGap());\n observer.observe(this.element);\n observer.observe(layout);\n observer.observe(slots);\n\n onCleanup(() => observer.disconnect());\n });\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n effect(() => this.checkConfiguration());\n }\n }\n\n ngOnDestroy(): void {\n // The registration effect owns its own cleanup, so it unregisters the exact element\n // it measured.\n this.persistentObserver?.disconnect();\n this.persistentObserver = undefined;\n }\n\n public get element(): HTMLElement {\n return this.el.nativeElement as HTMLElement;\n }\n\n protected onFocusIn(): void {\n this.hasFocusWithin.set(true);\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n\n if (next && this.element.contains(next)) {\n return;\n }\n\n this.hasFocusWithin.set(false);\n }\n\n private updateScrollState(): void {\n const action = this.resolvedScrollAction();\n\n if (action === 'none') {\n this.isHidden.set(false);\n this.expanded.set(true);\n return;\n }\n\n // Keep the toolbar reachable while it holds the focus. A keyboard or screen-reader\n // user must never lose the control they are on.\n if (this.hasFocusWithin()) {\n this.isHidden.set(false);\n this.expanded.set(true);\n return;\n }\n\n const away = this.layout.mainIsScrolled() && this.layout.isScrollingDown();\n\n this.isHidden.set(action === 'hide' && away);\n this.expanded.set(action === 'hide' ? true : !away);\n }\n\n /**\n * Divide the free space of the container between the gaps.\n *\n * The measurement starts from the host, because the host holds the space the region gives\n * the toolbar. A floating container is only as wide as its content, so reading the container\n * itself would feed the gap back into the measurement and the value would never settle.\n */\n private measureGap(): void {\n const layout = this.layoutElement()?.nativeElement;\n const container = this.containerElement()?.nativeElement;\n const slots = this.slotsElement()?.nativeElement;\n\n if (!layout || !container || !slots) {\n return;\n }\n\n const vertical = this.effectiveOrientation() === 'vertical';\n const items = Array.from(slots.children) as HTMLElement[];\n const extents = items.map((item) => this.extent(item, vertical));\n\n // A collapsed item keeps its box but loses its size, and it must not keep a gap either.\n const visible = extents.filter((extent) => extent > 0.5).length;\n\n if (visible < 2) {\n this.publishGap(0);\n return;\n }\n\n const content = extents.reduce((sum, extent) => sum + extent, 0);\n const free = this.contentExtent(this.element, vertical)\n - this.paddingExtent(layout, vertical)\n - this.siblingExtent(layout, container, vertical)\n - this.paddingExtent(container, vertical)\n - content;\n\n this.publishGap(free / (visible - 1));\n }\n\n private publishGap(gap: number): void {\n // Round down, so a fraction of a pixel never pushes the last item past the container.\n const value = Math.max(0, Math.floor(gap * 100) / 100);\n\n if (value === this.lastGap) {\n return;\n }\n\n this.lastGap = value;\n this.element.style.setProperty('--md-toolbar-gap-free', `${value}px`);\n }\n\n private extent(element: HTMLElement, vertical: boolean): number {\n const rect = element.getBoundingClientRect();\n\n return vertical ? rect.height : rect.width;\n }\n\n private contentExtent(element: HTMLElement, vertical: boolean): number {\n const size = vertical ? element.clientHeight : element.clientWidth;\n\n return Math.max(0, size - this.paddingExtent(element, vertical));\n }\n\n private paddingExtent(element: HTMLElement, vertical: boolean): number {\n const style = getComputedStyle(element);\n const start = parseFloat(vertical ? style.paddingTop : style.paddingLeft) || 0;\n const end = parseFloat(vertical ? style.paddingBottom : style.paddingRight) || 0;\n\n return start + end;\n }\n\n /** What the other children of the layout take, the flex gap that separates them included. */\n private siblingExtent(layout: HTMLElement, container: HTMLElement, vertical: boolean): number {\n const style = getComputedStyle(layout);\n const gap = parseFloat(vertical ? style.rowGap : style.columnGap) || 0;\n\n return (Array.from(layout.children) as HTMLElement[])\n .filter((child) => child !== container)\n .reduce((sum, child) => sum + this.extent(child, vertical) + gap, 0);\n }\n\n private watchPersistentItems(element: HTMLElement): void {\n this.persistentObserver?.disconnect();\n\n const update = () => {\n this.hasPersistentItem.set(!!element.querySelector('.md3-toolbar-slots [md3-toolbar-persistent]'));\n };\n\n update();\n\n if (typeof MutationObserver === 'undefined') {\n return;\n }\n\n this.persistentObserver = new MutationObserver(update);\n this.persistentObserver.observe(element, {\n childList: true,\n subtree: true,\n attributeFilter: ['md3-toolbar-persistent'],\n });\n }\n\n private checkConfiguration(): void {\n const explicit = this.orientation();\n const orientation = this.effectiveOrientation();\n\n if (this.isRailRegion() && !this.isFloating()) {\n this.warn('a docked toolbar needs the full window width, so it belongs in a scaffold bar region, not a rail.');\n }\n\n if (explicit === 'horizontal' && this.isRailRegion()) {\n this.warn('a horizontal toolbar does not fit a scaffold rail region. Move it to a bar region, or drop the orientation input.');\n }\n\n if (explicit === 'vertical' && this.isBarRegion()) {\n this.warn('a vertical toolbar does not fit a scaffold bar region. Move it to a rail region, or drop the orientation input.');\n }\n\n if (this.scrollAction() !== 'none' && orientation === 'vertical') {\n this.warn('a vertical toolbar ignores scroll-action.');\n }\n\n if (this.scrollAction() === 'collapse' && this.isFloating() && !this.canCollapse()) {\n this.warn('scroll-action=\"collapse\" needs a FAB, or one item with the md3-toolbar-persistent attribute. The toolbar will hide instead.');\n }\n\n if (this.scrollAction() === 'collapse' && !this.isFloating()) {\n this.warn('a docked toolbar cannot collapse to a FAB. The toolbar will hide instead.');\n }\n }\n\n private warn(message: string): void {\n console.warn(`[md3-toolbar] ${message}`);\n }\n}\n","<div class=\"md3-toolbar-layout\" #layout>\n @if (isFloating()) {\n <ng-content select=\"[md3-fab]\"></ng-content>\n }\n \n <div class=\"md3-toolbar-container\" #container>\n <div class=\"md3-toolbar-slots\" #slots>\n <ng-content select=\"md3-toolbar-item\"></ng-content>\n </div>\n </div>\n</div>\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: 'md3-toolbar-item',\n})\nexport class ToolbarItem {\n}\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 { 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 holds the content.\n *\n * The content is an `md3-layout`. The layout places the regions — the bar rows for an app bar\n * or a toolbar, the rail columns, and the panes where side sheets open — so the dialog itself\n * places nothing but the content. A content root that is not a layout gets a warning in\n * development mode, and the shell falls back to panes of its own, so a side sheet never opens\n * behind the dialog where nobody can see 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 mainPane = viewChild<ElementRef<HTMLElement>>('mainPane');\n private readonly startOutlet = viewChild('startOutlet', { read: CdkPortalOutlet });\n private readonly endOutlet = viewChild('endOutlet', { read: CdkPortalOutlet });\n private readonly sheets = inject(SheetsService);\n\n /** True while the shell holds the side sheet outlets, which happens without a layout only. */\n private ownsSideSheetOutlets = false;\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 // The content is attached by now, so the layout it brings has already taken the\n // outlets. Its panes sit under the bar regions, which is where a side sheet belongs.\n const layout = this.findContentLayout();\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n this.checkContentLayout(layout);\n }\n\n if (layout) {\n return;\n }\n\n // No layout, so the shell keeps the dialog self-sufficient. Without this the next side\n // sheet would open in the outlet underneath — the page scaffold, behind the dialog.\n const startOutlet = this.startOutlet();\n const endOutlet = this.endOutlet();\n\n if (startOutlet) {\n this.sheets.registerSideSheetOutlet('start', startOutlet);\n }\n\n if (endOutlet) {\n this.sheets.registerSideSheetOutlet('end', endOutlet);\n }\n\n this.ownsSideSheetOutlets = !!startOutlet || !!endOutlet;\n }\n\n public override ngOnDestroy(): void {\n if (this.ownsSideSheetOutlets) {\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.ownsSideSheetOutlets = false;\n }\n\n super.ngOnDestroy();\n }\n\n /**\n * The layout at the root of the content, if the content brought one.\n *\n * The root is either the layout itself, or the component that holds it — a dialog is\n * normally opened with a component whose own template starts with `md3-layout`.\n */\n private findContentLayout(): HTMLElement | null {\n const content = this.mainPane()?.nativeElement.firstElementChild as HTMLElement | null;\n\n if (!content) {\n return null;\n }\n\n if (content.tagName === 'MD3-LAYOUT') {\n return content;\n }\n\n const root = content.firstElementChild as HTMLElement | null;\n\n return root?.tagName === 'MD3-LAYOUT' ? root : null;\n }\n\n private checkContentLayout(layout: HTMLElement | null): void {\n if (layout) {\n return;\n }\n\n console.warn(\n '[md3-fullscreen-dialog] the content of a full screen dialog should start with '\n + 'md3-layout. Without it the dialog has no bar and no rail region, so an app bar or '\n + 'a toolbar has nowhere to go, and the content does not scroll on its own.',\n );\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\" #mainPane>\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';\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 * `previousDialog` decides what happens to the dialogs it replaces, the\n * same way it does for a regular dialog.\n */\n public openFullScreen<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 // 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.dismissPreviousContext(dialogConfig.previousDialog);\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 /**\n * The same choice for a full screen dialog, applied to everything that is\n * on screen: what it takes over from is a whole context, a full screen\n * dialog of its own included. `hide` keeps that context alive, and it comes\n * back as it was once this dialog closes.\n */\n private dismissPreviousContext(behavior: PreviousDialog): Promise<void> {\n return behavior === 'hide' ? this.hideAll() : this.closeAll();\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 // Nothing to hand over either: the dialog leaving carries no scrim, so\n // the one coming in fades its own in rather than switching it on in a\n // single frame. This is a full screen dialog closing over a dialog that\n // was hidden underneath it.\n if (!from) {\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.showHostFullScreenDialog(previousRef);\n this.startRestoringAnimation(ref, previousRef);\n }, DIALOG_HANDOVER_DELAY_MS);\n return;\n }\n }\n\n /**\n * Brings back the full screen dialog a restored dialog sits in. The two are\n * hidden together when a full screen dialog takes over with\n * `previousDialog: 'hide'`, so the context has to be on screen again before\n * the dialog that sits on top of it, exactly as showAll() puts them back.\n */\n private showHostFullScreenDialog(ref: DialogRef<any, any>): void {\n if (ref.isFullScreen) {\n return;\n }\n\n const hostRef = this.fullScreenDialog;\n\n if (hostRef?.isHidden && this.refs.indexOf(hostRef) < this.refs.indexOf(ref)) {\n hostRef.show();\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';\n\n@Component({\n selector: 'md3-dialog-body',\n imports: [\n ],\n templateUrl: './dialog-body.html',\n styleUrl: './dialog-body.scss',\n host: {\n 'class': 'md3-scrollable',\n },\n})\nexport class DialogBody {\n}\n","<ng-content></ng-content>","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 { 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.bottomSafeInset() + (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/toolbar-type.type';\nexport * from './types/toolbar-color.type';\nexport * from './types/toolbar-orientation.type';\nexport * from './types/toolbar-alignment.type';\nexport * from './types/toolbar-scroll-action.type';\nexport * from './types/toolbar-region.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/menu-config.interface';\nexport * from './interfaces/side-sheet-config.interface';\nexport * from './interfaces/bottom-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/viewport.service';\nexport * from './foundations/layout.service';\nexport * from './foundations/layout/layout';\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// toolbar\nexport * from './components/toolbar/toolbar';\nexport * from './components/toolbar/toolbar-item';\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';\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';\nexport * from './components/sheets/bottom-sheet/bottom-sheet-ref';\nexport * from './components/sheets/bottom-sheet/bottom-sheet.service';\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":["clampIndex","PANEL_CLASS","OPENING_CLASS","CdkDialog","i1.LayoutService","i1.StateComponent"],"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;;;ACAD;;;;;;;;AAQG;MAIU,eAAe,CAAA;AACP,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAE/C,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;IAEM,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;IACN;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;uGAzHS,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;AACf,iBAAA;;;ACND;;;;;;;;;;;;AAYG;MAIU,aAAa,CAAA;AACL,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;;;IAGzC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEpD,IAAA,WAAW;AACX,IAAA,UAAU;AACV,IAAA,4BAA4B;AAC5B,IAAA,4BAA4B;;AAGnB,IAAA,YAAY,GAAG,IAAI,GAAG,EAAqE;;AAGpG,IAAA,OAAgB,wBAAwB,GAAG,EAAE;IAC7C,cAAc,GAAG,CAAC;IAEjB,aAAa,GAAG,MAAM,CAAS,CAAC;sFAAC;IACjC,cAAc,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC;uFAAC;AAE3E;;;;AAIG;IACM,eAAe,GAAG,MAAM,CAAU,KAAK;wFAAC;AAEjD;;;;;AAKG;IACM,WAAW,GAAG,MAAM,CAAS,CAAC;oFAAC;AAExC;;;;;;;;;AASG;IACM,aAAa,GAAG,MAAM,CAAgB,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE;sFAAC;AAE9E;;;AAGG;AACM,IAAA,eAAe,GAAG,QAAQ,CAAS,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ;wFAAC;;;AAIrF,IAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ;AACxC,IAAA,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU;AAC5C,IAAA,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW;AAC9C,IAAA,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS;AAC1C,IAAA,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS;AAC1C,IAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ;AACxC,IAAA,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU;AAC5C,IAAA,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO;AACtC,IAAA,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY;AAChD,IAAA,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU;AAC5C,IAAA,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW;AAC9C,IAAA,uBAAuB,GAAG,IAAI,CAAC,eAAe,CAAC,uBAAuB;AAC/E,IAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ;AAE/C,IAAA,WAAA,GAAA;;;QAGI,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AACpD,QAAA,CAAC,CAAC;;;;QAKF,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;AACxC,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC;IAChD;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;QACzB,IAAI,CAAC,oBAAoB,EAAE;IAC/B;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;QACzB,IAAI,CAAC,oBAAoB,EAAE;IAC/B;IAEQ,oBAAoB,GAAA;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;IACnC;AAEQ,IAAA,qBAAqB,CAAC,SAAiB,EAAA;AAC3C,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE;YACnC;QACJ;AAEA,QAAA,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,cAAc;QAE9C,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,wBAAwB,EAAE;YAC5D;QACJ;QAEA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;IACnC;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,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,WAAW,IAAI,CAAC;YAClE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACvE,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;AAEA;;;;;AAKG;IACI,mBAAmB,CAAC,OAAoB,EAAE,IAAqB,EAAA;AAClE,QAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;AAEnC,QAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACrE,QAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;AAEzB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAClD,IAAI,CAAC,mBAAmB,EAAE;IAC9B;AAEO,IAAA,qBAAqB,CAAC,OAAoB,EAAA;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;QAE5C,IAAI,CAAC,KAAK,EAAE;YACR;QACJ;AAEA,QAAA,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,mBAAmB,EAAE;IAC9B;IAEQ,mBAAmB,GAAA;QACvB,IAAI,UAAU,GAAG,CAAC;QAClB,IAAI,QAAQ,GAAG,CAAC;QAEhB,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAE3C,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;gBAC7B,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;YAC3C;iBAAO;gBACH,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;YACvC;QACJ;;;;;;QAOA,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;;;AAI7C,QAAA,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;YACpE;QACJ;QAEA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACpD;AAEA;;;;AAIG;AACK,IAAA,gBAAgB,CAAC,OAAoB,EAAA;AACzC,QAAA,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;AACzC,YAAA,OAAO,OAAO,CAAC,YAAY,IAAI,CAAC;QACpC;AAEA,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC;AACxC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC7D,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;AAEzD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;IACtE;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;uGA9PS,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;;;MClBY,iBAAiB,GAAG,IAAI,cAAc,CAAU,uBAAuB;MACvE,mBAAmB,GAAG,IAAI,cAAc,CAAoB,yBAAyB;MACrF,sBAAsB,GAAG,IAAI,cAAc,CAAgB,4BAA4B;AAEpG;AACA,MAAM,uCAAuC,GAAG,GAAG;AACnD,MAAM,2BAA2B,GAAG,2BAA2B;AAE/D;AACA,MAAM,eAAe,GAA6B,MAAM,CAAmB,UAAU,CAAC,CAAC,UAAU,EAAE;AAEnG;;;;;;;AAOG;MACmB,cAAc,CAAA;AACb,IAAA,MAAM,GAAG,IAAI,OAAO,EAAiB;IAC9C,YAAY,GAAG,KAAK;IACtB,YAAY,GAAG,KAAK;;AAGrB,IAAA,aAAa;;AAEb,IAAA,iBAAiB;;AAGxB,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,YAAY;IAC5B;;AAGA,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,eAAe;IAC1B;;AAGO,IAAA,KAAK,CAAC,MAAU,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC5B;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAExB,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1E;IAEO,WAAW,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;IACrC;AAEA;;;AAGG;AACI,IAAA,eAAe,CAAC,SAAiC,EAAA;AACpD,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;QAE9B,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACnE;;IAGO,MAAM,GAAA;IACb;;IAGO,QAAQ,GAAA;IACf;;IAGO,MAAM,GAAA;IACb;AAEO,IAAA,kBAAkB,CAAC,MAAuB,EAAA;IACjD;AAEO,IAAA,iBAAiB,CAAC,MAAuB,EAAA;IAChD;AAEO,IAAA,cAAc,CAAC,KAAc,EAAA;IACpC;;AAOU,IAAA,uBAAuB,CAAC,QAA6B,EAAA;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,IAAI,QAAQ,IAAI,IAAI;QAEtE,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC5B;AAEA,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC3B,IAAI,UAAU,GAAG,KAAK;YACtB,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,uCAAuC,CAAC;AAE3E,YAAA,SAAS,IAAI,GAAA;gBACT,IAAI,UAAU,EAAE;oBACZ;gBACJ;gBAEA,UAAU,GAAG,IAAI;gBACjB,YAAY,CAAC,SAAS,CAAC;AACvB,gBAAA,OAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC;AAC9D,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;;AAGU,IAAA,MAAM,CAAC,MAAU,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB;QACJ;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC1B;AACH;AAED;;;;AAIG;AACG,MAAO,mBAA8C,SAAQ,cAAoB,CAAA;AAE9D,IAAA,MAAA;AADrB,IAAA,WAAA,CACqB,MAA0B,EAAA;AAE3C,QAAA,KAAK,EAAE;QAFU,IAAA,CAAA,MAAM,GAAN,MAAM;QAIvB,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;QAC3E,IAAI,CAAC,kBAAkB,EAAE;IAC7B;;AAGA,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU;IACjC;AAEgB,IAAA,eAAe,CAAC,SAAiC,EAAA;AAC7D,QAAA,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC;QAEhC,SAAS,CAAC,YAAY,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CACzB,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC/D;IAEU,mBAAmB,GAAA;AACzB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;;;QAIzC,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,2BAA2B,CAAC;QACzE,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,cAAc,CAAC,sBAAsB,CAAC;QAExE,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC;QACnE,UAAU,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACrE,QAAA,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC;QAEpC,OAAO,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,cAAc,CAAC;IAClE;AAEU,IAAA,WAAW,CAAC,MAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IAC7B;IAEQ,kBAAkB,GAAA;;;QAGtB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AAErE,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAC1B,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EACnE,IAAI,CAAC,CAAC,CAAC,CACV,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YAClB,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;AAChB,QAAA,CAAC,CAAC;IACN;;AAGQ,IAAA,iBAAiB,CAAC,QAAgB,EAAA;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe;AAEvD,QAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;YAChC;QACJ;AAEA,QAAA,IAAI,QAAQ,IAAI,CAAC,EAAE;AACf,YAAA,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,2BAA2B,CAAC;AACtD,YAAA,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,sBAAsB,CAAC;YAErD;QACJ;AAEA,QAAA,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,2BAA2B,CAAC;AACnD,QAAA,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAA,EAAG,CAAC,GAAG,QAAQ,CAAA,CAAE,CAAC;IACzE;AACH;AAED;;;;AAIG;AACG,MAAO,sBAAiD,SAAQ,cAAoB,CAAA;AAKjE,IAAA,QAAA;AAJb,IAAA,iBAAiB;AACjB,IAAA,IAAI;AAEZ,IAAA,WAAA,CACqB,QAAoB,EAAA;AAErC,QAAA,KAAK,EAAE;QAFU,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAG7B;AAEA,IAAA,IAAoB,KAAK,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,eAAe;IAC9C;;IAGO,WAAW,CAAC,YAAmC,EAAE,IAA6B,EAAA;AACjF,QAAA,IAAI,CAAC,iBAAiB,GAAG,YAAY;AACrC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAEhB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IAC9B;IAEgB,MAAM,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE;IACvB;IAEgB,QAAQ,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE;IACzB;IAEgB,MAAM,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE;IACvB;AAEgB,IAAA,kBAAkB,CAAC,MAAuB,EAAA;AACtD,QAAA,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC;IACzC;AAEgB,IAAA,iBAAiB,CAAC,MAAuB,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC;IACxC;AAEgB,IAAA,cAAc,CAAC,KAAc,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC;IACpC;AAEA;;;AAGG;AACI,IAAA,OAAO,CAAC,MAAU,EAAA;QACrB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC9C;QACJ;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IAC5B;IAEU,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC;AAEpC,QAAA,OAAO,IAAI,CAAC,uBAAuB,EAAE;IACzC;AAEU,IAAA,WAAW,CAAC,MAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE;AACjC,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAClC,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;QACrB,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACvB;AACH;;ACjTD;AACO,MAAM,uBAAuB,GAAG,CAAC;AAExC;AACO,MAAM,qBAAqB,GAAG,GAAG;AAExC;AACO,MAAM,cAAc,GAAG,GAAG;AAEjC;AACO,MAAM,mBAAmB,GAAG,GAAG;AAsBtC;;;;;;;AAOG;AACG,SAAU,YAAY,CAAC,KAAsB,EAAA;AAC/C,IAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK;AAE5D,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,QAAA,OAAO,CAAC;IACZ;IAEA,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC;AAErD,IAAA,IAAI,QAAQ,GAAG,mBAAmB,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,cAAc,EAAE;QACvE,OAAOA,YAAU,CAAC,WAAW,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;IAC3E;AAEA,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAEzD,IAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACjB,QAAA,OAAO,WAAW;IACtB;AAEA,IAAA,MAAM,WAAW,GAAGA,YAAU,CAAC,WAAW,GAAG,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;AACtE,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACnE,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAExD,IAAA,OAAO,OAAO,GAAG,CAAC,IAAI,SAAS,IAAI,OAAO,GAAG,qBAAqB,GAAG,WAAW,GAAG,WAAW;AAClG;AAEA;AACM,SAAU,iBAAiB,CAAC,MAAgB,EAAE,MAAc,EAAA;IAC9D,IAAI,OAAO,GAAG,CAAC;AAEf,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,EAAE;YACvE,OAAO,GAAG,KAAK;QACnB;IACJ;AAEA,IAAA,OAAO,OAAO;AAClB;AAEA,SAASA,YAAU,CAAC,KAAa,EAAE,MAAc,EAAA;AAC7C,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC;AACnD;;ACxEA;;;;;;;;AAQG;MAeU,kBAAkB,CAAA;IACV,OAAO,GAAG,SAAS,CAA0B,SAAS;gFAAC;AACvD,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,IAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;AAEhD,IAAA,cAAc,GAAG,IAAI,OAAO,EAAQ;AACpC,IAAA,YAAY,GAAG,IAAI,OAAO,EAAU;AACpC,IAAA,YAAY,GAAG,IAAI,OAAO,EAAoB;IAE/C,IAAI,GAAG,KAAK,CAAkB,OAAO;6EAAC;IACtC,UAAU,GAAG,KAAK,CAAU,IAAI;mFAAC;IACjC,aAAa,GAAG,KAAK,CAAU,IAAI;sFAAC;IACpC,WAAW,GAAG,KAAK,CAAU,KAAK;oFAAC;IACnC,YAAY,GAAG,KAAK,CAAmB,WAAW;qFAAC;IACnD,MAAM,GAAG,KAAK,CAA+B,SAAS;+EAAC;IACvD,SAAS,GAAG,KAAK,CAAuB,IAAI;kFAAC;IAC7C,WAAW,GAAG,KAAK,CAAS,cAAc;oFAAC;IAC3C,UAAU,GAAG,KAAK,CAAS,EAAE;mFAAC;IAE3B,QAAQ,GAAG,MAAM,CAAU,KAAK;iFAAC;IACjC,UAAU,GAAG,MAAM,CAAU,KAAK;mFAAC;;IAGrC,UAAU,GAAG,MAAM,CAAS,CAAC;mFAAC;AAE/C;;;;AAIG;AACc,IAAA,UAAU,GAAG,MAAM,CAAW,CAAC,CAAC,CAAC;mFAAC;IAClC,YAAY,GAAG,MAAM,CAAS,CAAC;qFAAC;AAEjC,IAAA,KAAK,GAAG,QAAQ,CAAmB,MAAK;AACpD,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,UAAU,GAAG,WAAW;IAC/D,CAAC;8EAAC;AAEiB,IAAA,mBAAmB,GAAG,QAAQ,CAAU,MAAK;AAC5D,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE;IAClF,CAAC;4FAAC;AAEF;;;AAGG;IACc,aAAa,GAAG,MAAM,CAAgB,IAAI;sFAAC;AAE5D;;;;;AAKG;AACgB,IAAA,gBAAgB,GAAG,QAAQ,CAAgB,MAAK;AAC/D,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE;QAC/B;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAEhC,QAAA,OAAO,MAAM,GAAG,CAAC,GAAG,CAAA,WAAA,EAAc,MAAM,CAAA,GAAA,CAAK,GAAG,IAAI;IACxD,CAAC;yFAAC;;AAGM,IAAA,SAAS;;IAET,QAAQ,GAAuB,IAAI;IACnC,MAAM,GAAG,CAAC;IACV,KAAK,GAAG,CAAC;IACT,aAAa,GAAG,CAAC;IACjB,QAAQ,GAAG,CAAC;IACZ,YAAY,GAAG,CAAC;IAChB,eAAe,GAAG,KAAK;;IAEvB,SAAS,GAAG,KAAK;AAET,IAAA,SAAS,GAAqB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAChE,IAAA,YAAY,GAAuB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AACnE,IAAA,YAAY,GAAiC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;AAE7F,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,EAAE;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAC9C;AACJ,QAAA,CAAC,CAAC;;;AAIF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AACrC,YAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AAE3D,YAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;YAEzB,SAAS,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC1C,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAW,cAAc,GAAA;QACrB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,IAAI,IAAI;IAChD;IAEO,mBAAmB,GAAA;QACtB,qBAAqB,CAAC,MAAK;YACvB,IAAI,CAAC,OAAO,EAAE;;AAGd,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,WAAW;AAExF,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC;AAC9D,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,SAAS,CAAC,KAAc,EAAA;QAC3B,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACzB;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC5B;IAEO,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAClB;IAEO,QAAQ,GAAA;QACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IACtC;IAEO,MAAM,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,UAAU,EAAE;YAC7B,IAAI,CAAC,QAAQ,EAAE;QACnB;aAAO;YACH,IAAI,CAAC,MAAM,EAAE;QACjB;IACJ;IAEO,OAAO,GAAA;QACV,IAAI,CAAC,cAAc,EAAE;IACzB;AAEU,IAAA,eAAe,CAAC,KAAoB,EAAA;AAC1C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACzB,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,MAAM,EAAE;QACjB;;;AAIA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,QAAQ,EAAE;QACnB;IACJ;AAEU,IAAA,aAAa,CAAC,KAAmB,EAAA;;;AAGvC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YAC3E;QACJ;AAEA,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACrD;QACJ;QAEA,IAAI,CAAC,OAAO,EAAE;AAEd,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO;AACxC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS;AACpC,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;AACrC,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;;;AAI/C,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACxF,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;YAC1D,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC;AAClE,QAAA,CAAC,CAAC;IACN;AAEiB,IAAA,aAAa,GAAG,CAAC,KAAmB,KAAU;QAC3D,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE;YACpC;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YACpD;QACJ;QAEA,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa;AAEpD,QAAA,IAAI,OAAO,GAAG,CAAC,EAAE;AACb,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO;AACtD,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO;AAC1B,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS;QACxC;QAEA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1F,IAAA,CAAC;AAEgB,IAAA,WAAW,GAAG,CAAC,KAAmB,KAAU;QACzD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE;YACpC;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,cAAc,EAAE;YAErB;QACJ;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;QAChC,MAAM,MAAM,GAAG,YAAY,CAAC;YACxB,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,YAAY;AACzB,YAAA,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,QAAQ,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa;AACjD,SAAA,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,YAAY,EAAE,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACnD;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACvB;QAEA,IAAI,CAAC,sBAAsB,EAAE;AACjC,IAAA,CAAC;AAEgB,IAAA,eAAe,GAAG,CAAC,KAAmB,KAAU;QAC7D,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE;AACpC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe;YAExC,IAAI,CAAC,cAAc,EAAE;YAErB,IAAI,WAAW,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC;QACJ;AACJ,IAAA,CAAC;;AAGgB,IAAA,WAAW,GAAG,CAAC,KAAiB,KAAU;QACvD,IAAI,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,UAAU,EAAE;YAC1C,KAAK,CAAC,cAAc,EAAE;QAC1B;AACJ,IAAA,CAAC;AAED;;;;;AAKG;AACK,IAAA,YAAY,CAAC,KAAmB,EAAA;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;QAE5C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,uBAAuB,EAAE;AAC9C,YAAA,OAAO,KAAK;QAChB;AAEA,QAAA,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC;QAC/B,MAAM,SAAS,GAAG;cACZ,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,IAAI,CAAC,IAAI;AACpC,cAAE,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAE/C,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,cAAc,EAAE;AAErB,YAAA,OAAO,KAAK;QAChB;;;QAIA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO;AACxC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AAEzB,QAAA,OAAO,IAAI;IACf;;IAGQ,OAAO,GAAA;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY;AAEnD,QAAA,IAAI,QAAQ,IAAI,CAAC,EAAE;YACf;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;YACzB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAElC;QACJ;;;;AAKA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,qBAAqB,EAAE,CAAC,MAAM,IAAI,QAAQ;AACjG,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;AAErD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACpB,YAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzB;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;IAC/B;;IAGO,SAAS,GAAA;QACZ,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;YAChD;QACJ;QAEA,IAAI,CAAC,OAAO,EAAE;AAEd,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAE9D,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC;AAEQ,IAAA,MAAM,CAAC,KAAa,EAAE,MAAA,GAAkB,IAAI,EAAA;AAChD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;AAE7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,QAAQ,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D;IACJ;AAEA;;;;AAIG;AACK,IAAA,QAAQ,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,MAAM,CAAA,GAAA,CAAK,CAAC;AACjD,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IAC9B;AAEQ,IAAA,aAAa,CAAC,MAAc,EAAA;AAChC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AAElE,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACvF;;IAGQ,YAAY,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE;AACzB,YAAA,OAAO,CAAC;QACZ;AAEA,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS;IACxE;IAEQ,cAAc,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IACpD;AAEQ,IAAA,YAAY,CAAC,MAAc,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;QAEhC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3E;IAEQ,cAAc,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC9B;QACJ;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAE1B,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;QACvE,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;QAC7D,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;QACzD,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC;IACrE;AAEA;;;;AAIG;IACK,sBAAsB,GAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc;QAEnC,IAAI,CAAC,OAAO,EAAE;YACV;QACJ;AAEA,QAAA,MAAM,OAAO,GAAG,CAAC,KAAiB,KAAU;YACxC,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AAC3B,QAAA,CAAC;AAED,QAAA,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzE,QAAA,UAAU,CAAC,MAAM,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF;;AAGQ,IAAA,YAAY,CAAC,MAA0B,EAAA;AAC3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc;AACnC,QAAA,IAAI,IAAI,GAAG,MAAM,YAAY,WAAW,GAAG,MAAM,GAAG,IAAI;QAExD,OAAO,IAAI,IAAI,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;AACpC,YAAA,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AAClE,gBAAA,OAAO,IAAI;YACf;AAEA,YAAA,IAAI,GAAG,IAAI,CAAC,aAAa;QAC7B;AAEA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,YAAY,CAAC,OAAoB,EAAA;QACrC,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS;AAErD,QAAA,OAAO,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,QAAQ;IACzD;uGAzbS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,mrDChC/B,s2BAuBA,EAAA,MAAA,EAAA,CAAA,ypFAAA,CAAA,EAAA,CAAA;;2FDSa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAd9B,SAAS;+BACI,0BAA0B,EAAA,OAAA,EAC3B,EAAE,EAAA,IAAA,EAGL;AACF,wBAAA,2BAA2B,EAAE,uBAAuB;AACpD,wBAAA,wBAAwB,EAAE,oBAAoB;AAC9C,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,uBAAuB,EAAE,iBAAiB;AAC1C,wBAAA,sBAAsB,EAAE,cAAc;AACtC,wBAAA,sBAAsB,EAAE,wBAAwB;AACnD,qBAAA,EAAA,QAAA,EAAA,s2BAAA,EAAA,MAAA,EAAA,CAAA,ypFAAA,CAAA,EAAA;+FAG6D,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,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,YAAA,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,eAAA,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,YAAA,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,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,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,UAAA,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,EAAA,CAAA;;AErB3E;;;;;;AAMG;AAUG,MAAO,WAAY,SAAQ,kBAAkB,CAAA;;;AAI9B,IAAA,OAAO;AAEL,IAAA,MAAM,GAAG,MAAM,CAAoB,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AAEpG,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc;IACtC;AAEA,IAAA,IAAW,SAAS,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS;IACjC;AAEA,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY;IACpC;AAEA,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY;IACpC;IAEO,mBAAmB,GAAA;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;IACtC;AAEO,IAAA,SAAS,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;IACjC;IAEO,cAAc,GAAA;QACjB,IAAI,CAAC,eAAe,EAAE;IAC1B;IAEgB,WAAW,GAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QACtB,KAAK,CAAC,WAAW,EAAE;IACvB;uGAvCS,WAAW,EAAA,IAAA,EAAA,IAAA,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,qHAGT,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BjC,+fAUA,EAAA,MAAA,EAAA,CAAA,8uCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDYQ,eAAe,iJACf,kBAAkB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKb,WAAW,EAAA,UAAA,EAAA,CAAA;kBATvB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,OAAA,EACnB;wBACL,eAAe;wBACf,kBAAkB;AACrB,qBAAA,EAAA,QAAA,EAAA,+fAAA,EAAA,MAAA,EAAA,CAAA,8uCAAA,CAAA,EAAA;;sBAOA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AEPnD,IAAI,YAAY,GAAG,CAAC;AAEpB;;;;;;AAMG;MAgBU,mBAAmB,CAAA;AAEX,IAAA,YAAY;AAGZ,IAAA,OAAO;AAEL,IAAA,MAAM,GAAG,MAAM,CAAoB,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;AACnF,IAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;;AAGjD,IAAA,QAAQ,GAAG,CAAA,iBAAA,EAAoB,YAAY,EAAE,EAAE;IAE/C,UAAU,GAAG,MAAM,CAAU,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI;mFAAC;IACxD,aAAa,GAAG,MAAM,CAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI;sFAAC;IAC7D,WAAW,GAAG,MAAM,CAAU,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,KAAK;oFAAC;IAC/D,YAAY,GAAG,MAAM,CAAmB,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,WAAW;qFAAC;IAChF,KAAK,GAAG,MAAM,CAAS,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;8EAAC;IAC/C,UAAU,GAAG,MAAM,CAAS,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE;mFAAC;AACzD,IAAA,eAAe,GAAG,MAAM,CAAS,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC;wFAAC;AAClF,IAAA,cAAc,GAAG,MAAM,CAAS,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC;uFAAC;AAEjG;;;;AAIG;AACc,IAAA,iBAAiB,GAAG,QAAQ,CAAC,aAAmC;AAEjF,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;AAErC,YAAA,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,qCAAqC,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AACxF,YAAA,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,oCAAoC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1F,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC9D,OAAO,CAAC,IAAI,CACR;AACE,kBAAA,wEAAwE,CAC7E;QACL;IACJ;AAEA,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;IAC7B;AAEA,IAAA,IAAW,cAAc,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc;IACtC;AAEA,IAAA,IAAW,SAAS,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS;IACjC;AAEA,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY;IACpC;AAEA,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY;IACpC;IAEO,mBAAmB,GAAA;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE;IACtC;AAEO,IAAA,SAAS,CAAC,KAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;IACjC;IAEO,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;IACzB;IAEO,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;IAC3B;IAEO,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;IACzB;AAEO,IAAA,kBAAkB,CAAC,KAAsB,EAAA;AAC5C,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IAC5B;AAEO,IAAA,iBAAiB,CAAC,KAAsB,EAAA;AAC3C,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;IAC5B;AAEO,IAAA,cAAc,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC/B;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;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAEtB,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACxD,YAAA,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE;QACnC;IACJ;uGA/GS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACjB,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGf,kBAAkB,8DCpDjC,qZAWA,EAAA,MAAA,EAAA,CAAA,sLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDyBQ,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAWb,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAf/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,2BAA2B,EAAA,OAAA,EAC5B;wBACL,eAAe;wBACf,kBAAkB;qBACrB,EAAA,IAAA,EAGK;AACF,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,WAAW,EAAE,UAAU;AACvB,wBAAA,mBAAmB,EAAE,iBAAiB;AACtC,wBAAA,wBAAwB,EAAE,sBAAsB;AACnD,qBAAA,EAAA,QAAA,EAAA,qZAAA,EAAA,MAAA,EAAA,CAAA,sLAAA,CAAA,EAAA;;sBAGA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAG3C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;AA8GnD,SAAS,WAAW,CAAC,KAAkC,EAAE,QAAgB,EAAA;AACrE,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,QAAA,OAAO,QAAQ;IACnB;AAEA,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,GAAG,KAAK;AAC3D;;AErKA;;;;;AAKG;MAUU,iBAAiB,CAAA;AAET,IAAA,SAAS;AAEnB,IAAA,WAAW,CAAC,QAAkB,EAAA;AACjC,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC;;AAG3F,QAAA,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,EAAE;AAEnD,QAAA,OAAO,iBAAiB;IAC5B;uGAXS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACM,gBAAgB,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARtC,0CAA0C,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA;;2FAO3C,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,YACzB,0CAA0C,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;sBAQnD,SAAS;uBAAC,WAAW,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;;;ACgBpE,MAAMC,aAAW,GAAG,wBAAwB;AAC5C,MAAMC,eAAa,GAAG,0BAA0B;AAEhD;;;;;;;;;AASG;MAIU,kBAAkB,CAAA;AACV,IAAA,SAAS,GAAG,MAAM,CAACC,QAAS,CAAC;AAC7B,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE5C;;;AAGG;IACc,OAAO,GAA6B,EAAE;AAE/C,IAAA,QAAQ;AACR,IAAA,WAAW;;AAGZ,IAAA,yBAAyB,CAAC,MAAuB,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE;YACvD;QACJ;AAEA,QAAA,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;YACtB,MAAM,CAAC,MAAM,EAAE;QACnB;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;AAE1E,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACd,MAAM;AACN,YAAA,gBAAgB,EAAE,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC;AACzD,SAAA,CAAC;IACN;AAEO,IAAA,2BAA2B,CAAC,MAAuB,EAAA;AACtD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;AAExE,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd;QACJ;;;QAIA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;QAC/B;QAEA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;QACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACjC;AAEO,IAAA,IAAI,CACP,SAAkB,EAClB,MAAA,GAA+B,EAAE,EAAA;QAEjC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AAE5C,QAAA,OAAO,WAAW,CAAC,IAAI,KAAK;cACtB,IAAI,CAAC,YAAY,CAAU,SAAS,EAAE,WAAW;cACjD,IAAI,CAAC,SAAS,CAAU,SAAS,EAAE,WAAW,CAAC;IACzD;AAEA;;;AAGG;AACI,IAAA,KAAK,CAAc,MAAU,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YAE3B;QACJ;AAEA,QAAA,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;IACnC;IAEQ,SAAS,CACb,SAAkB,EAClB,WAAyC,EAAA;;AAGzC,QAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE;AAEtB,QAAA,IAAI,QAAoC;QAExC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAU,SAAS,EAAE;;;;AAInD,YAAA,SAAS,EAAE;AACP,gBAAA,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,MAAM;AACb,oBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE;AAC1D,iBAAA;AACJ,aAAA;;;AAGD,YAAA,SAAS,EAAE,CAAC,YAAgC,KAAI;AAC5C,gBAAA,QAAQ,GAAG,IAAI,mBAAmB,CAAO,YAAY,CAAC;gBAEtD,OAAO;AACH,oBAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC/C,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE;AAC1D,oBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE;AACvD,oBAAA,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE;iBAC3D;YACL,CAAC;YACD,IAAI,EAAE,WAAW,CAAC,IAAI;AACtB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,SAAS;YAC7C,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;YAC9C,QAAQ,EAAE,WAAW,CAAC,QAAQ;AAC9B,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,CAAC,wBAAwB,EAAED,eAAa,CAAC;AACxD,YAAA,UAAU,EAAE,CAACD,aAAW,EAAEC,eAAa,CAAC;AACxC,YAAA,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;AAClC,iBAAA,MAAM;AACN,iBAAA,kBAAkB;iBAClB,MAAM,CAAC,GAAG,CAAC;;YAEhB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;;;AAGrD,YAAA,YAAY,EAAE,IAAI;AACrB,SAAA,CAAC;AAEF,QAAA,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,iBAA2C,CAAC;QAC5E,QAAQ,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,SAAS;AAElE,QAAA,IAAI,MAAM,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC;QAC3D;AAEA,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AAEjC,QAAA,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAK;AAClC,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;AAC5B,gBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;YAC7B;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,QAAQ;IACnB;IAEQ,YAAY,CAChB,SAAkB,EAClB,WAAyC,EAAA;AAEzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;QAEhC,IAAI,CAAC,IAAI,EAAE;YACP,MAAM,IAAI,KAAK,CACX;AACE,kBAAA,iEAAiE,CACtE;QACL;;AAGA,QAAA,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE;AAEzB,QAAA,MAAM,QAAQ,GAAiC,IAAI,sBAAsB,CAAO,MAAK;AACjF,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,QAAQ,EAAE;AAC/B,gBAAA,IAAI,CAAC,WAAW,GAAG,SAAS;YAChC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC;AACtE,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC9E,QAAA,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC;AAEzF,QAAA,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,EAAE;QAEnD,QAAQ,CAAC,WAAW,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,QAAQ,CAAC;AACnE,QAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,WAAW,CAAC;AACvD,QAAA,QAAQ,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,QAAQ;AAEzD,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ;AAC3B,QAAA,iBAAiB,CAAC,QAAQ,CAAC,mBAAmB,EAAE;AAEhD,QAAA,OAAO,QAAQ;IACnB;IAEQ,YAAY,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD;AAEQ,IAAA,cAAc,CAClB,SAAkB,EAClB,MAAoC,EACpC,QAAgC,EAAA;QAEhC,OAAO,QAAQ,CAAC,MAAM,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC,QAAQ;AACvB,YAAA,SAAS,EAAE;AACP,gBAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBAC/C,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;AACrD,gBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE;AAClD,gBAAA,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE;AAC3D,aAAA;AACJ,SAAA,CAAC;IACN;AAEQ,IAAA,kBAAkB,CAAC,QAAuC,EAAA;AAC9D,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU;AACtC,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,CAACA,eAAa,CAAC;AACrC,gBAAA,QAAQ,EAAE,SAAS,CAAC,MAAM,CAACA,eAAa,CAAC;YAC7C,CAAC,EAAE,GAAG,CAAC;AACX,QAAA,CAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,aAAa,EAAE,mBAAmB,EAAE;IACjD;AAEQ,IAAA,WAAW,CAAI,MAA4B,EAAA;QAC/C,OAAO;AACH,YAAA,GAAG,MAAM;YACT,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,KAAK;AAClD,YAAA,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,OAAO;AAC5B,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;AAC7B,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;AACjC,YAAA,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,KAAK;AACxC,YAAA,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,WAAW;AAChD,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,gBAAgB,CACpB,YAA6B,EAC7B,MAAoC,EAAA;AAEpC,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;uGA7PS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFf,MAAM,EAAA,CAAA;;2FAET,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;MC7CY,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,EAAAE,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;;;MChBY,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,YAAY,GAAG,SAAS,CAAC,cAAc,oFAAI,IAAI,EAAE,eAAe,EAAA,CAAG;IACnE,cAAc,GAAG,SAAS,CAA0B,gBAAgB;uFAAC;AACrE,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC9B,IAAA,YAAY,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACzC,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC9B,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B,IAAA,WAAA,GAAA;;;;QAII,MAAM,CAAC,MAAK;YACR,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AACzC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAA4B;AAEjD,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,0CAA0C,EAAE,CAAA,EAAG,KAAK,CAAC,UAAU,CAAA,EAAA,CAAI,CAAC;AAC3F,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,wCAAwC,EAAE,CAAA,EAAG,KAAK,CAAC,QAAQ,CAAA,EAAA,CAAI,CAAC;AAC3F,QAAA,CAAC,CAAC;IACN;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,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,YAAY,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,YAAY,CAAC;QAC7D;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;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;QAExC,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,IAAI,YAAY,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,YAAY,CAAC;QAC/D;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE;IAC1C;uGAhES,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,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACsC,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,uHACT,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,ECjB5E,0uCA8BM,EAAA,MAAA,EAAA,CAAA,i9DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDrBE,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,0uCAAA,EAAA,MAAA,EAAA,CAAA,i9DAAA,CAAA,EAAA;mGAK+B,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,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACnC,cAAc,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACd,gBAAgB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEbhF;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AAYG,MAAO,MAAO,SAAQ,QAAQ,CAAA;uGAAvB,MAAM,EAAA,IAAA,EAAA,IAAA,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,YAAA,EAAA,SAAA,EAJJ;YACP,aAAa;SAChB,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EDtCL,0uCA8BM,ugECEE,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;;2FAQV,MAAM,EAAA,UAAA,EAAA,CAAA;kBAXlB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,OAAA,EACb;wBACL,eAAe;qBAClB,EAAA,SAAA,EAGU;wBACP,aAAa;AAChB,qBAAA,EAAA,QAAA,EAAA,0uCAAA,EAAA,MAAA,EAAA,CAAA,+8DAAA,CAAA,EAAA;;;MCjCQ,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,OAAO,GAAG,KAAK;QAEnB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC/B,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AAClB,gBAAA,OAAO,OAAO;YAClB;YAEA,OAAO,GAAG,IAAI;AACd,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,OAAO;IAClB;uGAnFS,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,OAAO,GAAG,KAAK;QAEnB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC/B,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AAClB,gBAAA,OAAO,OAAO;YAClB;YAEA,OAAO,GAAG,IAAI;AACd,YAAA,OAAO,KAAK;AAChB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,OAAO;IAClB;uGAvGS,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;AAkCA,IAAA,EAAA;AAjCe,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;AAC5E,IAAA,cAAc,GAAG,IAAI,OAAO,EAAuB;;AAG3D,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;AACvC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AAEjC,YAAA,IAAI,SAAS,IAAI,QAAQ,EAAE;;AAEvB,gBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;oBACrB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAC/B,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;oBAC7B;AACJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,EAAE;gBACnC;YACJ;AAEA,YAAA,IAAI,SAAS,IAAI,MAAM,EAAE;AACrB,gBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,OAAO,EAAE;YACvC;iBAAO;AACH,gBAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACxB,wBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;oBACjC;AACJ,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;uGAhIS,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,ggHAAA,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,ggHAAA,CAAA,EAAA;;;MEGF,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;;MClOY,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;;;MC8BY,MAAM,CAAA;AAiGH,IAAA,EAAA;AACA,IAAA,aAAA;;;AA/FK,IAAA,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEvE;;;;;;AAMG;IACI,OAAO,GAAG,KAAK,CAA2B,IAAI,+EACjD,KAAK,EAAE,UAAU,EAAA,CACnB;AAEiB,IAAA,YAAY,GAAG,QAAQ,CAAgB,MAAK;AAC3D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAE3B,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;YACf,OAAO,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI;QACxC;QAEA,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,QAAQ;IAC1C,CAAC;qFAAC;IAEK,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;;;IAIpE,eAAe,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;wFAAC;AAE9E,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;AAErB,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;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,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;uGA/KS,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,WAAA,EAAA,gBAAA,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,EA4D2B,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,ECvFxC,4oFAgEA,g/RDjDQ,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,aAAa,EAAE,gBAAgB;AAC/B,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;AAsD2B,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,OAAA,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,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;;AExExC;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;MAwBU,OAAO,CAAA;AACC,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,IAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;;AAG9B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjE,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAE7E,WAAW,GAAG,KAAK,CAAc,UAAU,mFAC9C,KAAK,EAAE,cAAc,EAAA,CACvB;IAEK,YAAY,GAAG,KAAK,CAAe,UAAU,oFAChD,KAAK,EAAE,eAAe,EAAA,CACxB;AAEF;;;AAGG;IACI,WAAW,GAAG,KAAK,CAA4B,IAAI,mFACtD,KAAK,EAAE,aAAa,EAAA,CACtB;IAEK,SAAS,GAAG,KAAK,CAAmB,QAAQ,iFAC/C,KAAK,EAAE,WAAW,EAAA,CACpB;IAEK,YAAY,GAAG,KAAK,CAAsB,MAAM,oFACnD,KAAK,EAAE,eAAe,EAAA,CACxB;IAEK,WAAW,GAAG,KAAK,CAAkB,KAAK,mFAC7C,KAAK,EAAE,cAAc,EAAA,CACvB;;IAGK,QAAQ,GAAG,KAAK,CAAU,IAAI;iFAAC;IAErB,aAAa,GAAG,SAAS,CAA0B,QAAQ;sFAAC;IAC5D,gBAAgB,GAAG,SAAS,CAA0B,WAAW;yFAAC;IAClE,YAAY,GAAG,SAAS,CAA0B,OAAO;qFAAC;IAC1D,GAAG,GAAG,YAAY,CAAC,oBAAoB;4EAAC;;IAGxC,iBAAiB,GAAG,MAAM,CAAU,KAAK;0FAAC;IAC1C,cAAc,GAAG,MAAM,CAAU,KAAK;uFAAC;AAChD,IAAA,kBAAkB;IAET,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;;IAG3D,OAAO,GAAG,CAAC,CAAC;IAEJ,UAAU,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU;mFAAC;AAEvE,IAAA,oBAAoB,GAAG,QAAQ,CAAqB,MAAK;AACrE,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,YAAY,GAAG,UAAU,GAAG,YAAY,CAAC;IAChF,CAAC;6FAAC;;AAGc,IAAA,MAAM,GAAG,QAAQ,CAAuB,MAAK;AACzD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,KAAK,GAAG,YAAY,GAAG,UAAU;QAC1E;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,SAAS,GAAG,aAAa,GAAG,WAAW;QACjF;AAEA,QAAA,OAAO,IAAI;IACf,CAAC;+EAAC;IAEiB,WAAW,GAAG,QAAQ,CAAU,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW;oFAAC;IACzD,YAAY,GAAG,QAAQ,CAAU,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY;qFAAC;;AAG3D,IAAA,gBAAgB,GAAG,QAAQ,CAAU,MAAK;AACzD,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;IAC3E,CAAC;yFAAC;;AAGe,IAAA,aAAa,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;sFAAC;;IAGhF,WAAW,GAAG,QAAQ,CAAU,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,iBAAiB,EAAE;oFAAC;;IAGpG,cAAc,GAAG,QAAQ,CAAU,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;uFAAC;;AAG3G,IAAA,oBAAoB,GAAG,QAAQ,CAAsB,MAAK;AACtE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;QAElC,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,oBAAoB,EAAE,KAAK,UAAU,EAAE;AACjE,YAAA,OAAO,MAAM;QACjB;AAEA,QAAA,IAAI,MAAM,KAAK,UAAU,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;AACtE,YAAA,OAAO,MAAM;QACjB;AAEA,QAAA,OAAO,MAAM;IACjB,CAAC;6FAAC;IAEc,QAAQ,GAAG,MAAM,CAAU,KAAK;iFAAC;AACjC,IAAA,WAAW,GAAG,QAAQ,CAAU,MAAK;AACjD,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;IACzE,CAAC;oFAAC;AAEF;;;;;AAKG;AACgB,IAAA,gBAAgB,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE;yFAAC;;IAGnG,iBAAiB,GAAuB,MAAM,CAAa,OAAO;0FAAC;AAE1E,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACnB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;YAC/C;iBAAO;gBACH,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;gBACxC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;YACjD;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE;YACxD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;AACvC,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC/D,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;YAChD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACjC,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE;YACjD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AACrC,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7D,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;YACjB,MAAM,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;YAChD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AACpC,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5D,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAE5B,IAAI,CAAC,MAAM,EAAE;gBACT;YACJ;YAEA,MAAM,IAAI,GAAG,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7F,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxD,QAAA,CAAC,CAAC;;;AAIF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;gBACvB;YACJ;AAEA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAE5B,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,UAAU,EAAE;gBAClD;YACJ;YAEA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;YAEnD,IAAI,CAAC,OAAO,EAAE;gBACV;YACJ;YAEA,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC;AAEhD,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/D,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,iBAAiB,EAAE;AAC5B,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;YAEnD,IAAI,OAAO,EAAE;AACT,gBAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YACtC;AACJ,QAAA,CAAC,CAAC;;;AAIF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB;YACJ;;;YAIA,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,gBAAgB,EAAE;YAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa;AAEhD,YAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;gBACnB;YACJ;;;AAIA,YAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;AAC5D,YAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,YAAA,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;AACxB,YAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YAEvB,SAAS,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC1C,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;YAC/C,MAAM,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC3C;IACJ;IAEA,WAAW,GAAA;;;AAGP,QAAA,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE;AACrC,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;IACvC;AAEA,IAAA,IAAW,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAA4B;IAC/C;IAEU,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC;AAEU,IAAA,UAAU,CAAC,KAAiB,EAAA;AAClC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAA4B;QAE/C,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACrC;QACJ;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;IAClC;IAEQ,iBAAiB,GAAA;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAE1C,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YACvB;QACJ;;;AAIA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YACvB;QACJ;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;QAE1E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC;AAC5C,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;IACvD;AAEA;;;;;;AAMG;IACK,UAAU,GAAA;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,aAAa;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa;QAEhD,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE;YACjC;QACJ;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,KAAK,UAAU;QAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAkB;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;;AAGhE,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM;AAE/D,QAAA,IAAI,OAAO,GAAG,CAAC,EAAE;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAClB;QACJ;AAEA,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ;AAChD,cAAA,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ;cACnC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ;AAC9C,cAAA,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ;AACtC,cAAA,OAAO;QAEb,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACzC;AAEQ,IAAA,UAAU,CAAC,GAAW,EAAA;;AAE1B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAEtD,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;YACxB;QACJ;AAEA,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC;IACzE;IAEQ,MAAM,CAAC,OAAoB,EAAE,QAAiB,EAAA;AAClD,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;AAE5C,QAAA,OAAO,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK;IAC9C;IAEQ,aAAa,CAAC,OAAoB,EAAE,QAAiB,EAAA;AACzD,QAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW;AAElE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpE;IAEQ,aAAa,CAAC,OAAoB,EAAE,QAAiB,EAAA;AACzD,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACvC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;QAC9E,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;QAEhF,OAAO,KAAK,GAAG,GAAG;IACtB;;AAGQ,IAAA,aAAa,CAAC,MAAmB,EAAE,SAAsB,EAAE,QAAiB,EAAA;AAChF,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;AAEtE,QAAA,OAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;aAC7B,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,SAAS;aACrC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAC5E;AAEQ,IAAA,oBAAoB,CAAC,OAAoB,EAAA;AAC7C,QAAA,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE;QAErC,MAAM,MAAM,GAAG,MAAK;AAChB,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,6CAA6C,CAAC,CAAC;AACtG,QAAA,CAAC;AAED,QAAA,MAAM,EAAE;AAER,QAAA,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;YACzC;QACJ;QAEA,IAAI,CAAC,kBAAkB,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE;AACrC,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,CAAC,wBAAwB,CAAC;AAC9C,SAAA,CAAC;IACN;IAEQ,kBAAkB,GAAA;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;AACnC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAE/C,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AAC3C,YAAA,IAAI,CAAC,IAAI,CAAC,mGAAmG,CAAC;QAClH;QAEA,IAAI,QAAQ,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AAClD,YAAA,IAAI,CAAC,IAAI,CAAC,mHAAmH,CAAC;QAClI;QAEA,IAAI,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AAC/C,YAAA,IAAI,CAAC,IAAI,CAAC,iHAAiH,CAAC;QAChI;QAEA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,MAAM,IAAI,WAAW,KAAK,UAAU,EAAE;AAC9D,YAAA,IAAI,CAAC,IAAI,CAAC,2CAA2C,CAAC;QAC1D;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAChF,YAAA,IAAI,CAAC,IAAI,CAAC,6HAA6H,CAAC;QAC5I;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AAC1D,YAAA,IAAI,CAAC,IAAI,CAAC,2EAA2E,CAAC;QAC1F;IACJ;AAEQ,IAAA,IAAI,CAAC,OAAe,EAAA;AACxB,QAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAA,CAAE,CAAC;IAC5C;uGAnaS,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,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,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,UAAA,EAAA,EAAA,MAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,2BAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,SAAA,EAnBL;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,kBAAkB;AAC3B,gBAAA,WAAW,EAAE,OAAO;AACvB,aAAA;SACJ,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAwDmC,oBAAoB,iZC3G5D,4VAWA,EAAA,MAAA,EAAA,CAAA,u8PAAA,CAAA,EAAA,CAAA;;2FDsDa,OAAO,EAAA,UAAA,EAAA,CAAA;kBAvBnB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,SAAA,EAGZ;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,kBAAkB;AAC3B,4BAAA,WAAW,EAAA,OAAS;AACvB,yBAAA;qBACJ,EAAA,IAAA,EACK;AACF,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,yBAAyB,EAAE,wBAAwB;AACnD,wBAAA,6BAA6B,EAAE,oBAAoB;AACnD,wBAAA,wBAAwB,EAAE,eAAe;AACzC,wBAAA,yBAAyB,EAAE,gBAAgB;AAC3C,wBAAA,oBAAoB,EAAE,YAAY;AAClC,wBAAA,uBAAuB,EAAE,eAAe;AACxC,wBAAA,6BAA6B,EAAE,oBAAoB;AACnD,wBAAA,WAAW,EAAE,aAAa;AAC1B,wBAAA,YAAY,EAAE,oBAAoB;AACrC,qBAAA,EAAA,QAAA,EAAA,4VAAA,EAAA,MAAA,EAAA,CAAA,u8PAAA,CAAA,EAAA;AAyCmE,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,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,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,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,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,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,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,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,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACL,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACf,OAAO,oFACtC,oBAAoB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEtG/C,WAAW,CAAA;uGAAX,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,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC/B,iBAAA;;;MCiBY,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;;;ACDD;;;;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;;;;;;;;AAQG;AASG,MAAO,gBAAiB,SAAQ,kBAAkB,CAAA;IACnC,OAAO,GAAG,SAAS,CAA0B,SAAS;gFAAC;IACvD,QAAQ,GAAG,SAAS,CAA0B,UAAU;iFAAC;IACzD,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;;IAGvC,oBAAoB,GAAG,KAAK;IAE7B,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;;;AAGX,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAEvC,QAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;AAC/C,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QACnC;QAEA,IAAI,MAAM,EAAE;YACR;QACJ;;;AAIA,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,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,oBAAoB,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS;IAC5D;IAEgB,WAAW,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAElC,IAAI,WAAW,EAAE;gBACb,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,WAAW,CAAC;YAC/D;YAEA,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,KAAK,EAAE,SAAS,CAAC;YAC3D;AAEA,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;QACrC;QAEA,KAAK,CAAC,WAAW,EAAE;IACvB;AAEA;;;;;AAKG;IACK,iBAAiB,GAAA;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,iBAAuC;QAEtF,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,OAAO,IAAI;QACf;AAEA,QAAA,IAAI,OAAO,CAAC,OAAO,KAAK,YAAY,EAAE;AAClC,YAAA,OAAO,OAAO;QAClB;AAEA,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAuC;AAE5D,QAAA,OAAO,IAAI,EAAE,OAAO,KAAK,YAAY,GAAG,IAAI,GAAG,IAAI;IACvD;AAEQ,IAAA,kBAAkB,CAAC,MAA0B,EAAA;QACjD,IAAI,MAAM,EAAE;YACR;QACJ;QAEA,OAAO,CAAC,IAAI,CACR;cACE;AACA,cAAA,0EAA0E,CAC/E;IACL;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;uGAhHS,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,oXAGuC,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,EC5B/E,olCAyBA,4gEDNQ,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,olCAAA,EAAA,MAAA,EAAA,CAAA,o9DAAA,CAAA,EAAA;AAK6D,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,SAAS,kEACR,UAAU,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAChC,aAAa,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,eAAe,EAAE,iEAC1C,WAAW,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEJjF,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,CAACD,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;;;;;;AAMG;AACI,IAAA,cAAc,CACjB,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;;;AAIA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE;QAEjC,IAAI,WAAW,EAAE;;;AAGb,YAAA,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,cAAc,CAAC;QAC5D;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;AAEA;;;;;AAKG;AACK,IAAA,sBAAsB,CAAC,QAAwB,EAAA;AACnD,QAAA,OAAO,QAAQ,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;IACjE;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;;;;;QAMA,IAAI,CAAC,IAAI,EAAE;YACP;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;YAEA,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC;AAC1C,gBAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,WAAW,CAAC;YAClD,CAAC,EAAE,wBAAwB,CAAC;YAC5B;QACJ;IACJ;AAEA;;;;;AAKG;AACK,IAAA,wBAAwB,CAAC,GAAwB,EAAA;AACrD,QAAA,IAAI,GAAG,CAAC,YAAY,EAAE;YAClB;QACJ;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB;QAErC,IAAI,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC1E,OAAO,CAAC,IAAI,EAAE;QAClB;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;uGApmBS,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;;;MC5BY,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;;;MEKQ,UAAU,CAAA;uGAAV,UAAU,EAAA,IAAA,EAAA,EAAA,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,uHCZvB,2BAAyB,EAAA,MAAA,EAAA,CAAA,4JAAA,CAAA,EAAA,CAAA;;2FDYZ,UAAU,EAAA,UAAA,EAAA,CAAA;kBAVtB,SAAS;+BACI,iBAAiB,EAAA,OAAA,EAClB,EACR,EAAA,IAAA,EAGK;AACF,wBAAA,OAAO,EAAE,gBAAgB;AAC5B,qBAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,4JAAA,CAAA,EAAA;;;MEFQ,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;;;MEEF,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,eAAe,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;AAC7E,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;;;;"}