@resolve-components/theme 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/collection.json +10 -0
- package/fesm2022/resolve-components-theme.mjs +8946 -0
- package/fesm2022/resolve-components-theme.mjs.map +1 -0
- package/package.json +45 -0
- package/schematics/ng-add/index.js +147 -0
- package/schematics/ng-add/schema.json +15 -0
- package/src/lib/styles/_all.scss +52 -0
- package/src/lib/styles/_globals.scss +66 -0
- package/src/lib/styles/_themes.scss +9 -0
- package/src/lib/styles/_theming.scss +20 -0
- package/src/lib/styles/themes/_dark.scss +107 -0
- package/src/lib/styles/themes/_default.scss +341 -0
- package/src/lib/styles/theming/_animation.scss +92 -0
- package/src/lib/styles/theming/_functions.scss +34 -0
- package/src/lib/styles/theming/_get-value.scss +70 -0
- package/src/lib/styles/theming/_install.scss +141 -0
- package/src/lib/styles/theming/_mapping.scss +701 -0
- package/src/lib/styles/theming/_register.scss +58 -0
- package/src/lib/styles/theming/_theming-variables.scss +30 -0
- package/types/resolve-components-theme.d.ts +3214 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-components-theme.mjs","sources":["../../../../libs/resolve-components/src/lib/theme/theme.options.ts","../../../../libs/resolve-components/src/lib/theme/theme-registry.service.ts","../../../../libs/resolve-components/src/lib/theme/theme.service.ts","../../../../libs/resolve-components/src/lib/theme/rc-layout.ts","../../../../libs/resolve-components/src/lib/theme/js-themes/default.theme.ts","../../../../libs/resolve-components/src/lib/theme/js-themes/dark.theme.ts","../../../../libs/resolve-components/src/lib/theme/theme.module.ts","../../../../libs/resolve-components/src/lib/resolve-components/resolve-components.ts","../../../../libs/resolve-components/src/lib/resolve-components/resolve-components.html","../../../../libs/resolve-components/src/lib/button/rc-button.ts","../../../../libs/resolve-components/src/lib/badge/rc-badge.ts","../../../../libs/resolve-components/src/lib/card/rc-card.ts","../../../../libs/resolve-components/src/lib/icon/rc-icon.ts","../../../../libs/resolve-components/src/lib/tabs/rc-tab.ts","../../../../libs/resolve-components/src/lib/tabs/rc-tabs.ts","../../../../libs/resolve-components/src/lib/alert/rc-alert.ts","../../../../libs/resolve-components/src/lib/toast/rc-toast.component.ts","../../../../libs/resolve-components/src/lib/toast/rc-toast-container.component.ts","../../../../libs/resolve-components/src/lib/toast/rc-toast.service.ts","../../../../libs/resolve-components/src/lib/input/rc-input.ts","../../../../libs/resolve-components/src/lib/dialog/rc-dialog-ref.ts","../../../../libs/resolve-components/src/lib/dialog/rc-dialog.types.ts","../../../../libs/resolve-components/src/lib/dialog/rc-dialog-container.ts","../../../../libs/resolve-components/src/lib/dialog/rc-dialog.service.ts","../../../../libs/resolve-components/src/lib/table/rc-table.ts","../../../../libs/resolve-components/src/lib/table/rc-sort.ts","../../../../libs/resolve-components/src/lib/table/rc-table-data-source.ts","../../../../libs/resolve-components/src/lib/chip/rc-chip.ts","../../../../libs/resolve-components/src/lib/radio/rc-radio.ts","../../../../libs/resolve-components/src/lib/toggle/rc-toggle.ts","../../../../libs/resolve-components/src/lib/checkbox/rc-checkbox.ts","../../../../libs/resolve-components/src/lib/select/rc-select.ts","../../../../libs/resolve-components/src/lib/accordion/rc-accordion.ts","../../../../libs/resolve-components/src/lib/slider/rc-slider.ts","../../../../libs/resolve-components/src/lib/autocomplete/rc-autocomplete.ts","../../../../libs/resolve-components/src/lib/sidenav/rc-sidenav.ts","../../../../libs/resolve-components/src/lib/navbar/rc-navbar.ts","../../../../libs/resolve-components/src/lib/datepicker/rc-datepicker.ts","../../../../libs/resolve-components/src/lib/tree/rc-tree.ts","../../../../libs/resolve-components/src/lib/spinner/rc-spinner.ts","../../../../libs/resolve-components/src/lib/progress-bar/rc-progress-bar.ts","../../../../libs/resolve-components/src/lib/file-upload/rc-file-upload.ts","../../../../libs/resolve-components/src/lib/virtual-scroll/rc-virtual-scroll.ts","../../../../libs/resolve-components/src/lib/tooltip/rc-tooltip.ts","../../../../libs/resolve-components/src/lib/menu/rc-menu.ts","../../../../libs/resolve-components/src/lib/infinite-scroll/rc-infinite-scroll.ts","../../../../libs/resolve-components/src/lib/paginator/rc-paginator.ts","../../../../libs/resolve-components/src/index.ts","../../../../libs/resolve-components/src/resolve-components-theme.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Configuration options for the Resolve Components theme system.\r\n */\r\nexport interface RcThemeOptions {\r\n /** Name of the initial theme (must match a registered theme). */\r\n name: string;\r\n}\r\n\r\n/**\r\n * A single variable entry in a JS theme.\r\n */\r\nexport interface RcJSThemeVariable {\r\n [key: string]: string | number | RcJSThemeVariable;\r\n}\r\n\r\n/**\r\n * JS-accessible theme definition.\r\n * These are simplified versions of the full SCSS theme — they provide\r\n * key variables to JS consumers (charts, dynamic styling, etc.).\r\n */\r\nexport interface RcJSThemeOptions {\r\n /** Unique theme name. */\r\n name: string;\r\n\r\n /** Parent theme name to inherit from. */\r\n base?: string;\r\n\r\n /** Theme variables accessible from TypeScript. */\r\n variables?: RcJSThemeVariable;\r\n}\r\n\r\n/** Injection token for theme configuration options. */\r\nexport const RC_THEME_OPTIONS = new InjectionToken<RcThemeOptions>(\r\n 'RC Theme Options'\r\n);\r\n\r\n/** Injection token for built-in JS theme definitions. */\r\nexport const RC_BUILT_IN_JS_THEMES = new InjectionToken<RcJSThemeOptions[]>(\r\n 'RC Built-in JS Themes'\r\n);\r\n\r\n/** Injection token for user-provided JS theme definitions. */\r\nexport const RC_JS_THEMES = new InjectionToken<RcJSThemeOptions[]>(\r\n 'RC JS Themes'\r\n);\r\n","import { Injectable, Inject } from '@angular/core';\r\nimport {\r\n RcJSThemeOptions,\r\n RcJSThemeVariable,\r\n RC_BUILT_IN_JS_THEMES,\r\n RC_JS_THEMES,\r\n} from './theme.options';\r\n\r\n/**\r\n * Registry for JS-accessible theme definitions.\r\n *\r\n * Merges built-in themes with user-provided themes at initialization.\r\n * Supports theme inheritance via the `base` property.\r\n *\r\n * @example\r\n * ```typescript\r\n * const theme = this.registry.get('default');\r\n * console.log(theme.variables.primary); // '#0078D4'\r\n * ```\r\n */\r\n@Injectable()\r\nexport class RcJSThemesRegistry {\r\n private themes: { [name: string]: RcJSThemeOptions } = {};\r\n\r\n constructor(\r\n @Inject(RC_BUILT_IN_JS_THEMES) builtInThemes: RcJSThemeOptions[],\r\n @Inject(RC_JS_THEMES) newThemes: RcJSThemeOptions[]\r\n ) {\r\n // User themes override built-in themes with the same name\r\n const combined = this.combineByNames(newThemes, builtInThemes);\r\n combined.forEach((theme) => {\r\n this.register(theme, theme.name, theme.base);\r\n });\r\n }\r\n\r\n /**\r\n * Register a theme, optionally inheriting from a base theme.\r\n */\r\n register(\r\n config: RcJSThemeOptions,\r\n themeName: string,\r\n baseThemeName?: string\r\n ): void {\r\n const base =\r\n baseThemeName && this.has(baseThemeName) ? this.get(baseThemeName) : {};\r\n this.themes[themeName] = this.mergeDeep(\r\n {} as Record<string, unknown>,\r\n base as unknown as Record<string, unknown>,\r\n config as unknown as Record<string, unknown>\r\n ) as unknown as RcJSThemeOptions;\r\n }\r\n\r\n /**\r\n * Whether a theme with the given name is registered.\r\n */\r\n has(themeName: string): boolean {\r\n return !!this.themes[themeName];\r\n }\r\n\r\n /**\r\n * Get a deep copy of a registered theme by name.\r\n */\r\n get(themeName: string): RcJSThemeOptions {\r\n if (!this.has(themeName)) {\r\n throw new Error(\r\n `RcJSThemesRegistry: theme \"${themeName}\" is not registered. Available themes: ${Object.keys(this.themes).join(', ')}`\r\n );\r\n }\r\n return JSON.parse(JSON.stringify(this.themes[themeName]));\r\n }\r\n\r\n /**\r\n * Combine two theme arrays, preferring items from `newThemes` when\r\n * names collide.\r\n */\r\n private combineByNames(\r\n newThemes: RcJSThemeOptions[],\r\n oldThemes: RcJSThemeOptions[]\r\n ): RcJSThemeOptions[] {\r\n const result = [...oldThemes];\r\n if (newThemes) {\r\n newThemes.forEach((newTheme) => {\r\n const idx = result.findIndex((t) => t.name === newTheme.name);\r\n if (idx >= 0) {\r\n result[idx] = newTheme;\r\n } else {\r\n result.push(newTheme);\r\n }\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Deep merge objects (not arrays).\r\n */\r\n private mergeDeep(\r\n target: Record<string, unknown>,\r\n ...sources: Record<string, unknown>[]\r\n ): Record<string, unknown> {\r\n for (const source of sources) {\r\n if (!source) continue;\r\n for (const key of Object.keys(source)) {\r\n const targetVal = target[key];\r\n const sourceVal = source[key];\r\n\r\n if (\r\n sourceVal &&\r\n typeof sourceVal === 'object' &&\r\n !Array.isArray(sourceVal) &&\r\n targetVal &&\r\n typeof targetVal === 'object' &&\r\n !Array.isArray(targetVal)\r\n ) {\r\n target[key] = this.mergeDeep(\r\n { ...(targetVal as Record<string, unknown>) },\r\n sourceVal as Record<string, unknown>\r\n );\r\n } else {\r\n target[key] = sourceVal;\r\n }\r\n }\r\n }\r\n return target;\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\r\nimport { map, filter, share } from 'rxjs/operators';\r\nimport {\r\n RcThemeOptions,\r\n RcJSThemeOptions,\r\n RC_THEME_OPTIONS,\r\n} from './theme.options';\r\nimport { RcJSThemesRegistry } from './theme-registry.service';\r\n\r\n/**\r\n * Event emitted when the theme changes.\r\n */\r\nexport interface RcThemeChange {\r\n /** Name of the newly activated theme. */\r\n name: string;\r\n /** Name of the previously active theme (null on first activation). */\r\n previous: string | null;\r\n}\r\n\r\n/**\r\n * Central service for managing the active theme at runtime.\r\n *\r\n * Switching themes toggles a CSS class on `<body>` (`rc-theme-{name}`),\r\n * which activates the corresponding CSS custom property block emitted\r\n * during SCSS compilation.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Switch to dark theme\r\n * this.themeService.changeTheme('dark');\r\n *\r\n * // React to theme changes\r\n * this.themeService.onThemeChange().subscribe(change => {\r\n * console.log(`Switched from ${change.previous} to ${change.name}`);\r\n * });\r\n *\r\n * // Access JS theme variables (for charts, etc.)\r\n * this.themeService.getJsTheme().subscribe(theme => {\r\n * const primaryColor = theme.variables?.primary;\r\n * });\r\n * ```\r\n */\r\n@Injectable()\r\nexport class RcThemeService {\r\n /** Name of the currently active theme. */\r\n currentTheme: string | null = null;\r\n\r\n private themeChanges$ = new ReplaySubject<RcThemeChange>(1);\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n @Inject(RC_THEME_OPTIONS) protected options: RcThemeOptions,\r\n protected jsThemesRegistry: RcJSThemesRegistry\r\n ) {\r\n if (options && options.name) {\r\n this.changeTheme(options.name);\r\n }\r\n }\r\n\r\n /**\r\n * Switch the active theme.\r\n * @param name - Registered theme name.\r\n */\r\n changeTheme(name: string): void {\r\n const previous = this.currentTheme;\r\n this.themeChanges$.next({ name, previous });\r\n this.currentTheme = name;\r\n }\r\n\r\n /**\r\n * Observable stream of theme change events.\r\n */\r\n onThemeChange(): Observable<RcThemeChange> {\r\n return this.themeChanges$.asObservable().pipe(share());\r\n }\r\n\r\n /**\r\n * Get the JS theme variables for the currently active theme.\r\n * Emits whenever the theme changes.\r\n */\r\n getJsTheme(): Observable<RcJSThemeOptions> {\r\n return this.onThemeChange().pipe(\r\n map((change) => this.jsThemesRegistry.get(change.name))\r\n );\r\n }\r\n\r\n /**\r\n * Get the JS theme variables for a specific theme by name.\r\n */\r\n getJsThemeByName(name: string): RcJSThemeOptions {\r\n return this.jsThemesRegistry.get(name);\r\n }\r\n\r\n /**\r\n * Clean up subscriptions.\r\n */\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnDestroy,\r\n Inject,\r\n Renderer2,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { RcThemeService } from './theme.service';\r\n\r\n/**\r\n * Layout component that bridges the theme service to the DOM.\r\n *\r\n * It subscribes to `RcThemeService.onThemeChange()` and toggles the\r\n * CSS class `rc-theme-{name}` on `<body>`. This activates the\r\n * corresponding CSS custom property block emitted by `rc-install()`.\r\n *\r\n * Place this component at the root of your application layout:\r\n *\r\n * @example\r\n * ```html\r\n * <rc-layout>\r\n * <router-outlet></router-outlet>\r\n * </rc-layout>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-layout',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `<ng-content></ng-content>`,\r\n styles: [\r\n `\r\n :host {\r\n display: block;\r\n min-height: 100vh;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class RcLayout implements OnDestroy {\r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private themeService: RcThemeService,\r\n private renderer: Renderer2,\r\n @Inject(DOCUMENT) private document: Document,\r\n ) {\r\n this.themeService\r\n .onThemeChange()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((change) => {\r\n const body = this.document.body;\r\n if (change.previous) {\r\n this.renderer.removeClass(body, `rc-theme-${change.previous}`);\r\n }\r\n this.renderer.addClass(body, `rc-theme-${change.name}`);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { RcJSThemeOptions } from '../theme.options';\r\n\r\n/**\r\n * Default JS theme — Microsoft Fluent-inspired light palette.\r\n * These variables are available at runtime for chart libraries, dynamic\r\n * styling, or any JS consumer that needs theme colors.\r\n */\r\nexport const DEFAULT_THEME: RcJSThemeOptions = {\r\n name: 'default',\r\n variables: {\r\n // Font\r\n fontMain: \"'Segoe UI', -apple-system, BlinkMacSystemFont, 'Roboto', 'Helvetica Neue', sans-serif\",\r\n fontMono: \"'Cascadia Code', 'Fira Code', 'Consolas', monospace\",\r\n\r\n // Backgrounds\r\n bg: '#FFFFFF',\r\n bg2: '#FAF9F8',\r\n bg3: '#F3F2F1',\r\n bg4: '#EDEBE9',\r\n\r\n // Text\r\n fgText: '#201F1E',\r\n fgHeading: '#201F1E',\r\n fgHint: '#A19F9D',\r\n\r\n // Brand / Status\r\n primary: '#0078D4',\r\n primaryHover: '#106EBE',\r\n success: '#107C10',\r\n warning: '#FFB900',\r\n danger: '#D13438',\r\n info: '#00B7C3',\r\n\r\n // Control\r\n controlBg: '#FFFFFF',\r\n controlFg: '#FFFFFF',\r\n\r\n // Border\r\n border: '#EDEBE9',\r\n border2: '#D2D0CE',\r\n separator: '#F3F2F1',\r\n\r\n // Shadows (Fluent elevation 2)\r\n shadow: '0 1.6px 3.6px 0 rgba(0, 0, 0, 0.132), 0 0.3px 0.9px 0 rgba(0, 0, 0, 0.108)',\r\n\r\n // Radius\r\n borderRadius: '4px',\r\n },\r\n};\r\n","import { RcJSThemeOptions } from '../theme.options';\r\n\r\n/**\r\n * Dark JS theme — inherits from default, overrides for dark surfaces.\r\n */\r\nexport const DARK_THEME: RcJSThemeOptions = {\r\n name: 'dark',\r\n base: 'default',\r\n variables: {\r\n // Backgrounds\r\n bg: '#201F1E',\r\n bg2: '#323130',\r\n bg3: '#3B3A39',\r\n bg4: '#605E5C',\r\n\r\n // Text\r\n fgText: '#FAF9F8',\r\n fgHeading: '#FAF9F8',\r\n fgHint: '#A19F9D',\r\n\r\n // Brand / Status (lighter for dark backgrounds)\r\n primary: '#5BA3E6',\r\n primaryHover: '#B4D6FA',\r\n success: '#54B054',\r\n warning: '#FFD54F',\r\n danger: '#E74856',\r\n info: '#26C6DA',\r\n\r\n // Control\r\n controlBg: '#201F1E',\r\n controlFg: '#FFFFFF',\r\n\r\n // Border\r\n border: '#3B3A39',\r\n border2: '#605E5C',\r\n separator: '#323130',\r\n\r\n // Shadows (heavier for dark mode)\r\n shadow: '0 1.6px 3.6px 0 rgba(0, 0, 0, 0.38), 0 0.3px 0.9px 0 rgba(0, 0, 0, 0.30)',\r\n\r\n // Radius\r\n borderRadius: '4px',\r\n },\r\n};\r\n","import {\r\n ModuleWithProviders,\r\n NgModule,\r\n Optional,\r\n SkipSelf,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n RcThemeOptions,\r\n RcJSThemeOptions,\r\n RC_THEME_OPTIONS,\r\n RC_BUILT_IN_JS_THEMES,\r\n RC_JS_THEMES,\r\n} from './theme.options';\r\nimport { RcThemeService } from './theme.service';\r\nimport { RcJSThemesRegistry } from './theme-registry.service';\r\nimport { RcLayout } from './rc-layout';\r\n\r\nimport { DEFAULT_THEME } from './js-themes/default.theme';\r\nimport { DARK_THEME } from './js-themes/dark.theme';\r\n\r\nconst BUILT_IN_THEMES: RcJSThemeOptions[] = [DEFAULT_THEME, DARK_THEME];\r\n\r\n/**\r\n * Core theme module for Resolve Components.\r\n *\r\n * Call `.forRoot()` once at the application root to configure theming.\r\n *\r\n * @example\r\n * ```typescript\r\n * // app.config.ts (standalone)\r\n * import { provideRcTheme } from '@resolve-components';\r\n *\r\n * export const appConfig = {\r\n * providers: [provideRcTheme({ name: 'default' })],\r\n * };\r\n *\r\n * // or in NgModule style:\r\n * @NgModule({\r\n * imports: [RcThemeModule.forRoot({ name: 'default' })],\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n */\r\n@NgModule({\r\n imports: [CommonModule, RcLayout],\r\n exports: [RcLayout],\r\n})\r\nexport class RcThemeModule {\r\n constructor(@Optional() @SkipSelf() parentModule: RcThemeModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'RcThemeModule.forRoot() should only be called once in the root module. ' +\r\n 'Import RcThemeModule (without .forRoot()) in child modules.',\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Configure the theme system at the application root.\r\n *\r\n * @param rcThemeOptions - Initial theme configuration.\r\n * @param rcJSThemes - Optional additional JS theme definitions.\r\n */\r\n static forRoot(\r\n rcThemeOptions: RcThemeOptions = { name: 'default' },\r\n rcJSThemes?: RcJSThemeOptions[],\r\n ): ModuleWithProviders<RcThemeModule> {\r\n return {\r\n ngModule: RcThemeModule,\r\n providers: [\r\n { provide: RC_THEME_OPTIONS, useValue: rcThemeOptions },\r\n { provide: RC_BUILT_IN_JS_THEMES, useValue: BUILT_IN_THEMES },\r\n { provide: RC_JS_THEMES, useValue: rcJSThemes || [] },\r\n RcJSThemesRegistry,\r\n RcThemeService,\r\n ],\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Standalone provider function for the Resolve Components theme system.\r\n *\r\n * @example\r\n * ```typescript\r\n * // app.config.ts\r\n * export const appConfig: ApplicationConfig = {\r\n * providers: [provideRcTheme({ name: 'default' })],\r\n * };\r\n * ```\r\n *\r\n * @param options - Theme configuration.\r\n * @param customThemes - Optional additional JS theme definitions.\r\n */\r\nexport function provideRcTheme(\r\n options: RcThemeOptions = { name: 'default' },\r\n customThemes?: RcJSThemeOptions[],\r\n) {\r\n return [\r\n { provide: RC_THEME_OPTIONS, useValue: options },\r\n { provide: RC_BUILT_IN_JS_THEMES, useValue: BUILT_IN_THEMES },\r\n { provide: RC_JS_THEMES, useValue: customThemes || [] },\r\n RcJSThemesRegistry,\r\n RcThemeService,\r\n ];\r\n}\r\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Root container component for Resolve Components design system.\n * Provides a wrapper element with the `rc-root` class.\n *\n * @example\n * ```html\n * <rc-resolve-components>\n * <rc-button>Click me</rc-button>\n * </rc-resolve-components>\n * ```\n */\n@Component({\n selector: 'rc-resolve-components',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './resolve-components.html',\n styleUrl: './resolve-components.scss',\n})\nexport class ResolveComponents {}\n","<p>ResolveComponents works!</p>\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n HostListener,\r\n} from '@angular/core';\r\n\r\n/** Shape / visual style of the button. */\r\nexport type RcButtonVariant = 'filled' | 'outline' | 'ghost';\r\n/** Semantic colour / importance of the button. */\r\nexport type RcButtonStatus =\r\n | 'primary'\r\n | 'secondary'\r\n | 'danger'\r\n | 'info'\r\n | 'success'\r\n | 'warning';\r\nexport type RcButtonSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * Directive for styling native button-like elements with Resolve design tokens.\r\n *\r\n * Apply `rcButton` to any `<button>`, `<a>`, or `<input type=\"submit\">` element.\r\n * The host element receives the full button styling including BEM modifier classes.\r\n *\r\n * @example Basic usage\r\n * ```html\r\n * <button rcButton>Default (filled primary)</button>\r\n * <button rcButton status=\"danger\">Delete</button>\r\n * <button rcButton variant=\"outline\">Outline primary</button>\r\n * <button rcButton variant=\"outline\" status=\"danger\">Outline danger</button>\r\n * <button rcButton variant=\"ghost\" status=\"success\">Ghost success</button>\r\n * ```\r\n *\r\n * @example With icon (using rc-icon)\r\n * ```html\r\n * <button rcButton>\r\n * <rc-icon name=\"save\"></rc-icon>\r\n * Save\r\n * </button>\r\n * ```\r\n *\r\n * @example Icon-only button\r\n * ```html\r\n * <button rcButton [iconOnly]=\"true\">\r\n * <rc-icon name=\"plus\"></rc-icon>\r\n * </button>\r\n * ```\r\n *\r\n * @example Link button\r\n * ```html\r\n * <a rcButton variant=\"outline\" href=\"/dashboard\">Dashboard</a>\r\n * ```\r\n *\r\n * @example Submit form\r\n * ```html\r\n * <input rcButton type=\"submit\" value=\"Submit\" />\r\n * ```\r\n *\r\n * @input variant - Visual shape: `'filled'` | `'outline'` | `'ghost'`. Default: `'filled'`\r\n * @input status - Semantic colour: `'primary'` | `'secondary'` | `'danger'` | `'info'` | `'success'` | `'warning'`. Default: `'primary'`\r\n * @input size - Button size: `'sm'` | `'md'` | `'lg'`. Default: `'md'`\r\n * @input disabled - Whether the element is disabled. Default: `false`\r\n * @input iconOnly - Renders as a square icon-only button. Default: `false`\r\n * @output clicked - Emits `MouseEvent` when clicked and not disabled.\r\n *\r\n * Variants (shape):\r\n * - `filled` Solid background — default\r\n * - `outline` Transparent with coloured border\r\n * - `ghost` Fully transparent, hover reveals background\r\n *\r\n * Status (colour):\r\n * - `primary` Blue — main call-to-action\r\n * - `secondary` Gray — secondary / neutral action\r\n * - `danger` Red — destructive / irreversible action\r\n * - `info` Teal — informational action\r\n * - `success` Green — confirm / complete\r\n * - `warning` Amber — cautionary action\r\n */\r\n@Component({\r\n selector:\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n 'button[rcButton], a[rcButton], input[type=submit][rcButton], input[type=button][rcButton], input[type=reset][rcButton]',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `<ng-content></ng-content>`,\r\n host: {\r\n class: 'rc-button',\r\n // variant — shape\r\n '[class.rc-button-filled]': \"variant === 'filled'\",\r\n '[class.rc-button-outline]': \"variant === 'outline'\",\r\n '[class.rc-button-ghost]': \"variant === 'ghost'\",\r\n // status — colour\r\n '[class.rc-button-primary]': \"status === 'primary'\",\r\n '[class.rc-button-secondary]': \"status === 'secondary'\",\r\n '[class.rc-button-danger]': \"status === 'danger'\",\r\n '[class.rc-button-info]': \"status === 'info'\",\r\n '[class.rc-button-success]': \"status === 'success'\",\r\n '[class.rc-button-warning]': \"status === 'warning'\",\r\n // size\r\n '[class.rc-button-sm]': \"size === 'sm'\",\r\n '[class.rc-button-md]': \"size === 'md'\",\r\n '[class.rc-button-lg]': \"size === 'lg'\",\r\n '[class.rc-button-icon-only]': 'iconOnly',\r\n '[attr.disabled]': 'disabled ? \"\" : null',\r\n '[attr.aria-disabled]': 'disabled ? true : null',\r\n },\r\n})\r\nexport class RcButtonComponent {\r\n /** Visual shape of the button */\r\n @Input() variant: RcButtonVariant = 'filled';\r\n\r\n /** Semantic colour / importance */\r\n @Input() status: RcButtonStatus = 'primary';\r\n\r\n /** Button size */\r\n @Input() size: RcButtonSize = 'md';\r\n\r\n /** Whether the element is disabled */\r\n @Input() disabled = false;\r\n\r\n /** Render as a square icon-only button (no padding, equal width/height) */\r\n @Input() iconOnly = false;\r\n\r\n /** Emits when the element is clicked and not disabled */\r\n @Output() clicked = new EventEmitter<MouseEvent>();\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event: Event): void {\r\n if (this.disabled) {\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n return;\r\n }\r\n this.clicked.emit(event as MouseEvent);\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/** Colour status of the badge. */\r\nexport type RcBadgeStatus =\r\n | 'default'\r\n | 'primary'\r\n | 'success'\r\n | 'warning'\r\n | 'danger';\r\n\r\n/** @deprecated Use `RcBadgeStatus` instead. */\r\nexport type RcBadgeVariant = RcBadgeStatus;\r\n\r\nexport type RcBadgeSize = 'sm' | 'md';\r\n\r\n/**\r\n * A small inline label for displaying status, counts, or category tags.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-badge>Default</rc-badge>\r\n * <rc-badge status=\"primary\">New</rc-badge>\r\n * <rc-badge status=\"success\" size=\"sm\">Active</rc-badge>\r\n * <rc-badge status=\"warning\">Pending</rc-badge>\r\n * <rc-badge status=\"danger\">Error</rc-badge>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-badge',\r\n standalone: true,\r\n imports: [CommonModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `<span [class]=\"hostClasses\"><ng-content></ng-content></span>`,\r\n styleUrl: './rc-badge.scss',\r\n})\r\nexport class RcBadgeComponent {\r\n /** Colour status of the badge. */\r\n @Input() status: RcBadgeStatus = 'default';\r\n\r\n /** Badge size. */\r\n @Input() size: RcBadgeSize = 'md';\r\n\r\n get hostClasses(): string {\r\n return `rc-badge rc-badge-${this.status} rc-badge-${this.size}`;\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n/**\r\n * A card container component for the Resolve design system.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-card>\r\n * <h3 rc-card-title>Card Title</h3>\r\n * <p>Card content goes here.</p>\r\n * </rc-card>\r\n *\r\n * <rc-card [padding]=\"false\" [shadow]=\"true\">\r\n * <img src=\"cover.jpg\" alt=\"Cover\" />\r\n * </rc-card>\r\n * ```\r\n *\r\n * @input padding - Whether the card has inner padding. Default: `true`\r\n * @input shadow - Whether the card has a box shadow. Default: `false`\r\n * @input bordered - Whether the card has a border. Default: `true`\r\n */\r\n@Component({\r\n selector: 'rc-card',\r\n standalone: true,\r\n imports: [CommonModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <div\r\n class=\"rc-card\"\r\n [class.rc-card-padded]=\"padding\"\r\n [class.rc-card-shadow]=\"shadow\"\r\n [class.rc-card-bordered]=\"bordered\"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n styleUrl: './rc-card.scss',\r\n})\r\nexport class RcCardComponent {\r\n /** Whether the card has inner padding */\r\n @Input() padding = true;\r\n\r\n /** Whether the card has a box shadow */\r\n @Input() shadow = false;\r\n\r\n /** Whether the card has a border */\r\n @Input() bordered = true;\r\n}\r\n","/// <reference path=\"./eva-icons.d.ts\" />\r\nimport {\r\n Component,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { icons } from 'eva-icons';\r\n\r\nexport type RcIconStatus =\r\n | 'basic'\r\n | 'primary'\r\n | 'success'\r\n | 'warning'\r\n | 'danger'\r\n | 'info';\r\n\r\n/**\r\n * Icon component backed by the Eva Icons SVG library (490+ icons).\r\n *\r\n * Renders inline SVG directly onto the host element using `fill=\"currentColor\"`,\r\n * so the icon inherits the current CSS `color` — perfect for use inside buttons,\r\n * badges, and any themed context.\r\n *\r\n * @see https://akveo.github.io/eva-icons/\r\n *\r\n * @example Basic\r\n * ```html\r\n * <rc-icon name=\"star\"></rc-icon>\r\n * ```\r\n *\r\n * @example With status colour\r\n * ```html\r\n * <rc-icon name=\"checkmark-circle\" status=\"success\"></rc-icon>\r\n * <rc-icon name=\"alert-circle\" status=\"danger\"></rc-icon>\r\n * ```\r\n *\r\n * @example Custom size\r\n * ```html\r\n * <rc-icon name=\"home\" style=\"font-size: 32px\"></rc-icon>\r\n * ```\r\n *\r\n * @example Inside a button\r\n * ```html\r\n * <button rcButton status=\"primary\">\r\n * <rc-icon name=\"save\"></rc-icon>\r\n * Save\r\n * </button>\r\n *\r\n * <!-- Icon-only -->\r\n * <button rcButton status=\"primary\" [iconOnly]=\"true\">\r\n * <rc-icon name=\"plus\"></rc-icon>\r\n * </button>\r\n * ```\r\n *\r\n * @input name - Eva Icons icon name (e.g. `'star'`, `'home'`, `'checkmark'`)\r\n * @input status - Colour variant using semantic theme tokens. Default: `'basic'`\r\n */\r\n@Component({\r\n selector: 'rc-icon',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n template: '',\r\n host: {\r\n class: 'rc-icon',\r\n '[class.rc-icon-primary]': \"status === 'primary'\",\r\n '[class.rc-icon-success]': \"status === 'success'\",\r\n '[class.rc-icon-warning]': \"status === 'warning'\",\r\n '[class.rc-icon-danger]': \"status === 'danger'\",\r\n '[class.rc-icon-info]': \"status === 'info'\",\r\n '[attr.aria-hidden]': '\"true\"',\r\n '[attr.title]': 'name',\r\n },\r\n})\r\nexport class RcIconComponent implements OnChanges {\r\n /** Eva Icons icon name */\r\n @Input({ required: true }) name!: string;\r\n\r\n /**\r\n * Colour status applied via theme CSS custom properties.\r\n * `'basic'` inherits the surrounding text colour.\r\n */\r\n @Input() status: RcIconStatus = 'basic';\r\n\r\n @HostBinding('innerHTML')\r\n svgHtml: SafeHtml = '';\r\n\r\n constructor(private sanitizer: DomSanitizer) {}\r\n\r\n ngOnChanges(): void {\r\n const icon = icons[this.name];\r\n if (!icon) {\r\n console.warn(`[RcIconComponent] Unknown icon: \"${this.name}\"`);\r\n this.svgHtml = '';\r\n return;\r\n }\r\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">${icon.contents}</svg>`;\r\n this.svgHtml = this.sanitizer.bypassSecurityTrustHtml(svg);\r\n }\r\n\r\n /** Returns all available Eva Icons names (useful for tooling / demo). */\r\n static getIconNames(): string[] {\r\n return Object.keys(icons);\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n TemplateRef,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\n\r\nexport type RcTabStatus =\r\n | 'basic'\r\n | 'primary'\r\n | 'success'\r\n | 'warning'\r\n | 'danger'\r\n | 'info';\r\n\r\n/**\r\n * Individual tab definition used inside `<rc-tabs>`.\r\n *\r\n * Content projected into `<rc-tab>` is rendered inside the active tab panel.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-tabs>\r\n * <rc-tab label=\"Overview\" icon=\"home\">...</rc-tab>\r\n * <rc-tab label=\"API\" icon=\"code\" status=\"primary\">...</rc-tab>\r\n * <rc-tab label=\"Disabled\" disabled>...</rc-tab>\r\n * </rc-tabs>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-tab',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n template: `<ng-template #tabContent><ng-content></ng-content></ng-template>`,\r\n})\r\nexport class RcTabComponent {\r\n /** Tab header label text */\r\n @Input() label = '';\r\n\r\n /** Optional Eva Icons icon name shown before the label */\r\n @Input() icon?: string;\r\n\r\n /**\r\n * Semantic status — colours the active tab indicator.\r\n * `'basic'` uses the default primary colour.\r\n */\r\n @Input() status: RcTabStatus = 'basic';\r\n\r\n /** When true the tab header is non-interactive */\r\n @Input() disabled = false;\r\n\r\n /** @internal — referenced by RcTabsComponent to outlet content */\r\n @ViewChild('tabContent', { static: true }) content!: TemplateRef<unknown>;\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n contentChildren,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { RcTabComponent } from './rc-tab';\r\nimport { RcIconComponent } from '../icon/rc-icon';\r\n\r\nexport type RcTabsSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * Tabs container. Place `<rc-tab>` children inside to define tabs.\r\n *\r\n * @example Basic\r\n * ```html\r\n * <rc-tabs>\r\n * <rc-tab label=\"Overview\">Overview content</rc-tab>\r\n * <rc-tab label=\"API\">API content</rc-tab>\r\n * </rc-tabs>\r\n * ```\r\n *\r\n * @example With icons and status\r\n * ```html\r\n * <rc-tabs size=\"sm\">\r\n * <rc-tab label=\"Home\" icon=\"home\" status=\"primary\">...</rc-tab>\r\n * <rc-tab label=\"Profile\" icon=\"person\" status=\"success\">...</rc-tab>\r\n * <rc-tab label=\"Danger\" icon=\"alert-triangle\" status=\"danger\">...</rc-tab>\r\n * <rc-tab label=\"Locked\" icon=\"lock\" [disabled]=\"true\">...</rc-tab>\r\n * </rc-tabs>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-tabs',\r\n standalone: true,\r\n imports: [NgTemplateOutlet, RcIconComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n template: `\r\n <div\r\n class=\"rc-tabs\"\r\n [class.rc-tabs-sm]=\"size === 'sm'\"\r\n [class.rc-tabs-md]=\"size === 'md'\"\r\n [class.rc-tabs-lg]=\"size === 'lg'\"\r\n >\r\n <!-- Tab nav bar -->\r\n <div class=\"rc-tabs-nav\" role=\"tablist\">\r\n @for (tab of tabs(); track tab; let i = $index) {\r\n <button\r\n role=\"tab\"\r\n class=\"rc-tabs-tab\"\r\n [class.rc-tabs-tab-active]=\"activeIndex() === i\"\r\n [class.rc-tabs-tab-disabled]=\"tab.disabled\"\r\n [class.rc-tabs-tab-primary]=\"tab.status === 'primary'\"\r\n [class.rc-tabs-tab-success]=\"tab.status === 'success'\"\r\n [class.rc-tabs-tab-warning]=\"tab.status === 'warning'\"\r\n [class.rc-tabs-tab-danger]=\"tab.status === 'danger'\"\r\n [class.rc-tabs-tab-info]=\"tab.status === 'info'\"\r\n [attr.aria-selected]=\"activeIndex() === i\"\r\n [attr.tabindex]=\"activeIndex() === i ? 0 : -1\"\r\n [attr.disabled]=\"tab.disabled ? '' : null\"\r\n (click)=\"select(i)\"\r\n (keydown.arrowRight)=\"selectNext()\"\r\n (keydown.arrowLeft)=\"selectPrev()\"\r\n >\r\n @if (tab.icon) {\r\n <rc-icon [name]=\"tab.icon\" class=\"rc-tabs-tab-icon\"></rc-icon>\r\n }\r\n <span class=\"rc-tabs-tab-label\">{{ tab.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- Tab panels (all rendered, inactive hidden via CSS) -->\r\n <div class=\"rc-tabs-panels\">\r\n @for (tab of tabs(); track tab; let i = $index) {\r\n <div\r\n role=\"tabpanel\"\r\n class=\"rc-tabs-panel\"\r\n [class.rc-tabs-panel-active]=\"activeIndex() === i\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"tab.content\"></ng-container>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class RcTabsComponent {\r\n /** Query projected rc-tab children (signal-based, auto-updates) */\r\n readonly tabs = contentChildren(RcTabComponent);\r\n\r\n /** Size variant — affects font size and padding */\r\n @Input() size: RcTabsSize = 'md';\r\n\r\n /** Programmatically set the active tab index */\r\n @Input() set activeTab(index: number) {\r\n this._activeIndex.set(index);\r\n }\r\n\r\n /** Emits the new tab index whenever the active tab changes */\r\n @Output() tabChange = new EventEmitter<number>();\r\n\r\n protected readonly _activeIndex = signal(0);\r\n readonly activeIndex = this._activeIndex.asReadonly();\r\n\r\n select(index: number): void {\r\n const tab = this.tabs()[index];\r\n if (tab && !tab.disabled) {\r\n this._activeIndex.set(index);\r\n this.tabChange.emit(index);\r\n }\r\n }\r\n\r\n selectNext(): void {\r\n const allTabs = this.tabs();\r\n let next = this._activeIndex() + 1;\r\n while (next < allTabs.length && allTabs[next].disabled) next++;\r\n if (next < allTabs.length) this.select(next);\r\n }\r\n\r\n selectPrev(): void {\r\n const allTabs = this.tabs();\r\n let prev = this._activeIndex() - 1;\r\n while (prev >= 0 && allTabs[prev].disabled) prev--;\r\n if (prev >= 0) this.select(prev);\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RcIconComponent } from '../icon/rc-icon';\r\n\r\nexport type RcAlertStatus = 'info' | 'success' | 'warning' | 'danger';\r\nexport type RcAlertVariant = 'subtle' | 'filled' | 'outline';\r\n\r\n/**\r\n * An inline contextual alert for displaying feedback messages.\r\n *\r\n * @example Basic\r\n * ```html\r\n * <rc-alert status=\"success\">Changes saved successfully.</rc-alert>\r\n * ```\r\n *\r\n * @example With title and dismissible\r\n * ```html\r\n * <rc-alert status=\"warning\" title=\"Action required\" [dismissible]=\"true\" (dismissed)=\"onDismiss()\">\r\n * Please review the highlighted fields.\r\n * </rc-alert>\r\n * ```\r\n *\r\n * @example Filled variant\r\n * ```html\r\n * <rc-alert status=\"danger\" variant=\"filled\" title=\"Error\">\r\n * Unable to save changes. Please try again.\r\n * </rc-alert>\r\n * ```\r\n *\r\n * @input status - Semantic status colour. Default: `'info'`\r\n * @input variant - Visual style. Default: `'subtle'`\r\n * @input title - Optional bold heading above the message.\r\n * @input dismissible - Shows a close button. Default: `false`\r\n * @output dismissed - Emits when the close button is clicked.\r\n */\r\n@Component({\r\n selector: 'rc-alert',\r\n standalone: true,\r\n imports: [CommonModule, RcIconComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrl: './rc-alert.scss',\r\n template: `\r\n <div [class]=\"hostClasses\" role=\"alert\">\r\n <rc-icon\r\n class=\"rc-alert-icon\"\r\n [name]=\"statusIcon\"\r\n aria-hidden=\"true\"\r\n ></rc-icon>\r\n\r\n <div class=\"rc-alert-body\">\r\n <p *ngIf=\"title\" class=\"rc-alert-title\">{{ title }}</p>\r\n <div class=\"rc-alert-message\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n\r\n <button\r\n *ngIf=\"dismissible\"\r\n class=\"rc-alert-close\"\r\n type=\"button\"\r\n [attr.aria-label]=\"dismissAriaLabel\"\r\n (click)=\"dismissed.emit()\"\r\n >\r\n <rc-icon name=\"close\" aria-hidden=\"true\"></rc-icon>\r\n </button>\r\n </div>\r\n `,\r\n})\r\nexport class RcAlertComponent {\r\n /** Semantic status colour */\r\n @Input() status: RcAlertStatus = 'info';\r\n\r\n /** Visual style variant */\r\n @Input() variant: RcAlertVariant = 'subtle';\r\n\r\n /** Optional bold heading above the message */\r\n @Input() title?: string;\r\n\r\n /** Shows a close button when true */\r\n @Input() dismissible = false;\r\n\r\n /** ARIA label for the dismiss button. */\r\n @Input() dismissAriaLabel = 'Dismiss alert';\r\n\r\n /** Emitted when the close button is clicked */\r\n @Output() dismissed = new EventEmitter<void>();\r\n\r\n get hostClasses(): string {\r\n return `rc-alert rc-alert-${this.status} rc-alert-${this.variant}`;\r\n }\r\n\r\n get statusIcon(): string {\r\n switch (this.status) {\r\n case 'success':\r\n return 'checkmark-circle-2';\r\n case 'warning':\r\n return 'alert-triangle';\r\n case 'danger':\r\n return 'alert-circle';\r\n case 'info':\r\n default:\r\n return 'info';\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RcIconComponent } from '../icon/rc-icon';\r\nimport { RcToastRef } from './rc-toast.types';\r\n\r\n/**\r\n * Individual toast notification UI.\r\n *\r\n * Rendered inside `RcToastContainerComponent`; not intended for direct use.\r\n */\r\n@Component({\r\n selector: 'rc-toast',\r\n standalone: true,\r\n imports: [CommonModule, RcIconComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'rc-toast-wrapper',\r\n },\r\n template: `\r\n <div [class]=\"toastClasses\" role=\"alert\" aria-live=\"polite\">\r\n <!-- Accent bar -->\r\n <span class=\"rc-toast-accent\" aria-hidden=\"true\"></span>\r\n\r\n <!-- Status icon -->\r\n <rc-icon\r\n class=\"rc-toast-icon\"\r\n [name]=\"statusIcon\"\r\n aria-hidden=\"true\"\r\n ></rc-icon>\r\n\r\n <!-- Content -->\r\n <div class=\"rc-toast-body\">\r\n <p *ngIf=\"toast.config.title\" class=\"rc-toast-title\">\r\n {{ toast.config.title }}\r\n </p>\r\n <p class=\"rc-toast-message\">{{ toast.config.message }}</p>\r\n </div>\r\n\r\n <!-- Close button -->\r\n <button\r\n *ngIf=\"toast.config.dismissible\"\r\n class=\"rc-toast-close\"\r\n type=\"button\"\r\n [attr.aria-label]=\"toast.config.dismissAriaLabel\"\r\n (click)=\"close.emit(toast.id)\"\r\n >\r\n <rc-icon name=\"close\" aria-hidden=\"true\"></rc-icon>\r\n </button>\r\n\r\n <!-- Progress bar (only when auto-dismiss) -->\r\n <span\r\n *ngIf=\"toast.config.duration > 0\"\r\n class=\"rc-toast-progress\"\r\n [style.animation-duration.ms]=\"toast.config.duration\"\r\n [class]=\"'rc-toast-progress rc-toast-progress-' + toast.config.status\"\r\n ></span>\r\n </div>\r\n `,\r\n})\r\nexport class RcToastComponent {\r\n @Input({ required: true }) toast!: RcToastRef;\r\n @Output() close = new EventEmitter<string>();\r\n\r\n get toastClasses(): string {\r\n return `rc-toast rc-toast-${this.toast.config.status}`;\r\n }\r\n\r\n get statusIcon(): string {\r\n switch (this.toast.config.status) {\r\n case 'success':\r\n return 'checkmark-circle-2';\r\n case 'warning':\r\n return 'alert-triangle';\r\n case 'danger':\r\n return 'alert-circle';\r\n case 'info':\r\n default:\r\n return 'info';\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n signal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RcToastComponent } from './rc-toast.component';\r\nimport { RcToastPosition, RcToastRef } from './rc-toast.types';\r\n\r\n/**\r\n * Host container for a group of toasts at a given screen position.\r\n *\r\n * Created dynamically by `RcToastService` via CDK Overlay.\r\n * One container instance is created per position.\r\n *\r\n * The service owns the toasts list; it updates the `toasts` signal and\r\n * listens to the `close` output.\r\n */\r\n@Component({\r\n selector: 'rc-toast-container',\r\n standalone: true,\r\n imports: [CommonModule, RcToastComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class]': '\"rc-toast-container rc-toast-container-\" + position',\r\n 'aria-live': 'polite',\r\n 'aria-atomic': 'false',\r\n },\r\n template: `\r\n @for (toast of toasts(); track toast.id) {\r\n <rc-toast [toast]=\"toast\" (close)=\"close.emit($event)\"></rc-toast>\r\n }\r\n `,\r\n})\r\nexport class RcToastContainerComponent {\r\n @Input() position: RcToastPosition = 'top-right';\r\n\r\n /** Signal-backed list — the service calls .set() to push updates. */\r\n readonly toasts = signal<RcToastRef[]>([]);\r\n\r\n /** Emits the id of the toast the user wants to dismiss. */\r\n @Output() close = new EventEmitter<string>();\r\n}\r\n","import { Injectable, Injector, ComponentRef } from '@angular/core';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\r\nimport { RcToastContainerComponent } from './rc-toast-container.component';\r\nimport { RcToastConfig, RcToastPosition, RcToastRef } from './rc-toast.types';\r\n\r\nlet _nextId = 0;\r\n\r\nconst DEFAULTS: Required<Omit<RcToastConfig, 'message'>> = {\r\n title: '',\r\n status: 'info',\r\n duration: 5000,\r\n position: 'top-right',\r\n dismissible: true,\r\n dismissAriaLabel: 'Dismiss notification',\r\n};\r\n\r\n/**\r\n * Service for displaying non-blocking toast notifications.\r\n *\r\n * Uses Angular CDK Overlay to render floating toast stacks at any of six\r\n * screen positions. One overlay pane is created per position, lazily.\r\n *\r\n * ## Setup\r\n * The service is `providedIn: 'root'` and works out of the box. Make sure\r\n * `@angular/cdk/overlay-prebuilt.css` is imported in your global styles:\r\n *\r\n * ```scss\r\n * // styles.scss\r\n * @import '@angular/cdk/overlay-prebuilt.css';\r\n * ```\r\n *\r\n * ## Usage\r\n * ```typescript\r\n * constructor(private toast: RcToastService) {}\r\n *\r\n * this.toast.success('Saved!', 'Success');\r\n * this.toast.danger('Something went wrong.', 'Error');\r\n * this.toast.show({ message: 'Custom toast', status: 'info', duration: 8000, position: 'bottom-center' });\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class RcToastService {\r\n private _toasts$ = new BehaviorSubject<RcToastRef[]>([]);\r\n /** Observable stream of all currently active toasts (across positions). */\r\n readonly toasts$: Observable<RcToastRef[]> = this._toasts$.asObservable();\r\n\r\n private _overlays = new Map<RcToastPosition, OverlayRef>();\r\n private _containers = new Map<\r\n RcToastPosition,\r\n ComponentRef<RcToastContainerComponent>\r\n >();\r\n private _subs = new Map<RcToastPosition, Subscription>();\r\n\r\n constructor(\r\n private overlay: Overlay,\r\n private injector: Injector,\r\n ) {}\r\n\r\n // ─── Public API ───────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Show a toast notification with full configuration control.\r\n */\r\n show(config: RcToastConfig): RcToastRef {\r\n const resolved: Required<RcToastConfig> = {\r\n title: config.title ?? DEFAULTS.title,\r\n status: config.status ?? DEFAULTS.status,\r\n duration: config.duration ?? DEFAULTS.duration,\r\n position: config.position ?? DEFAULTS.position,\r\n dismissible: config.dismissible ?? DEFAULTS.dismissible,\r\n dismissAriaLabel: config.dismissAriaLabel ?? DEFAULTS.dismissAriaLabel,\r\n message: config.message,\r\n };\r\n\r\n const ref: RcToastRef = {\r\n id: `rc-toast-${++_nextId}`,\r\n config: resolved,\r\n };\r\n\r\n this._ensureContainer(resolved.position);\r\n this._add(ref);\r\n\r\n if (resolved.duration > 0) {\r\n setTimeout(() => this.dismiss(ref.id), resolved.duration);\r\n }\r\n\r\n return ref;\r\n }\r\n\r\n /** Dismiss a toast by its id. */\r\n dismiss(id: string): void {\r\n const current = this._toasts$.getValue();\r\n const updated = current.filter((t) => t.id !== id);\r\n if (updated.length !== current.length) {\r\n this._toasts$.next(updated);\r\n }\r\n }\r\n\r\n /** Dismiss all active toasts, optionally filtered by position. */\r\n dismissAll(position?: RcToastPosition): void {\r\n if (position) {\r\n this._toasts$.next(\r\n this._toasts$.getValue().filter((t) => t.config.position !== position),\r\n );\r\n } else {\r\n this._toasts$.next([]);\r\n }\r\n }\r\n\r\n // ─── Convenience Methods ─────────────────────────────────────────────────\r\n\r\n /** Show a success toast. */\r\n success(\r\n message: string,\r\n title?: string,\r\n config?: Partial<RcToastConfig>,\r\n ): RcToastRef {\r\n return this.show({ ...config, message, title, status: 'success' });\r\n }\r\n\r\n /** Show an info toast. */\r\n info(\r\n message: string,\r\n title?: string,\r\n config?: Partial<RcToastConfig>,\r\n ): RcToastRef {\r\n return this.show({ ...config, message, title, status: 'info' });\r\n }\r\n\r\n /** Show a warning toast. */\r\n warning(\r\n message: string,\r\n title?: string,\r\n config?: Partial<RcToastConfig>,\r\n ): RcToastRef {\r\n return this.show({ ...config, message, title, status: 'warning' });\r\n }\r\n\r\n /** Show a danger / error toast. */\r\n danger(\r\n message: string,\r\n title?: string,\r\n config?: Partial<RcToastConfig>,\r\n ): RcToastRef {\r\n return this.show({ ...config, message, title, status: 'danger' });\r\n }\r\n\r\n // ─── Internals ────────────────────────────────────────────────────────────\r\n\r\n private _add(ref: RcToastRef): void {\r\n this._toasts$.next([...this._toasts$.getValue(), ref]);\r\n }\r\n\r\n /**\r\n * Lazily create (or reuse) a CDK overlay pane + container component\r\n * for a given position.\r\n */\r\n private _ensureContainer(position: RcToastPosition): void {\r\n if (this._overlays.has(position)) return;\r\n\r\n const positionStrategy = this._buildPositionStrategy(position);\r\n\r\n const overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: false,\r\n scrollStrategy: this.overlay.scrollStrategies.noop(),\r\n panelClass: [`rc-toast-pane`, `rc-toast-pane-${position}`],\r\n });\r\n\r\n // ComponentPortal lets CDK create the component inside the overlay pane —\r\n // no manual DOM manipulation required.\r\n const portal = new ComponentPortal(\r\n RcToastContainerComponent,\r\n null,\r\n this.injector,\r\n );\r\n const containerRef = overlayRef.attach(portal);\r\n containerRef.instance.position = position;\r\n\r\n // Subscribe: push filtered toasts into the container's signal.\r\n // Signal writes automatically schedule CD for OnPush components\r\n // regardless of where they live in (or outside) the component tree.\r\n const sub = this._toasts$.subscribe((all) => {\r\n containerRef.instance.toasts.set(\r\n all.filter((t) => t.config.position === position),\r\n );\r\n });\r\n\r\n // Wire dismiss events from the container back to the service\r\n containerRef.instance.close.subscribe((id: string) => this.dismiss(id));\r\n\r\n this._overlays.set(position, overlayRef);\r\n this._containers.set(position, containerRef);\r\n this._subs.set(position, sub);\r\n }\r\n\r\n private _buildPositionStrategy(position: RcToastPosition) {\r\n const strategy = this.overlay.position().global();\r\n\r\n switch (position) {\r\n case 'top-right':\r\n return strategy.top('1rem').right('1rem');\r\n case 'top-left':\r\n return strategy.top('1rem').left('1rem');\r\n case 'top-center':\r\n return strategy.top('1rem').centerHorizontally();\r\n case 'bottom-right':\r\n return strategy.bottom('1rem').right('1rem');\r\n case 'bottom-left':\r\n return strategy.bottom('1rem').left('1rem');\r\n case 'bottom-center':\r\n return strategy.bottom('1rem').centerHorizontally();\r\n }\r\n }\r\n}\r\n","import {\r\n Directive,\r\n Input,\r\n ElementRef,\r\n inject,\r\n HostListener,\r\n} from '@angular/core';\r\n\r\nexport type RcInputStatus = 'default' | 'success' | 'danger' | 'warning';\r\nexport type RcInputSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * Attribute directive that styles native `<input>` and `<textarea>` elements\r\n * with Resolve design tokens.\r\n *\r\n * Apply `rcInput` to any `<input>` or `<textarea>` element. The element\r\n * receives the full input styling, size modifiers, and validation state classes.\r\n *\r\n * Labels, hints, and error messages are provided by the consumer using the\r\n * optional `.rc-field`, `.rc-field-label`, `.rc-field-hint`, and\r\n * `.rc-field-error` CSS helper classes (included in the global stylesheet).\r\n *\r\n * @example Basic\r\n * ```html\r\n * <input rcInput placeholder=\"Search…\" />\r\n * ```\r\n *\r\n * @example With label and hint wrapper\r\n * ```html\r\n * <div class=\"rc-field\">\r\n * <label class=\"rc-field-label\" for=\"email\">Email</label>\r\n * <input rcInput id=\"email\" type=\"email\" placeholder=\"you@company.com\" />\r\n * <span class=\"rc-field-hint\">We'll never share your email.</span>\r\n * </div>\r\n * ```\r\n *\r\n * @example Validation state\r\n * ```html\r\n * <div class=\"rc-field\">\r\n * <label class=\"rc-field-label\">Password</label>\r\n * <input rcInput type=\"password\" status=\"danger\" />\r\n * <span class=\"rc-field-error\">Must be at least 8 characters.</span>\r\n * </div>\r\n * ```\r\n *\r\n * @example Textarea\r\n * ```html\r\n * <textarea rcInput rows=\"4\" placeholder=\"Your message…\"></textarea>\r\n * ```\r\n *\r\n * @example Sizes\r\n * ```html\r\n * <input rcInput size=\"sm\" placeholder=\"Small\" />\r\n * <input rcInput size=\"md\" placeholder=\"Medium\" />\r\n * <input rcInput size=\"lg\" placeholder=\"Large\" />\r\n * ```\r\n */\r\n@Directive({\r\n // eslint-disable-next-line @angular-eslint/directive-selector\r\n selector: 'input[rcInput], textarea[rcInput]',\r\n standalone: true,\r\n host: {\r\n class: 'rc-input',\r\n '[class.rc-input-sm]': \"size === 'sm'\",\r\n '[class.rc-input-md]': \"size === 'md'\",\r\n '[class.rc-input-lg]': \"size === 'lg'\",\r\n '[class.rc-input-success]': \"status === 'success'\",\r\n '[class.rc-input-danger]': \"status === 'danger'\",\r\n '[class.rc-input-warning]': \"status === 'warning'\",\r\n '[class.rc-input-focused]': '_focused',\r\n '[class.rc-input-textarea]': '_isTextarea',\r\n },\r\n})\r\nexport class RcInputDirective {\r\n private readonly _el = inject(\r\n ElementRef<HTMLInputElement | HTMLTextAreaElement>,\r\n );\r\n\r\n /** @internal true when the directive is applied to a `<textarea>` */\r\n readonly _isTextarea =\r\n this._el.nativeElement.tagName.toLowerCase() === 'textarea';\r\n\r\n /** Validation / visual status of the field. */\r\n @Input() status: RcInputStatus = 'default';\r\n\r\n /** Size of the input field. */\r\n @Input() size: RcInputSize = 'md';\r\n\r\n /** @internal focus tracking for the focus ring class */\r\n _focused = false;\r\n\r\n @HostListener('focus') _onFocus(): void {\r\n this._focused = true;\r\n }\r\n\r\n @HostListener('blur') _onBlur(): void {\r\n this._focused = false;\r\n }\r\n}\r\n","import { OverlayRef } from '@angular/cdk/overlay';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { filter } from 'rxjs/operators';\r\nimport { RcDialogConfig } from './rc-dialog.types';\r\n\r\n/**\r\n * Reference to an open dialog, returned by `RcDialogService.open()`.\r\n *\r\n * Inject it inside the dialog content component to close it programmatically\r\n * or subscribe to its close event.\r\n *\r\n * @example\r\n * ```typescript\r\n * export class ConfirmDialogComponent {\r\n * private readonly dialogRef = inject<RcDialogRef<boolean>>(RcDialogRef);\r\n *\r\n * confirm(): void { this.dialogRef.close(true); }\r\n * cancel(): void { this.dialogRef.close(false); }\r\n * }\r\n * ```\r\n */\r\nexport class RcDialogRef<R = unknown, D = unknown> {\r\n private readonly _afterClosed = new Subject<R | undefined>();\r\n\r\n /**\r\n * Emits once (with the optional result value) when the dialog fully closes,\r\n * then completes.\r\n */\r\n readonly afterClosed: Observable<R | undefined> =\r\n this._afterClosed.asObservable();\r\n\r\n private _closed = false;\r\n\r\n constructor(\r\n private readonly _overlayRef: OverlayRef,\r\n /** The config used to open this dialog. */\r\n readonly config: RcDialogConfig<D>,\r\n ) {\r\n _overlayRef.backdropClick().subscribe(() => {\r\n if (!config.disableClose) this.close();\r\n });\r\n\r\n _overlayRef\r\n .keydownEvents()\r\n .pipe(filter((e) => e.key === 'Escape' && !config.disableClose))\r\n .subscribe(() => this.close());\r\n }\r\n\r\n /**\r\n * Closes the dialog, passing an optional result value to `afterClosed`\r\n * subscribers.\r\n */\r\n close(result?: R): void {\r\n if (this._closed) return;\r\n this._closed = true;\r\n\r\n // Give the exit animation one frame, then dispose the overlay\r\n requestAnimationFrame(() => {\r\n this._overlayRef.dispose();\r\n this._afterClosed.next(result);\r\n this._afterClosed.complete();\r\n });\r\n }\r\n\r\n /** Observable of backdrop click events. */\r\n get backdropClick$(): Observable<MouseEvent> {\r\n return this._overlayRef.backdropClick();\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Configuration for opening an RcDialog.\r\n *\r\n * @example\r\n * ```typescript\r\n * this.dialog.open(MyDialogComponent, {\r\n * data: { id: 42 },\r\n * width: '32rem',\r\n * disableClose: false,\r\n * });\r\n * ```\r\n */\r\nexport interface RcDialogConfig<D = unknown> {\r\n /** Data injected into the dialog content component via `RC_DIALOG_DATA`. */\r\n data?: D;\r\n /** Fixed width of the dialog panel (e.g. `'32rem'`, `'600px'`). */\r\n width?: string;\r\n /** Max width. Defaults to `'90vw'`. */\r\n maxWidth?: string;\r\n /** Min width of the dialog panel. */\r\n minWidth?: string;\r\n /** Fixed height of the dialog panel. */\r\n height?: string;\r\n /** When `true`, clicking the backdrop or pressing Escape will NOT close the dialog. Default: `false`. */\r\n disableClose?: boolean;\r\n /** Extra CSS class(es) applied to the CDK overlay pane. */\r\n panelClass?: string | string[];\r\n /** ARIA label for the dialog panel. */\r\n ariaLabel?: string;\r\n /** ARIA label for the close button. Default: `'Close dialog'` */\r\n closeAriaLabel?: string;\r\n /** ID of the element describing the dialog (sets `aria-describedby`). */\r\n ariaDescribedBy?: string;\r\n}\r\n\r\n/**\r\n * Injection token for the data passed to a dialog content component.\r\n *\r\n * @example\r\n * ```typescript\r\n * export class MyDialogComponent {\r\n * readonly data = inject<MyData>(RC_DIALOG_DATA);\r\n * }\r\n * ```\r\n */\r\nexport const RC_DIALOG_DATA = new InjectionToken<unknown>('RC_DIALOG_DATA');\r\n","import {\r\n Component,\r\n ComponentRef,\r\n ViewChild,\r\n ChangeDetectionStrategy,\r\n inject,\r\n} from '@angular/core';\r\nimport { Directive } from '@angular/core';\r\nimport {\r\n CdkPortalOutlet,\r\n ComponentPortal,\r\n PortalModule,\r\n} from '@angular/cdk/portal';\r\nimport { RcDialogRef } from './rc-dialog-ref';\r\nimport { RcIconComponent } from '../icon/rc-icon';\r\n\r\n// =============================================================================\r\n// Structural layout directives — apply inside dialog content components\r\n// =============================================================================\r\n\r\n/**\r\n * Marks a heading element as the dialog title.\r\n * Provides consistent font size, weight, and padding (accounting for the\r\n * close button).\r\n *\r\n * @example\r\n * ```html\r\n * <h2 rcDialogTitle>Confirm deletion</h2>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcDialogTitle]',\r\n standalone: true,\r\n host: { class: 'rc-dialog-title' },\r\n})\r\nexport class RcDialogTitleDirective {}\r\n\r\n/**\r\n * Marks the main scrollable content area of a dialog.\r\n * Apply to a wrapper `<div>` or `<section>` inside the content component.\r\n *\r\n * @example\r\n * ```html\r\n * <div rcDialogContent>\r\n * <p>Are you sure you want to delete this record?</p>\r\n * </div>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcDialogContent]',\r\n standalone: true,\r\n host: { class: 'rc-dialog-content' },\r\n})\r\nexport class RcDialogContentDirective {}\r\n\r\n/**\r\n * Marks the footer area of a dialog, typically containing action buttons.\r\n * Buttons are right-aligned by default; add `align=\"start\"` to left-align.\r\n *\r\n * @example\r\n * ```html\r\n * <div rcDialogActions>\r\n * <button rcButton variant=\"ghost\" (click)=\"dialogRef.close()\">Cancel</button>\r\n * <button rcButton status=\"primary\" (click)=\"confirm()\">Confirm</button>\r\n * </div>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcDialogActions]',\r\n standalone: true,\r\n host: {\r\n class: 'rc-dialog-actions',\r\n '[class.rc-dialog-actions-start]': \"align === 'start'\",\r\n },\r\n})\r\nexport class RcDialogActionsDirective {\r\n /** Alignment of the action buttons. Default: `'end'` */\r\n align: 'start' | 'end' = 'end';\r\n}\r\n\r\n// =============================================================================\r\n// Internal container component\r\n// =============================================================================\r\n\r\n/**\r\n * Internal overlay container for `RcDialogService`.\r\n *\r\n * Do not use directly — open dialogs via `RcDialogService.open()`.\r\n */\r\n@Component({\r\n selector: 'rc-dialog-container',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [PortalModule, RcIconComponent],\r\n host: {\r\n class: 'rc-dialog',\r\n role: 'dialog',\r\n '[attr.aria-modal]': 'true',\r\n '[attr.aria-label]': '_config.ariaLabel ?? null',\r\n '[attr.aria-describedby]': '_config.ariaDescribedBy ?? null',\r\n tabindex: '-1',\r\n },\r\n template: `\r\n @if (!_config.disableClose) {\r\n <button\r\n class=\"rc-dialog-close-btn\"\r\n type=\"button\"\r\n (click)=\"_dialogRef.close()\"\r\n [attr.aria-label]=\"_config.closeAriaLabel ?? 'Close dialog'\"\r\n >\r\n <rc-icon name=\"close\"></rc-icon>\r\n </button>\r\n }\r\n <ng-template cdkPortalOutlet></ng-template>\r\n `,\r\n})\r\nexport class RcDialogContainerComponent {\r\n @ViewChild(CdkPortalOutlet, { static: true })\r\n private readonly _outlet!: CdkPortalOutlet;\r\n\r\n readonly _dialogRef = inject(RcDialogRef);\r\n\r\n get _config() {\r\n return this._dialogRef.config;\r\n }\r\n\r\n /** Attach the user's content component into the portal outlet. */\r\n attachContent<C>(portal: ComponentPortal<C>): ComponentRef<C> {\r\n return this._outlet.attachComponentPortal(portal);\r\n }\r\n}\r\n","import { Injectable, Injector, Type, inject } from '@angular/core';\r\nimport { Overlay } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { RcDialogRef } from './rc-dialog-ref';\r\nimport { RcDialogConfig, RC_DIALOG_DATA } from './rc-dialog.types';\r\nimport { RcDialogContainerComponent } from './rc-dialog-container';\r\n\r\n/**\r\n * Service for opening modal dialogs built on top of Angular CDK Overlay.\r\n *\r\n * The dialog renders a floating panel with a backdrop, centered on screen.\r\n * Pass any component as the first argument; it becomes the dialog's content.\r\n *\r\n * ## Setup\r\n * The service is `providedIn: 'root'`. No extra setup is required.\r\n *\r\n * ## Usage\r\n * ```typescript\r\n * export class MyPage {\r\n * private dialog = inject(RcDialogService);\r\n *\r\n * openConfirm(): void {\r\n * const ref = this.dialog.open<boolean, { name: string }>(ConfirmDialogComponent, {\r\n * data: { name: 'record #42' },\r\n * width: '28rem',\r\n * });\r\n *\r\n * ref.afterClosed.subscribe(result => {\r\n * if (result) this.deleteRecord();\r\n * });\r\n * }\r\n * }\r\n * ```\r\n *\r\n * ## Dialog content component\r\n * The content component can inject `RcDialogRef` to close the dialog and\r\n * `RC_DIALOG_DATA` to access passed data:\r\n *\r\n * ```typescript\r\n * export class ConfirmDialogComponent {\r\n * readonly data = inject<{ name: string }>(RC_DIALOG_DATA);\r\n * readonly dialog = inject<RcDialogRef<boolean>>(RcDialogRef);\r\n * }\r\n * ```\r\n *\r\n * Use `rcDialogTitle`, `rcDialogContent`, and `rcDialogActions` directives to\r\n * structure the dialog's layout:\r\n *\r\n * ```html\r\n * <h2 rcDialogTitle>Confirm deletion</h2>\r\n * <div rcDialogContent>\r\n * <p>Delete {{ data.name }}? This action cannot be undone.</p>\r\n * </div>\r\n * <div rcDialogActions>\r\n * <button rcButton variant=\"ghost\" (click)=\"dialog.close(false)\">Cancel</button>\r\n * <button rcButton status=\"danger\" (click)=\"dialog.close(true)\">Delete</button>\r\n * </div>\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class RcDialogService {\r\n private readonly _overlay = inject(Overlay);\r\n private readonly _injector = inject(Injector);\r\n\r\n /**\r\n * Opens a dialog containing the given component.\r\n *\r\n * @param component The Angular component class to render as dialog content.\r\n * @param config Optional dialog configuration.\r\n * @returns An `RcDialogRef` to control and observe the opened dialog.\r\n */\r\n open<R = unknown, D = unknown>(\r\n component: Type<unknown>,\r\n config: RcDialogConfig<D> = {},\r\n ): RcDialogRef<R, D> {\r\n const panelClasses = [\r\n 'rc-dialog-panel',\r\n ...(Array.isArray(config.panelClass)\r\n ? config.panelClass\r\n : config.panelClass\r\n ? [config.panelClass]\r\n : []),\r\n ];\r\n\r\n const overlayRef = this._overlay.create({\r\n hasBackdrop: true,\r\n backdropClass: 'rc-dialog-backdrop',\r\n panelClass: panelClasses,\r\n positionStrategy: this._overlay\r\n .position()\r\n .global()\r\n .centerHorizontally()\r\n .centerVertically(),\r\n scrollStrategy: this._overlay.scrollStrategies.block(),\r\n width: config.width,\r\n maxWidth: config.maxWidth ?? '90vw',\r\n minWidth: config.minWidth,\r\n height: config.height,\r\n });\r\n\r\n const dialogRef = new RcDialogRef<R, D>(overlayRef, config);\r\n\r\n // A single injector shared by the container and the content component.\r\n const dialogInjector = Injector.create({\r\n parent: this._injector,\r\n providers: [\r\n { provide: RcDialogRef, useValue: dialogRef },\r\n { provide: RC_DIALOG_DATA, useValue: config.data ?? null },\r\n ],\r\n });\r\n\r\n const containerRef = overlayRef.attach(\r\n new ComponentPortal(RcDialogContainerComponent, null, dialogInjector),\r\n );\r\n\r\n containerRef.instance.attachContent(\r\n new ComponentPortal(component, null, dialogInjector),\r\n );\r\n\r\n return dialogRef;\r\n }\r\n}\r\n","import {\r\n Component,\r\n Directive,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n ElementRef,\r\n inject,\r\n} from '@angular/core';\r\nimport {\r\n CdkTable,\r\n CdkColumnDef,\r\n CdkHeaderCellDef,\r\n CdkCellDef,\r\n CdkFooterCellDef,\r\n CdkHeaderRowDef,\r\n CdkRowDef,\r\n CdkFooterRowDef,\r\n CdkHeaderRow,\r\n CdkRow,\r\n CdkFooterRow,\r\n CdkNoDataRow,\r\n CdkCellOutlet,\r\n CDK_ROW_TEMPLATE,\r\n CdkTableModule,\r\n CDK_TABLE,\r\n STICKY_POSITIONING_LISTENER,\r\n} from '@angular/cdk/table';\r\n\r\n/**\r\n * @internal RC table host template.\r\n *\r\n * Mirrors the CDK v17+ template: for native `<table>` elements the row outlets\r\n * must be wrapped in proper `<thead>`/`<tbody>`/`<tfoot>` sections, otherwise\r\n * browsers render the table with 0 height. For non-native hosts (e.g.\r\n * `<rc-table>`) the flat structure is used instead.\r\n */\r\nconst RC_TABLE_TEMPLATE = `\r\n @if (_isNativeHtmlTable) {\r\n <thead role=\"rowgroup\">\r\n <ng-container headerRowOutlet/>\r\n </thead>\r\n <tbody role=\"rowgroup\">\r\n <ng-container rowOutlet/>\r\n <ng-container noDataRowOutlet/>\r\n </tbody>\r\n <tfoot role=\"rowgroup\">\r\n <ng-container footerRowOutlet/>\r\n </tfoot>\r\n } @else {\r\n <ng-container headerRowOutlet/>\r\n <ng-container rowOutlet/>\r\n <ng-container noDataRowOutlet/>\r\n <ng-container footerRowOutlet/>\r\n }`;\r\n\r\n// =============================================================================\r\n// Cell definitions\r\n// =============================================================================\r\n\r\n/**\r\n * Header-cell definition structural directive.\r\n * Use as `*rcHeaderCellDef` inside an `[rcColumnDef]` template.\r\n *\r\n * @example\r\n * ```html\r\n * <ng-container rcColumnDef=\"name\">\r\n * <th rcHeaderCell *rcHeaderCellDef>Name</th>\r\n * <td rcCell *rcCellDef=\"let row\">{{ row.name }}</td>\r\n * </ng-container>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcHeaderCellDef]',\r\n providers: [\r\n { provide: CdkHeaderCellDef, useExisting: RcHeaderCellDefDirective },\r\n ],\r\n standalone: true,\r\n})\r\nexport class RcHeaderCellDefDirective extends CdkHeaderCellDef {}\r\n\r\n/** Data-cell definition structural directive. Use as `*rcCellDef=\"let row\"`. */\r\n@Directive({\r\n selector: '[rcCellDef]',\r\n providers: [{ provide: CdkCellDef, useExisting: RcCellDefDirective }],\r\n standalone: true,\r\n})\r\nexport class RcCellDefDirective extends CdkCellDef {}\r\n\r\n/** Footer-cell definition structural directive. Use as `*rcFooterCellDef`. */\r\n@Directive({\r\n selector: '[rcFooterCellDef]',\r\n providers: [\r\n { provide: CdkFooterCellDef, useExisting: RcFooterCellDefDirective },\r\n ],\r\n standalone: true,\r\n})\r\nexport class RcFooterCellDefDirective extends CdkFooterCellDef {}\r\n\r\n// =============================================================================\r\n// Column definition\r\n// =============================================================================\r\n\r\n/**\r\n * Column definition — wraps all templates for a single column.\r\n *\r\n * @example\r\n * ```html\r\n * <ng-container [rcColumnDef]=\"'status'\">\r\n * <th rcHeaderCell *rcHeaderCellDef>Status</th>\r\n * <td rcCell *rcCellDef=\"let row\">{{ row.status }}</td>\r\n * </ng-container>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcColumnDef]',\r\n inputs: [{ name: 'name', alias: 'rcColumnDef' }],\r\n providers: [{ provide: CdkColumnDef, useExisting: RcColumnDefDirective }],\r\n standalone: true,\r\n})\r\nexport class RcColumnDefDirective extends CdkColumnDef {}\r\n\r\n// =============================================================================\r\n// Cell host directives\r\n// =============================================================================\r\n\r\n/**\r\n * Header-cell host directive — apply to `<th>` inside `*rcHeaderCellDef` templates.\r\n *\r\n * @example\r\n * ```html\r\n * <th rcHeaderCell *rcHeaderCellDef>Column title</th>\r\n * ```\r\n */\r\n@Directive({\r\n selector: 'rc-header-cell, th[rcHeaderCell]',\r\n host: { class: 'rc-header-cell', role: 'columnheader' },\r\n standalone: true,\r\n})\r\nexport class RcHeaderCellDirective {\r\n constructor() {\r\n const colDef = inject(CdkColumnDef, { optional: true });\r\n const el = inject(ElementRef<HTMLElement>);\r\n if (colDef) el.nativeElement.classList.add(...colDef._columnCssClassName);\r\n }\r\n}\r\n\r\n/**\r\n * Data-cell host directive — apply to `<td>` inside `*rcCellDef` templates.\r\n *\r\n * @example\r\n * ```html\r\n * <td rcCell *rcCellDef=\"let row\">{{ row.name }}</td>\r\n * ```\r\n */\r\n@Directive({\r\n selector: 'rc-cell, td[rcCell]',\r\n host: { class: 'rc-cell', role: 'gridcell' },\r\n standalone: true,\r\n})\r\nexport class RcCellDirective {\r\n constructor() {\r\n const colDef = inject(CdkColumnDef, { optional: true });\r\n const el = inject(ElementRef<HTMLElement>);\r\n if (colDef) el.nativeElement.classList.add(...colDef._columnCssClassName);\r\n }\r\n}\r\n\r\n/**\r\n * Footer-cell host directive — apply to `<td>` inside `*rcFooterCellDef` templates.\r\n *\r\n * @example\r\n * ```html\r\n * <td rcFooterCell *rcFooterCellDef>Total</td>\r\n * ```\r\n */\r\n@Directive({\r\n selector: 'rc-footer-cell, td[rcFooterCell]',\r\n host: { class: 'rc-footer-cell', role: 'gridcell' },\r\n standalone: true,\r\n})\r\nexport class RcFooterCellDirective {\r\n constructor() {\r\n const colDef = inject(CdkColumnDef, { optional: true });\r\n const el = inject(ElementRef<HTMLElement>);\r\n if (colDef) el.nativeElement.classList.add(...colDef._columnCssClassName);\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// Row definitions\r\n// =============================================================================\r\n\r\n/**\r\n * Header-row definition — declares the set of columns the header row should render.\r\n *\r\n * @example\r\n * ```html\r\n * <tr rc-header-row *rcHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcHeaderRowDef]',\r\n inputs: [\r\n { name: 'columns', alias: 'rcHeaderRowDef' },\r\n { name: 'sticky', alias: 'rcHeaderRowDefSticky' },\r\n ],\r\n providers: [\r\n { provide: CdkHeaderRowDef, useExisting: RcHeaderRowDefDirective },\r\n ],\r\n standalone: true,\r\n})\r\nexport class RcHeaderRowDefDirective extends CdkHeaderRowDef {}\r\n\r\n/**\r\n * Data-row definition — declares the columns and an optional predicate to\r\n * decide which rows use this definition.\r\n *\r\n * @example\r\n * ```html\r\n * <tr rc-row *rcRowDef=\"let row; columns: displayedColumns\"></tr>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcRowDef]',\r\n inputs: [\r\n { name: 'columns', alias: 'rcRowDefColumns' },\r\n { name: 'when', alias: 'rcRowDefWhen' },\r\n ],\r\n providers: [{ provide: CdkRowDef, useExisting: RcRowDefDirective }],\r\n standalone: true,\r\n})\r\nexport class RcRowDefDirective<T> extends CdkRowDef<T> {}\r\n\r\n/**\r\n * Footer-row definition — declares the columns the footer row should render.\r\n *\r\n * @example\r\n * ```html\r\n * <tr rc-footer-row *rcFooterRowDef=\"displayedColumns; sticky: true\"></tr>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcFooterRowDef]',\r\n inputs: [\r\n { name: 'columns', alias: 'rcFooterRowDef' },\r\n { name: 'sticky', alias: 'rcFooterRowDefSticky' },\r\n ],\r\n providers: [\r\n { provide: CdkFooterRowDef, useExisting: RcFooterRowDefDirective },\r\n ],\r\n standalone: true,\r\n})\r\nexport class RcFooterRowDefDirective extends CdkFooterRowDef {}\r\n\r\n// =============================================================================\r\n// Row components\r\n// =============================================================================\r\n\r\n/** Header row component — rendered once for each `[rcHeaderRowDef]`. */\r\n@Component({\r\n selector: 'rc-header-row, tr[rc-header-row]',\r\n template: CDK_ROW_TEMPLATE,\r\n host: { class: 'rc-header-row', role: 'row' },\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [{ provide: CdkHeaderRow, useExisting: RcHeaderRowComponent }],\r\n standalone: true,\r\n imports: [CdkCellOutlet],\r\n})\r\nexport class RcHeaderRowComponent extends CdkHeaderRow {}\r\n\r\n/** Data row component — rendered once per data row. */\r\n@Component({\r\n selector: 'rc-row, tr[rc-row]',\r\n template: CDK_ROW_TEMPLATE,\r\n host: { class: 'rc-row', role: 'row' },\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [{ provide: CdkRow, useExisting: RcRowComponent }],\r\n standalone: true,\r\n imports: [CdkCellOutlet],\r\n})\r\nexport class RcRowComponent extends CdkRow {}\r\n\r\n/** Footer row component — rendered once for each `[rcFooterRowDef]`. */\r\n@Component({\r\n selector: 'rc-footer-row, tr[rc-footer-row]',\r\n template: CDK_ROW_TEMPLATE,\r\n host: { class: 'rc-footer-row', role: 'row' },\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [{ provide: CdkFooterRow, useExisting: RcFooterRowComponent }],\r\n standalone: true,\r\n imports: [CdkCellOutlet],\r\n})\r\nexport class RcFooterRowComponent extends CdkFooterRow {}\r\n\r\n// =============================================================================\r\n// No-data row\r\n// =============================================================================\r\n\r\n/**\r\n * No-data row — shown when the data source has no rows.\r\n *\r\n * @example\r\n * ```html\r\n * <ng-template rcNoDataRow>\r\n * <tr><td [attr.colspan]=\"columns.length\">No results found.</td></tr>\r\n * </ng-template>\r\n * ```\r\n */\r\n@Directive({\r\n selector: 'ng-template[rcNoDataRow]',\r\n providers: [{ provide: CdkNoDataRow, useExisting: RcNoDataRowDirective }],\r\n standalone: true,\r\n})\r\nexport class RcNoDataRowDirective extends CdkNoDataRow {}\r\n\r\n// =============================================================================\r\n// Table component\r\n// =============================================================================\r\n\r\n/**\r\n * A data table built on top of Angular CDK's `CdkTable`, styled with Resolve\r\n * design tokens.\r\n *\r\n * Use `[rcColumnDef]`, `*rcHeaderCellDef`, `*rcCellDef`, `[rcHeaderRowDef]`,\r\n * and `*rcRowDef` to declare the table structure.\r\n *\r\n * @example\r\n * ```html\r\n * <table rcTable [dataSource]=\"dataSource\">\r\n * <ng-container [rcColumnDef]=\"'name'\">\r\n * <th rcHeaderCell *rcHeaderCellDef>Name</th>\r\n * <td rcCell *rcCellDef=\"let row\">{{ row.name }}</td>\r\n * </ng-container>\r\n *\r\n * <tr rc-header-row *rcHeaderRowDef=\"displayedColumns\"></tr>\r\n * <tr rc-row *rcRowDef=\"let row; columns: displayedColumns\"></tr>\r\n * </table>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-table, table[rcTable]',\r\n template: RC_TABLE_TEMPLATE,\r\n host: { class: 'rc-table', role: 'table' },\r\n changeDetection: ChangeDetectionStrategy.Default,\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: true,\r\n imports: [CdkTableModule],\r\n providers: [\r\n { provide: CdkTable, useExisting: RcTableComponent },\r\n { provide: CDK_TABLE, useExisting: RcTableComponent },\r\n { provide: STICKY_POSITIONING_LISTENER, useValue: null },\r\n ],\r\n})\r\nexport class RcTableComponent<T> extends CdkTable<T> {\r\n /** @internal */\r\n protected override stickyCssClass = 'rc-table-sticky';\r\n /** @internal */\r\n protected override needsPositionStickyOnElement = false;\r\n}\r\n\r\n// =============================================================================\r\n// Convenience barrel\r\n// =============================================================================\r\n\r\n/** All RC Table directives and components — import this array in your module/component. */\r\nexport const RC_TABLE_DIRECTIVES = [\r\n RcTableComponent,\r\n RcColumnDefDirective,\r\n RcHeaderCellDefDirective,\r\n RcCellDefDirective,\r\n RcFooterCellDefDirective,\r\n RcHeaderCellDirective,\r\n RcCellDirective,\r\n RcFooterCellDirective,\r\n RcHeaderRowDefDirective,\r\n RcRowDefDirective,\r\n RcFooterRowDefDirective,\r\n RcHeaderRowComponent,\r\n RcRowComponent,\r\n RcFooterRowComponent,\r\n RcNoDataRowDirective,\r\n] as const;\r\n","import {\r\n Directive,\r\n Component,\r\n InjectionToken,\r\n inject,\r\n signal,\r\n computed,\r\n Output,\r\n EventEmitter,\r\n Input,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\n\r\n// =============================================================================\r\n// Types\r\n// =============================================================================\r\n\r\n/** Sort direction. An empty string means \"unsorted\". */\r\nexport type RcSortDirection = 'asc' | 'desc' | '';\r\n\r\n/** State emitted by `RcSortDirective` when the active column or direction changes. */\r\nexport interface RcSortState {\r\n /** Column id that is currently sorted. */\r\n active: string;\r\n /** Current sort direction. Empty string means no active sort. */\r\n direction: RcSortDirection;\r\n}\r\n\r\n// =============================================================================\r\n// Injection token\r\n// =============================================================================\r\n\r\n/** Injection token used by `RcSortHeaderComponent` to locate its parent sort directive. */\r\nexport const RC_SORT = new InjectionToken<RcSortDirective>('RcSort');\r\n\r\n// =============================================================================\r\n// Sort directive\r\n// =============================================================================\r\n\r\n/**\r\n * Host directive that adds sorting state to an `rc-table` or `<table>`.\r\n *\r\n * Pair with `[rcSortHeader]` attributes on header cells. The directive tracks\r\n * which column is active and in which direction, emitting `rcSortChange` on\r\n * every transition.\r\n *\r\n * The cycling order is: _none_ → `asc` → `desc` → _none_.\r\n *\r\n * @example\r\n * ```html\r\n * <table rcTable [dataSource]=\"ds\" rcSort (rcSortChange)=\"ds.sort = $event\">\r\n * ...\r\n * </table>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcSort]',\r\n exportAs: 'rcSort',\r\n providers: [{ provide: RC_SORT, useExisting: RcSortDirective }],\r\n standalone: true,\r\n host: { class: 'rc-sort' },\r\n})\r\nexport class RcSortDirective {\r\n /** The id of the currently active sort column, or `''` if unsorted. */\r\n readonly active = signal<string>('');\r\n\r\n /** The current sort direction. */\r\n readonly direction = signal<RcSortDirection>('');\r\n\r\n /** Emits whenever the active column or direction changes. */\r\n @Output() readonly rcSortChange = new EventEmitter<RcSortState>();\r\n\r\n /** @internal Called by `RcSortHeaderComponent` when the user clicks a header. */\r\n sort(columnId: string): void {\r\n if (this.active() !== columnId) {\r\n this.active.set(columnId);\r\n this.direction.set('asc');\r\n } else {\r\n const next: RcSortDirection =\r\n this.direction() === ''\r\n ? 'asc'\r\n : this.direction() === 'asc'\r\n ? 'desc'\r\n : '';\r\n this.direction.set(next);\r\n if (next === '') this.active.set('');\r\n }\r\n this.rcSortChange.emit({\r\n active: this.active(),\r\n direction: this.direction(),\r\n });\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// Sort header component\r\n// =============================================================================\r\n\r\n/**\r\n * Sort-header component — apply as an attribute to a `<th>` cell to make the\r\n * column sortable. Requires a parent `[rcSort]` directive.\r\n *\r\n * Cycles direction on each click: _none_ → `asc` → `desc` → _none_.\r\n *\r\n * @example\r\n * ```html\r\n * <th rcHeaderCell *rcHeaderCellDef [rcSortHeader]=\"'name'\">Name</th>\r\n * ```\r\n */\r\n@Component({\r\n selector: '[rcSortHeader]',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'rc-sort-header',\r\n '[class.rc-sort-header-active]': '_isActive()',\r\n '[class.rc-sort-header-asc]': \"_isActive() && _sort.direction() === 'asc'\",\r\n '[class.rc-sort-header-desc]':\r\n \"_isActive() && _sort.direction() === 'desc'\",\r\n '(click)': '_onClick()',\r\n '[attr.aria-sort]': '_ariaSort()',\r\n role: 'button',\r\n tabindex: '0',\r\n '(keydown.enter)': '_onClick()',\r\n '(keydown.space)': '_onClick(); $event.preventDefault()',\r\n },\r\n template: `\r\n <span class=\"rc-sort-header-inner\">\r\n <span class=\"rc-sort-header-content\"><ng-content /></span>\r\n <span class=\"rc-sort-header-arrow\" aria-hidden=\"true\">\r\n @if (_isActive() && _sort.direction() === 'asc') {\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"currentColor\">\r\n <path d=\"M6 2.5 L10 8.5 L2 8.5 Z\" />\r\n </svg>\r\n } @else if (_isActive() && _sort.direction() === 'desc') {\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"currentColor\">\r\n <path d=\"M6 9.5 L10 3.5 L2 3.5 Z\" />\r\n </svg>\r\n } @else {\r\n <svg\r\n width=\"12\"\r\n height=\"12\"\r\n viewBox=\"0 0 12 12\"\r\n fill=\"currentColor\"\r\n class=\"rc-sort-header-unsorted\"\r\n >\r\n <path d=\"M6 1.5 L9.5 5.5 L2.5 5.5 Z\" />\r\n <path d=\"M6 10.5 L9.5 6.5 L2.5 6.5 Z\" />\r\n </svg>\r\n }\r\n </span>\r\n </span>\r\n `,\r\n})\r\nexport class RcSortHeaderComponent {\r\n /** The column id this header controls. Matches the `[rcColumnDef]` name. */\r\n @Input({ alias: 'rcSortHeader', required: true }) columnId!: string;\r\n\r\n /** @internal */\r\n readonly _sort = inject(RC_SORT);\r\n\r\n /** @internal */\r\n readonly _isActive = computed(() => this._sort.active() === this.columnId);\r\n\r\n /** @internal */\r\n readonly _ariaSort = computed(() => {\r\n if (!this._isActive()) return null;\r\n return this._sort.direction() === 'asc'\r\n ? 'ascending'\r\n : this._sort.direction() === 'desc'\r\n ? 'descending'\r\n : null;\r\n });\r\n\r\n /** @internal */\r\n _onClick(): void {\r\n this._sort.sort(this.columnId);\r\n }\r\n}\r\n","import { DataSource } from '@angular/cdk/collections';\r\nimport { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport type { RcSortDirective } from './rc-sort';\r\n\r\n// =============================================================================\r\n// RcTableDataSource\r\n// =============================================================================\r\n\r\n/**\r\n * Client-side data source for `rc-table`.\r\n *\r\n * Handles in-memory sorting and filtering. For server-side data or pagination,\r\n * implement `DataSource<T>` directly or extend this class.\r\n *\r\n * @example\r\n * ```typescript\r\n * interface User { id: number; name: string; email: string; role: string; }\r\n *\r\n * readonly dataSource = new RcTableDataSource<User>(USERS);\r\n *\r\n * // Filter:\r\n * onFilter(value: string): void { this.dataSource.filter = value; }\r\n *\r\n * // Sort (bind via @ViewChild after view init):\r\n * @ViewChild(RcSortDirective) sort!: RcSortDirective;\r\n * ngAfterViewInit() { this.dataSource.sort = this.sort; }\r\n * ```\r\n */\r\nexport class RcTableDataSource<T> extends DataSource<T> {\r\n private readonly _data$ = new BehaviorSubject<T[]>([]);\r\n private readonly _filter$ = new BehaviorSubject<string>('');\r\n private readonly _sortChange$ = new BehaviorSubject<void>(undefined);\r\n private _sort: RcSortDirective | null = null;\r\n private _sortSubscription: Subscription | null = null;\r\n\r\n // ── Public properties ──────────────────────────────────────────────────────\r\n\r\n /** The raw data items rendered by the table. */\r\n get data(): T[] {\r\n return this._data$.value;\r\n }\r\n set data(value: T[]) {\r\n this._data$.next(value);\r\n }\r\n\r\n /**\r\n * Filter string applied to every row.\r\n * Setting this triggers a re-render; the string is trimmed and lower-cased\r\n * before being passed to `filterPredicate`.\r\n */\r\n get filter(): string {\r\n return this._filter$.value;\r\n }\r\n set filter(value: string) {\r\n this._filter$.next(value.trim().toLowerCase());\r\n }\r\n\r\n /**\r\n * The `RcSortDirective` instance connected to the table.\r\n * When set, the data source subscribes to sort-change events and\r\n * re-sorts on every header click.\r\n */\r\n get sort(): RcSortDirective | null {\r\n return this._sort;\r\n }\r\n set sort(value: RcSortDirective | null) {\r\n this._sortSubscription?.unsubscribe();\r\n this._sort = value;\r\n if (value) {\r\n this._sortSubscription = value.rcSortChange.subscribe(() =>\r\n this._sortChange$.next(),\r\n );\r\n }\r\n this._sortChange$.next();\r\n }\r\n\r\n // ── Customisation hooks ────────────────────────────────────────────────────\r\n\r\n /**\r\n * Returns the comparable value of `data[sortHeaderId]` used during sorting.\r\n * Override to support nested paths or computed values.\r\n */\r\n sortingDataAccessor: (data: T, sortHeaderId: string) => string | number = (\r\n data: T,\r\n sortHeaderId: string,\r\n ): string | number => {\r\n const value = (data as Record<string, unknown>)[sortHeaderId];\r\n if (typeof value === 'number') return value;\r\n return value != null ? String(value).toLowerCase() : '';\r\n };\r\n\r\n /**\r\n * Returns `true` if `data` should be included for the active `filter` string.\r\n * Default implementation joins all property values and does a substring check.\r\n * Override to restrict which columns participate in filtering.\r\n */\r\n filterPredicate: (data: T, filter: string) => boolean = (\r\n data: T,\r\n filter: string,\r\n ): boolean => {\r\n const dataStr = Object.values(data as Record<string, unknown>)\r\n .map((v) => (v != null ? String(v) : ''))\r\n .join(' \\u0000 ')\r\n .toLowerCase();\r\n return dataStr.includes(filter);\r\n };\r\n\r\n // ── Constructor ────────────────────────────────────────────────────────────\r\n\r\n constructor(initialData: T[] = []) {\r\n super();\r\n this._data$.next(initialData);\r\n }\r\n\r\n // ── DataSource interface ───────────────────────────────────────────────────\r\n\r\n connect(): Observable<T[]> {\r\n return combineLatest([this._data$, this._filter$, this._sortChange$]).pipe(\r\n map(([data, filter]) => {\r\n // 1. Filtering\r\n let result: T[] = filter\r\n ? data.filter((row) => this.filterPredicate(row, filter))\r\n : data.slice();\r\n\r\n // 2. Sorting\r\n if (this._sort) {\r\n const active = this._sort.active();\r\n const direction = this._sort.direction();\r\n if (active && direction) {\r\n result = [...result].sort((a, b) => {\r\n const aVal = this.sortingDataAccessor(a, active);\r\n const bVal = this.sortingDataAccessor(b, active);\r\n if (aVal < bVal) return direction === 'asc' ? -1 : 1;\r\n if (aVal > bVal) return direction === 'asc' ? 1 : -1;\r\n return 0;\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }),\r\n );\r\n }\r\n\r\n disconnect(): void {\r\n this._sortSubscription?.unsubscribe();\r\n this._data$.complete();\r\n this._filter$.complete();\r\n this._sortChange$.complete();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n HostListener,\r\n} from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\nimport { RcIconComponent } from '../icon/rc-icon';\r\n\r\nexport type RcChipStatus =\r\n | 'default'\r\n | 'primary'\r\n | 'success'\r\n | 'warning'\r\n | 'danger'\r\n | 'info';\r\nexport type RcChipSize = 'sm' | 'md';\r\n\r\n/**\r\n * A compact interactive label — optionally clickable and/or closeable.\r\n *\r\n * Chips represent discrete values such as filters, tags, or selected options.\r\n * They can be made clickable and/or include a close/remove button.\r\n *\r\n * @example Basic chip\r\n * ```html\r\n * <rc-chip>Design</rc-chip>\r\n * ```\r\n *\r\n * @example Clickable chip with icon\r\n * ```html\r\n * <rc-chip status=\"primary\" icon=\"star\" (chipClick)=\"onSelect()\">Favourite</rc-chip>\r\n * ```\r\n *\r\n * @example Closeable chip (filter tag)\r\n * ```html\r\n * <rc-chip status=\"primary\" [closeable]=\"true\" (closed)=\"removeFilter('tag')\">\r\n * Angular\r\n * </rc-chip>\r\n * ```\r\n *\r\n * @example Disabled chip\r\n * ```html\r\n * <rc-chip [disabled]=\"true\">Not available</rc-chip>\r\n * ```\r\n *\r\n * @input status - Colour status. Default: `'default'`\r\n * @input size - Chip size. Default: `'md'`\r\n * @input icon - Eva Icons icon name shown before the label.\r\n * @input closeable - Shows a close/remove button. Default: `false`\r\n * @input disabled - Disables all interactions. Default: `false`\r\n * @input selected - Renders the chip in its selected/active state. Default: `false`\r\n * @output chipClick - Emits when the chip body is clicked (and not disabled).\r\n * @output closed - Emits when the close button is clicked (and not disabled).\r\n */\r\n@Component({\r\n selector: 'rc-chip',\r\n standalone: true,\r\n imports: [NgIf, RcIconComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'rc-chip',\r\n '[class.rc-chip-primary]': \"status === 'primary'\",\r\n '[class.rc-chip-success]': \"status === 'success'\",\r\n '[class.rc-chip-warning]': \"status === 'warning'\",\r\n '[class.rc-chip-danger]': \"status === 'danger'\",\r\n '[class.rc-chip-info]': \"status === 'info'\",\r\n '[class.rc-chip-sm]': \"size === 'sm'\",\r\n '[class.rc-chip-md]': \"size === 'md'\",\r\n '[class.rc-chip-disabled]': 'disabled',\r\n '[class.rc-chip-selected]': 'selected',\r\n '[class.rc-chip-clickable]': 'hasClickListeners',\r\n '[attr.role]': 'hasClickListeners ? \"button\" : null',\r\n '[attr.tabindex]': 'hasClickListeners && !disabled ? \"0\" : null',\r\n '[attr.aria-disabled]': 'disabled ? \"true\" : null',\r\n '[attr.aria-pressed]': 'hasClickListeners ? selected : null',\r\n },\r\n template: `\r\n <rc-icon *ngIf=\"icon\" [name]=\"icon\" class=\"rc-chip-icon\"></rc-icon>\r\n <span class=\"rc-chip-label\"><ng-content></ng-content></span>\r\n <button\r\n *ngIf=\"closeable\"\r\n type=\"button\"\r\n class=\"rc-chip-close\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"'Remove'\"\r\n (click)=\"onClose($event)\"\r\n >\r\n <rc-icon name=\"close\"></rc-icon>\r\n </button>\r\n `,\r\n})\r\nexport class RcChipComponent {\r\n /** Colour status */\r\n @Input() status: RcChipStatus = 'default';\r\n\r\n /** Chip size */\r\n @Input() size: RcChipSize = 'md';\r\n\r\n /** Eva Icons icon name to show before the label */\r\n @Input() icon = '';\r\n\r\n /** Show a close/remove button */\r\n @Input() closeable = false;\r\n\r\n /** Disable all interactions */\r\n @Input() disabled = false;\r\n\r\n /** Render in selected/active state */\r\n @Input() selected = false;\r\n\r\n /** Emits when the chip body is clicked and not disabled */\r\n @Output() chipClick = new EventEmitter<MouseEvent>();\r\n\r\n /** Emits when the close button is clicked and not disabled */\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n get hasClickListeners(): boolean {\r\n return this.chipClick.observed;\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event: MouseEvent): void {\r\n if (this.disabled) return;\r\n const target = event.target as HTMLElement;\r\n if (target.closest('.rc-chip-close')) return;\r\n this.chipClick.emit(event);\r\n }\r\n\r\n @HostListener('keydown.enter', ['$event'])\r\n @HostListener('keydown.space', ['$event'])\r\n onKeydown(event: Event): void {\r\n if (this.disabled || !this.hasClickListeners) return;\r\n event.preventDefault();\r\n this.chipClick.emit(new MouseEvent('click'));\r\n }\r\n\r\n onClose(event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (this.disabled) return;\r\n this.closed.emit();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n forwardRef,\r\n inject,\r\n InjectionToken,\r\n OnInit,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\n\r\nexport type RcRadioSize = 'sm' | 'md';\r\n\r\n// Internal token used for communication between group and buttons\r\nexport const RC_RADIO_GROUP = new InjectionToken<RcRadioGroupComponent>(\r\n 'RC_RADIO_GROUP',\r\n);\r\n\r\n/**\r\n * Container for a group of radio buttons. Supports `[(ngModel)]` and reactive forms.\r\n *\r\n * @example With ngModel\r\n * ```html\r\n * <rc-radio-group [(ngModel)]=\"selectedPlan\">\r\n * <rc-radio-button value=\"free\">Free</rc-radio-button>\r\n * <rc-radio-button value=\"pro\">Pro</rc-radio-button>\r\n * <rc-radio-button value=\"enterprise\">Enterprise</rc-radio-button>\r\n * </rc-radio-group>\r\n * ```\r\n *\r\n * @example Disabled group\r\n * ```html\r\n * <rc-radio-group [disabled]=\"true\" [value]=\"'a'\">\r\n * <rc-radio-button value=\"a\">Option A</rc-radio-button>\r\n * <rc-radio-button value=\"b\">Option B</rc-radio-button>\r\n * </rc-radio-group>\r\n * ```\r\n *\r\n * @input value - Currently selected value.\r\n * @input disabled - Disables all buttons in the group. Default: `false`\r\n * @input size - Size applied to all buttons. Default: `'md'`\r\n * @output valueChange - Emits the new value when selection changes.\r\n */\r\n@Component({\r\n selector: 'rc-radio-group',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RcRadioGroupComponent),\r\n multi: true,\r\n },\r\n {\r\n provide: RC_RADIO_GROUP,\r\n useExisting: forwardRef(() => RcRadioGroupComponent),\r\n },\r\n ],\r\n host: {\r\n class: 'rc-radio-group',\r\n role: 'radiogroup',\r\n '[class.rc-radio-group-disabled]': 'disabled',\r\n '[class.rc-radio-group-sm]': \"size === 'sm'\",\r\n '[class.rc-radio-group-md]': \"size === 'md'\",\r\n },\r\n template: `<ng-content></ng-content>`,\r\n})\r\nexport class RcRadioGroupComponent implements ControlValueAccessor {\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n /** Currently selected value */\r\n @Input()\r\n get value(): unknown {\r\n return this._value;\r\n }\r\n set value(v: unknown) {\r\n if (this._value !== v) {\r\n this._value = v;\r\n this.valueChange.emit(v);\r\n this.onChange(v);\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n private _value: unknown = null;\r\n\r\n /** Disables every radio button in the group */\r\n @Input() disabled = false;\r\n\r\n /** Size for all buttons in the group */\r\n @Input() size: RcRadioSize = 'md';\r\n\r\n /** Emits the newly selected value */\r\n @Output() valueChange = new EventEmitter<unknown>();\r\n\r\n // ControlValueAccessor\r\n onChange: (value: unknown) => void = () => {};\r\n onTouched: () => void = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n this._value = value;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (value: unknown) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.disabled = disabled;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /** Called by child RcRadioButtonComponent when a button is selected */\r\n select(value: unknown): void {\r\n if (this.disabled) return;\r\n this.value = value;\r\n this.onTouched();\r\n }\r\n}\r\n\r\n/**\r\n * A single radio button, always used inside `<rc-radio-group>`.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-radio-button value=\"option-a\">Option A</rc-radio-button>\r\n * ```\r\n *\r\n * @input value - The value this button represents (compared to the group value).\r\n * @input disabled - Disables this specific button. Default: `false`\r\n */\r\n@Component({\r\n selector: 'rc-radio-button',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'rc-radio-button',\r\n '[class.rc-radio-button-checked]': 'isChecked',\r\n '[class.rc-radio-button-disabled]': 'isDisabled',\r\n '[class.rc-radio-button-sm]': \"group?.size === 'sm'\",\r\n '[class.rc-radio-button-md]': \"group?.size === 'md'\",\r\n '[attr.role]': '\"radio\"',\r\n '[attr.aria-checked]': 'isChecked',\r\n '[attr.aria-disabled]': 'isDisabled',\r\n '[attr.tabindex]': 'isDisabled ? null : \"0\"',\r\n '(click)': 'onClick()',\r\n '(keydown.space)': 'onKeydown($event)',\r\n '(keydown.enter)': 'onKeydown($event)',\r\n },\r\n template: `\r\n <span class=\"rc-radio-button-control\">\r\n <span class=\"rc-radio-button-dot\"></span>\r\n </span>\r\n <span class=\"rc-radio-button-label\"><ng-content></ng-content></span>\r\n `,\r\n})\r\nexport class RcRadioButtonComponent implements OnInit, OnDestroy {\r\n readonly group = inject(RC_RADIO_GROUP, { optional: true });\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n private groupSub?: Subscription;\r\n\r\n /** The value this radio button represents */\r\n @Input() value: unknown;\r\n\r\n /** Disable this specific radio button */\r\n @Input() disabled = false;\r\n\r\n get isChecked(): boolean {\r\n return this.group ? this.group.value === this.value : false;\r\n }\r\n\r\n get isDisabled(): boolean {\r\n return this.disabled || (this.group?.disabled ?? false);\r\n }\r\n\r\n ngOnInit(): void {\r\n // Re-render whenever the group's selected value changes\r\n if (this.group) {\r\n this.groupSub = this.group.valueChange.subscribe(() => {\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.groupSub?.unsubscribe();\r\n }\r\n\r\n onClick(): void {\r\n if (this.isDisabled) return;\r\n this.group?.select(this.value);\r\n }\r\n\r\n onKeydown(event: Event): void {\r\n event.preventDefault();\r\n this.onClick();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n forwardRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nexport type RcToggleSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * A toggle switch for binary on/off state. Supports `[(ngModel)]` and reactive forms.\r\n *\r\n * @example Basic toggle\r\n * ```html\r\n * <rc-toggle [(ngModel)]=\"isEnabled\">Enable notifications</rc-toggle>\r\n * ```\r\n *\r\n * @example Pre-checked, labelled\r\n * ```html\r\n * <rc-toggle [checked]=\"true\" (checkedChange)=\"onChange($event)\">\r\n * Dark mode\r\n * </rc-toggle>\r\n * ```\r\n *\r\n * @example Small, disabled\r\n * ```html\r\n * <rc-toggle size=\"sm\" [disabled]=\"true\" [checked]=\"true\">Auto-save</rc-toggle>\r\n * ```\r\n *\r\n * @input checked - Whether the toggle is on. Default: `false`\r\n * @input disabled - Disables interaction. Default: `false`\r\n * @input size - Toggle size: `'sm'` | `'md'` | `'lg'`. Default: `'md'`\r\n * @input labelPosition - Position of the label text. Default: `'right'`\r\n * @output checkedChange - Emits the new boolean state on user interaction.\r\n */\r\n@Component({\r\n selector: 'rc-toggle',\r\n standalone: true,\r\n imports: [NgIf],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RcToggleComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: {\r\n class: 'rc-toggle',\r\n '[class.rc-toggle-checked]': 'checked',\r\n '[class.rc-toggle-disabled]': 'disabled',\r\n '[class.rc-toggle-sm]': \"size === 'sm'\",\r\n '[class.rc-toggle-md]': \"size === 'md'\",\r\n '[class.rc-toggle-lg]': \"size === 'lg'\",\r\n '[class.rc-toggle-label-left]': \"labelPosition === 'left'\",\r\n '[attr.role]': '\"switch\"',\r\n '[attr.aria-checked]': 'checked',\r\n '[attr.aria-disabled]': 'disabled ? \"true\" : null',\r\n '[attr.tabindex]': 'disabled ? null : \"0\"',\r\n '(click)': 'toggle()',\r\n '(keydown.space)': 'onKeydown($event)',\r\n '(keydown.enter)': 'onKeydown($event)',\r\n },\r\n template: `\r\n <span *ngIf=\"labelPosition === 'left'\" class=\"rc-toggle-label\">\r\n <ng-content></ng-content>\r\n </span>\r\n <span class=\"rc-toggle-track\" [attr.aria-hidden]=\"true\">\r\n <span class=\"rc-toggle-thumb\"></span>\r\n </span>\r\n <span *ngIf=\"labelPosition === 'right'\" class=\"rc-toggle-label\">\r\n <ng-content></ng-content>\r\n </span>\r\n `,\r\n})\r\nexport class RcToggleComponent implements ControlValueAccessor {\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n /** Whether the toggle is in the on state */\r\n @Input() checked = false;\r\n\r\n /** Disable interaction */\r\n @Input() disabled = false;\r\n\r\n /** Toggle size */\r\n @Input() size: RcToggleSize = 'md';\r\n\r\n /** Position of the label slot */\r\n @Input() labelPosition: 'left' | 'right' = 'right';\r\n\r\n /** Emits the new checked state when toggled */\r\n @Output() checkedChange = new EventEmitter<boolean>();\r\n\r\n // ControlValueAccessor\r\n private onChange: (value: boolean) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n toggle(): void {\r\n if (this.disabled) return;\r\n this.checked = !this.checked;\r\n this.checkedChange.emit(this.checked);\r\n this.onChange(this.checked);\r\n this.onTouched();\r\n this.cdr.markForCheck();\r\n }\r\n\r\n onKeydown(event: Event): void {\r\n event.preventDefault();\r\n this.toggle();\r\n }\r\n\r\n writeValue(value: boolean): void {\r\n this.checked = Boolean(value);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (value: boolean) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.disabled = disabled;\r\n this.cdr.markForCheck();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n forwardRef,\r\n inject,\r\n ViewChild,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n/** Validation / visual status for a checkbox. */\r\nexport type RcCheckboxStatus = 'default' | 'success' | 'warning' | 'danger';\r\n\r\n/** Size variant for a checkbox. */\r\nexport type RcCheckboxSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * A styled checkbox supporting checked, unchecked, and indeterminate states.\r\n * Pairs with the `.rc-field` helper classes and fully integrates with\r\n * `[(ngModel)]` and Angular Reactive Forms.\r\n *\r\n * @example Basic\r\n * ```html\r\n * <rc-checkbox [(ngModel)]=\"accepted\">Accept terms</rc-checkbox>\r\n * ```\r\n *\r\n * @example Indeterminate (e.g. \"select all\" row)\r\n * ```html\r\n * <rc-checkbox [checked]=\"someSelected\" [indeterminate]=\"!allSelected\"\r\n * (checkedChange)=\"toggleAll($event)\">\r\n * Select all\r\n * </rc-checkbox>\r\n * ```\r\n *\r\n * @example Status variants\r\n * ```html\r\n * <rc-checkbox status=\"danger\" [(ngModel)]=\"consented\">\r\n * You must accept the terms\r\n * </rc-checkbox>\r\n * ```\r\n *\r\n * @example Sizes\r\n * ```html\r\n * <rc-checkbox size=\"sm\">Small</rc-checkbox>\r\n * <rc-checkbox size=\"md\">Medium</rc-checkbox>\r\n * <rc-checkbox size=\"lg\">Large</rc-checkbox>\r\n * ```\r\n *\r\n * @example Disabled\r\n * ```html\r\n * <rc-checkbox [disabled]=\"true\" [checked]=\"true\">Read-only option</rc-checkbox>\r\n * ```\r\n *\r\n * @example No label (icon-only)\r\n * ```html\r\n * <rc-checkbox [(ngModel)]=\"row.selected\" aria-label=\"Select row\"></rc-checkbox>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-checkbox',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RcCheckboxComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: {\r\n class: 'rc-checkbox',\r\n '[class.rc-checkbox-sm]': \"size === 'sm'\",\r\n '[class.rc-checkbox-md]': \"size === 'md'\",\r\n '[class.rc-checkbox-lg]': \"size === 'lg'\",\r\n '[class.rc-checkbox-checked]': 'checked',\r\n '[class.rc-checkbox-indeterminate]': 'indeterminate && !checked',\r\n '[class.rc-checkbox-disabled]': 'disabled',\r\n '[class.rc-checkbox-success]': \"status === 'success'\",\r\n '[class.rc-checkbox-warning]': \"status === 'warning'\",\r\n '[class.rc-checkbox-danger]': \"status === 'danger'\",\r\n '[class.rc-checkbox-label-left]': \"labelPosition === 'left'\",\r\n },\r\n template: `\r\n @if (labelPosition === 'left') {\r\n <span class=\"rc-checkbox-label\">\r\n <ng-content></ng-content>\r\n </span>\r\n }\r\n <span class=\"rc-checkbox-box\" aria-hidden=\"true\">\r\n @if (checked) {\r\n <!-- Checkmark icon -->\r\n <svg\r\n class=\"rc-checkbox-icon\"\r\n width=\"10\"\r\n height=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M1.5 5L3.75 7.5L8.5 2.5\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.75\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n } @else if (indeterminate) {\r\n <!-- Indeterminate dash icon -->\r\n <svg\r\n class=\"rc-checkbox-icon\"\r\n width=\"10\"\r\n height=\"10\"\r\n viewBox=\"0 0 10 10\"\r\n fill=\"none\"\r\n >\r\n <path\r\n d=\"M2 5H8\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.75\"\r\n stroke-linecap=\"round\"\r\n />\r\n </svg>\r\n }\r\n </span>\r\n <!-- Native input — visually hidden but present in the a11y tree -->\r\n <input\r\n #nativeInput\r\n class=\"rc-checkbox-input\"\r\n type=\"checkbox\"\r\n [checked]=\"checked\"\r\n [indeterminate]=\"indeterminate && !checked\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"ariaLabel || null\"\r\n (change)=\"_onNativeChange($event)\"\r\n (blur)=\"_onTouched()\"\r\n />\r\n @if (labelPosition === 'right') {\r\n <span class=\"rc-checkbox-label\">\r\n <ng-content></ng-content>\r\n </span>\r\n }\r\n `,\r\n})\r\nexport class RcCheckboxComponent implements ControlValueAccessor {\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n\r\n @ViewChild('nativeInput') _nativeInput!: ElementRef<HTMLInputElement>;\r\n\r\n /** Whether the checkbox is checked. */\r\n @Input() checked = false;\r\n\r\n /**\r\n * Puts the checkbox into an indeterminate (partially-selected) state.\r\n * Ignored when `checked` is `true`.\r\n */\r\n @Input() indeterminate = false;\r\n\r\n /** Disables interaction. */\r\n @Input() disabled = false;\r\n\r\n /** Validation / visual status applied to the box border / fill. */\r\n @Input() status: RcCheckboxStatus = 'default';\r\n\r\n /** Controls the bounding box and font size. */\r\n @Input() size: RcCheckboxSize = 'md';\r\n\r\n /** Position of the label slot relative to the checkbox box. */\r\n @Input() labelPosition: 'left' | 'right' = 'right';\r\n\r\n /**\r\n * Forwarded to the hidden native `<input>` as `aria-label`.\r\n * Use when there is no visible label text (e.g. a \"select row\" checkbox).\r\n */\r\n @Input() ariaLabel = '';\r\n\r\n /** Emits the new `checked` boolean when the user toggles the checkbox. */\r\n @Output() readonly checkedChange = new EventEmitter<boolean>();\r\n\r\n // ── ControlValueAccessor ───────────────────────────────────────────────────\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n _onTouched = (): void => {};\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onChange: (v: boolean) => void = () => {};\r\n\r\n writeValue(value: boolean): void {\r\n this.checked = Boolean(value);\r\n this._cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (v: boolean) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this._cdr.markForCheck();\r\n }\r\n\r\n // ── Interaction ────────────────────────────────────────────────────────────\r\n\r\n /** @internal Called when the hidden native input changes. */\r\n _onNativeChange(event: Event): void {\r\n if (this.disabled) return;\r\n const input = event.target as HTMLInputElement;\r\n this.checked = input.checked;\r\n this.indeterminate = false;\r\n this._onChange(this.checked);\r\n this.checkedChange.emit(this.checked);\r\n this._cdr.markForCheck();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n inject,\r\n forwardRef,\r\n InjectionToken,\r\n ContentChildren,\r\n QueryList,\r\n ElementRef,\r\n ViewChild,\r\n TemplateRef,\r\n ViewContainerRef,\r\n AfterContentInit,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { RcCheckboxComponent } from '../checkbox/rc-checkbox';\r\n\r\n/** Validation / visual status for a select field. */\r\nexport type RcSelectStatus = 'default' | 'success' | 'warning' | 'danger';\r\n\r\n/** Size variant for a select trigger. */\r\nexport type RcSelectSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * Internal injection token used by `RcOptionComponent` to communicate with\r\n * its parent `RcSelectComponent`.\r\n * @internal\r\n */\r\nexport const RC_SELECT = new InjectionToken<RcSelectComponent>('RC_SELECT');\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// RcOptionComponent\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A single selectable option for `<rc-select>`.\r\n *\r\n * Declare it as a child of `<rc-select>`. The text content is used as the\r\n * display label unless an explicit `label` input is provided.\r\n *\r\n * @example Basic option\r\n * ```html\r\n * <rc-option value=\"us\">United States</rc-option>\r\n * ```\r\n *\r\n * @example Disabled option\r\n * ```html\r\n * <rc-option value=\"legacy\" [disabled]=\"true\">Legacy (unavailable)</rc-option>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-option',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n // Renders nothing visible — content is consumed by the parent select panel.\r\n template: `<ng-content></ng-content>`,\r\n host: { style: 'display:none' },\r\n})\r\nexport class RcOptionComponent {\r\n /** The value this option represents. */\r\n @Input() value: unknown = null;\r\n\r\n /** Explicit display label. When omitted, the element's text content is used. */\r\n @Input() label = '';\r\n\r\n /** Disables this individual option so it cannot be selected. */\r\n @Input() disabled = false;\r\n\r\n private readonly _el = inject(ElementRef<HTMLElement>);\r\n\r\n /** @internal Resolved display label, used by the parent panel template. */\r\n get _displayLabel(): string {\r\n return this.label || this._el.nativeElement.textContent?.trim() || '';\r\n }\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// RcSelectComponent\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A styled dropdown select that supports both single and multi-select modes.\r\n * Built on Angular CDK Overlay for reliable positioning. Fully integrates with\r\n * `[(ngModel)]` and Angular Reactive Forms via `ControlValueAccessor`.\r\n *\r\n * Declare `<rc-option>` elements as direct children to populate the dropdown.\r\n *\r\n * @example Single select with ngModel\r\n * ```html\r\n * <rc-select placeholder=\"Choose a role\" [(ngModel)]=\"role\">\r\n * <rc-option value=\"admin\">Admin</rc-option>\r\n * <rc-option value=\"editor\">Editor</rc-option>\r\n * <rc-option value=\"viewer\">Viewer</rc-option>\r\n * </rc-select>\r\n * ```\r\n *\r\n * @example Multi-select\r\n * ```html\r\n * <rc-select [multiple]=\"true\" placeholder=\"Select frameworks\" [(ngModel)]=\"frameworks\">\r\n * <rc-option value=\"angular\">Angular</rc-option>\r\n * <rc-option value=\"react\">React</rc-option>\r\n * <rc-option value=\"vue\">Vue</rc-option>\r\n * </rc-select>\r\n * ```\r\n *\r\n * @example Validation status\r\n * ```html\r\n * <rc-select status=\"danger\" [(ngModel)]=\"country\">\r\n * <rc-option value=\"us\">United States</rc-option>\r\n * <rc-option value=\"gb\">United Kingdom</rc-option>\r\n * </rc-select>\r\n * ```\r\n *\r\n * @example Disabled\r\n * ```html\r\n * <rc-select [disabled]=\"true\" [ngModel]=\"'admin'\">\r\n * <rc-option value=\"admin\">Admin</rc-option>\r\n * </rc-select>\r\n * ```\r\n *\r\n * @example Inside rc-field with label and hint\r\n * ```html\r\n * <div class=\"rc-field\">\r\n * <label class=\"rc-field-label\">Country</label>\r\n * <rc-select placeholder=\"Pick a country\" [(ngModel)]=\"country\" status=\"success\">\r\n * <rc-option value=\"us\">United States</rc-option>\r\n * <rc-option value=\"ca\">Canada</rc-option>\r\n * </rc-select>\r\n * <span class=\"rc-field-success-hint\">Great choice!</span>\r\n * </div>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-select',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RcSelectComponent),\r\n multi: true,\r\n },\r\n ],\r\n imports: [RcCheckboxComponent],\r\n host: {\r\n class: 'rc-select',\r\n '[class.rc-select-sm]': \"size === 'sm'\",\r\n '[class.rc-select-md]': \"size === 'md'\",\r\n '[class.rc-select-lg]': \"size === 'lg'\",\r\n '[class.rc-select-open]': '_open',\r\n '[class.rc-select-disabled]': 'disabled',\r\n '[class.rc-select-success]': \"status === 'success'\",\r\n '[class.rc-select-warning]': \"status === 'warning'\",\r\n '[class.rc-select-danger]': \"status === 'danger'\",\r\n '[class.rc-select-focused]': '_focused',\r\n '[attr.tabindex]': 'disabled ? -1 : 0',\r\n '[attr.aria-haspopup]': '\"listbox\"',\r\n '[attr.aria-expanded]': '_open',\r\n '[attr.aria-disabled]': 'disabled',\r\n role: 'combobox',\r\n '(click)': '_togglePanel()',\r\n '(keydown)': '_onKeydown($event)',\r\n '(focus)': '_onFocus()',\r\n '(blur)': '_onBlur()',\r\n },\r\n template: `\r\n <span class=\"rc-select-value\" [class.rc-select-placeholder]=\"!_hasValue\">\r\n {{ _displayValue || placeholder }}\r\n </span>\r\n <span\r\n class=\"rc-select-arrow\"\r\n [class.rc-select-arrow-open]=\"_open\"\r\n aria-hidden=\"true\"\r\n >\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path\r\n d=\"M2 4L6 8L10 4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n\r\n <!-- Panel template — rendered into a CDK overlay portal -->\r\n <ng-template #panelTpl>\r\n <div\r\n class=\"rc-select-panel\"\r\n role=\"listbox\"\r\n [attr.aria-multiselectable]=\"multiple || null\"\r\n >\r\n @for (opt of _options; track opt.value; let i = $index) {\r\n <div\r\n class=\"rc-select-option\"\r\n role=\"option\"\r\n [class.rc-select-option-selected]=\"_isSelected(opt.value)\"\r\n [class.rc-select-option-disabled]=\"opt.disabled\"\r\n [class.rc-select-option-active]=\"i === _activeIndex\"\r\n [attr.aria-selected]=\"_isSelected(opt.value)\"\r\n [attr.aria-disabled]=\"opt.disabled || null\"\r\n [attr.tabindex]=\"opt.disabled ? -1 : 0\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"!opt.disabled && _onOptionClick(opt.value, $event)\"\r\n (keydown.enter)=\"!opt.disabled && _onOptionClick(opt.value, $event)\"\r\n (keydown.space)=\"\r\n $event.preventDefault();\r\n !opt.disabled && _onOptionClick(opt.value, $event)\r\n \"\r\n >\r\n @if (multiple) {\r\n <rc-checkbox\r\n [checked]=\"_isSelected(opt.value)\"\r\n [disabled]=\"opt.disabled\"\r\n size=\"sm\"\r\n aria-hidden=\"true\"\r\n ></rc-checkbox>\r\n }\r\n <span class=\"rc-select-option-label\">{{ opt._displayLabel }}</span>\r\n </div>\r\n }\r\n @if (_options.length === 0) {\r\n <div class=\"rc-select-no-options\">No options available</div>\r\n }\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Hidden slot so Angular instantiates rc-option children -->\r\n <ng-content></ng-content>\r\n `,\r\n})\r\nexport class RcSelectComponent\r\n implements ControlValueAccessor, AfterContentInit, OnDestroy\r\n{\r\n /** Placeholder text shown when no value is selected. */\r\n @Input() placeholder = 'Select…';\r\n\r\n /** When `true`, multiple values can be selected (value is an array). */\r\n @Input() multiple = false;\r\n\r\n /** Disables the entire select control. */\r\n @Input() disabled = false;\r\n\r\n /** Validation / visual status of the field. */\r\n @Input() status: RcSelectStatus = 'default';\r\n\r\n /** Controls the height and font-size of the trigger. */\r\n @Input() size: RcSelectSize = 'md';\r\n\r\n /** Emits the selected value (or array of values) whenever the selection changes. */\r\n @Output() readonly valueChange = new EventEmitter<unknown>();\r\n\r\n @ViewChild('panelTpl', { static: true })\r\n private readonly _panelTpl!: TemplateRef<unknown>;\r\n\r\n @ContentChildren(RcOptionComponent)\r\n private readonly _optionList!: QueryList<RcOptionComponent>;\r\n\r\n private readonly _overlay = inject(Overlay);\r\n private readonly _vcr = inject(ViewContainerRef);\r\n private readonly _el = inject(ElementRef<HTMLElement>);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n\r\n private _overlayRef: OverlayRef | null = null;\r\n private _portal: TemplatePortal | null = null;\r\n\r\n /** @internal */\r\n _open = false;\r\n /** @internal */\r\n _focused = false;\r\n /** @internal Index of the keyboard-focused option in the open panel. */\r\n _activeIndex = -1;\r\n\r\n private _value: unknown = null;\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onChange: (v: unknown) => void = (_v: unknown) => {};\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onTouched: () => void = () => {};\r\n\r\n // ── Computed helpers ───────────────────────────────────────────────────────\r\n\r\n /** @internal Flat array of current option instances. */\r\n get _options(): RcOptionComponent[] {\r\n return this._optionList?.toArray() ?? [];\r\n }\r\n\r\n /** @internal Whether a non-empty value is currently set. */\r\n get _hasValue(): boolean {\r\n if (this.multiple) {\r\n return (\r\n Array.isArray(this._value) && (this._value as unknown[]).length > 0\r\n );\r\n }\r\n return (\r\n this._value !== null && this._value !== undefined && this._value !== ''\r\n );\r\n }\r\n\r\n /** @internal Text to display in the trigger. */\r\n get _displayValue(): string {\r\n if (!this._hasValue) return '';\r\n if (this.multiple) {\r\n return this._options\r\n .filter((o) => (this._value as unknown[]).includes(o.value))\r\n .map((o) => o._displayLabel)\r\n .join(', ');\r\n }\r\n const match = this._options.find((o) => o.value === this._value);\r\n return match ? match._displayLabel : String(this._value);\r\n }\r\n\r\n /** @internal Whether `value` is in the current selection. */\r\n _isSelected(value: unknown): boolean {\r\n if (this.multiple) {\r\n return (\r\n Array.isArray(this._value) && (this._value as unknown[]).includes(value)\r\n );\r\n }\r\n return this._value === value;\r\n }\r\n\r\n // ── Lifecycle ──────────────────────────────────────────────────────────────\r\n\r\n ngAfterContentInit(): void {\r\n this._optionList.changes.subscribe(() => this._cdr.markForCheck());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._closePanel();\r\n this._overlayRef?.dispose();\r\n }\r\n\r\n // ── Panel ──────────────────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n _togglePanel(): void {\r\n if (this.disabled) return;\r\n if (this._open) {\r\n this._closePanel();\r\n } else {\r\n this._openPanel();\r\n }\r\n }\r\n\r\n /** @internal */\r\n _openPanel(): void {\r\n if (this._open || this.disabled) return;\r\n\r\n const positionStrategy = this._overlay\r\n .position()\r\n .flexibleConnectedTo(this._el)\r\n .withPositions([\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: 4,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n offsetY: -4,\r\n },\r\n ])\r\n .withFlexibleDimensions(false)\r\n .withPush(false);\r\n\r\n this._overlayRef = this._overlay.create({\r\n positionStrategy,\r\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\r\n width: this._el.nativeElement.offsetWidth,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n });\r\n\r\n this._portal = new TemplatePortal(this._panelTpl, this._vcr);\r\n this._overlayRef.attach(this._portal);\r\n\r\n this._overlayRef.backdropClick().subscribe(() => {\r\n this._onTouched();\r\n this._closePanel();\r\n });\r\n\r\n this._overlayRef.keydownEvents().subscribe((e) => {\r\n if (e.key === 'Escape') {\r\n this._closePanel();\r\n this._el.nativeElement.focus();\r\n }\r\n });\r\n\r\n // Pre-focus the first selected option (or first enabled)\r\n const opts = this._options.filter((o) => !o.disabled);\r\n const selectedIdx = opts.findIndex((o) => this._isSelected(o.value));\r\n this._activeIndex = selectedIdx >= 0 ? selectedIdx : 0;\r\n\r\n this._open = true;\r\n this._cdr.markForCheck();\r\n }\r\n\r\n /** @internal */\r\n _closePanel(): void {\r\n if (!this._open) return;\r\n this._overlayRef?.detach();\r\n this._open = false;\r\n this._activeIndex = -1;\r\n this._cdr.markForCheck();\r\n }\r\n\r\n // ── Option interaction ─────────────────────────────────────────────────────\r\n\r\n /** @internal Called when the user clicks an option in the panel. */\r\n _onOptionClick(value: unknown, event: Event): void {\r\n event.stopPropagation();\r\n this._selectValue(value);\r\n if (!this.multiple) {\r\n this._closePanel();\r\n this._el.nativeElement.focus();\r\n }\r\n }\r\n\r\n /** @internal Selects or toggles a value. */\r\n _selectValue(value: unknown): void {\r\n if (this.multiple) {\r\n const arr = Array.isArray(this._value)\r\n ? [...(this._value as unknown[])]\r\n : [];\r\n const idx = arr.indexOf(value);\r\n if (idx >= 0) {\r\n arr.splice(idx, 1);\r\n } else {\r\n arr.push(value);\r\n }\r\n this._value = arr;\r\n } else {\r\n this._value = value;\r\n }\r\n this._onChange(this._value);\r\n this.valueChange.emit(this._value);\r\n this._cdr.markForCheck();\r\n }\r\n\r\n // ── Keyboard navigation ────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n _onKeydown(event: KeyboardEvent): void {\r\n if (this.disabled) return;\r\n const enabled = this._options.filter((o) => !o.disabled);\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (!this._open) {\r\n this._openPanel();\r\n } else if (this._activeIndex >= 0 && enabled[this._activeIndex]) {\r\n this._selectValue(enabled[this._activeIndex].value);\r\n if (!this.multiple) {\r\n this._closePanel();\r\n }\r\n }\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (!this._open) {\r\n this._openPanel();\r\n } else {\r\n this._activeIndex = Math.min(\r\n this._activeIndex + 1,\r\n enabled.length - 1,\r\n );\r\n this._cdr.markForCheck();\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (this._open) {\r\n this._activeIndex = Math.max(this._activeIndex - 1, 0);\r\n this._cdr.markForCheck();\r\n }\r\n break;\r\n\r\n case 'Tab':\r\n if (this._open) this._closePanel();\r\n break;\r\n\r\n case 'Escape':\r\n if (this._open) {\r\n event.stopPropagation();\r\n this._closePanel();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // ── Focus tracking ─────────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n _onFocus(): void {\r\n this._focused = true;\r\n }\r\n\r\n /** @internal */\r\n _onBlur(): void {\r\n this._focused = false;\r\n if (!this._open) {\r\n this._onTouched();\r\n }\r\n }\r\n\r\n // ── ControlValueAccessor ───────────────────────────────────────────────────\r\n\r\n writeValue(value: unknown): void {\r\n this._value = value ?? (this.multiple ? [] : null);\r\n this._cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (v: unknown) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this._cdr.markForCheck();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ContentChildren,\r\n QueryList,\r\n InjectionToken,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\n\r\n/** Injection token that provides the parent `RcAccordionComponent` to items. */\r\nexport const RC_ACCORDION = new InjectionToken<RcAccordionComponent>(\r\n 'RC_ACCORDION',\r\n);\r\n\r\n/** Visual style for the accordion. */\r\nexport type RcAccordionVariant = 'default' | 'filled';\r\n\r\n/**\r\n * A single expandable panel inside an `<rc-accordion>`.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-accordion>\r\n * <rc-accordion-item title=\"What is Resolve?\">\r\n * Resolve is an Angular component library.\r\n * </rc-accordion-item>\r\n * </rc-accordion>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-accordion-item',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'rc-accordion-item',\r\n '[class.rc-accordion-item-expanded]': '_expanded()',\r\n '[class.rc-accordion-item-disabled]': 'disabled',\r\n },\r\n template: `\r\n <button\r\n class=\"rc-accordion-header\"\r\n type=\"button\"\r\n [disabled]=\"disabled || null\"\r\n [attr.aria-expanded]=\"_expanded()\"\r\n [attr.aria-disabled]=\"disabled ? 'true' : null\"\r\n (click)=\"_toggle()\"\r\n >\r\n <span class=\"rc-accordion-title\">{{ title }}</span>\r\n <span class=\"rc-accordion-icon\" aria-hidden=\"true\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M4 6L8 10L12 6\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n </button>\r\n <div class=\"rc-accordion-body\" role=\"region\">\r\n <div class=\"rc-accordion-content\">\r\n <div class=\"rc-accordion-inner\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class RcAccordionItemComponent {\r\n private readonly _accordion = inject(RC_ACCORDION, { optional: true });\r\n\r\n /** Header title of this panel. */\r\n @Input({ required: true }) title = '';\r\n\r\n /** Whether this panel starts expanded. */\r\n @Input()\r\n set expanded(v: boolean) {\r\n this._expanded.set(v);\r\n }\r\n\r\n /** Disables expanding / collapsing this panel. */\r\n @Input() disabled = false;\r\n\r\n /** Emits the new expanded state when the user opens or closes the panel. */\r\n @Output() readonly expandedChange = new EventEmitter<boolean>();\r\n\r\n /** @internal */\r\n readonly _expanded = signal(false);\r\n\r\n /** @internal */\r\n _toggle(): void {\r\n if (this.disabled) return;\r\n if (!this._expanded()) {\r\n this._accordion?._open(this);\r\n } else {\r\n this._setExpanded(false);\r\n }\r\n }\r\n\r\n /** @internal */\r\n _setExpanded(value: boolean): void {\r\n this._expanded.set(value);\r\n this.expandedChange.emit(value);\r\n }\r\n}\r\n\r\n/**\r\n * Container that groups `<rc-accordion-item>` panels.\r\n * By default only one item is open at a time; set `multiple` to allow multiple.\r\n *\r\n * @example Basic\r\n * ```html\r\n * <rc-accordion>\r\n * <rc-accordion-item title=\"Section 1\">Content 1</rc-accordion-item>\r\n * <rc-accordion-item title=\"Section 2\">Content 2</rc-accordion-item>\r\n * </rc-accordion>\r\n * ```\r\n *\r\n * @example Allow multiple panels open\r\n * ```html\r\n * <rc-accordion [multiple]=\"true\">...</rc-accordion>\r\n * ```\r\n *\r\n * @example Filled variant\r\n * ```html\r\n * <rc-accordion variant=\"filled\">...</rc-accordion>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-accordion',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: RC_ACCORDION, useExisting: RcAccordionComponent }],\r\n host: {\r\n class: 'rc-accordion',\r\n '[class.rc-accordion-filled]': \"variant === 'filled'\",\r\n },\r\n template: `<ng-content></ng-content>`,\r\n})\r\nexport class RcAccordionComponent {\r\n /** Allow multiple panels to be open simultaneously. Default: `false`. */\r\n @Input() multiple = false;\r\n\r\n /** Visual style variant. Default: `'default'`. */\r\n @Input() variant: RcAccordionVariant = 'default';\r\n\r\n @ContentChildren(RcAccordionItemComponent, { descendants: true })\r\n private _items!: QueryList<RcAccordionItemComponent>;\r\n\r\n /** @internal Called by a child item when it wants to open. */\r\n _open(item: RcAccordionItemComponent): void {\r\n if (!this.multiple) {\r\n this._items?.forEach((i) => {\r\n if (i !== item) {\r\n i._setExpanded(false);\r\n }\r\n });\r\n }\r\n item._setExpanded(true);\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n forwardRef,\r\n inject,\r\n computed,\r\n signal,\r\n OnChanges,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n/** Size variant for the slider track and thumb. */\r\nexport type RcSliderSize = 'sm' | 'md' | 'lg';\r\n\r\n/** Validation / visual status for the slider fill and thumb. */\r\nexport type RcSliderStatus = 'default' | 'success' | 'warning' | 'danger';\r\n\r\n/**\r\n * A range slider for selecting a numeric value between `min` and `max`.\r\n * Integrates with `[(ngModel)]` and Angular Reactive Forms via ControlValueAccessor.\r\n *\r\n * @example Basic\r\n * ```html\r\n * <rc-slider [(ngModel)]=\"volume\" [min]=\"0\" [max]=\"100\"></rc-slider>\r\n * ```\r\n *\r\n * @example With value label and unit\r\n * ```html\r\n * <rc-slider [(ngModel)]=\"opacity\" [min]=\"0\" [max]=\"1\" [step]=\"0.01\"\r\n * [showValue]=\"true\" unit=\"\"></rc-slider>\r\n * ```\r\n *\r\n * @example With tick marks\r\n * ```html\r\n * <rc-slider [(ngModel)]=\"rating\" [min]=\"1\" [max]=\"5\" [step]=\"1\"\r\n * [showTicks]=\"true\" [showValue]=\"true\"></rc-slider>\r\n * ```\r\n *\r\n * @example Disabled\r\n * ```html\r\n * <rc-slider [value]=\"50\" [disabled]=\"true\"></rc-slider>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-slider',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RcSliderComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: {\r\n class: 'rc-slider',\r\n '[class.rc-slider-sm]': \"size === 'sm'\",\r\n '[class.rc-slider-md]': \"size === 'md'\",\r\n '[class.rc-slider-lg]': \"size === 'lg'\",\r\n '[class.rc-slider-disabled]': 'disabled',\r\n '[class.rc-slider-success]': \"status === 'success'\",\r\n '[class.rc-slider-warning]': \"status === 'warning'\",\r\n '[class.rc-slider-danger]': \"status === 'danger'\",\r\n },\r\n template: `\r\n @if (showValue) {\r\n <div class=\"rc-slider-value-row\">\r\n <span class=\"rc-slider-min-label\">{{ min }}{{ unit }}</span>\r\n <span class=\"rc-slider-current-value\">{{ _value() }}{{ unit }}</span>\r\n <span class=\"rc-slider-max-label\">{{ max }}{{ unit }}</span>\r\n </div>\r\n }\r\n <div class=\"rc-slider-track-wrapper\">\r\n <!-- Visual track -->\r\n <div class=\"rc-slider-track\" aria-hidden=\"true\">\r\n <div class=\"rc-slider-fill\" [style.width]=\"_fillPercent() + '%'\"></div>\r\n </div>\r\n\r\n @if (showTicks) {\r\n <div class=\"rc-slider-ticks\" aria-hidden=\"true\">\r\n @for (tick of _ticks(); track tick.value) {\r\n <span\r\n class=\"rc-slider-tick\"\r\n [class.rc-slider-tick-active]=\"tick.value <= _value()\"\r\n [style.left]=\"tick.percent + '%'\"\r\n ></span>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Native input — positions the thumb and handles a11y -->\r\n <input\r\n class=\"rc-slider-input\"\r\n type=\"range\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n [step]=\"step\"\r\n [value]=\"_value()\"\r\n [disabled]=\"disabled || null\"\r\n [attr.aria-valuemin]=\"min\"\r\n [attr.aria-valuemax]=\"max\"\r\n [attr.aria-valuenow]=\"_value()\"\r\n [attr.aria-valuetext]=\"_value() + unit\"\r\n (input)=\"_onInput($event)\"\r\n (blur)=\"_onTouched()\"\r\n />\r\n </div>\r\n `,\r\n})\r\nexport class RcSliderComponent implements ControlValueAccessor, OnChanges {\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n\r\n /** Current numeric value. */\r\n @Input() value = 0;\r\n\r\n /** Minimum value. Default: `0`. */\r\n @Input() min = 0;\r\n\r\n /** Maximum value. Default: `100`. */\r\n @Input() max = 100;\r\n\r\n /** Step increment. Default: `1`. */\r\n @Input() step = 1;\r\n\r\n /** Disables the slider. Default: `false`. */\r\n @Input() disabled = false;\r\n\r\n /** Size of the track and thumb. Default: `'md'`. */\r\n @Input() size: RcSliderSize = 'md';\r\n\r\n /** Show the current value and min/max labels. Default: `false`. */\r\n @Input() showValue = false;\r\n\r\n /** String appended to the value label (e.g. `'%'`, `' px'`). Default: `''`. */\r\n @Input() unit = '';\r\n\r\n /** Show tick marks at each `step` interval (for small ranges). Default: `false`. */\r\n @Input() showTicks = false;\r\n\r\n /** Validation / visual status applied to the fill and thumb. Default: `'default'`. */\r\n @Input() status: RcSliderStatus = 'default';\r\n\r\n /** Emits the new value when the user drags the thumb. */\r\n @Output() readonly valueChange = new EventEmitter<number>();\r\n\r\n // ── Internal state ─────────────────────────────────────────────────────────\r\n\r\n readonly _value = signal(0);\r\n\r\n readonly _fillPercent = computed(() => {\r\n const range = this.max - this.min;\r\n if (range === 0) return 0;\r\n return Math.max(\r\n 0,\r\n Math.min(100, ((this._value() - this.min) / range) * 100),\r\n );\r\n });\r\n\r\n readonly _ticks = computed(() => {\r\n const ticks: Array<{ value: number; percent: number }> = [];\r\n const range = this.max - this.min;\r\n if (range <= 0 || this.step <= 0) return ticks;\r\n for (\r\n let v = this.min;\r\n v <= this.max;\r\n v = Math.round((v + this.step) * 1e9) / 1e9\r\n ) {\r\n ticks.push({ value: v, percent: ((v - this.min) / range) * 100 });\r\n }\r\n return ticks;\r\n });\r\n\r\n ngOnChanges(): void {\r\n this._value.set(this._clamp(this.value));\r\n }\r\n\r\n // ── ControlValueAccessor ───────────────────────────────────────────────────\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n _onTouched = (): void => {};\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onChange: (v: number) => void = () => {};\r\n\r\n writeValue(value: number): void {\r\n this._value.set(this._clamp(Number(value) || 0));\r\n this._cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (v: number) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this._cdr.markForCheck();\r\n }\r\n\r\n // ── Interaction ────────────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n _onInput(event: Event): void {\r\n if (this.disabled) return;\r\n const raw = parseFloat((event.target as HTMLInputElement).value);\r\n const next = this._clamp(raw);\r\n this._value.set(next);\r\n this._onChange(next);\r\n this.valueChange.emit(next);\r\n }\r\n\r\n private _clamp(v: number): number {\r\n return Math.min(this.max, Math.max(this.min, v));\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n forwardRef,\r\n inject,\r\n ElementRef,\r\n ViewChild,\r\n TemplateRef,\r\n ViewContainerRef,\r\n computed,\r\n signal,\r\n OnChanges,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { RcInputDirective } from '../input/rc-input';\r\nimport type { RcInputStatus, RcInputSize } from '../input/rc-input';\r\n\r\n// ── Types ──────────────────────────────────────────────────────────────────────\r\n\r\n/** Validation / visual status — mirrors `RcInputStatus`. */\r\nexport type RcAutocompleteStatus = RcInputStatus;\r\n\r\n/** Size variant — mirrors `RcInputSize`. */\r\nexport type RcAutocompleteSize = RcInputSize;\r\n\r\n/**\r\n * A single suggestion in the autocomplete dropdown.\r\n *\r\n * Pass `value` / `label` objects **or** a plain `string[]` to the `options`\r\n * input — strings are auto-converted so `value === label`.\r\n */\r\nexport interface RcAutocompleteOption {\r\n /** The opaque value emitted to the model when this option is selected. */\r\n value: unknown;\r\n /** Display label rendered in the dropdown and filled into the input. */\r\n label: string;\r\n /** When `true` this option cannot be selected. */\r\n disabled?: boolean;\r\n}\r\n\r\n// ── Component ──────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A text input that shows a filtered suggestion dropdown as the user types.\r\n * Combines the `rcInput` styling with a CDK Overlay panel that is visually\r\n * consistent with `<rc-select>`.\r\n *\r\n * Pass options via the `options` input. Built-in filtering can be replaced by\r\n * setting `filterFn`.\r\n *\r\n * Implements `ControlValueAccessor` — works with `[(ngModel)]` and Reactive\r\n * Forms. The bound value is the selected option's `value` (or the raw typed\r\n * string when no matching option exists).\r\n *\r\n * @example Basic\r\n * ```html\r\n * <rc-autocomplete\r\n * placeholder=\"Search countries…\"\r\n * [options]=\"countries\"\r\n * [(ngModel)]=\"selectedCountry\"\r\n * ></rc-autocomplete>\r\n * ```\r\n *\r\n * @example String array\r\n * ```html\r\n * <rc-autocomplete [options]=\"['Angular', 'React', 'Vue']\"\r\n * [(ngModel)]=\"framework\"></rc-autocomplete>\r\n * ```\r\n *\r\n * @example Validation status\r\n * ```html\r\n * <rc-autocomplete status=\"danger\" [options]=\"cities\"\r\n * [(ngModel)]=\"city\"></rc-autocomplete>\r\n * ```\r\n *\r\n * @example Disabled\r\n * ```html\r\n * <rc-autocomplete [disabled]=\"true\" [options]=\"items\" [(ngModel)]=\"val\"></rc-autocomplete>\r\n * ```\r\n *\r\n * @example Custom filter\r\n * ```html\r\n * <rc-autocomplete [options]=\"opts\" [filterFn]=\"myFilter\" [(ngModel)]=\"val\"></rc-autocomplete>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-autocomplete',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [RcInputDirective],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RcAutocompleteComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: {\r\n class: 'rc-autocomplete',\r\n '[class.rc-autocomplete-open]': '_open',\r\n '[class.rc-autocomplete-disabled]': 'disabled',\r\n '[class.rc-autocomplete-has-value]': '!!_inputText()',\r\n '[class.rc-autocomplete-sm]': \"size === 'sm'\",\r\n '[class.rc-autocomplete-md]': \"size === 'md'\",\r\n '[class.rc-autocomplete-lg]': \"size === 'lg'\",\r\n },\r\n template: `\r\n <!-- The styled native input — uses rcInput for full visual consistency -->\r\n <input\r\n #inputEl\r\n rcInput\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n spellcheck=\"false\"\r\n [status]=\"status\"\r\n [size]=\"size\"\r\n [placeholder]=\"placeholder\"\r\n [disabled]=\"disabled || null\"\r\n (input)=\"_onInput($event)\"\r\n (focus)=\"_onFocus()\"\r\n (blur)=\"_onBlur()\"\r\n (keydown)=\"_onKeydown($event)\"\r\n />\r\n\r\n <!-- Clear button — visible when there is text and the control is enabled -->\r\n @if (_inputText() && !disabled) {\r\n <button\r\n class=\"rc-autocomplete-clear\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [attr.aria-label]=\"clearAriaLabel\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"_clear()\"\r\n >\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path\r\n d=\"M1.5 1.5L8.5 8.5M8.5 1.5L1.5 8.5\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n }\r\n\r\n <!-- Suggestion panel — rendered into a CDK overlay portal -->\r\n <ng-template #panelTpl>\r\n <div\r\n class=\"rc-select-panel rc-autocomplete-panel\"\r\n role=\"listbox\"\r\n [attr.aria-label]=\"placeholder\"\r\n >\r\n @for (opt of _filtered(); track opt.value; let i = $index) {\r\n <div\r\n class=\"rc-select-option\"\r\n role=\"option\"\r\n [class.rc-select-option-active]=\"i === _activeIndex\"\r\n [class.rc-select-option-disabled]=\"opt.disabled\"\r\n [class.rc-select-option-selected]=\"_modelValue() === opt.value\"\r\n [attr.aria-selected]=\"_modelValue() === opt.value\"\r\n [attr.aria-disabled]=\"opt.disabled || null\"\r\n [attr.tabindex]=\"opt.disabled ? -1 : 0\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"!opt.disabled && _selectOption(opt)\"\r\n (keydown.enter)=\"!opt.disabled && _selectOption(opt)\"\r\n (keydown.space)=\"\r\n $event.preventDefault(); !opt.disabled && _selectOption(opt)\r\n \"\r\n >\r\n {{ opt.label }}\r\n </div>\r\n }\r\n @if (_filtered().length === 0) {\r\n <div class=\"rc-select-no-options\">{{ noResultsText }}</div>\r\n }\r\n </div>\r\n </ng-template>\r\n `,\r\n})\r\nexport class RcAutocompleteComponent\r\n implements ControlValueAccessor, OnChanges, OnDestroy\r\n{\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n private readonly _overlay = inject(Overlay);\r\n private readonly _vcr = inject(ViewContainerRef);\r\n private readonly _host = inject(ElementRef<HTMLElement>);\r\n\r\n @ViewChild('inputEl') private _inputEl!: ElementRef<HTMLInputElement>;\r\n @ViewChild('panelTpl', { static: true })\r\n private readonly _panelTpl!: TemplateRef<unknown>;\r\n\r\n // ── Inputs ─────────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Array of options shown in the suggestion dropdown.\r\n * Accepts plain `string[]` (auto-converted) or `RcAutocompleteOption[]`.\r\n */\r\n @Input()\r\n set options(v: string[] | RcAutocompleteOption[]) {\r\n this._allOptions.set(this._normalise(v));\r\n }\r\n\r\n /** Placeholder text shown when the input is empty. */\r\n @Input() placeholder = 'Type to search…';\r\n\r\n /** Text shown in the dropdown when no options match the query. */\r\n @Input() noResultsText = 'No results';\r\n\r\n /** ARIA label for the clear (×) button. */\r\n @Input() clearAriaLabel = 'Clear';\r\n\r\n /** Disables the control. */\r\n @Input() disabled = false;\r\n\r\n /** Validation / visual status applied to the input border and shadow. */\r\n @Input() status: RcAutocompleteStatus = 'default';\r\n\r\n /** Controls the height and font-size of the input. */\r\n @Input() size: RcAutocompleteSize = 'md';\r\n\r\n /**\r\n * Custom filter predicate. Receives the current query and an option; return\r\n * `true` to include the option in the dropdown.\r\n *\r\n * Defaults to a case-insensitive `includes` match on `option.label`.\r\n */\r\n @Input() filterFn: (query: string, option: RcAutocompleteOption) => boolean =\r\n (q, o) => o.label.toLowerCase().includes(q.toLowerCase());\r\n\r\n // ── Outputs ────────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Emits the selected `RcAutocompleteOption` when the user picks a suggestion.\r\n * Note: the `[(ngModel)]` / formControl value is the option's `value` field.\r\n */\r\n @Output() readonly selectionChange = new EventEmitter<RcAutocompleteOption>();\r\n\r\n // ── Internal state ─────────────────────────────────────────────────────────\r\n\r\n /** @internal Text currently shown in the native input. */\r\n readonly _inputText = signal('');\r\n\r\n /** @internal The opaque model value (option.value). */\r\n readonly _modelValue = signal<unknown>(null);\r\n\r\n /** @internal All normalised options. */\r\n readonly _allOptions = signal<RcAutocompleteOption[]>([]);\r\n\r\n /** @internal Filtered options based on current input text. */\r\n readonly _filtered = computed(() => {\r\n const q = this._inputText();\r\n if (!q) return this._allOptions();\r\n return this._allOptions().filter((o) => this.filterFn(q, o));\r\n });\r\n\r\n /** @internal Whether the panel is currently open. */\r\n _open = false;\r\n\r\n /** @internal Keyboard-focused option index in the open panel. */\r\n _activeIndex = -1;\r\n\r\n private _overlayRef: OverlayRef | null = null;\r\n private _portal: TemplatePortal | null = null;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onChange: (v: unknown) => void = () => {};\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n _onTouched: () => void = () => {};\r\n\r\n // ── Lifecycle ──────────────────────────────────────────────────────────────\r\n\r\n ngOnChanges(): void {\r\n // Re-sync display text when options change (label may have changed)\r\n const mv = this._modelValue();\r\n if (mv !== null) {\r\n const opt = this._allOptions().find((o) => o.value === mv);\r\n if (opt) {\r\n this._setInputNative(opt.label);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._closePanel();\r\n this._overlayRef?.dispose();\r\n }\r\n\r\n // ── ControlValueAccessor ───────────────────────────────────────────────────\r\n\r\n writeValue(value: unknown): void {\r\n this._modelValue.set(value);\r\n const opt = this._allOptions().find((o) => o.value === value);\r\n const text =\r\n opt?.label ?? (value != null && value !== '' ? String(value) : '');\r\n this._inputText.set(text);\r\n this._setInputNative(text);\r\n this._cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (v: unknown) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this._cdr.markForCheck();\r\n }\r\n\r\n // ── Interaction ────────────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n _onInput(event: Event): void {\r\n const text = (event.target as HTMLInputElement).value;\r\n this._inputText.set(text);\r\n this._modelValue.set(text || null);\r\n this._onChange(text || null);\r\n if (text) {\r\n this._openPanel();\r\n } else {\r\n this._closePanel();\r\n }\r\n }\r\n\r\n /** @internal */\r\n _onFocus(): void {\r\n if (this._inputText() && this._filtered().length > 0) {\r\n this._openPanel();\r\n }\r\n }\r\n\r\n /** @internal */\r\n _onBlur(): void {\r\n // Delay so a click on an option fires before the panel closes\r\n setTimeout(() => {\r\n if (this._open) {\r\n this._closePanel();\r\n }\r\n this._onTouched();\r\n this._cdr.markForCheck();\r\n }, 150);\r\n }\r\n\r\n /** @internal */\r\n _clear(): void {\r\n this._inputText.set('');\r\n this._modelValue.set(null);\r\n this._setInputNative('');\r\n this._onChange(null);\r\n this._closePanel();\r\n this._inputEl?.nativeElement.focus();\r\n }\r\n\r\n /** @internal */\r\n _selectOption(opt: RcAutocompleteOption): void {\r\n this._inputText.set(opt.label);\r\n this._modelValue.set(opt.value);\r\n this._setInputNative(opt.label);\r\n this._onChange(opt.value);\r\n this.selectionChange.emit(opt);\r\n this._closePanel();\r\n this._inputEl?.nativeElement.focus();\r\n }\r\n\r\n /** @internal */\r\n _onKeydown(event: KeyboardEvent): void {\r\n if (this.disabled) return;\r\n const opts = this._filtered().filter((o) => !o.disabled);\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (!this._open) {\r\n this._openPanel();\r\n } else {\r\n this._activeIndex = Math.min(this._activeIndex + 1, opts.length - 1);\r\n this._cdr.markForCheck();\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (this._open) {\r\n this._activeIndex = Math.max(this._activeIndex - 1, 0);\r\n this._cdr.markForCheck();\r\n }\r\n break;\r\n\r\n case 'Enter':\r\n event.preventDefault();\r\n if (this._open && this._activeIndex >= 0 && opts[this._activeIndex]) {\r\n this._selectOption(opts[this._activeIndex]);\r\n }\r\n break;\r\n\r\n case 'Escape':\r\n if (this._open) {\r\n event.stopPropagation();\r\n this._closePanel();\r\n }\r\n break;\r\n\r\n case 'Tab':\r\n if (this._open) {\r\n this._closePanel();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // ── Panel ──────────────────────────────────────────────────────────────────\r\n\r\n private _openPanel(): void {\r\n if (this._open || this.disabled) return;\r\n if (this._filtered().length === 0) return;\r\n\r\n const anchor = this._inputEl?.nativeElement ?? this._host.nativeElement;\r\n\r\n const positionStrategy = this._overlay\r\n .position()\r\n .flexibleConnectedTo(anchor)\r\n .withPositions([\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: 4,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n offsetY: -4,\r\n },\r\n ])\r\n .withFlexibleDimensions(false)\r\n .withPush(false);\r\n\r\n this._overlayRef = this._overlay.create({\r\n positionStrategy,\r\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\r\n width: this._host.nativeElement.offsetWidth,\r\n hasBackdrop: false,\r\n });\r\n\r\n this._portal = new TemplatePortal(this._panelTpl, this._vcr);\r\n this._overlayRef.attach(this._portal);\r\n\r\n this._overlayRef.keydownEvents().subscribe((e) => {\r\n if (e.key === 'Escape') this._closePanel();\r\n });\r\n\r\n this._activeIndex = -1;\r\n this._open = true;\r\n this._cdr.markForCheck();\r\n }\r\n\r\n /** @internal */\r\n _closePanel(): void {\r\n if (!this._open) return;\r\n this._overlayRef?.detach();\r\n this._open = false;\r\n this._activeIndex = -1;\r\n this._cdr.markForCheck();\r\n }\r\n\r\n // ── Helpers ────────────────────────────────────────────────────────────────\r\n\r\n private _normalise(\r\n raw: string[] | RcAutocompleteOption[],\r\n ): RcAutocompleteOption[] {\r\n if (!Array.isArray(raw)) return [];\r\n return raw.map((item) =>\r\n typeof item === 'string'\r\n ? { value: item, label: item }\r\n : (item as RcAutocompleteOption),\r\n );\r\n }\r\n\r\n private _setInputNative(text: string): void {\r\n if (this._inputEl?.nativeElement) {\r\n this._inputEl.nativeElement.value = text;\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n inject,\r\n signal,\r\n InjectionToken,\r\n ContentChildren,\r\n QueryList,\r\n AfterContentInit,\r\n OnDestroy,\r\n OnInit,\r\n forwardRef,\r\n ElementRef,\r\n} from '@angular/core';\r\n\r\n// ── Types ──────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Controls how the sidenav interacts with the main content.\r\n *\r\n * - `'over'` — slides over the main content; a backdrop appears behind it.\r\n * - `'push'` — pushes the main content to the side; a backdrop appears.\r\n * - `'side'` — sits permanently adjacent to the main content; no backdrop.\r\n */\r\nexport type RcSidenavMode = 'over' | 'push' | 'side';\r\n\r\n/** Which edge of the container the sidenav appears on. */\r\nexport type RcSidenavPosition = 'start' | 'end';\r\n\r\n// ── Container communication interface ─────────────────────────────────────────\r\n\r\n/** @internal contract used for sidenav ↔ container communication */\r\nexport interface RcSidenavContainerRef {\r\n _register(sidenav: RcSidenavComponent): void;\r\n _deregister(sidenav: RcSidenavComponent): void;\r\n _update(): void;\r\n}\r\n\r\n/** @internal injection token that provides the parent container to child sidenavs */\r\nexport const RC_SIDENAV_CONTAINER = new InjectionToken<RcSidenavContainerRef>(\r\n 'RC_SIDENAV_CONTAINER',\r\n);\r\n\r\n// ── RcSidenavContentComponent ──────────────────────────────────────────────────\r\n\r\n/**\r\n * Wraps the main content area inside an `<rc-sidenav-container>`.\r\n *\r\n * Using this wrapper is optional — any content not matched by\r\n * `<rc-sidenav>` will fall into the default `<ng-content>` slot.\r\n * However using this component enables correct scroll isolation.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-sidenav-container>\r\n * <rc-sidenav>Navigation content</rc-sidenav>\r\n * <rc-sidenav-content>\r\n * <main>Page content</main>\r\n * </rc-sidenav-content>\r\n * </rc-sidenav-container>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-sidenav-content',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: 'rc-sidenav-content' },\r\n template: `<ng-content></ng-content>`,\r\n})\r\nexport class RcSidenavContentComponent {}\r\n\r\n// ── RcSidenavComponent ─────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A sliding side panel — the inner child of `<rc-sidenav-container>`.\r\n *\r\n * Place navigation links, filters, or any auxiliary content inside.\r\n * Open and close programmatically via the `open()`, `close()` and `toggle()`\r\n * methods, or bind `[(opened)]`.\r\n *\r\n * @example Over mode (default — panel slides over content)\r\n * ```html\r\n * <rc-sidenav-container>\r\n * <rc-sidenav #drawer>\r\n * <nav>Links here</nav>\r\n * </rc-sidenav>\r\n * <rc-sidenav-content>\r\n * <button (click)=\"drawer.toggle()\">Menu</button>\r\n * <router-outlet></router-outlet>\r\n * </rc-sidenav-content>\r\n * </rc-sidenav-container>\r\n * ```\r\n *\r\n * @example Side mode (permanent)\r\n * ```html\r\n * <rc-sidenav-container style=\"height: 100vh\">\r\n * <rc-sidenav mode=\"side\" [opened]=\"true\">\r\n * <nav>Sidebar</nav>\r\n * </rc-sidenav>\r\n * <rc-sidenav-content>Main content</rc-sidenav-content>\r\n * </rc-sidenav-container>\r\n * ```\r\n *\r\n * @example Push mode (panel pushes content aside)\r\n * ```html\r\n * <rc-sidenav-container>\r\n * <rc-sidenav #nav mode=\"push\">Filters</rc-sidenav>\r\n * <rc-sidenav-content>\r\n * <button (click)=\"nav.toggle()\">Toggle filters</button>\r\n * </rc-sidenav-content>\r\n * </rc-sidenav-container>\r\n * ```\r\n *\r\n * @example End position\r\n * ```html\r\n * <rc-sidenav position=\"end\" mode=\"over\">Details panel</rc-sidenav>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-sidenav',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'rc-sidenav',\r\n '[class.rc-sidenav-open]': '_isOpen()',\r\n '[class.rc-sidenav-start]': \"position === 'start'\",\r\n '[class.rc-sidenav-end]': \"position === 'end'\",\r\n '[class.rc-sidenav-mode-over]': \"mode === 'over'\",\r\n '[class.rc-sidenav-mode-push]': \"mode === 'push'\",\r\n '[class.rc-sidenav-mode-side]': \"mode === 'side'\",\r\n },\r\n template: `<ng-content></ng-content>`,\r\n})\r\nexport class RcSidenavComponent implements OnInit, OnDestroy {\r\n readonly _el = inject(ElementRef<HTMLElement>);\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n private readonly _container = inject(RC_SIDENAV_CONTAINER, {\r\n optional: true,\r\n });\r\n\r\n // ── Inputs ─────────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Interaction mode:\r\n * - `'over'` (default) — panel floats above content; backdrop shown.\r\n * - `'push'` — panel pushes the content; backdrop shown.\r\n * - `'side'` — panel sits beside the content; no backdrop.\r\n */\r\n @Input() mode: RcSidenavMode = 'over';\r\n\r\n /** Which edge to attach to. Default: `'start'` (left in LTR). */\r\n @Input() position: RcSidenavPosition = 'start';\r\n\r\n /**\r\n * Whether clicking the backdrop or pressing Escape closes the sidenav.\r\n * Only applies in `'over'` and `'push'` modes.\r\n */\r\n @Input() disableClose = false;\r\n\r\n /** Programmatic open / close. Supports two-way binding: `[(opened)]`. */\r\n @Input()\r\n set opened(v: boolean) {\r\n if (v !== this._isOpen()) {\r\n this._setOpened(v, false);\r\n }\r\n }\r\n\r\n // ── Outputs ────────────────────────────────────────────────────────────────\r\n\r\n /** Emits `true` when the panel opens; `false` when it closes. */\r\n @Output() readonly openedChange = new EventEmitter<boolean>();\r\n\r\n /** Emits when the open animation starts. */\r\n @Output() readonly openedStart = new EventEmitter<void>();\r\n\r\n /** Emits when the close animation starts. */\r\n @Output() readonly closedStart = new EventEmitter<void>();\r\n\r\n // ── Internal state ─────────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n readonly _isOpen = signal(false);\r\n\r\n // ── Lifecycle ──────────────────────────────────────────────────────────────\r\n\r\n ngOnInit(): void {\r\n this._container?._register(this);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._container?._deregister(this);\r\n }\r\n\r\n // ── Public API ─────────────────────────────────────────────────────────────\r\n\r\n /** Opens the sidenav. Returns a promise that resolves after the animation. */\r\n open(): Promise<void> {\r\n return this._setOpened(true);\r\n }\r\n\r\n /** Closes the sidenav. Returns a promise that resolves after the animation. */\r\n close(): Promise<void> {\r\n return this._setOpened(false);\r\n }\r\n\r\n /** Toggles the sidenav open / closed. */\r\n toggle(): void {\r\n this._isOpen() ? this.close() : this.open();\r\n }\r\n\r\n // ── Internal ───────────────────────────────────────────────────────────────\r\n\r\n private _setOpened(value: boolean, emit = true): Promise<void> {\r\n if (value) {\r\n this.openedStart.emit();\r\n } else {\r\n this.closedStart.emit();\r\n }\r\n this._isOpen.set(value);\r\n if (emit) {\r\n this.openedChange.emit(value);\r\n }\r\n this._container?._update();\r\n this._cdr.markForCheck();\r\n return new Promise((resolve) => setTimeout(resolve, 300));\r\n }\r\n}\r\n\r\n// ── RcSidenavContainerComponent ────────────────────────────────────────────────\r\n\r\n/**\r\n * Root wrapper for the sidenav layout. Place exactly one\r\n * `<rc-sidenav>` and one `<rc-sidenav-content>` (or implicit content) inside.\r\n *\r\n * The container handles the backdrop overlay in `'over'` and `'push'` modes,\r\n * Escape-key dismissal, and the push-mode content offset.\r\n *\r\n * Set an explicit `height` or `min-height` on the container so the panel\r\n * fills the available space.\r\n *\r\n * @example Full-height app shell\r\n * ```html\r\n * <rc-sidenav-container style=\"height: 100vh\">\r\n * <rc-sidenav #nav>\r\n * <nav>…</nav>\r\n * </rc-sidenav>\r\n * <rc-sidenav-content>\r\n * <rc-navbar><button (click)=\"nav.toggle()\">☰</button></rc-navbar>\r\n * <router-outlet></router-outlet>\r\n * </rc-sidenav-content>\r\n * </rc-sidenav-container>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-sidenav-container',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: RC_SIDENAV_CONTAINER,\r\n useExisting: forwardRef(() => RcSidenavContainerComponent),\r\n },\r\n ],\r\n imports: [],\r\n host: {\r\n class: 'rc-sidenav-container',\r\n '(document:keydown.escape)': '_onEscape($event)',\r\n },\r\n template: `\r\n <!-- Projected sidenavs (absolutely positioned in over/push mode) -->\r\n <ng-content select=\"rc-sidenav\"></ng-content>\r\n\r\n <!-- Backdrop — only visible in over/push mode -->\r\n @if (_backdropVisible) {\r\n <div\r\n class=\"rc-sidenav-backdrop\"\r\n aria-hidden=\"true\"\r\n (click)=\"_onBackdropClick()\"\r\n ></div>\r\n }\r\n\r\n <!-- Main content slot — accepts explicit rc-sidenav-content or bare markup -->\r\n <ng-content select=\"rc-sidenav-content\"></ng-content>\r\n <ng-content></ng-content>\r\n `,\r\n})\r\nexport class RcSidenavContainerComponent\r\n implements RcSidenavContainerRef, AfterContentInit, OnDestroy\r\n{\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n private readonly _hostEl = inject(ElementRef<HTMLElement>);\r\n\r\n @ContentChildren(RcSidenavComponent, { descendants: false })\r\n private readonly _contentSidenavs!: QueryList<RcSidenavComponent>;\r\n\r\n private _sidenavs: RcSidenavComponent[] = [];\r\n\r\n /** @internal Whether the translucent backdrop is shown. */\r\n _backdropVisible = false;\r\n\r\n // ── RcSidenavContainerRef ──────────────────────────────────────────────────\r\n\r\n /** @internal Called by each sidenav on init. */\r\n _register(sidenav: RcSidenavComponent): void {\r\n if (!this._sidenavs.includes(sidenav)) {\r\n this._sidenavs.push(sidenav);\r\n }\r\n this._update();\r\n }\r\n\r\n /** @internal Called by each sidenav on destroy. */\r\n _deregister(sidenav: RcSidenavComponent): void {\r\n this._sidenavs = this._sidenavs.filter((s) => s !== sidenav);\r\n this._update();\r\n }\r\n\r\n /** @internal Recalculate derived state after any sidenav state change. */\r\n _update(): void {\r\n const host = this._hostEl.nativeElement;\r\n\r\n // Backdrop — needed in over / push modes\r\n this._backdropVisible = this._sidenavs.some(\r\n (s) => s._isOpen() && (s.mode === 'over' || s.mode === 'push'),\r\n );\r\n\r\n // Push-mode offset —------------------------------------------------\r\n // In push mode the main content should visually shift by the panel\r\n // width. We do this by setting a CSS custom property on the host so\r\n // the SCSS can apply the transform to rc-sidenav-content.\r\n const pushSidenav = this._sidenavs.find(\r\n (s) => s._isOpen() && s.mode === 'push',\r\n );\r\n\r\n if (pushSidenav) {\r\n const width =\r\n pushSidenav._el.nativeElement.offsetWidth ||\r\n parseInt(\r\n getComputedStyle(pushSidenav._el.nativeElement).getPropertyValue(\r\n '--rc-sidenav-width',\r\n ),\r\n ) ||\r\n 280;\r\n host.style.setProperty('--rc-sidenav-push-width', `${width}px`);\r\n host.classList.add('rc-sidenav-container-push-open');\r\n host.classList.toggle(\r\n 'rc-sidenav-container-push-start',\r\n pushSidenav.position === 'start',\r\n );\r\n host.classList.toggle(\r\n 'rc-sidenav-container-push-end',\r\n pushSidenav.position === 'end',\r\n );\r\n } else {\r\n host.style.removeProperty('--rc-sidenav-push-width');\r\n host.classList.remove(\r\n 'rc-sidenav-container-push-open',\r\n 'rc-sidenav-container-push-start',\r\n 'rc-sidenav-container-push-end',\r\n );\r\n }\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n // ── Lifecycle ──────────────────────────────────────────────────────────────\r\n\r\n ngAfterContentInit(): void {\r\n // Pick up any sidenavs that existed before our registration ran\r\n // (e.g. pre-opened via [opened]=\"true\")\r\n this._contentSidenavs.forEach((s) => {\r\n if (!this._sidenavs.includes(s)) {\r\n this._sidenavs.push(s);\r\n }\r\n });\r\n this._update();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._sidenavs = [];\r\n }\r\n\r\n // ── Events ─────────────────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n _onBackdropClick(): void {\r\n this._sidenavs.forEach((s) => {\r\n if (!s.disableClose && s._isOpen() && s.mode !== 'side') {\r\n s.close();\r\n }\r\n });\r\n }\r\n\r\n /** @internal */\r\n _onEscape(event: Event): void {\r\n // Only handle if the event originated inside this container\r\n const host = this._hostEl.nativeElement;\r\n if (!host.contains(event.target as Node)) return;\r\n\r\n for (const s of this._sidenavs) {\r\n if (!s.disableClose && s._isOpen() && s.mode !== 'side') {\r\n event.stopPropagation();\r\n s.close();\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Directive,\r\n Input,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\n\r\n// ── Types ──────────────────────────────────────────────────────────────────────\r\n\r\n/** Colour variant for the navbar. */\r\nexport type RcNavbarColor = 'default' | 'primary';\r\n\r\n/** CSS position strategy. */\r\nexport type RcNavbarPosition = 'static' | 'sticky' | 'fixed';\r\n\r\n// ── Slot directives ────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Marks the brand / logo area at the start of the navbar.\r\n *\r\n * Apply to a `<div>`, `<a>`, or any wrapper element.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-navbar>\r\n * <a rcNavbarBrand routerLink=\"/\">MyApp</a>\r\n * </rc-navbar>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcNavbarBrand]',\r\n standalone: true,\r\n host: { class: 'rc-navbar-brand' },\r\n})\r\nexport class RcNavbarBrandDirective {}\r\n\r\n/**\r\n * Marks the trailing actions area at the end of the navbar.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-navbar>\r\n * <div rcNavbarActions>\r\n * <button rcButton variant=\"ghost\" [iconOnly]=\"true\">\r\n * <rc-icon name=\"bell\"></rc-icon>\r\n * </button>\r\n * </div>\r\n * </rc-navbar>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcNavbarActions]',\r\n standalone: true,\r\n host: { class: 'rc-navbar-actions' },\r\n})\r\nexport class RcNavbarActionsDirective {}\r\n\r\n// ── Spacer component ───────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A flexible spacer that expands to fill remaining horizontal space,\r\n * pushing subsequent elements to the end of the navbar.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-navbar>\r\n * <a rcNavbarBrand routerLink=\"/\">Logo</a>\r\n * <rc-navbar-spacer></rc-navbar-spacer>\r\n * <div rcNavbarActions>...</div>\r\n * </rc-navbar>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-navbar-spacer',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: 'rc-navbar-spacer' },\r\n template: ``,\r\n})\r\nexport class RcNavbarSpacerComponent {}\r\n\r\n// ── Row component ──────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * An individual row inside an `<rc-navbar>` — use when you need a\r\n * multi-row navigation bar.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-navbar>\r\n * <rc-navbar-row>\r\n * <a rcNavbarBrand routerLink=\"/\">Logo</a>\r\n * <rc-navbar-spacer></rc-navbar-spacer>\r\n * <div rcNavbarActions>…actions…</div>\r\n * </rc-navbar-row>\r\n * <rc-navbar-row>\r\n * <!-- breadcrumbs or sub-navigation -->\r\n * </rc-navbar-row>\r\n * </rc-navbar>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-navbar-row',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: 'rc-navbar-row' },\r\n template: `<ng-content></ng-content>`,\r\n})\r\nexport class RcNavbarRowComponent {}\r\n\r\n// ── Navbar component ───────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Top application bar — a horizontal strip for branding, navigation actions,\r\n * and utility controls.\r\n *\r\n * Place `[rcNavbarBrand]`, `[rcNavbarActions]`, `<rc-navbar-spacer>`, and\r\n * `<rc-navbar-row>` children inside to build up the bar.\r\n *\r\n * @example Minimal\r\n * ```html\r\n * <rc-navbar>\r\n * <a rcNavbarBrand routerLink=\"/\">My App</a>\r\n * <rc-navbar-spacer></rc-navbar-spacer>\r\n * <div rcNavbarActions>\r\n * <button rcButton variant=\"ghost\">Sign out</button>\r\n * </div>\r\n * </rc-navbar>\r\n * ```\r\n *\r\n * @example Primary colour + sticky\r\n * ```html\r\n * <rc-navbar color=\"primary\" position=\"sticky\">…</rc-navbar>\r\n * ```\r\n *\r\n * @example With sidebar toggle\r\n * ```html\r\n * <rc-navbar>\r\n * <button rcButton variant=\"ghost\" [iconOnly]=\"true\" (click)=\"nav.toggle()\">\r\n * <rc-icon name=\"menu\"></rc-icon>\r\n * </button>\r\n * <a rcNavbarBrand routerLink=\"/\">App</a>\r\n * <rc-navbar-spacer></rc-navbar-spacer>\r\n * <div rcNavbarActions>\r\n * <button rcButton variant=\"ghost\" [iconOnly]=\"true\">\r\n * <rc-icon name=\"person\"></rc-icon>\r\n * </button>\r\n * </div>\r\n * </rc-navbar>\r\n * ```\r\n *\r\n * @example Multi-row\r\n * ```html\r\n * <rc-navbar>\r\n * <rc-navbar-row>\r\n * <a rcNavbarBrand>App</a>\r\n * <rc-navbar-spacer></rc-navbar-spacer>\r\n * <div rcNavbarActions>…</div>\r\n * </rc-navbar-row>\r\n * <rc-navbar-row>Sub-navigation or breadcrumbs</rc-navbar-row>\r\n * </rc-navbar>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-navbar',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [],\r\n host: {\r\n class: 'rc-navbar',\r\n '[class.rc-navbar-color-default]': \"color === 'default'\",\r\n '[class.rc-navbar-color-primary]': \"color === 'primary'\",\r\n '[class.rc-navbar-position-static]': \"position === 'static'\",\r\n '[class.rc-navbar-position-sticky]': \"position === 'sticky'\",\r\n '[class.rc-navbar-position-fixed]': \"position === 'fixed'\",\r\n },\r\n template: `<ng-content></ng-content>`,\r\n})\r\nexport class RcNavbarComponent {\r\n /**\r\n * Colour variant.\r\n * - `'default'` — white / surface background (default)\r\n * - `'primary'` — primary brand colour\r\n */\r\n @Input() color: RcNavbarColor = 'default';\r\n\r\n /**\r\n * CSS position strategy.\r\n * - `'static'` — normal document flow (default).\r\n * - `'sticky'` — stays at the top while scrolling.\r\n * - `'fixed'` — fixed to the viewport; adds top padding to the container.\r\n */\r\n @Input() position: RcNavbarPosition = 'static';\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n forwardRef,\r\n inject,\r\n ElementRef,\r\n ViewChild,\r\n TemplateRef,\r\n ViewContainerRef,\r\n signal,\r\n computed,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { RcButtonComponent } from '../button/rc-button';\r\n\r\n// ── Types ──────────────────────────────────────────────────────────────────────\r\n\r\n/** Validation / visual status. */\r\nexport type RcDatepickerStatus = 'default' | 'success' | 'warning' | 'danger';\r\n\r\n/** Size variant — matches `RcInputSize`. */\r\nexport type RcDatepickerSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * What the picker selects.\r\n * - `'date'` — calendar only; model value has time zeroed.\r\n * - `'time'` — clock only; only HH:MM are meaningful on the model value.\r\n * - `'datetime'` — calendar + clock.\r\n */\r\nexport type RcDatepickerMode = 'date' | 'time' | 'datetime';\r\n\r\n// ── Internal helper ────────────────────────────────────────────────────────────\r\n\r\ninterface _CalendarDay {\r\n date: Date;\r\n day: number;\r\n currentMonth: boolean;\r\n today: boolean;\r\n selected: boolean;\r\n disabled: boolean;\r\n}\r\n\r\nconst MONTH_NAMES = [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December',\r\n];\r\n\r\nconst DAY_ABBRS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\n\r\nfunction _isSameDay(a: Date, b: Date): boolean {\r\n return (\r\n a.getFullYear() === b.getFullYear() &&\r\n a.getMonth() === b.getMonth() &&\r\n a.getDate() === b.getDate()\r\n );\r\n}\r\n\r\nfunction _startOfDay(d: Date): Date {\r\n const c = new Date(d);\r\n c.setHours(0, 0, 0, 0);\r\n return c;\r\n}\r\n\r\nfunction _pad2(n: number): string {\r\n return String(n).padStart(2, '0');\r\n}\r\n\r\n// ── Component ──────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A fully-themed date / time / datetime picker backed by CDK Overlay.\r\n *\r\n * The model value is always `Date | null`. Implements `ControlValueAccessor`\r\n * for use with `[(ngModel)]` or Reactive Forms.\r\n *\r\n * @example Date picker (default)\r\n * ```html\r\n * <rc-datepicker [(ngModel)]=\"birthday\" placeholder=\"Select date\"></rc-datepicker>\r\n * ```\r\n *\r\n * @example Time picker\r\n * ```html\r\n * <rc-datepicker mode=\"time\" [(ngModel)]=\"meetingTime\"></rc-datepicker>\r\n * ```\r\n *\r\n * @example Date + time\r\n * ```html\r\n * <rc-datepicker mode=\"datetime\" [(ngModel)]=\"appointment\"></rc-datepicker>\r\n * ```\r\n *\r\n * @example Validation status\r\n * ```html\r\n * <rc-datepicker status=\"danger\" [(ngModel)]=\"dob\"\r\n * placeholder=\"Date of birth\"></rc-datepicker>\r\n * ```\r\n *\r\n * @example Min / max\r\n * ```html\r\n * <rc-datepicker [min]=\"minDate\" [max]=\"maxDate\" [(ngModel)]=\"d\"></rc-datepicker>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-datepicker',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [RcButtonComponent],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RcDatepickerComponent),\r\n multi: true,\r\n },\r\n ],\r\n host: {\r\n class: 'rc-datepicker',\r\n '[class.rc-datepicker-open]': '_open',\r\n '[class.rc-datepicker-disabled]': 'disabled',\r\n '[class.rc-datepicker-has-value]': '!!_value()',\r\n '[class.rc-datepicker-sm]': \"size === 'sm'\",\r\n '[class.rc-datepicker-md]': \"size === 'md'\",\r\n '[class.rc-datepicker-lg]': \"size === 'lg'\",\r\n '[class.rc-datepicker-success]': \"status === 'success'\",\r\n '[class.rc-datepicker-warning]': \"status === 'warning'\",\r\n '[class.rc-datepicker-danger]': \"status === 'danger'\",\r\n '(keydown)': '_onHostKeydown($event)',\r\n },\r\n template: `\r\n <!-- ── Trigger ─────────────────────────────────────────────────────── -->\r\n <div\r\n #triggerEl\r\n class=\"rc-datepicker-trigger\"\r\n role=\"combobox\"\r\n [attr.aria-controls]=\"_open ? 'rc-datepicker-panel' : null\"\r\n [attr.aria-expanded]=\"_open\"\r\n [attr.aria-haspopup]=\"'dialog'\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n (click)=\"!disabled && _togglePanel()\"\r\n (keydown.enter)=\"!disabled && _togglePanel()\"\r\n (keydown.space)=\"$event.preventDefault(); !disabled && _togglePanel()\"\r\n >\r\n <span\r\n class=\"rc-datepicker-trigger-text\"\r\n [class.rc-datepicker-trigger-placeholder]=\"!_displayText()\"\r\n >\r\n {{ _displayText() || placeholder }}\r\n </span>\r\n\r\n <!-- Clear icon — when a value is set -->\r\n @if (_value() && !disabled) {\r\n <button\r\n class=\"rc-datepicker-clear\"\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n [attr.aria-label]=\"clearAriaLabel\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (click)=\"$event.stopPropagation(); _clear()\"\r\n >\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\r\n <path\r\n d=\"M1.5 1.5L8.5 8.5M8.5 1.5L1.5 8.5\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n }\r\n\r\n <!-- Calendar / clock icon -->\r\n <span class=\"rc-datepicker-icon\" aria-hidden=\"true\">\r\n @if (mode === 'time') {\r\n <!-- Clock icon -->\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle\r\n cx=\"8\"\r\n cy=\"8\"\r\n r=\"6.5\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.3\"\r\n />\r\n <path\r\n d=\"M8 4.5v3.75L10.5 10\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.3\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n } @else {\r\n <!-- Calendar icon -->\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <rect\r\n x=\"1.5\"\r\n y=\"2.5\"\r\n width=\"13\"\r\n height=\"12\"\r\n rx=\"1.5\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.3\"\r\n />\r\n <path d=\"M1.5 6.5h13\" stroke=\"currentColor\" stroke-width=\"1.3\" />\r\n <path\r\n d=\"M5 1v3M11 1v3\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.3\"\r\n stroke-linecap=\"round\"\r\n />\r\n <circle cx=\"8\" cy=\"10\" r=\".75\" fill=\"currentColor\" />\r\n <circle cx=\"5\" cy=\"10\" r=\".75\" fill=\"currentColor\" />\r\n <circle cx=\"11\" cy=\"10\" r=\".75\" fill=\"currentColor\" />\r\n </svg>\r\n }\r\n </span>\r\n </div>\r\n\r\n <!-- ── Overlay panel ─────────────────────────────────────────────── -->\r\n <ng-template #panelTpl>\r\n <div\r\n class=\"rc-datepicker-panel\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n >\r\n <!-- Calendar (date / datetime modes) -->\r\n @if (mode !== 'time') {\r\n <div class=\"rc-datepicker-calendar\">\r\n <!-- Calendar navigation header -->\r\n <div class=\"rc-datepicker-cal-header\">\r\n <button\r\n rcButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n [iconOnly]=\"true\"\r\n type=\"button\"\r\n [attr.aria-label]=\"previousMonthAriaLabel\"\r\n (click)=\"_prevMonth()\"\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M10 12L6 8l4-4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <button\r\n rcButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n class=\"rc-datepicker-month-label\"\r\n type=\"button\"\r\n (click)=\"_toggleCalView()\"\r\n >\r\n {{ _monthName() }} {{ _viewYear() }}\r\n </button>\r\n\r\n <button\r\n rcButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n [iconOnly]=\"true\"\r\n type=\"button\"\r\n [attr.aria-label]=\"nextMonthAriaLabel\"\r\n (click)=\"_nextMonth()\"\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M6 12l4-4-4-4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- Month selection grid -->\r\n @if (_calView() === 'months') {\r\n <div class=\"rc-datepicker-month-grid\">\r\n @for (m of monthNames; track m; let i = $index) {\r\n <button\r\n class=\"rc-datepicker-month-cell\"\r\n type=\"button\"\r\n [class.rc-datepicker-cell-active]=\"i === _viewMonth()\"\r\n (click)=\"_selectMonth(i)\"\r\n >\r\n {{ m.slice(0, 3) }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Year selection grid -->\r\n @else if (_calView() === 'years') {\r\n <div class=\"rc-datepicker-year-grid\">\r\n @for (y of _yearRange(); track y) {\r\n <button\r\n class=\"rc-datepicker-year-cell\"\r\n type=\"button\"\r\n [class.rc-datepicker-cell-active]=\"y === _viewYear()\"\r\n (click)=\"_selectYear(y)\"\r\n >\r\n {{ y }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Day grid -->\r\n @else {\r\n <div class=\"rc-datepicker-weekdays\">\r\n @for (d of dayAbbrs; track d) {\r\n <span class=\"rc-datepicker-weekday\">{{ d }}</span>\r\n }\r\n </div>\r\n <div class=\"rc-datepicker-days\">\r\n @for (day of _days(); track day.date) {\r\n <button\r\n class=\"rc-datepicker-day\"\r\n type=\"button\"\r\n [class.rc-datepicker-day-other]=\"!day.currentMonth\"\r\n [class.rc-datepicker-day-today]=\"day.today\"\r\n [class.rc-datepicker-day-selected]=\"day.selected\"\r\n [class.rc-datepicker-day-disabled]=\"day.disabled\"\r\n [attr.tabindex]=\"day.disabled ? -1 : 0\"\r\n [attr.aria-selected]=\"day.selected\"\r\n [attr.aria-disabled]=\"day.disabled || null\"\r\n (click)=\"!day.disabled && _selectDay(day.date)\"\r\n (keydown.enter)=\"!day.disabled && _selectDay(day.date)\"\r\n (keydown.space)=\"\r\n $event.preventDefault();\r\n !day.disabled && _selectDay(day.date)\r\n \"\r\n >\r\n {{ day.day }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Time picker (time / datetime modes) -->\r\n @if (mode !== 'date') {\r\n <div\r\n class=\"rc-datepicker-time-picker\"\r\n [class.rc-datepicker-time-picker-standalone]=\"mode === 'time'\"\r\n >\r\n <div class=\"rc-datepicker-spinner\">\r\n <button\r\n rcButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n [iconOnly]=\"true\"\r\n type=\"button\"\r\n [attr.aria-label]=\"increaseHourAriaLabel\"\r\n (click)=\"_incHours()\"\r\n >\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path\r\n d=\"M3 9l4-4 4 4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n <span class=\"rc-datepicker-spinner-value\">{{\r\n _hoursDisplay()\r\n }}</span>\r\n <button\r\n rcButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n [iconOnly]=\"true\"\r\n type=\"button\"\r\n [attr.aria-label]=\"decreaseHourAriaLabel\"\r\n (click)=\"_decHours()\"\r\n >\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path\r\n d=\"M3 5l4 4 4-4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <span class=\"rc-datepicker-time-sep\">:</span>\r\n\r\n <div class=\"rc-datepicker-spinner\">\r\n <button\r\n rcButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n [iconOnly]=\"true\"\r\n type=\"button\"\r\n [attr.aria-label]=\"increaseMinuteAriaLabel\"\r\n (click)=\"_incMinutes()\"\r\n >\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path\r\n d=\"M3 9l4-4 4 4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n <span class=\"rc-datepicker-spinner-value\">{{\r\n _minutesDisplay()\r\n }}</span>\r\n <button\r\n rcButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n [iconOnly]=\"true\"\r\n type=\"button\"\r\n [attr.aria-label]=\"decreaseMinuteAriaLabel\"\r\n (click)=\"_decMinutes()\"\r\n >\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path\r\n d=\"M3 5l4 4 4-4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Footer actions -->\r\n <div class=\"rc-datepicker-footer\">\r\n <button\r\n rcButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n type=\"button\"\r\n (click)=\"_selectNow()\"\r\n >\r\n {{ mode !== 'date' ? nowLabel : todayLabel }}\r\n </button>\r\n @if (_value()) {\r\n <button\r\n rcButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n type=\"button\"\r\n (click)=\"_clear()\"\r\n >\r\n {{ clearLabel }}\r\n </button>\r\n }\r\n @if (mode !== 'date') {\r\n <button\r\n rcButton\r\n status=\"primary\"\r\n size=\"sm\"\r\n type=\"button\"\r\n (click)=\"_applyTime()\"\r\n >\r\n {{ applyLabel }}\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n `,\r\n})\r\nexport class RcDatepickerComponent implements ControlValueAccessor, OnDestroy {\r\n private readonly _cdr = inject(ChangeDetectorRef);\r\n private readonly _overlay = inject(Overlay);\r\n private readonly _vcr = inject(ViewContainerRef);\r\n private readonly _host = inject(ElementRef<HTMLElement>);\r\n\r\n @ViewChild('triggerEl') private _triggerEl!: ElementRef<HTMLElement>;\r\n @ViewChild('panelTpl', { static: true })\r\n private readonly _panelTpl!: TemplateRef<unknown>;\r\n\r\n // ── Public constants / i18n defaults ──────────────────────────────────────\r\n\r\n /** Names of the 12 months, used as calendar header. Override to localise. */\r\n @Input() monthNames: string[] = [...MONTH_NAMES];\r\n /** Two-letter weekday abbreviations shown in the day grid header. Override to localise. */\r\n @Input() dayAbbrs: string[] = [...DAY_ABBRS];\r\n\r\n // ── Inputs ─────────────────────────────────────────────────────────────────\r\n\r\n /** What the picker selects: `'date'` | `'time'` | `'datetime'`. Default: `'date'`. */\r\n @Input() mode: RcDatepickerMode = 'date';\r\n\r\n /** Placeholder shown when no value is selected. */\r\n @Input() placeholder = 'Select…';\r\n\r\n /** Validation / visual status. */\r\n @Input() status: RcDatepickerStatus = 'default';\r\n\r\n /** Size variant. */\r\n @Input() size: RcDatepickerSize = 'md';\r\n\r\n /** Disables the picker. */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * Minimum selectable date (inclusive).\r\n * Dates before this are rendered disabled.\r\n */\r\n @Input() min: Date | null = null;\r\n\r\n /**\r\n * Maximum selectable date (inclusive).\r\n * Dates after this are rendered disabled.\r\n */\r\n @Input() max: Date | null = null;\r\n\r\n // ── i18n labels ───────────────────────────────────────────────────────────\r\n\r\n /** ARIA label for the clear (×) button in the trigger. */\r\n @Input() clearAriaLabel = 'Clear';\r\n /** ARIA label for the ‹ Previous month button. */\r\n @Input() previousMonthAriaLabel = 'Previous month';\r\n /** ARIA label for the › Next month button. */\r\n @Input() nextMonthAriaLabel = 'Next month';\r\n /** ARIA label for the ▲ Increase-hour button. */\r\n @Input() increaseHourAriaLabel = 'Increase hour';\r\n /** ARIA label for the ▼ Decrease-hour button. */\r\n @Input() decreaseHourAriaLabel = 'Decrease hour';\r\n /** ARIA label for the ▲ Increase-minute button. */\r\n @Input() increaseMinuteAriaLabel = 'Increase minute';\r\n /** ARIA label for the ▼ Decrease-minute button. */\r\n @Input() decreaseMinuteAriaLabel = 'Decrease minute';\r\n /** Footer button label used in `date` mode. */\r\n @Input() todayLabel = 'Today';\r\n /** Footer button label used in `time` and `datetime` modes. */\r\n @Input() nowLabel = 'Now';\r\n /** Footer clear-value button label. */\r\n @Input() clearLabel = 'Clear';\r\n /** Footer apply button label (shown in `time` and `datetime` modes). */\r\n @Input() applyLabel = 'Apply';\r\n\r\n /** Emits the selected `Date` (or `null` after clearing). */\r\n @Output() readonly dateChange = new EventEmitter<Date | null>();\r\n\r\n // ── Internal state ─────────────────────────────────────────────────────────\r\n\r\n /** @internal Currently selected Date model value. */\r\n readonly _value = signal<Date | null>(null);\r\n\r\n /** @internal Month index (0–11) of the calendar viewport. */\r\n readonly _viewMonth = signal(new Date().getMonth());\r\n\r\n /** @internal Year of the calendar viewport. */\r\n readonly _viewYear = signal(new Date().getFullYear());\r\n\r\n /** @internal Which sub-view is active: 'days' | 'months' | 'years'. */\r\n readonly _calView = signal<'days' | 'months' | 'years'>('days');\r\n\r\n /** @internal Hours in the time picker (0–23). */\r\n readonly _hours = signal(0);\r\n\r\n /** @internal Minutes in the time picker (0–59). */\r\n readonly _minutes = signal(0);\r\n\r\n /** @internal Whether the overlay panel is open. */\r\n _open = false;\r\n\r\n private _overlayRef: OverlayRef | null = null;\r\n private _portal: TemplatePortal | null = null;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n private _onChange: (v: Date | null) => void = () => {};\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n _onTouched: () => void = () => {};\r\n\r\n // ── Computed ───────────────────────────────────────────────────────────────\r\n\r\n /** @internal Human-readable display text for the trigger. */\r\n readonly _displayText = computed(() => {\r\n const v = this._value();\r\n if (!v) return '';\r\n const date = `${v.getFullYear()}-${_pad2(v.getMonth() + 1)}-${_pad2(v.getDate())}`;\r\n const time = `${_pad2(v.getHours())}:${_pad2(v.getMinutes())}`;\r\n if (this.mode === 'date') return date;\r\n if (this.mode === 'time') return time;\r\n return `${date} ${time}`;\r\n });\r\n\r\n /** @internal Current view month name. */\r\n readonly _monthName = computed(() => MONTH_NAMES[this._viewMonth()]);\r\n\r\n /** @internal HH display. */\r\n readonly _hoursDisplay = computed(() => _pad2(this._hours()));\r\n\r\n /** @internal MM display. */\r\n readonly _minutesDisplay = computed(() => _pad2(this._minutes()));\r\n\r\n /** @internal 20-year range around view year for the year grid. */\r\n readonly _yearRange = computed(() => {\r\n const base = Math.floor(this._viewYear() / 10) * 10 - 4;\r\n return Array.from({ length: 20 }, (_, i) => base + i);\r\n });\r\n\r\n /** @internal Calendar day cells for the current view month/year. */\r\n readonly _days = computed<_CalendarDay[]>(() => {\r\n const year = this._viewYear();\r\n const month = this._viewMonth();\r\n const today = _startOfDay(new Date());\r\n const selectedVal = this._value();\r\n const selected = selectedVal ? _startOfDay(selectedVal) : null;\r\n\r\n const firstDow = new Date(year, month, 1).getDay(); // 0=Sun\r\n const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n const daysInPrevMonth = new Date(year, month, 0).getDate();\r\n\r\n const cells: _CalendarDay[] = [];\r\n\r\n // Leading days from previous month\r\n for (let i = firstDow - 1; i >= 0; i--) {\r\n const d = daysInPrevMonth - i;\r\n const date = new Date(year, month - 1, d);\r\n cells.push(this._makeDay(date, false, today, selected));\r\n }\r\n // Current month\r\n for (let d = 1; d <= daysInMonth; d++) {\r\n const date = new Date(year, month, d);\r\n cells.push(this._makeDay(date, true, today, selected));\r\n }\r\n // Trailing from next month\r\n const remaining = 42 - cells.length; // always 6 rows of 7\r\n for (let d = 1; d <= remaining; d++) {\r\n const date = new Date(year, month + 1, d);\r\n cells.push(this._makeDay(date, false, today, selected));\r\n }\r\n\r\n return cells;\r\n });\r\n\r\n // ── Lifecycle ──────────────────────────────────────────────────────────────\r\n\r\n ngOnDestroy(): void {\r\n this._closePanel();\r\n this._overlayRef?.dispose();\r\n }\r\n\r\n // ── ControlValueAccessor ───────────────────────────────────────────────────\r\n\r\n writeValue(value: unknown): void {\r\n if (value instanceof Date && !isNaN(value.getTime())) {\r\n this._value.set(value);\r\n this._hours.set(value.getHours());\r\n this._minutes.set(value.getMinutes());\r\n this._viewMonth.set(value.getMonth());\r\n this._viewYear.set(value.getFullYear());\r\n } else {\r\n this._value.set(null);\r\n }\r\n this._cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (v: Date | null) => void): void {\r\n this._onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this._onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this._cdr.markForCheck();\r\n }\r\n\r\n // ── Panel ──────────────────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n _togglePanel(): void {\r\n if (this._open) {\r\n this._closePanel();\r\n } else {\r\n this._openPanel();\r\n }\r\n }\r\n\r\n private _openPanel(): void {\r\n if (this._open) return;\r\n\r\n const anchor = this._triggerEl?.nativeElement ?? this._host.nativeElement;\r\n\r\n const positionStrategy = this._overlay\r\n .position()\r\n .flexibleConnectedTo(anchor)\r\n .withPositions([\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: 4,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n offsetY: -4,\r\n },\r\n ])\r\n .withFlexibleDimensions(false)\r\n .withPush(false);\r\n\r\n this._overlayRef = this._overlay.create({\r\n positionStrategy,\r\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n });\r\n\r\n this._overlayRef.backdropClick().subscribe(() => {\r\n this._onTouched();\r\n this._closePanel();\r\n });\r\n\r\n this._overlayRef.keydownEvents().subscribe((e) => {\r\n if (e.key === 'Escape') {\r\n this._onTouched();\r\n this._closePanel();\r\n this._triggerEl?.nativeElement.focus();\r\n }\r\n });\r\n\r\n this._portal = new TemplatePortal(this._panelTpl, this._vcr);\r\n this._overlayRef.attach(this._portal);\r\n\r\n // Sync spinner with current value\r\n const v = this._value();\r\n if (v) {\r\n this._hours.set(v.getHours());\r\n this._minutes.set(v.getMinutes());\r\n this._viewMonth.set(v.getMonth());\r\n this._viewYear.set(v.getFullYear());\r\n }\r\n this._calView.set('days');\r\n\r\n this._open = true;\r\n this._cdr.markForCheck();\r\n }\r\n\r\n /** @internal */\r\n _closePanel(): void {\r\n if (!this._open) return;\r\n this._overlayRef?.detach();\r\n this._open = false;\r\n this._cdr.markForCheck();\r\n }\r\n\r\n // ── Calendar navigation ────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n _prevMonth(): void {\r\n if (this._calView() !== 'days') {\r\n const base = Math.floor(this._viewYear() / 10) * 10 - 4;\r\n this._viewYear.set(base - 10);\r\n return;\r\n }\r\n let m = this._viewMonth() - 1;\r\n let y = this._viewYear();\r\n if (m < 0) {\r\n m = 11;\r\n y--;\r\n }\r\n this._viewMonth.set(m);\r\n this._viewYear.set(y);\r\n }\r\n\r\n /** @internal */\r\n _nextMonth(): void {\r\n if (this._calView() !== 'days') {\r\n const base = Math.floor(this._viewYear() / 10) * 10 - 4;\r\n this._viewYear.set(base + 10);\r\n return;\r\n }\r\n let m = this._viewMonth() + 1;\r\n let y = this._viewYear();\r\n if (m > 11) {\r\n m = 0;\r\n y++;\r\n }\r\n this._viewMonth.set(m);\r\n this._viewYear.set(y);\r\n }\r\n\r\n /** @internal */\r\n _toggleCalView(): void {\r\n const v = this._calView();\r\n if (v === 'days') this._calView.set('months');\r\n else if (v === 'months') this._calView.set('years');\r\n else this._calView.set('days');\r\n }\r\n\r\n /** @internal */\r\n _selectMonth(month: number): void {\r\n this._viewMonth.set(month);\r\n this._calView.set('days');\r\n }\r\n\r\n /** @internal */\r\n _selectYear(year: number): void {\r\n this._viewYear.set(year);\r\n this._calView.set('months');\r\n }\r\n\r\n // ── Day selection ──────────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n _selectDay(date: Date): void {\r\n const next = new Date(date);\r\n next.setHours(this._hours(), this._minutes(), 0, 0);\r\n this._value.set(next);\r\n this._onChange(next);\r\n this.dateChange.emit(next);\r\n\r\n if (this.mode === 'date') {\r\n this._closePanel();\r\n }\r\n this._cdr.markForCheck();\r\n }\r\n\r\n /** @internal Apply the current time to the value and close (for mode=time or datetime). */\r\n _applyTime(): void {\r\n const base = this._value() ?? new Date();\r\n const next = new Date(base);\r\n next.setHours(this._hours(), this._minutes(), 0, 0);\r\n this._value.set(next);\r\n this._onChange(next);\r\n this.dateChange.emit(next);\r\n this._closePanel();\r\n }\r\n\r\n /** @internal */\r\n _selectNow(): void {\r\n const now = new Date();\r\n if (this.mode === 'date') {\r\n const d = _startOfDay(now);\r\n this._value.set(d);\r\n this._onChange(d);\r\n this.dateChange.emit(d);\r\n this._viewMonth.set(now.getMonth());\r\n this._viewYear.set(now.getFullYear());\r\n this._closePanel();\r\n } else if (this.mode === 'time') {\r\n this._hours.set(now.getHours());\r\n this._minutes.set(now.getMinutes());\r\n this._applyTime();\r\n } else {\r\n this._hours.set(now.getHours());\r\n this._minutes.set(now.getMinutes());\r\n this._viewMonth.set(now.getMonth());\r\n this._viewYear.set(now.getFullYear());\r\n this._applyTime();\r\n }\r\n this._cdr.markForCheck();\r\n }\r\n\r\n /** @internal */\r\n _clear(): void {\r\n this._value.set(null);\r\n this._onChange(null);\r\n this.dateChange.emit(null);\r\n this._closePanel();\r\n this._cdr.markForCheck();\r\n }\r\n\r\n // ── Time spinners ──────────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n _incHours(): void {\r\n this._hours.set((this._hours() + 1) % 24);\r\n }\r\n /** @internal */\r\n _decHours(): void {\r\n this._hours.set((this._hours() + 23) % 24);\r\n }\r\n /** @internal */\r\n _incMinutes(): void {\r\n this._minutes.set((this._minutes() + 1) % 60);\r\n }\r\n /** @internal */\r\n _decMinutes(): void {\r\n this._minutes.set((this._minutes() + 59) % 60);\r\n }\r\n\r\n // ── Host keyboard ──────────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n _onHostKeydown(event: KeyboardEvent): void {\r\n if (this.disabled) return;\r\n if ((event.key === 'Enter' || event.key === ' ') && !this._open) {\r\n event.preventDefault();\r\n this._openPanel();\r\n }\r\n if (event.key === 'Escape' && this._open) {\r\n event.stopPropagation();\r\n this._closePanel();\r\n }\r\n }\r\n\r\n // ── Helpers ────────────────────────────────────────────────────────────────\r\n\r\n private _makeDay(\r\n date: Date,\r\n currentMonth: boolean,\r\n today: Date,\r\n selected: Date | null,\r\n ): _CalendarDay {\r\n const startOfDate = _startOfDay(date);\r\n const disabled =\r\n (!!this.min && startOfDate < _startOfDay(this.min)) ||\r\n (!!this.max && startOfDate > _startOfDay(this.max));\r\n return {\r\n date,\r\n day: date.getDate(),\r\n currentMonth,\r\n today: _isSameDay(startOfDate, today),\r\n selected: selected ? _isSameDay(startOfDate, selected) : false,\r\n disabled,\r\n };\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n InjectionToken,\r\n inject,\r\n signal,\r\n computed,\r\n OnChanges,\r\n SimpleChanges,\r\n forwardRef,\r\n} from '@angular/core';\r\nimport { RcButtonComponent } from '../button/rc-button';\r\nimport { RcIconComponent } from '../icon/rc-icon';\r\n\r\n// ── Types ──────────────────────────────────────────────────────────────────────\r\n\r\n/** A single node in the tree data model. */\r\nexport interface RcTreeNodeData {\r\n /** Unique identifier for this node. */\r\n id: string | number;\r\n /** Display label. */\r\n label: string;\r\n /** Child nodes, if any. */\r\n children?: RcTreeNodeData[];\r\n /** Whether this node is disabled (cannot be selected or expanded). */\r\n disabled?: boolean;\r\n}\r\n\r\n/** How the tree handles selection. */\r\nexport type RcTreeSelectionMode = 'single' | 'multiple' | 'none';\r\n\r\n// ── Injection token ────────────────────────────────────────────────────────────\r\n\r\n/** @internal Token used by `RcTreeNodeComponent` to communicate with its `RcTreeComponent`. */\r\nexport const RC_TREE = new InjectionToken<RcTreeComponent>('RC_TREE');\r\n\r\n// ── Node component ─────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * @internal Renders a single tree node and its children recursively.\r\n * Not part of the public API — use `rc-tree` with `[nodes]` instead.\r\n */\r\n@Component({\r\n selector: 'rc-tree-node',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n RcButtonComponent,\r\n RcIconComponent,\r\n forwardRef(() => RcTreeNodeComponent),\r\n ],\r\n host: { class: 'rc-tree-node' },\r\n template: `\r\n <!-- ── Row ─────────────────────────────────────────────────────────── -->\r\n <div\r\n class=\"rc-tree-node-row\"\r\n role=\"treeitem\"\r\n [attr.aria-expanded]=\"hasChildren ? _expanded() : null\"\r\n [attr.aria-selected]=\"_tree.selectionMode !== 'none' ? _selected() : null\"\r\n [attr.aria-disabled]=\"node.disabled || null\"\r\n [class.rc-tree-node-selected]=\"_selected()\"\r\n [class.rc-tree-node-disabled]=\"node.disabled\"\r\n [style.paddingLeft.rem]=\"level * 1.25\"\r\n [attr.tabindex]=\"node.disabled ? -1 : 0\"\r\n (click)=\"!node.disabled && _onRowClick()\"\r\n (keydown.enter)=\"!node.disabled && _onRowClick()\"\r\n (keydown.space)=\"$event.preventDefault(); !node.disabled && _onRowClick()\"\r\n >\r\n <!-- Expand / collapse button (rcButton ghost sm iconOnly) -->\r\n @if (hasChildren) {\r\n <button\r\n rcButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n [iconOnly]=\"true\"\r\n type=\"button\"\r\n class=\"rc-tree-expand-btn\"\r\n [attr.aria-label]=\"_expanded() ? 'Collapse' : 'Expand'\"\r\n (click)=\"$event.stopPropagation(); !node.disabled && _toggleExpand()\"\r\n >\r\n <rc-icon\r\n name=\"chevron-down\"\r\n class=\"rc-tree-chevron\"\r\n [class.rc-tree-chevron-open]=\"_expanded()\"\r\n aria-hidden=\"true\"\r\n ></rc-icon>\r\n </button>\r\n } @else {\r\n <span class=\"rc-tree-node-leaf-spacer\" aria-hidden=\"true\"></span>\r\n }\r\n\r\n <!-- Label -->\r\n <span class=\"rc-tree-node-label\">{{ node.label }}</span>\r\n </div>\r\n\r\n <!-- ── Children ─────────────────────────────────────────────────────── -->\r\n @if (_expanded() && hasChildren) {\r\n <div class=\"rc-tree-node-children\" role=\"group\">\r\n @for (child of node.children; track child.id) {\r\n <rc-tree-node [node]=\"child\" [level]=\"level + 1\"></rc-tree-node>\r\n }\r\n </div>\r\n }\r\n `,\r\n})\r\nexport class RcTreeNodeComponent {\r\n readonly _tree = inject(RC_TREE);\r\n\r\n /** @internal The node data for this row. */\r\n @Input({ required: true }) node!: RcTreeNodeData;\r\n\r\n /** @internal Nesting level (0 = root). Used for indentation. */\r\n @Input() level = 0;\r\n\r\n get hasChildren(): boolean {\r\n return (this.node.children?.length ?? 0) > 0;\r\n }\r\n\r\n readonly _expanded = computed(() =>\r\n this._tree._expandedIds().has(this.node.id),\r\n );\r\n\r\n readonly _selected = computed(() =>\r\n this._tree._selectedIds().has(this.node.id),\r\n );\r\n\r\n /** @internal */\r\n _toggleExpand(): void {\r\n const ids = new Set(this._tree._expandedIds());\r\n if (ids.has(this.node.id)) {\r\n ids.delete(this.node.id);\r\n this._tree.nodeCollapse.emit(this.node);\r\n } else {\r\n ids.add(this.node.id);\r\n this._tree.nodeExpand.emit(this.node);\r\n }\r\n this._tree._expandedIds.set(ids);\r\n }\r\n\r\n /** @internal */\r\n _onRowClick(): void {\r\n if (this._tree.selectionMode !== 'none') {\r\n this._tree._selectNode(this.node);\r\n }\r\n if (this.hasChildren) {\r\n this._toggleExpand();\r\n }\r\n this._tree.nodeClick.emit(this.node);\r\n }\r\n}\r\n\r\n// ── Tree component ─────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A hierarchical tree view that renders nested `RcTreeNodeData` items.\r\n *\r\n * Selection modes: `'single'` (default) | `'multiple'` | `'none'`.\r\n *\r\n * @example Basic tree\r\n * ```html\r\n * <rc-tree [nodes]=\"tree\" [(selection)]=\"selected\"></rc-tree>\r\n * ```\r\n *\r\n * @example Multi-select\r\n * ```html\r\n * <rc-tree [nodes]=\"tree\" selectionMode=\"multiple\" [(selection)]=\"selected\"></rc-tree>\r\n * ```\r\n *\r\n * @example No selection (display only)\r\n * ```html\r\n * <rc-tree [nodes]=\"tree\" selectionMode=\"none\"></rc-tree>\r\n * ```\r\n *\r\n * @example Pre-expanded nodes\r\n * ```html\r\n * <rc-tree [nodes]=\"tree\" [expandedIds]=\"['folder-1']\"></rc-tree>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-tree',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [RcTreeNodeComponent],\r\n providers: [\r\n { provide: RC_TREE, useExisting: forwardRef(() => RcTreeComponent) },\r\n ],\r\n host: {\r\n class: 'rc-tree',\r\n role: 'tree',\r\n '[class.rc-tree-single]': \"selectionMode === 'single'\",\r\n '[class.rc-tree-multiple]': \"selectionMode === 'multiple'\",\r\n },\r\n template: `\r\n @for (node of nodes; track node.id) {\r\n <rc-tree-node [node]=\"node\" [level]=\"0\"></rc-tree-node>\r\n }\r\n `,\r\n})\r\nexport class RcTreeComponent implements OnChanges {\r\n // ── Inputs ─────────────────────────────────────────────────────────────────\r\n\r\n /** Tree data to render. */\r\n @Input() nodes: RcTreeNodeData[] = [];\r\n\r\n /**\r\n * How selection works.\r\n * - `'single'` — only one node selected at a time (default).\r\n * - `'multiple'` — any number of nodes may be selected.\r\n * - `'none'` — nodes cannot be selected.\r\n */\r\n @Input() selectionMode: RcTreeSelectionMode = 'single';\r\n\r\n /**\r\n * IDs of nodes that should be selected.\r\n * Use with `(selectionChange)` for two-way binding via `[(selection)]`.\r\n */\r\n @Input() selection: (string | number)[] = [];\r\n\r\n /**\r\n * IDs of nodes that should start expanded.\r\n * Changes after init are reflected reactively.\r\n */\r\n @Input() expandedIds: (string | number)[] = [];\r\n\r\n // ── Outputs ────────────────────────────────────────────────────────────────\r\n\r\n /** Emits the updated selection array whenever it changes. */\r\n @Output() readonly selectionChange = new EventEmitter<(string | number)[]>();\r\n\r\n /** Emits the `RcTreeNodeData` of a node when it is clicked. */\r\n @Output() readonly nodeClick = new EventEmitter<RcTreeNodeData>();\r\n\r\n /** Emits the `RcTreeNodeData` of a node when it expands. */\r\n @Output() readonly nodeExpand = new EventEmitter<RcTreeNodeData>();\r\n\r\n /** Emits the `RcTreeNodeData` of a node when it collapses. */\r\n @Output() readonly nodeCollapse = new EventEmitter<RcTreeNodeData>();\r\n\r\n // ── Internal state ─────────────────────────────────────────────────────────\r\n\r\n /** @internal */\r\n readonly _expandedIds = signal<Set<string | number>>(new Set());\r\n\r\n /** @internal */\r\n readonly _selectedIds = signal<Set<string | number>>(new Set());\r\n\r\n // ── Lifecycle ──────────────────────────────────────────────────────────────\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['selection']) {\r\n this._selectedIds.set(new Set(this.selection));\r\n }\r\n if (changes['expandedIds']) {\r\n this._expandedIds.set(new Set(this.expandedIds));\r\n }\r\n }\r\n\r\n // ── Internal API (used by RcTreeNodeComponent) ─────────────────────────────\r\n\r\n /** @internal Called by node when user clicks it. */\r\n _selectNode(node: RcTreeNodeData): void {\r\n if (this.selectionMode === 'none') return;\r\n\r\n const ids = new Set(this._selectedIds());\r\n\r\n if (this.selectionMode === 'single') {\r\n if (ids.has(node.id)) {\r\n ids.delete(node.id);\r\n } else {\r\n ids.clear();\r\n ids.add(node.id);\r\n }\r\n } else {\r\n // multiple\r\n if (ids.has(node.id)) {\r\n ids.delete(node.id);\r\n } else {\r\n ids.add(node.id);\r\n }\r\n }\r\n\r\n this._selectedIds.set(ids);\r\n this.selectionChange.emit([...ids]);\r\n }\r\n\r\n /** Expand all nodes in the tree. */\r\n expandAll(): void {\r\n const ids = new Set<string | number>();\r\n const collect = (nodes: RcTreeNodeData[]) => {\r\n for (const n of nodes) {\r\n if (n.children?.length) {\r\n ids.add(n.id);\r\n collect(n.children);\r\n }\r\n }\r\n };\r\n collect(this.nodes);\r\n this._expandedIds.set(ids);\r\n }\r\n\r\n /** Collapse all nodes in the tree. */\r\n collapseAll(): void {\r\n this._expandedIds.set(new Set());\r\n }\r\n\r\n /** Clear all selections. */\r\n clearSelection(): void {\r\n this._selectedIds.set(new Set());\r\n this.selectionChange.emit([]);\r\n }\r\n}\r\n","import {\r\n Component,\r\n Directive,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n ChangeDetectionStrategy,\r\n inject,\r\n ElementRef,\r\n ViewContainerRef,\r\n ComponentRef,\r\n Renderer2,\r\n} from '@angular/core';\r\n\r\n// ── Types ──────────────────────────────────────────────────────────────────────\r\n\r\n/** Colour variant for the spinner circle. */\r\nexport type RcSpinnerStatus =\r\n | 'primary'\r\n | 'info'\r\n | 'success'\r\n | 'warning'\r\n | 'danger'\r\n | 'basic';\r\n\r\n/** Size variant for the spinner. */\r\nexport type RcSpinnerSize = 'sm' | 'md' | 'lg';\r\n\r\n// ── Spinner Component ──────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A spinning circle loader backed by Resolve design tokens.\r\n *\r\n * Can be used standalone as an inline or section-level loader, or placed on any\r\n * host element via the `[rcSpinner]` directive which inserts it as an overlay.\r\n *\r\n * @example Inline usage\r\n * ```html\r\n * <rc-spinner></rc-spinner>\r\n * <rc-spinner status=\"success\" size=\"lg\"></rc-spinner>\r\n * <rc-spinner status=\"danger\" message=\"Saving failed — retrying…\"></rc-spinner>\r\n * ```\r\n *\r\n * @example Status colours\r\n * ```html\r\n * <rc-spinner status=\"primary\"></rc-spinner>\r\n * <rc-spinner status=\"info\"></rc-spinner>\r\n * <rc-spinner status=\"success\"></rc-spinner>\r\n * <rc-spinner status=\"warning\"></rc-spinner>\r\n * <rc-spinner status=\"danger\"></rc-spinner>\r\n * <rc-spinner status=\"basic\"></rc-spinner>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-spinner',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'rc-spinner',\r\n '[class.rc-spinner-sm]': \"size === 'sm'\",\r\n '[class.rc-spinner-md]': \"size === 'md'\",\r\n '[class.rc-spinner-lg]': \"size === 'lg'\",\r\n '[class.rc-spinner-primary]': \"status === 'primary'\",\r\n '[class.rc-spinner-info]': \"status === 'info'\",\r\n '[class.rc-spinner-success]': \"status === 'success'\",\r\n '[class.rc-spinner-warning]': \"status === 'warning'\",\r\n '[class.rc-spinner-danger]': \"status === 'danger'\",\r\n '[class.rc-spinner-basic]': \"status === 'basic'\",\r\n '[attr.role]': '\"status\"',\r\n '[attr.aria-label]': 'message || \"Loading\"',\r\n '[attr.aria-live]': '\"polite\"',\r\n },\r\n template: `\r\n <span class=\"rc-spinner-icon\" aria-hidden=\"true\"></span>\r\n @if (message) {\r\n <span class=\"rc-spinner-message\">{{ message }}</span>\r\n }\r\n `,\r\n})\r\nexport class RcSpinnerComponent {\r\n /** Colour status of the spinner circle. Default: `'primary'` */\r\n @Input() status: RcSpinnerStatus = 'primary';\r\n\r\n /** Visual size of the spinner. Default: `'md'` */\r\n @Input() size: RcSpinnerSize = 'md';\r\n\r\n /** Optional label displayed below the spinner icon. */\r\n @Input() message = '';\r\n}\r\n\r\n// ── Spinner Directive ──────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Directive that overlays a spinner on any host element while `[rcSpinner]` is truthy.\r\n *\r\n * The host automatically receives `position: relative` (via the `rc-spinner-container`\r\n * class) so the spinner is positioned relative to it.\r\n *\r\n * **Note:** avoid applying to void/self-closing elements (`<input>`, `<img>`, etc.).\r\n * Wrap them in a `<div>` first.\r\n *\r\n * @example Overlay on a card\r\n * ```html\r\n * <rc-card [rcSpinner]=\"isLoading\" rcSpinnerMessage=\"Fetching data…\">\r\n * Content here\r\n * </rc-card>\r\n * ```\r\n *\r\n * @example Status and size\r\n * ```html\r\n * <div [rcSpinner]=\"saving\" rcSpinnerStatus=\"success\" rcSpinnerSize=\"lg\">\r\n * <form>…</form>\r\n * </div>\r\n * ```\r\n *\r\n * @example Programmatic toggle\r\n * ```html\r\n * <div [rcSpinner]=\"loading\" rcSpinnerMessage=\"Please wait…\" style=\"padding:2rem\">\r\n * <p>Content</p>\r\n * </div>\r\n * <button rcButton (click)=\"loading = !loading\">Toggle spinner</button>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcSpinner]',\r\n standalone: true,\r\n host: {\r\n '[class.rc-spinner-container]': 'rcSpinner',\r\n },\r\n})\r\nexport class RcSpinnerDirective implements OnChanges, OnDestroy {\r\n /** When `true`, the spinner overlay is rendered inside the host element. */\r\n @Input() rcSpinner = false;\r\n\r\n /** Colour status forwarded to the inner `rc-spinner`. Default: `'primary'` */\r\n @Input() rcSpinnerStatus: RcSpinnerStatus = 'primary';\r\n\r\n /** Size forwarded to the inner `rc-spinner`. Default: `'md'` */\r\n @Input() rcSpinnerSize: RcSpinnerSize = 'md';\r\n\r\n /** Optional message label forwarded to the inner `rc-spinner`. */\r\n @Input() rcSpinnerMessage = '';\r\n\r\n private readonly _vcr = inject(ViewContainerRef);\r\n private readonly _el = inject(ElementRef) as ElementRef<HTMLElement>;\r\n private readonly _renderer = inject(Renderer2);\r\n private _spinnerRef: ComponentRef<RcSpinnerComponent> | null = null;\r\n\r\n ngOnChanges(): void {\r\n if (this.rcSpinner) {\r\n if (!this._spinnerRef) {\r\n this._spinnerRef = this._vcr.createComponent(RcSpinnerComponent);\r\n this._renderer.appendChild(\r\n this._el.nativeElement,\r\n this._spinnerRef.location.nativeElement,\r\n );\r\n }\r\n this._spinnerRef.setInput('status', this.rcSpinnerStatus);\r\n this._spinnerRef.setInput('size', this.rcSpinnerSize);\r\n this._spinnerRef.setInput('message', this.rcSpinnerMessage);\r\n } else {\r\n this._spinnerRef?.destroy();\r\n this._spinnerRef = null;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._spinnerRef?.destroy();\r\n }\r\n}\r\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\n\r\n/** Status colour variant for the progress bar fill. */\r\nexport type RcProgressBarStatus =\r\n | 'primary'\r\n | 'info'\r\n | 'success'\r\n | 'warning'\r\n | 'danger';\r\n\r\n/**\r\n * A themed horizontal progress bar — determinate or indeterminate.\r\n *\r\n * Set `[value]` (0–100) for a standard progress bar. Set `[indeterminate]=\"true\"`\r\n * for an animated looping bar (value is ignored).\r\n *\r\n * @example Basic\r\n * ```html\r\n * <rc-progress-bar [value]=\"60\"></rc-progress-bar>\r\n * ```\r\n *\r\n * @example Status colours\r\n * ```html\r\n * <rc-progress-bar [value]=\"80\" status=\"success\"></rc-progress-bar>\r\n * <rc-progress-bar [value]=\"20\" status=\"danger\"></rc-progress-bar>\r\n * ```\r\n *\r\n * @example Striped\r\n * ```html\r\n * <rc-progress-bar [value]=\"55\" [striped]=\"true\" status=\"info\"></rc-progress-bar>\r\n * ```\r\n *\r\n * @example Indeterminate\r\n * ```html\r\n * <rc-progress-bar [indeterminate]=\"true\"></rc-progress-bar>\r\n * ```\r\n *\r\n * @example With label\r\n * ```html\r\n * <rc-progress-bar [value]=\"72\" label=\"Uploading…\"></rc-progress-bar>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-progress-bar',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'rc-progress-bar',\r\n '[class.rc-progress-bar-primary]': \"status === 'primary'\",\r\n '[class.rc-progress-bar-info]': \"status === 'info'\",\r\n '[class.rc-progress-bar-success]': \"status === 'success'\",\r\n '[class.rc-progress-bar-warning]': \"status === 'warning'\",\r\n '[class.rc-progress-bar-danger]': \"status === 'danger'\",\r\n '[class.rc-progress-bar-indeterminate]': 'indeterminate',\r\n '[class.rc-progress-bar-striped]': 'striped',\r\n '[attr.role]': '\"progressbar\"',\r\n '[attr.aria-valuenow]': 'indeterminate ? null : _clamped',\r\n '[attr.aria-valuemin]': '0',\r\n '[attr.aria-valuemax]': '100',\r\n '[attr.aria-label]': 'label || null',\r\n '[attr.aria-valuetext]': 'indeterminate ? \"Loading\" : _clamped + \"%\"',\r\n },\r\n template: `\r\n @if (label) {\r\n <div class=\"rc-progress-bar-label\">\r\n <span>{{ label }}</span>\r\n @if (!indeterminate) {\r\n <span>{{ _clamped }}%</span>\r\n }\r\n </div>\r\n }\r\n <div class=\"rc-progress-bar-track\">\r\n <div\r\n class=\"rc-progress-bar-fill\"\r\n [style.width.%]=\"indeterminate ? null : _clamped\"\r\n ></div>\r\n </div>\r\n `,\r\n})\r\nexport class RcProgressBarComponent {\r\n /** Progress value from 0 to 100. Ignored when `indeterminate` is true. Default: `0` */\r\n @Input() value = 0;\r\n\r\n /** Colour variant of the fill. Default: `'primary'` */\r\n @Input() status: RcProgressBarStatus = 'primary';\r\n\r\n /** When true, shows an animated looping bar. Default: `false` */\r\n @Input() indeterminate = false;\r\n\r\n /** When true, adds a diagonal stripe pattern to the fill. Default: `false` */\r\n @Input() striped = false;\r\n\r\n /** Optional text label shown above the bar. When set, also shows the % value. */\r\n @Input() label = '';\r\n\r\n /** @internal Clamped value between 0 and 100. */\r\n get _clamped(): number {\r\n return Math.min(100, Math.max(0, this.value));\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n signal,\r\n computed,\r\n ViewChild,\r\n ElementRef,\r\n} from '@angular/core';\r\nimport { RcIconComponent } from '../icon/rc-icon';\r\nimport { RcButtonComponent } from '../button/rc-button';\r\n\r\n/** An individual file entry tracked by the upload component. */\r\nexport interface RcUploadedFile {\r\n /** Underlying native `File` object. */\r\n file: File;\r\n /** Human-readable file size string (e.g. `\"2.4 MB\"`). */\r\n sizeLabel: string;\r\n /** Whether this file failed validation (size, type, or count). */\r\n error?: string;\r\n}\r\n\r\nfunction formatSize(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\r\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\r\n}\r\n\r\n/**\r\n * A drag-and-drop / click-to-browse file upload component with inline validation.\r\n *\r\n * Selected files appear as a list below the drop zone. Validation errors are\r\n * shown per-file. Emits the full `File[]` (valid files only) on every change.\r\n *\r\n * @example Basic single-file upload\r\n * ```html\r\n * <rc-file-upload (filesChange)=\"onFiles($event)\"></rc-file-upload>\r\n * ```\r\n *\r\n * @example Multiple files with restrictions\r\n * ```html\r\n * <rc-file-upload\r\n * [multiple]=\"true\"\r\n * accept=\".png,.jpg,.jpeg\"\r\n * [maxFileSizeMb]=\"5\"\r\n * [maxFiles]=\"4\"\r\n * (filesChange)=\"attachments = $event\"\r\n * ></rc-file-upload>\r\n * ```\r\n *\r\n * @example Disabled\r\n * ```html\r\n * <rc-file-upload [disabled]=\"true\"></rc-file-upload>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-file-upload',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [RcIconComponent, RcButtonComponent],\r\n host: { class: 'rc-file-upload' },\r\n template: `\r\n <!-- Hidden native input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n class=\"rc-file-upload-input\"\r\n [multiple]=\"multiple\"\r\n [accept]=\"accept\"\r\n [disabled]=\"disabled\"\r\n (change)=\"_onInputChange($event)\"\r\n />\r\n\r\n <!-- Drop zone -->\r\n <div\r\n class=\"rc-file-upload-zone\"\r\n role=\"button\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n [class.rc-file-upload-zone-active]=\"_dragOver()\"\r\n [class.rc-file-upload-zone-disabled]=\"disabled\"\r\n [class.rc-file-upload-zone-error]=\"_hasErrors()\"\r\n (click)=\"!disabled && fileInput.click()\"\r\n (keydown.enter)=\"!disabled && fileInput.click()\"\r\n (keydown.space)=\"$event.preventDefault(); !disabled && fileInput.click()\"\r\n (dragover)=\"$event.preventDefault(); !disabled && _dragOver.set(true)\"\r\n (dragleave)=\"_dragOver.set(false)\"\r\n (drop)=\"$event.preventDefault(); !disabled && _onDrop($event)\"\r\n >\r\n <rc-icon\r\n name=\"cloud-upload-outline\"\r\n class=\"rc-file-upload-icon\"\r\n ></rc-icon>\r\n <span class=\"rc-file-upload-title\">\r\n {{ dropTitleLabel }}\r\n <span class=\"rc-file-upload-browse\">{{ browseLabel }}</span>\r\n </span>\r\n <span class=\"rc-file-upload-hint\">\r\n @if (accept) {\r\n {{ acceptedLabel }} {{ accept }}\r\n @if (maxFileSizeMb) {\r\n {{ upToLabel }} {{ maxFileSizeMb }} {{ mbLabel }}\r\n }\r\n @if (maxFiles && multiple) {\r\n {{ maxFilesHintLabel }} {{ maxFiles }} {{ filesLabel }}\r\n }\r\n } @else if (maxFileSizeMb) {\r\n {{ maxFileSizeLabel }} {{ maxFileSizeMb }} {{ mbLabel }}\r\n @if (maxFiles && multiple) {\r\n {{ maxFilesHintLabel }} {{ maxFiles }} {{ filesLabel }}\r\n }\r\n } @else if (maxFiles && multiple) {\r\n {{ onlyMaxFilesLabel }} {{ maxFiles }}\r\n } @else {\r\n {{ anyFileTypeLabel }}\r\n }\r\n </span>\r\n </div>\r\n\r\n <!-- File list -->\r\n @if (_files().length) {\r\n <ul class=\"rc-file-upload-list\" role=\"list\">\r\n @for (entry of _files(); track entry.file.name) {\r\n <li\r\n class=\"rc-file-upload-item\"\r\n [class.rc-file-upload-item-error]=\"entry.error\"\r\n >\r\n <rc-icon\r\n [name]=\"entry.error ? 'alert-circle-outline' : 'file-outline'\"\r\n class=\"rc-file-upload-item-icon\"\r\n ></rc-icon>\r\n <div class=\"rc-file-upload-item-info\">\r\n <span class=\"rc-file-upload-item-name\" [title]=\"entry.file.name\">\r\n {{ entry.file.name }}\r\n </span>\r\n @if (entry.error) {\r\n <span class=\"rc-file-upload-item-error-msg\">{{\r\n entry.error\r\n }}</span>\r\n } @else {\r\n <span class=\"rc-file-upload-item-size\">{{\r\n entry.sizeLabel\r\n }}</span>\r\n }\r\n </div>\r\n <button\r\n rcButton\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n [iconOnly]=\"true\"\r\n type=\"button\"\r\n [attr.aria-label]=\"removeFileAriaLabel\"\r\n (click)=\"_removeFile(entry)\"\r\n >\r\n <rc-icon name=\"close-outline\"></rc-icon>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n `,\r\n})\r\nexport class RcFileUploadComponent {\r\n @ViewChild('fileInput')\r\n private readonly _input!: ElementRef<HTMLInputElement>;\r\n\r\n /** Allow selecting multiple files. Default: `false` */\r\n @Input() multiple = false;\r\n\r\n // ── i18n labels ───────────────────────────────────────────────────────────\r\n\r\n /** Primary text in the drop zone. Default: `'Drop files here or'` */\r\n @Input() dropTitleLabel = 'Drop files here or';\r\n /** Clickable browse-text in the drop zone. Default: `'browse'` */\r\n @Input() browseLabel = 'browse';\r\n /** Hint prefix when an `accept` filter is set. Default: `'Accepted:'` */\r\n @Input() acceptedLabel = 'Accepted:';\r\n /** Hint size prefix. Default: `'· up to'` */\r\n @Input() upToLabel = '\\u00b7 up to';\r\n /** Unit label for file size. Default: `'MB'` */\r\n @Input() mbLabel = 'MB';\r\n /** Hint max-file-count prefix (inline). Default: `'· max'` */\r\n @Input() maxFilesHintLabel = '\\u00b7 max';\r\n /** Unit label after max file count. Default: `'files'` */\r\n @Input() filesLabel = 'files';\r\n /** Hint when only a file-count limit is set, no type filter. Default: `'Max files:'` */\r\n @Input() onlyMaxFilesLabel = 'Max files:';\r\n /** Hint label for the max-file-size line. Default: `'Max file size:'` */\r\n @Input() maxFileSizeLabel = 'Max file size:';\r\n /** Hint when there are no restrictions. Default: `'Any file type accepted'` */\r\n @Input() anyFileTypeLabel = 'Any file type accepted';\r\n /** ARIA label for the remove-file button. Default: `'Remove file'` */\r\n @Input() removeFileAriaLabel = 'Remove file';\r\n /** Error message factory when too many files are selected. */\r\n @Input() maxFilesErrorFn: (max: number) => string = (max) =>\r\n `Max ${max} files allowed`;\r\n /** Error message factory when a file exceeds the size limit. */\r\n @Input() fileSizeErrorFn: (mb: number) => string = (mb) =>\r\n `Exceeds ${mb} MB limit`;\r\n /** Error message when a file type is not allowed. Default: `'File type not allowed'` */\r\n @Input() fileTypeErrorLabel = 'File type not allowed';\r\n\r\n /**\r\n * Comma-separated list of accepted MIME types or file extensions.\r\n * E.g. `\".pdf,.png,image/*\"`. Passed directly to the native input.\r\n */\r\n @Input() accept = '';\r\n\r\n /** Maximum individual file size in megabytes. `0` means no limit. Default: `0` */\r\n @Input() maxFileSizeMb = 0;\r\n\r\n /**\r\n * Maximum number of files allowed (only meaningful when `multiple = true`).\r\n * `0` means no limit. Default: `0`\r\n */\r\n @Input() maxFiles = 0;\r\n\r\n /** Disables all interaction. Default: `false` */\r\n @Input() disabled = false;\r\n\r\n /** Emits the valid `File[]` whenever the selection changes. */\r\n @Output() readonly filesChange = new EventEmitter<File[]>();\r\n\r\n /** @internal */\r\n readonly _dragOver = signal(false);\r\n\r\n /** @internal */\r\n readonly _files = signal<RcUploadedFile[]>([]);\r\n\r\n /** @internal Whether any file has a validation error. */\r\n readonly _hasErrors = computed(() => this._files().some((f) => !!f.error));\r\n\r\n /** @internal Called by the native input `change` event. */\r\n _onInputChange(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files) {\r\n this._addFiles(Array.from(input.files));\r\n // Reset the input so the same file can be re-added after removal\r\n input.value = '';\r\n }\r\n }\r\n\r\n /** @internal Called on drop. */\r\n _onDrop(event: DragEvent): void {\r\n this._dragOver.set(false);\r\n const dropped = event.dataTransfer?.files;\r\n if (dropped) {\r\n this._addFiles(Array.from(dropped));\r\n }\r\n }\r\n\r\n /** @internal Remove a file from the list. */\r\n _removeFile(entry: RcUploadedFile): void {\r\n this._files.update((list) => list.filter((f) => f !== entry));\r\n this._emitValid();\r\n }\r\n\r\n private _addFiles(incoming: File[]): void {\r\n const existing = this._files();\r\n const toAdd: RcUploadedFile[] = incoming.map((file, idx) => {\r\n const countAfter = existing.length + idx + 1;\r\n const error = this._validate(file, countAfter);\r\n return { file, sizeLabel: formatSize(file.size), error };\r\n });\r\n this._files.update((list) => {\r\n if (!this.multiple) return toAdd.slice(0, 1);\r\n return [...list, ...toAdd];\r\n });\r\n this._emitValid();\r\n }\r\n\r\n private _validate(file: File, countIndex: number): string | undefined {\r\n if (this.maxFiles && this.multiple && countIndex > this.maxFiles) {\r\n return this.maxFilesErrorFn(this.maxFiles);\r\n }\r\n if (this.maxFileSizeMb && file.size > this.maxFileSizeMb * 1024 * 1024) {\r\n return this.fileSizeErrorFn(this.maxFileSizeMb);\r\n }\r\n if (this.accept) {\r\n const allowed = this.accept.split(',').map((s) => s.trim().toLowerCase());\r\n const ext = '.' + (file.name.split('.').pop() ?? '').toLowerCase();\r\n const mime = file.type.toLowerCase();\r\n const ok = allowed.some(\r\n (a) =>\r\n a === ext ||\r\n a === mime ||\r\n (a.endsWith('/*') && mime.startsWith(a.replace('/*', '/'))),\r\n );\r\n if (!ok) return this.fileTypeErrorLabel;\r\n }\r\n return undefined;\r\n }\r\n\r\n private _emitValid(): void {\r\n this.filesChange.emit(\r\n this._files()\r\n .filter((f) => !f.error)\r\n .map((f) => f.file),\r\n );\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ContentChild,\r\n TemplateRef,\r\n ChangeDetectionStrategy,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n CdkVirtualScrollViewport,\r\n CdkFixedSizeVirtualScroll,\r\n CdkVirtualForOf,\r\n} from '@angular/cdk/scrolling';\r\n\r\n// Re-export so consumers can import structural context types from @resolve-components\r\nexport { CdkVirtualForOf as RcVirtualForOf } from '@angular/cdk/scrolling';\r\n\r\n/**\r\n * A styled virtual-scrolling viewport backed by Angular CDK.\r\n *\r\n * Renders only the items visible in the scroll window — constant DOM size\r\n * regardless of list length.\r\n *\r\n * Pass the data via `[items]` and define the row template with `<ng-template let-item>`.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-virtual-scroll-viewport [items]=\"rows\" [itemSize]=\"48\" height=\"400px\">\r\n * <ng-template let-row>\r\n * <div class=\"list-row\">{{ row.name }}</div>\r\n * </ng-template>\r\n * </rc-virtual-scroll-viewport>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-virtual-scroll-viewport',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CdkVirtualScrollViewport,\r\n CdkFixedSizeVirtualScroll,\r\n CdkVirtualForOf,\r\n NgTemplateOutlet,\r\n ],\r\n host: { class: 'rc-virtual-scroll-viewport' },\r\n template: `\r\n <cdk-virtual-scroll-viewport\r\n class=\"rc-virtual-scroll-inner\"\r\n [itemSize]=\"itemSize\"\r\n [style.height]=\"height\"\r\n [minBufferPx]=\"minBufferPx\"\r\n [maxBufferPx]=\"maxBufferPx\"\r\n >\r\n <ng-container *cdkVirtualFor=\"let _item of items; trackBy: trackBy\">\r\n <ng-container\r\n *ngTemplateOutlet=\"itemTemplate; context: { $implicit: _item }\"\r\n ></ng-container>\r\n </ng-container>\r\n </cdk-virtual-scroll-viewport>\r\n `,\r\n})\r\nexport class RcVirtualScrollViewportComponent<T = unknown> {\r\n /** The data array to render. */\r\n @Input() items: T[] = [];\r\n\r\n /** Height of each item in pixels. All items must be the same height. Default: `48` */\r\n @Input() itemSize = 48;\r\n\r\n /**\r\n * CSS height of the scrollable container, e.g. `'400px'` or `'60vh'`.\r\n * Default: `'400px'`\r\n */\r\n @Input() height = '400px';\r\n\r\n /**\r\n * Minimum number of pixels outside the viewport before new items are rendered.\r\n * Default: `200`\r\n */\r\n @Input() minBufferPx = 200;\r\n\r\n /**\r\n * Maximum pixel buffer to render beyond the visible area.\r\n * Default: `400`\r\n */\r\n @Input() maxBufferPx = 400;\r\n\r\n /** Optional trackBy function, same signature as `*ngFor`'s `trackBy`. */\r\n @Input() trackBy?: (index: number, item: T) => unknown;\r\n\r\n /** The `<ng-template let-item>` content child used to render each row. */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @ContentChild(TemplateRef) itemTemplate!: TemplateRef<any>;\r\n\r\n @ViewChild(CdkVirtualScrollViewport)\r\n private readonly _cdkViewport!: CdkVirtualScrollViewport;\r\n\r\n /** Scroll to a specific index in the list. */\r\n scrollToIndex(index: number, behavior?: ScrollBehavior): void {\r\n this._cdkViewport?.scrollToIndex(index, behavior);\r\n }\r\n\r\n /** Smooth-scroll back to the first item. */\r\n scrollToStart(): void {\r\n this._cdkViewport?.scrollToIndex(0, 'smooth');\r\n }\r\n}\r\n","import {\r\n Directive,\r\n Input,\r\n OnDestroy,\r\n HostListener,\r\n inject,\r\n ElementRef,\r\n ViewContainerRef,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport {\r\n Overlay,\r\n OverlayRef,\r\n OverlayPositionBuilder,\r\n ConnectedPosition,\r\n} from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport {\r\n Component,\r\n ChangeDetectionStrategy,\r\n InjectionToken,\r\n signal,\r\n} from '@angular/core';\r\n\r\n// ── Tooltip token ──────────────────────────────────────────────────────────────\r\n\r\n/** @internal Token used to pass tooltip content to the overlay component. */\r\nexport const RC_TOOLTIP_CONTENT = new InjectionToken<{\r\n text: string;\r\n tpl: TemplateRef<unknown> | null;\r\n}>('RC_TOOLTIP_CONTENT');\r\n\r\n// ── Tooltip placement ──────────────────────────────────────────────────────────\r\n\r\nexport type RcTooltipPosition = 'top' | 'bottom' | 'left' | 'right';\r\n\r\nfunction getPositions(pos: RcTooltipPosition): ConnectedPosition[] {\r\n const map: Record<RcTooltipPosition, ConnectedPosition[]> = {\r\n top: [\r\n {\r\n originX: 'center',\r\n originY: 'top',\r\n overlayX: 'center',\r\n overlayY: 'bottom',\r\n offsetY: -6,\r\n },\r\n {\r\n originX: 'center',\r\n originY: 'bottom',\r\n overlayX: 'center',\r\n overlayY: 'top',\r\n offsetY: 6,\r\n },\r\n ],\r\n bottom: [\r\n {\r\n originX: 'center',\r\n originY: 'bottom',\r\n overlayX: 'center',\r\n overlayY: 'top',\r\n offsetY: 6,\r\n },\r\n {\r\n originX: 'center',\r\n originY: 'top',\r\n overlayX: 'center',\r\n overlayY: 'bottom',\r\n offsetY: -6,\r\n },\r\n ],\r\n left: [\r\n {\r\n originX: 'start',\r\n originY: 'center',\r\n overlayX: 'end',\r\n overlayY: 'center',\r\n offsetX: -6,\r\n },\r\n {\r\n originX: 'end',\r\n originY: 'center',\r\n overlayX: 'start',\r\n overlayY: 'center',\r\n offsetX: 6,\r\n },\r\n ],\r\n right: [\r\n {\r\n originX: 'end',\r\n originY: 'center',\r\n overlayX: 'start',\r\n overlayY: 'center',\r\n offsetX: 6,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'center',\r\n overlayX: 'end',\r\n overlayY: 'center',\r\n offsetX: -6,\r\n },\r\n ],\r\n };\r\n return map[pos];\r\n}\r\n\r\n// ── Tooltip overlay component ─────────────────────────────────────────────────\r\n\r\n/**\r\n * @internal The floating tooltip bubble rendered in the CDK overlay.\r\n */\r\n@Component({\r\n selector: 'rc-tooltip-overlay',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `<div class=\"rc-tooltip-bubble\">{{ _text() }}</div>`,\r\n})\r\nexport class RcTooltipOverlayComponent {\r\n readonly _text = signal('');\r\n}\r\n\r\n// ── Tooltip directive ─────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Lightweight tooltip directive powered by Angular CDK Overlay.\r\n *\r\n * Apply `[rcTooltip]` to any element. The tooltip appears on mouse enter and\r\n * keyboard focus, and disappears on leave / blur.\r\n *\r\n * @example Plain text tooltip\r\n * ```html\r\n * <button rcButton rcTooltip=\"Save the document\">Save</button>\r\n * ```\r\n *\r\n * @example Positioned tooltip\r\n * ```html\r\n * <rc-icon name=\"info\" rcTooltip=\"More information\" rcTooltipPosition=\"right\"></rc-icon>\r\n * ```\r\n *\r\n * @example Disabled tooltip\r\n * ```html\r\n * <span [rcTooltip]=\"hint\" [rcTooltipDisabled]=\"!showHints\">Hover me</span>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcTooltip]',\r\n standalone: true,\r\n})\r\nexport class RcTooltipDirective implements OnDestroy {\r\n /** Tooltip text. Set to an empty string to disable. */\r\n @Input('rcTooltip') text = '';\r\n\r\n /** Side the tooltip appears on. Default: `'top'` */\r\n @Input() rcTooltipPosition: RcTooltipPosition = 'top';\r\n\r\n /** Suppresses the tooltip entirely when true. Default: `false` */\r\n @Input() rcTooltipDisabled = false;\r\n\r\n private readonly _overlay = inject(Overlay);\r\n private readonly _posBuilder = inject(OverlayPositionBuilder);\r\n private readonly _elRef = inject(ElementRef) as ElementRef<HTMLElement>;\r\n private readonly _vcr = inject(ViewContainerRef);\r\n\r\n private _overlayRef: OverlayRef | null = null;\r\n private _compRef:\r\n | import('@angular/core').ComponentRef<RcTooltipOverlayComponent>\r\n | null = null;\r\n private _hideTimeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n @HostListener('mouseenter')\r\n @HostListener('focusin')\r\n _show(): void {\r\n if (this.rcTooltipDisabled || !this.text) return;\r\n if (this._hideTimeout) {\r\n clearTimeout(this._hideTimeout);\r\n this._hideTimeout = null;\r\n }\r\n if (!this._overlayRef) {\r\n const posStrategy = this._posBuilder\r\n .flexibleConnectedTo(this._elRef)\r\n .withPositions(getPositions(this.rcTooltipPosition))\r\n .withPush(true);\r\n\r\n this._overlayRef = this._overlay.create({\r\n positionStrategy: posStrategy,\r\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\r\n hasBackdrop: false,\r\n panelClass: 'rc-tooltip-panel',\r\n });\r\n }\r\n\r\n if (!this._overlayRef.hasAttached()) {\r\n const portal = new ComponentPortal(RcTooltipOverlayComponent, this._vcr);\r\n this._compRef = this._overlayRef.attach(portal);\r\n }\r\n\r\n this._compRef?.instance._text.set(this.text);\r\n this._overlayRef?.overlayElement?.setAttribute('aria-hidden', 'true');\r\n }\r\n\r\n @HostListener('mouseleave')\r\n @HostListener('focusout')\r\n _hide(): void {\r\n this._hideTimeout = setTimeout(() => {\r\n this._overlayRef?.detach();\r\n this._compRef = null;\r\n }, 80);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._hideTimeout) clearTimeout(this._hideTimeout);\r\n this._overlayRef?.dispose();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Directive,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n inject,\r\n ElementRef,\r\n ViewContainerRef,\r\n TemplateRef,\r\n ViewChild,\r\n ContentChildren,\r\n QueryList,\r\n InjectionToken,\r\n OnDestroy,\r\n signal,\r\n} from '@angular/core';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { RcIconComponent } from '../icon/rc-icon';\r\n\r\n// ── Token ──────────────────────────────────────────────────────────────────────\r\n\r\n/** @internal Used by menu items to communicate close events to the trigger. */\r\nexport const RC_MENU_CLOSE = new InjectionToken<() => void>('RC_MENU_CLOSE');\r\n\r\n// ── MenuItem ──────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A single item inside an `<rc-menu>`.\r\n *\r\n * Renders as a full-width button. Optionally accepts a leading icon via `icon`.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-menu-item icon=\"edit-2-outline\" (itemClick)=\"edit()\">Edit</rc-menu-item>\r\n * <rc-menu-item icon=\"trash-2-outline\" [danger]=\"true\" (itemClick)=\"delete()\">Delete</rc-menu-item>\r\n * <rc-menu-item [disabled]=\"true\">Unavailable</rc-menu-item>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-menu-item',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [RcIconComponent],\r\n host: {\r\n class: 'rc-menu-item',\r\n '[class.rc-menu-item-danger]': 'danger',\r\n '[class.rc-menu-item-disabled]': 'disabled',\r\n },\r\n template: `\r\n <button\r\n type=\"button\"\r\n class=\"rc-menu-item-btn\"\r\n [disabled]=\"disabled\"\r\n (click)=\"!disabled && _onClick()\"\r\n >\r\n @if (icon) {\r\n <rc-icon\r\n [name]=\"icon\"\r\n class=\"rc-menu-item-icon\"\r\n aria-hidden=\"true\"\r\n ></rc-icon>\r\n }\r\n <span class=\"rc-menu-item-label\"><ng-content></ng-content></span>\r\n </button>\r\n `,\r\n})\r\nexport class RcMenuItemComponent {\r\n /** Eva icon name for the leading icon slot. */\r\n @Input() icon = '';\r\n\r\n /** Renders the item with danger (red) text colouring. Default: `false` */\r\n @Input() danger = false;\r\n\r\n /** Prevents clicking. Default: `false` */\r\n @Input() disabled = false;\r\n\r\n /** Emitted when this item is clicked (and not disabled). */\r\n @Output() readonly itemClick = new EventEmitter<void>();\r\n\r\n private readonly _close = inject(RC_MENU_CLOSE, { optional: true });\r\n\r\n /** @internal */\r\n _onClick(): void {\r\n this.itemClick.emit();\r\n this._close?.();\r\n }\r\n}\r\n\r\n// ── MenuSeparator ─────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A thin horizontal rule that visually groups menu items.\r\n *\r\n * @example\r\n * ```html\r\n * <rc-menu-item>Edit</rc-menu-item>\r\n * <rc-menu-separator></rc-menu-separator>\r\n * <rc-menu-item danger>Delete</rc-menu-item>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-menu-separator',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { class: 'rc-menu-separator', role: 'separator' },\r\n template: ``,\r\n})\r\nexport class RcMenuSeparatorComponent {}\r\n\r\n// ── Menu ──────────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A floating menu panel populated with `<rc-menu-item>` and `<rc-menu-separator>`.\r\n *\r\n * Open it by attaching `[rcMenuTriggerFor]=\"myMenu\"` to any element.\r\n *\r\n * @example\r\n * ```html\r\n * <button rcButton [rcMenuTriggerFor]=\"actions\">Actions <rc-icon name=\"chevron-down\"></rc-icon></button>\r\n *\r\n * <rc-menu #actions>\r\n * <rc-menu-item icon=\"edit-2-outline\" (itemClick)=\"onEdit()\">Edit</rc-menu-item>\r\n * <rc-menu-item icon=\"copy-outline\" (itemClick)=\"onDuplicate()\">Duplicate</rc-menu-item>\r\n * <rc-menu-separator></rc-menu-separator>\r\n * <rc-menu-item icon=\"trash-2-outline\" [danger]=\"true\" (itemClick)=\"onDelete()\">Delete</rc-menu-item>\r\n * </rc-menu>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-menu',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: { style: 'display:none' },\r\n template: `\r\n <ng-template #panelTpl>\r\n <div\r\n class=\"rc-menu-panel\"\r\n role=\"menu\"\r\n tabindex=\"-1\"\r\n [style.minWidth.px]=\"minWidth\"\r\n (keydown.escape)=\"_closeRequest.emit()\"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </ng-template>\r\n `,\r\n})\r\nexport class RcMenuComponent {\r\n /** Minimum width of the panel in pixels. Default: `160` */\r\n @Input() minWidth = 160;\r\n\r\n /** @internal Emitted when the panel should close (e.g. Escape key). */\r\n readonly _closeRequest = new EventEmitter<void>();\r\n\r\n @ViewChild('panelTpl', { static: true })\r\n readonly _panelTpl!: TemplateRef<unknown>;\r\n\r\n @ContentChildren(RcMenuItemComponent)\r\n readonly _items!: QueryList<RcMenuItemComponent>;\r\n}\r\n\r\n// ── MenuTrigger directive ──────────────────────────────────────────────────────\r\n\r\n/**\r\n * Directive that opens an associated `<rc-menu>` in a CDK overlay when the\r\n * host element is clicked.\r\n *\r\n * @example\r\n * ```html\r\n * <button rcButton [rcMenuTriggerFor]=\"myMenu\">Open ▾</button>\r\n * <rc-menu #myMenu>\r\n * <rc-menu-item (itemClick)=\"onAction()\">Action</rc-menu-item>\r\n * </rc-menu>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[rcMenuTriggerFor]',\r\n standalone: true,\r\n host: {\r\n '[attr.aria-haspopup]': '\"menu\"',\r\n '[attr.aria-expanded]': '_isOpen()',\r\n '(click)': '_toggle()',\r\n '(keydown.arrowdown)': '$event.preventDefault(); _open()',\r\n },\r\n})\r\nexport class RcMenuTriggerDirective implements OnDestroy {\r\n /** The `<rc-menu>` template to open. */\r\n @Input({ required: true }) rcMenuTriggerFor!: RcMenuComponent;\r\n\r\n /** Alignment of the menu relative to the trigger. Default: `'start'` */\r\n @Input() rcMenuAlign: 'start' | 'end' = 'start';\r\n\r\n readonly _isOpen = signal(false);\r\n\r\n private readonly _overlay = inject(Overlay);\r\n private readonly _el = inject(ElementRef) as ElementRef<HTMLElement>;\r\n private readonly _vcr = inject(ViewContainerRef);\r\n\r\n private _overlayRef: OverlayRef | null = null;\r\n private _portal: TemplatePortal | null = null;\r\n\r\n /** @internal */\r\n _toggle(): void {\r\n if (this._isOpen()) {\r\n this._close();\r\n } else {\r\n this._open();\r\n }\r\n }\r\n\r\n /** @internal */\r\n _open(): void {\r\n if (this._isOpen()) return;\r\n const menu = this.rcMenuTriggerFor;\r\n\r\n const overlayX = this.rcMenuAlign === 'end' ? 'end' : 'start';\r\n const posStrategy = this._overlay\r\n .position()\r\n .flexibleConnectedTo(this._el)\r\n .withPositions([\r\n {\r\n originX: overlayX,\r\n originY: 'bottom',\r\n overlayX,\r\n overlayY: 'top',\r\n offsetY: 4,\r\n },\r\n {\r\n originX: overlayX,\r\n originY: 'top',\r\n overlayX,\r\n overlayY: 'bottom',\r\n offsetY: -4,\r\n },\r\n ]);\r\n\r\n this._overlayRef = this._overlay.create({\r\n positionStrategy: posStrategy,\r\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n });\r\n\r\n this._portal = new TemplatePortal(menu._panelTpl, this._vcr, {});\r\n this._overlayRef.attach(this._portal);\r\n\r\n // Wire up close triggers\r\n const closeSub = this._overlayRef\r\n .backdropClick()\r\n .subscribe(() => this._close());\r\n const escapeSub = menu._closeRequest.subscribe(() => this._close());\r\n\r\n this._overlayRef.detachments().subscribe(() => {\r\n closeSub.unsubscribe();\r\n escapeSub.unsubscribe();\r\n });\r\n\r\n this._isOpen.set(true);\r\n }\r\n\r\n private _close(): void {\r\n this._overlayRef?.detach();\r\n this._overlayRef?.dispose();\r\n this._overlayRef = null;\r\n this._portal = null;\r\n this._isOpen.set(false);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._close();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n AfterViewInit,\r\n OnChanges,\r\n OnDestroy,\r\n ElementRef,\r\n ViewChild,\r\n SimpleChanges,\r\n inject,\r\n NgZone,\r\n} from '@angular/core';\r\nimport { RcSpinnerComponent } from '../spinner/rc-spinner';\r\nimport type { RcSpinnerStatus } from '../spinner/rc-spinner';\r\n\r\n// ── Types ──────────────────────────────────────────────────────────────────────\r\n\r\nexport type { RcSpinnerStatus as RcInfiniteScrollSpinnerStatus };\r\n\r\n// ── Component ─────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Infinite-scroll container that fires `(loadMore)` when a sentinel element\r\n * near the bottom of the list enters the viewport.\r\n *\r\n * The host element acts as the scrollable container when `scrollable` is true.\r\n * Place your list (or `<table rcTable>`) as content — the sentinel and spinner\r\n * are rendered automatically.\r\n *\r\n * Uses the browser's `IntersectionObserver` API — no scroll event listeners.\r\n *\r\n * @example Basic list\r\n * ```html\r\n * <rc-infinite-scroll\r\n * [loading]=\"loading\"\r\n * [hasMore]=\"hasMore\"\r\n * (loadMore)=\"fetchMore()\"\r\n * >\r\n * <div *ngFor=\"let item of items\">{{ item.name }}</div>\r\n * </rc-infinite-scroll>\r\n * ```\r\n *\r\n * @example With rc-table inside\r\n * ```html\r\n * <rc-infinite-scroll [loading]=\"loading\" [hasMore]=\"hasMore\" (loadMore)=\"fetch()\">\r\n * <table rcTable [dataSource]=\"rows\">\r\n * <!-- columns… -->\r\n * </table>\r\n * </rc-infinite-scroll>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-infinite-scroll',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [RcSpinnerComponent],\r\n host: {\r\n class: 'rc-infinite-scroll',\r\n '[class.rc-infinite-scroll-scrollable]': 'scrollable',\r\n },\r\n template: `\r\n <ng-content></ng-content>\r\n\r\n <!-- sentinel — the intersection target -->\r\n <div class=\"rc-infinite-scroll-sentinel\" #sentinel aria-hidden=\"true\"></div>\r\n\r\n @if (loading) {\r\n <div class=\"rc-infinite-scroll-loader\" role=\"status\" aria-live=\"polite\">\r\n <rc-spinner\r\n [status]=\"spinnerStatus\"\r\n size=\"sm\"\r\n [message]=\"loadingMessage\"\r\n ></rc-spinner>\r\n </div>\r\n }\r\n\r\n @if (!hasMore && !loading && showEndMessage) {\r\n <div class=\"rc-infinite-scroll-end\">\r\n <span class=\"rc-infinite-scroll-end-text\">{{ endMessage }}</span>\r\n </div>\r\n }\r\n `,\r\n})\r\nexport class RcInfiniteScrollComponent\r\n implements AfterViewInit, OnChanges, OnDestroy\r\n{\r\n @ViewChild('sentinel', { static: true })\r\n private sentinelRef!: ElementRef<HTMLElement>;\r\n\r\n private readonly zone = inject(NgZone);\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n // ── Inputs ────────────────────────────────────────────────────────────────\r\n\r\n /** Whether a load is currently in progress. While true `(loadMore)` won't fire. */\r\n @Input() loading = false;\r\n\r\n /**\r\n * Set to `false` when all data has been fetched. Hides the sentinel and\r\n * shows the end-of-list message.\r\n */\r\n @Input() hasMore = true;\r\n\r\n /**\r\n * Makes the host element itself the scrollable container (adds\r\n * `overflow-y: auto` and a fixed height inherited from the parent).\r\n * Default: `false` — the page scroll triggers loading.\r\n */\r\n @Input() scrollable = false;\r\n\r\n /** Colour variant passed to the internal `<rc-spinner>`. Default: `'primary'` */\r\n @Input() spinnerStatus: RcSpinnerStatus = 'primary';\r\n\r\n /** Optional message displayed beneath the spinner while loading. */\r\n @Input() loadingMessage = '';\r\n\r\n /** Whether to render the end-of-list message when `hasMore` is false. Default: `true` */\r\n @Input() showEndMessage = true;\r\n\r\n /** Text displayed when `hasMore` is false and `showEndMessage` is true. */\r\n @Input() endMessage = 'No more items';\r\n\r\n /**\r\n * Root margin (in px) added to the bottom of the viewport — the `(loadMore)`\r\n * event fires when the sentinel is within this many pixels of the fold.\r\n * Default: `120`\r\n */\r\n @Input() threshold = 120;\r\n\r\n // ── Outputs ───────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Emits when the sentinel element enters the viewport and `hasMore` is true\r\n * and `loading` is false.\r\n */\r\n @Output() loadMore = new EventEmitter<void>();\r\n\r\n // ── Private state ─────────────────────────────────────────────────────────\r\n\r\n private observer?: IntersectionObserver;\r\n private isSentinelVisible = false;\r\n\r\n // ── Lifecycle ─────────────────────────────────────────────────────────────\r\n\r\n ngAfterViewInit(): void {\r\n this.zone.runOutsideAngular(() => {\r\n const root = this.scrollable ? this.elementRef.nativeElement : null;\r\n this.observer = new IntersectionObserver(\r\n (entries) => {\r\n this.isSentinelVisible = entries[0].isIntersecting;\r\n if (this.isSentinelVisible && !this.loading && this.hasMore) {\r\n this.zone.run(() => this.loadMore.emit());\r\n }\r\n },\r\n { root, rootMargin: `0px 0px ${this.threshold}px 0px` },\r\n );\r\n this.observer.observe(this.sentinelRef.nativeElement);\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Re-fire when loading transitions false while sentinel is still in view\r\n if (\r\n changes['loading'] &&\r\n !changes['loading'].firstChange &&\r\n !this.loading &&\r\n this.isSentinelVisible &&\r\n this.hasMore\r\n ) {\r\n this.loadMore.emit();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.observer?.disconnect();\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RcButtonComponent } from '../button/rc-button';\r\nimport { RcIconComponent } from '../icon/rc-icon';\r\nimport { RcOptionComponent, RcSelectComponent } from '../select/rc-select';\r\n\r\n// ── Types ──────────────────────────────────────────────────────────────────────\r\n\r\n/** Event emitted whenever the page index or page size changes. */\r\nexport interface RcPageEvent {\r\n /** Current zero-based page index after the change. */\r\n pageIndex: number;\r\n /** Zero-based page index before the change. */\r\n previousPageIndex: number;\r\n /** Items shown per page after the change. */\r\n pageSize: number;\r\n /** Total number of items. */\r\n length: number;\r\n}\r\n\r\n/** A page-number token — either a 1-based number or `'...'` for an ellipsis gap. */\r\nexport type RcPaginatorPage = number | '...';\r\n\r\n// ── Component ─────────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * A full-featured paginator for navigating through paged data.\r\n *\r\n * Generates page-number buttons (with ellipsis for large ranges) and optionally\r\n * an inline page-size selector. Emits `(pageChange)` whenever the user navigates.\r\n *\r\n * All page indexes are **zero-based** — the first page is `pageIndex = 0`.\r\n *\r\n * @example Basic (bind to rc-table dataSource)\r\n * ```html\r\n * <rc-paginator\r\n * [length]=\"total\"\r\n * [pageIndex]=\"pageIndex\"\r\n * [pageSize]=\"pageSize\"\r\n * (pageChange)=\"onPage($event)\"\r\n * ></rc-paginator>\r\n * ```\r\n *\r\n * @example With page-size selector\r\n * ```html\r\n * <rc-paginator\r\n * [length]=\"total\"\r\n * [pageIndex]=\"pageIndex\"\r\n * [pageSize]=\"pageSize\"\r\n * [pageSizeOptions]=\"[10, 25, 50, 100]\"\r\n * (pageChange)=\"onPage($event)\"\r\n * ></rc-paginator>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'rc-paginator',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n RcButtonComponent,\r\n RcIconComponent,\r\n RcSelectComponent,\r\n RcOptionComponent,\r\n ],\r\n host: {\r\n class: 'rc-paginator',\r\n role: 'navigation',\r\n '[attr.aria-label]': 'navigationAriaLabel',\r\n },\r\n template: `\r\n @if (pageSizeOptions.length > 0) {\r\n <div class=\"rc-paginator-size\">\r\n <span class=\"rc-paginator-size-label\">{{ rowsPerPageLabel }}</span>\r\n <rc-select\r\n [ngModel]=\"pageSize\"\r\n (ngModelChange)=\"onSizeChange($event)\"\r\n [size]=\"'sm'\"\r\n [attr.aria-label]=\"rowsPerPageAriaLabel\"\r\n >\r\n @for (opt of pageSizeOptions; track opt) {\r\n <rc-option [value]=\"opt\">{{ opt }}</rc-option>\r\n }\r\n </rc-select>\r\n </div>\r\n }\r\n\r\n <span class=\"rc-paginator-range\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {{ rangeLabel }}\r\n </span>\r\n\r\n <div class=\"rc-paginator-nav\">\r\n @if (showFirstLast) {\r\n <button\r\n rcButton\r\n [variant]=\"'ghost'\"\r\n [size]=\"'sm'\"\r\n [iconOnly]=\"true\"\r\n [disabled]=\"isFirstPage\"\r\n (click)=\"firstPage()\"\r\n [attr.aria-label]=\"firstPageAriaLabel\"\r\n >\r\n <rc-icon name=\"arrowhead-left\"></rc-icon>\r\n </button>\r\n }\r\n\r\n <button\r\n rcButton\r\n [variant]=\"'ghost'\"\r\n [size]=\"'sm'\"\r\n [iconOnly]=\"true\"\r\n [disabled]=\"isFirstPage\"\r\n (click)=\"prevPage()\"\r\n [attr.aria-label]=\"previousPageAriaLabel\"\r\n >\r\n <rc-icon name=\"chevron-left\"></rc-icon>\r\n </button>\r\n\r\n @for (page of pages; track $index) {\r\n @if (page === '...') {\r\n <span class=\"rc-paginator-ellipsis\" aria-hidden=\"true\">…</span>\r\n } @else {\r\n <button\r\n rcButton\r\n [size]=\"'sm'\"\r\n [variant]=\"page - 1 === pageIndex ? 'filled' : 'ghost'\"\r\n [status]=\"'primary'\"\r\n [attr.aria-label]=\"pageAriaLabelFn(+page)\"\r\n [attr.aria-current]=\"page - 1 === pageIndex ? 'page' : null\"\r\n (click)=\"goToPage(+page - 1)\"\r\n >\r\n {{ page }}\r\n </button>\r\n }\r\n }\r\n\r\n <button\r\n rcButton\r\n [variant]=\"'ghost'\"\r\n [size]=\"'sm'\"\r\n [iconOnly]=\"true\"\r\n [disabled]=\"isLastPage\"\r\n (click)=\"nextPage()\"\r\n [attr.aria-label]=\"nextPageAriaLabel\"\r\n >\r\n <rc-icon name=\"chevron-right\"></rc-icon>\r\n </button>\r\n\r\n @if (showFirstLast) {\r\n <button\r\n rcButton\r\n [variant]=\"'ghost'\"\r\n [size]=\"'sm'\"\r\n [iconOnly]=\"true\"\r\n [disabled]=\"isLastPage\"\r\n (click)=\"lastPage()\"\r\n [attr.aria-label]=\"lastPageAriaLabel\"\r\n >\r\n <rc-icon name=\"arrowhead-right\"></rc-icon>\r\n </button>\r\n }\r\n </div>\r\n `,\r\n})\r\nexport class RcPaginatorComponent implements OnChanges {\r\n // ── Inputs ────────────────────────────────────────────────────────────────\r\n\r\n /** Total number of items in the data set. */\r\n @Input() length = 0;\r\n\r\n /** Zero-based index of the currently displayed page. Default: `0` */\r\n @Input() pageIndex = 0;\r\n\r\n /** Number of items shown per page. Default: `10` */\r\n @Input() pageSize = 10;\r\n\r\n /**\r\n * Array of page-size options rendered in the size selector.\r\n * Pass an empty array (default) to hide the selector entirely.\r\n */\r\n @Input() pageSizeOptions: number[] = [];\r\n\r\n /**\r\n * Whether to render First-page and Last-page shortcut buttons.\r\n * Default: `true`\r\n */\r\n @Input() showFirstLast = true;\r\n\r\n /**\r\n * Maximum number of page-number buttons to show before collapsing with\r\n * ellipsis. Must be odd and ≥ 5. Default: `7`\r\n */\r\n @Input() maxPageButtons = 7;\r\n\r\n // ── i18n labels ───────────────────────────────────────────────────────────\r\n\r\n /** ARIA label for the paginator host element. */\r\n @Input() navigationAriaLabel = 'Pagination';\r\n /** Label text next to the page-size selector. */\r\n @Input() rowsPerPageLabel = 'Rows per page:';\r\n /** ARIA label for the page-size selector. */\r\n @Input() rowsPerPageAriaLabel = 'Rows per page';\r\n /** ARIA label for the First-page button. */\r\n @Input() firstPageAriaLabel = 'First page';\r\n /** ARIA label for the Previous-page button. */\r\n @Input() previousPageAriaLabel = 'Previous page';\r\n /** ARIA label for the Next-page button. */\r\n @Input() nextPageAriaLabel = 'Next page';\r\n /** ARIA label for the Last-page button. */\r\n @Input() lastPageAriaLabel = 'Last page';\r\n /**\r\n * Function that returns the ARIA label for a numbered page button.\r\n * Receives the 1-based page number.\r\n */\r\n @Input() pageAriaLabelFn: (page: number) => string = (p) => `Page ${p}`;\r\n /**\r\n * Function that builds the range label shown between the nav and the size\r\n * selector. Receives `(start, end, length)` — all 1-based.\r\n * Default produces `\"1 – 10 of 87\"`.\r\n */\r\n @Input() rangeLabelFn: (\r\n start: number,\r\n end: number,\r\n length: number,\r\n ) => string = (start, end, length) => `${start} \\u2013 ${end} of ${length}`;\r\n\r\n // ── Outputs ───────────────────────────────────────────────────────────────\r\n\r\n /** Emitted when the page index or page size changes. */\r\n @Output() pageChange = new EventEmitter<RcPageEvent>();\r\n\r\n // ── Derived state ─────────────────────────────────────────────────────────\r\n\r\n get pageCount(): number {\r\n return Math.max(1, Math.ceil(this.length / this.pageSize));\r\n }\r\n\r\n get isFirstPage(): boolean {\r\n return this.pageIndex === 0;\r\n }\r\n\r\n get isLastPage(): boolean {\r\n return this.pageIndex >= this.pageCount - 1;\r\n }\r\n\r\n get rangeLabel(): string {\r\n if (this.length === 0) return this.rangeLabelFn(0, 0, 0);\r\n const start = this.pageIndex * this.pageSize + 1;\r\n const end = Math.min((this.pageIndex + 1) * this.pageSize, this.length);\r\n return this.rangeLabelFn(start, end, this.length);\r\n }\r\n\r\n pages: RcPaginatorPage[] = [];\r\n\r\n // ── Lifecycle ─────────────────────────────────────────────────────────────\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (\r\n changes['pageIndex'] ||\r\n changes['pageSize'] ||\r\n changes['length'] ||\r\n changes['maxPageButtons']\r\n ) {\r\n this.pages = buildPages(\r\n this.pageIndex,\r\n this.pageCount,\r\n this.maxPageButtons,\r\n );\r\n }\r\n }\r\n\r\n // ── Navigation ────────────────────────────────────────────────────────────\r\n\r\n firstPage(): void {\r\n if (!this.isFirstPage) this.emit(0, this.pageSize);\r\n }\r\n\r\n prevPage(): void {\r\n if (!this.isFirstPage) this.emit(this.pageIndex - 1, this.pageSize);\r\n }\r\n\r\n nextPage(): void {\r\n if (!this.isLastPage) this.emit(this.pageIndex + 1, this.pageSize);\r\n }\r\n\r\n lastPage(): void {\r\n if (!this.isLastPage) this.emit(this.pageCount - 1, this.pageSize);\r\n }\r\n\r\n goToPage(index: number): void {\r\n if (index !== this.pageIndex) this.emit(index, this.pageSize);\r\n }\r\n\r\n onSizeChange(value: unknown): void {\r\n const newSize = Number(value);\r\n const firstItemIndex = this.pageIndex * this.pageSize;\r\n const newPageIndex = Math.floor(firstItemIndex / newSize);\r\n this.emit(newPageIndex, newSize);\r\n }\r\n\r\n private emit(pageIndex: number, pageSize: number): void {\r\n this.pageChange.emit({\r\n pageIndex,\r\n previousPageIndex: this.pageIndex,\r\n pageSize,\r\n length: this.length,\r\n });\r\n }\r\n}\r\n\r\n// ── Page-number builder ────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Builds the array of page tokens (1-based numbers or `'...'` ellipsis markers)\r\n * displayed as navigation buttons.\r\n *\r\n * @param currentIndex - Zero-based current page index.\r\n * @param pageCount - Total number of pages.\r\n * @param max - Maximum page-number buttons; must be odd and ≥ 5.\r\n */\r\nexport function buildPages(\r\n currentIndex: number,\r\n pageCount: number,\r\n max: number,\r\n): RcPaginatorPage[] {\r\n if (pageCount <= 1) return pageCount === 1 ? [1] : [];\r\n\r\n // Ensure max is odd and at least 5\r\n const m = Math.max(5, max % 2 === 0 ? max + 1 : max);\r\n\r\n // All pages fit without ellipsis\r\n if (pageCount <= m) {\r\n return Array.from({ length: pageCount }, (_, i) => i + 1);\r\n }\r\n\r\n const current = currentIndex + 1; // 1-based\r\n const sideSlots = Math.floor((m - 5) / 2); // extra slots each side of current\r\n\r\n // Window of pages around the current page\r\n let winStart = current - sideSlots;\r\n let winEnd = current + sideSlots;\r\n\r\n // Adjust when close to the start\r\n if (winStart <= 2) {\r\n winEnd += 2 - winStart + 1;\r\n winStart = 2;\r\n }\r\n // Adjust when close to the end\r\n if (winEnd >= pageCount - 1) {\r\n winStart -= winEnd - (pageCount - 2);\r\n winEnd = pageCount - 1;\r\n }\r\n\r\n winStart = Math.max(2, winStart);\r\n winEnd = Math.min(pageCount - 1, winEnd);\r\n\r\n const pages: RcPaginatorPage[] = [1];\r\n if (winStart > 2) pages.push('...');\r\n for (let p = winStart; p <= winEnd; p++) pages.push(p);\r\n if (winEnd < pageCount - 1) pages.push('...');\r\n pages.push(pageCount);\r\n\r\n return pages;\r\n}\r\n","// Resolve Components — Public API\n// =============================================================================\n\n// ── Theme System ──────────────────────────────────────────────────────────────\nexport { RcThemeModule, provideRcTheme } from './lib/theme/theme.module';\nexport { RcThemeService } from './lib/theme/theme.service';\nexport type { RcThemeChange } from './lib/theme/theme.service';\nexport { RcJSThemesRegistry } from './lib/theme/theme-registry.service';\nexport {\n RC_THEME_OPTIONS,\n RC_BUILT_IN_JS_THEMES,\n RC_JS_THEMES,\n} from './lib/theme/theme.options';\nexport type {\n RcThemeOptions,\n RcJSThemeOptions,\n RcJSThemeVariable,\n} from './lib/theme/theme.options';\nexport { RcLayout } from './lib/theme/rc-layout';\n\n// Built-in JS themes\nexport { DEFAULT_THEME } from './lib/theme/js-themes/default.theme';\nexport { DARK_THEME } from './lib/theme/js-themes/dark.theme';\n\n// ── Components ────────────────────────────────────────────────────────────────\n\n// Root component\nexport { ResolveComponents } from './lib/resolve-components/resolve-components';\n\n// Button\nexport { RcButtonComponent } from './lib/button/rc-button';\nexport type {\n RcButtonVariant,\n RcButtonStatus,\n RcButtonSize,\n} from './lib/button/rc-button';\n\n// Badge\nexport { RcBadgeComponent } from './lib/badge/rc-badge';\nexport type {\n RcBadgeStatus,\n RcBadgeVariant,\n RcBadgeSize,\n} from './lib/badge/rc-badge';\n\n// Card\nexport { RcCardComponent } from './lib/card/rc-card';\n\n// Icon\nexport { RcIconComponent } from './lib/icon/rc-icon';\nexport type { RcIconStatus } from './lib/icon/rc-icon';\n\n// Tabs\nexport { RcTabsComponent } from './lib/tabs/rc-tabs';\nexport type { RcTabsSize } from './lib/tabs/rc-tabs';\nexport { RcTabComponent } from './lib/tabs/rc-tab';\nexport type { RcTabStatus } from './lib/tabs/rc-tab';\n\n// Alert\nexport { RcAlertComponent } from './lib/alert/rc-alert';\nexport type { RcAlertStatus, RcAlertVariant } from './lib/alert/rc-alert';\n\n// Toast\nexport { RcToastService } from './lib/toast/rc-toast.service';\nexport { RcToastComponent } from './lib/toast/rc-toast.component';\nexport { RcToastContainerComponent } from './lib/toast/rc-toast-container.component';\nexport type {\n RcToastStatus,\n RcToastPosition,\n RcToastConfig,\n RcToastRef,\n} from './lib/toast/rc-toast.types';\n\n// Input\nexport { RcInputDirective } from './lib/input/rc-input';\nexport type { RcInputStatus, RcInputSize } from './lib/input/rc-input';\n\n// Dialog\nexport { RcDialogService } from './lib/dialog/rc-dialog.service';\nexport { RcDialogRef } from './lib/dialog/rc-dialog-ref';\nexport {\n RcDialogContainerComponent,\n RcDialogTitleDirective,\n RcDialogContentDirective,\n RcDialogActionsDirective,\n} from './lib/dialog/rc-dialog-container';\nexport { RC_DIALOG_DATA } from './lib/dialog/rc-dialog.types';\nexport type { RcDialogConfig } from './lib/dialog/rc-dialog.types';\n\n// Table\nexport {\n RcTableComponent,\n RcColumnDefDirective,\n RcHeaderCellDefDirective,\n RcCellDefDirective,\n RcFooterCellDefDirective,\n RcHeaderCellDirective,\n RcCellDirective,\n RcFooterCellDirective,\n RcHeaderRowDefDirective,\n RcRowDefDirective,\n RcFooterRowDefDirective,\n RcHeaderRowComponent,\n RcRowComponent,\n RcFooterRowComponent,\n RcNoDataRowDirective,\n RC_TABLE_DIRECTIVES,\n} from './lib/table/rc-table';\nexport {\n RcSortDirective,\n RcSortHeaderComponent,\n RC_SORT,\n} from './lib/table/rc-sort';\nexport type { RcSortDirection, RcSortState } from './lib/table/rc-sort';\nexport { RcTableDataSource } from './lib/table/rc-table-data-source';\n\n// Chip\nexport { RcChipComponent } from './lib/chip/rc-chip';\nexport type { RcChipStatus, RcChipSize } from './lib/chip/rc-chip';\n\n// Radio\nexport {\n RcRadioGroupComponent,\n RcRadioButtonComponent,\n RC_RADIO_GROUP,\n} from './lib/radio/rc-radio';\nexport type { RcRadioSize } from './lib/radio/rc-radio';\n\n// Toggle\nexport { RcToggleComponent } from './lib/toggle/rc-toggle';\nexport type { RcToggleSize } from './lib/toggle/rc-toggle';\n\n// Checkbox\nexport { RcCheckboxComponent } from './lib/checkbox/rc-checkbox';\nexport type {\n RcCheckboxStatus,\n RcCheckboxSize,\n} from './lib/checkbox/rc-checkbox';\n\n// Select\nexport { RcSelectComponent, RcOptionComponent } from './lib/select/rc-select';\nexport type { RcSelectStatus, RcSelectSize } from './lib/select/rc-select';\n\n// Accordion\nexport {\n RcAccordionComponent,\n RcAccordionItemComponent,\n RC_ACCORDION,\n} from './lib/accordion/rc-accordion';\nexport type { RcAccordionVariant } from './lib/accordion/rc-accordion';\n\n// Slider\nexport { RcSliderComponent } from './lib/slider/rc-slider';\nexport type { RcSliderSize, RcSliderStatus } from './lib/slider/rc-slider';\n\n// Autocomplete\nexport { RcAutocompleteComponent } from './lib/autocomplete/rc-autocomplete';\nexport type {\n RcAutocompleteStatus,\n RcAutocompleteSize,\n RcAutocompleteOption,\n} from './lib/autocomplete/rc-autocomplete';\n\n// Sidenav\nexport {\n RcSidenavContainerComponent,\n RcSidenavComponent,\n RcSidenavContentComponent,\n RC_SIDENAV_CONTAINER,\n} from './lib/sidenav/rc-sidenav';\nexport type {\n RcSidenavMode,\n RcSidenavPosition,\n} from './lib/sidenav/rc-sidenav';\n\n// Navbar\nexport {\n RcNavbarComponent,\n RcNavbarBrandDirective,\n RcNavbarActionsDirective,\n RcNavbarSpacerComponent,\n RcNavbarRowComponent,\n} from './lib/navbar/rc-navbar';\nexport type { RcNavbarColor, RcNavbarPosition } from './lib/navbar/rc-navbar';\n\n// Datepicker\nexport { RcDatepickerComponent } from './lib/datepicker/rc-datepicker';\nexport type {\n RcDatepickerStatus,\n RcDatepickerSize,\n RcDatepickerMode,\n} from './lib/datepicker/rc-datepicker';\n\n// Tree\nexport { RcTreeComponent, RcTreeNodeComponent } from './lib/tree/rc-tree';\nexport type { RcTreeNodeData, RcTreeSelectionMode } from './lib/tree/rc-tree';\n\n// Spinner\nexport {\n RcSpinnerComponent,\n RcSpinnerDirective,\n} from './lib/spinner/rc-spinner';\nexport type { RcSpinnerStatus, RcSpinnerSize } from './lib/spinner/rc-spinner';\n\n// Progress Bar\nexport { RcProgressBarComponent } from './lib/progress-bar/rc-progress-bar';\nexport type { RcProgressBarStatus } from './lib/progress-bar/rc-progress-bar';\n\n// File Upload\nexport { RcFileUploadComponent } from './lib/file-upload/rc-file-upload';\nexport type { RcUploadedFile } from './lib/file-upload/rc-file-upload';\n\n// Virtual Scroll\nexport {\n RcVirtualScrollViewportComponent,\n RcVirtualForOf,\n} from './lib/virtual-scroll/rc-virtual-scroll';\n\n// Tooltip\nexport { RcTooltipDirective } from './lib/tooltip/rc-tooltip';\nexport type { RcTooltipPosition } from './lib/tooltip/rc-tooltip';\n\n// Menu\nexport {\n RcMenuComponent,\n RcMenuItemComponent,\n RcMenuSeparatorComponent,\n RcMenuTriggerDirective,\n} from './lib/menu/rc-menu';\n\n// Infinite Scroll\nexport { RcInfiniteScrollComponent } from './lib/infinite-scroll/rc-infinite-scroll';\n\n// Paginator\nexport { RcPaginatorComponent } from './lib/paginator/rc-paginator';\nexport type {\n RcPageEvent,\n RcPaginatorPage,\n} from './lib/paginator/rc-paginator';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.RcJSThemesRegistry","i1"],"mappings":";;;;;;;;;;;;;;;;;;;;AAiCA;MACa,gBAAgB,GAAG,IAAI,cAAc,CAChD,kBAAkB;AAGpB;MACa,qBAAqB,GAAG,IAAI,cAAc,CACrD,uBAAuB;AAGzB;MACa,YAAY,GAAG,IAAI,cAAc,CAC5C,cAAc;;ACrChB;;;;;;;;;;;AAWG;MAEU,kBAAkB,CAAA;IACrB,MAAM,GAAyC,EAAE;IAEzD,WAAA,CACiC,aAAiC,EAC1C,SAA6B,EAAA;;QAGnD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC;AAC9D,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;AAC9C,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,QAAQ,CACN,MAAwB,EACxB,SAAiB,EACjB,aAAsB,EAAA;QAEtB,MAAM,IAAI,GACR,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE;AACzE,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CACrC,EAA6B,EAC7B,IAA0C,EAC1C,MAA4C,CACd;IAClC;AAEA;;AAEG;AACH,IAAA,GAAG,CAAC,SAAiB,EAAA;QACnB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IACjC;AAEA;;AAEG;AACH,IAAA,GAAG,CAAC,SAAiB,EAAA;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,CAAA,2BAAA,EAA8B,SAAS,CAAA,uCAAA,EAA0C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CACvH;QACH;AACA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3D;AAEA;;;AAGG;IACK,cAAc,CACpB,SAA6B,EAC7B,SAA6B,EAAA;AAE7B,QAAA,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;QAC7B,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC7B,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;AAC7D,gBAAA,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ;gBACxB;qBAAO;AACL,oBAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACvB;AACF,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;AACK,IAAA,SAAS,CACf,MAA+B,EAC/B,GAAG,OAAkC,EAAA;AAErC,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM;gBAAE;YACb,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACrC,gBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;AAC7B,gBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;AAE7B,gBAAA,IACE,SAAS;oBACT,OAAO,SAAS,KAAK,QAAQ;AAC7B,oBAAA,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;oBACzB,SAAS;oBACT,OAAO,SAAS,KAAK,QAAQ;AAC7B,oBAAA,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EACzB;AACA,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAC1B,EAAE,GAAI,SAAqC,EAAE,EAC7C,SAAoC,CACrC;gBACH;qBAAO;AACL,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;gBACzB;YACF;QACF;AACA,QAAA,OAAO,MAAM;IACf;uGAvGW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAInB,qBAAqB,EAAA,EAAA,EAAA,KAAA,EACrB,YAAY,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GALX,kBAAkB,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;0BAKI,MAAM;2BAAC,qBAAqB;;0BAC5B,MAAM;2BAAC,YAAY;;;ACNxB;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAEU,cAAc,CAAA;AAQa,IAAA,OAAA;AAC1B,IAAA,gBAAA;;IAPZ,YAAY,GAAkB,IAAI;AAE1B,IAAA,aAAa,GAAG,IAAI,aAAa,CAAgB,CAAC,CAAC;AACnD,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IAEtC,WAAA,CACsC,OAAuB,EACjD,gBAAoC,EAAA;QADV,IAAA,CAAA,OAAO,GAAP,OAAO;QACjC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;AAE1B,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;QAChC;IACF;AAEA;;;AAGG;AACH,IAAA,WAAW,CAAC,IAAY,EAAA;AACtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY;QAClC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;AAEA;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACxD;AAEA;;;AAGG;IACH,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAC9B,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CACxD;IACH;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,IAAY,EAAA;QAC3B,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;IACxC;AAEA;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AAxDW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,kBAQf,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GARf,cAAc,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;0BASI,MAAM;2BAAC,gBAAgB;;;ACxC5B;;;;;;;;;;;;;;;AAeG;MAeU,QAAQ,CAAA;AAIT,IAAA,YAAA;AACA,IAAA,QAAA;AACkB,IAAA,QAAA;AALpB,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;AAEtC,IAAA,WAAA,CACU,YAA4B,EAC5B,QAAmB,EACD,QAAkB,EAAA;QAFpC,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACU,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAElC,QAAA,IAAI,CAAC;AACF,aAAA,aAAa;AACb,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;AAC/B,YAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACnB,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA,SAAA,EAAY,MAAM,CAAC,QAAQ,CAAA,CAAE,CAAC;YAChE;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA,SAAA,EAAY,MAAM,CAAC,IAAI,CAAA,CAAE,CAAC;AACzD,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC1B;AAvBW,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAQ,sEAMT,QAAQ,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AANP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,qEAVT,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAU1B,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAdpB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cACT,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,YACrC,CAAA,yBAAA,CAA2B,EAAA,MAAA,EAAA,CAAA,yCAAA,CAAA,EAAA;;0BAgBlC,MAAM;2BAAC,QAAQ;;;AC9CpB;;;;AAIG;AACI,MAAM,aAAa,GAAqB;AAC7C,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,SAAS,EAAE;;AAET,QAAA,QAAQ,EAAE,uFAAuF;AACjG,QAAA,QAAQ,EAAE,qDAAqD;;AAG/D,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;;AAGd,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,MAAM,EAAE,SAAS;;AAGjB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,IAAI,EAAE,SAAS;;AAGf,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,SAAS,EAAE,SAAS;;AAGpB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,SAAS,EAAE,SAAS;;AAGpB,QAAA,MAAM,EAAE,4EAA4E;;AAGpF,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;;;AC7CH;;AAEG;AACI,MAAM,UAAU,GAAqB;AAC1C,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,SAAS,EAAE;;AAET,QAAA,EAAE,EAAE,SAAS;AACb,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;AACd,QAAA,GAAG,EAAE,SAAS;;AAGd,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,MAAM,EAAE,SAAS;;AAGjB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,IAAI,EAAE,SAAS;;AAGf,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,SAAS,EAAE,SAAS;;AAGpB,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,SAAS,EAAE,SAAS;;AAGpB,QAAA,MAAM,EAAE,0EAA0E;;AAGlF,QAAA,YAAY,EAAE,KAAK;AACpB,KAAA;;;ACrBH,MAAM,eAAe,GAAuB,CAAC,aAAa,EAAE,UAAU,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;AAoBG;MAKU,aAAa,CAAA;AACxB,IAAA,WAAA,CAAoC,YAA2B,EAAA;QAC7D,IAAI,YAAY,EAAE;YAChB,MAAM,IAAI,KAAK,CACb,yEAAyE;AACvE,gBAAA,6DAA6D,CAChE;QACH;IACF;AAEA;;;;;AAKG;IACH,OAAO,OAAO,CACZ,cAAA,GAAiC,EAAE,IAAI,EAAE,SAAS,EAAE,EACpD,UAA+B,EAAA;QAE/B,OAAO;AACL,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE;AACvD,gBAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,eAAe,EAAE;gBAC7D,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,IAAI,EAAE,EAAE;gBACrD,kBAAkB;gBAClB,cAAc;AACf,aAAA;SACF;IACH;uGA9BW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAAA,OAAA,EAAA,CAHd,YAAY,EAAE,QAAQ,aACtB,QAAQ,CAAA,EAAA,CAAA;AAEP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAHd,YAAY,CAAA,EAAA,CAAA;;2FAGX,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC;oBACjC,OAAO,EAAE,CAAC,QAAQ,CAAC;AACpB,iBAAA;;0BAEc;;0BAAY;;AAgC3B;;;;;;;;;;;;;AAaG;AACG,SAAU,cAAc,CAC5B,OAAA,GAA0B,EAAE,IAAI,EAAE,SAAS,EAAE,EAC7C,YAAiC,EAAA;IAEjC,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE;AAChD,QAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,eAAe,EAAE;QAC7D,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,IAAI,EAAE,EAAE;QACvD,kBAAkB;QAClB,cAAc;KACf;AACH;;ACvGA;;;;;;;;;;AAUG;MAQU,iBAAiB,CAAA;uGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrB9B,mCACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDgBY,YAAY,EAAA,CAAA,EAAA,CAAA;;2FAIX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,mCAAA,EAAA;;;AEIzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DG;MA8BU,iBAAiB,CAAA;;IAEnB,OAAO,GAAoB,QAAQ;;IAGnC,MAAM,GAAmB,SAAS;;IAGlC,IAAI,GAAiB,IAAI;;IAGzB,QAAQ,GAAG,KAAK;;IAGhB,QAAQ,GAAG,KAAK;;AAGf,IAAA,OAAO,GAAG,IAAI,YAAY,EAAc;AAGlD,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,wBAAwB,EAAE;YAChC;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAmB,CAAC;IACxC;uGA3BW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,8lCAvBlB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAuB1B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA7B7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,QAAQ;;oBAEN,wHAAwH;AAC1H,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE,CAAA,yBAAA,CAA2B;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;;AAElB,wBAAA,0BAA0B,EAAE,sBAAsB;AAClD,wBAAA,2BAA2B,EAAE,uBAAuB;AACpD,wBAAA,yBAAyB,EAAE,qBAAqB;;AAEhD,wBAAA,2BAA2B,EAAE,sBAAsB;AACnD,wBAAA,6BAA6B,EAAE,wBAAwB;AACvD,wBAAA,0BAA0B,EAAE,qBAAqB;AACjD,wBAAA,wBAAwB,EAAE,mBAAmB;AAC7C,wBAAA,2BAA2B,EAAE,sBAAsB;AACnD,wBAAA,2BAA2B,EAAE,sBAAsB;;AAEnD,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,6BAA6B,EAAE,UAAU;AACzC,wBAAA,iBAAiB,EAAE,sBAAsB;AACzC,wBAAA,sBAAsB,EAAE,wBAAwB;AACjD,qBAAA;AACF,iBAAA;;sBAGE;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAEA,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;ACjHnC;;;;;;;;;;;AAWG;MASU,gBAAgB,CAAA;;IAElB,MAAM,GAAkB,SAAS;;IAGjC,IAAI,GAAgB,IAAI;AAEjC,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,CAAA,kBAAA,EAAqB,IAAI,CAAC,MAAM,aAAa,IAAI,CAAC,IAAI,CAAA,CAAE;IACjE;uGATW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAHjB,CAAA,4DAAA,CAA8D,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,q3BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAF9D,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKX,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAR5B,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,CAAA,4DAAA,CAA8D,EAAA,MAAA,EAAA,CAAA,q3BAAA,CAAA,EAAA;;sBAKvE;;sBAGA;;;ACtCH;;;;;;;;;;;;;;;;;;AAkBG;MAkBU,eAAe,CAAA;;IAEjB,OAAO,GAAG,IAAI;;IAGd,MAAM,GAAG,KAAK;;IAGd,QAAQ,GAAG,IAAI;uGARb,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,SAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZhB,CAAA;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6dAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAXS,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAcX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAjB3B,SAAS;+BACE,SAAS,EAAA,UAAA,EACP,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,eAAA,EACN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,CAAA;;;;;;;;;AAST,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,6dAAA,CAAA,EAAA;;sBAKA;;sBAGA;;sBAGA;;;AC/CH;AAoBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCG;MAkBU,eAAe,CAAA;AAaN,IAAA,SAAA;;AAXO,IAAA,IAAI;AAE/B;;;AAGG;IACM,MAAM,GAAiB,OAAO;IAGvC,OAAO,GAAa,EAAE;AAEtB,IAAA,WAAA,CAAoB,SAAuB,EAAA;QAAvB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAiB;IAE9C,WAAW,GAAA;QACT,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,CAAC,IAAI,CAAC,CAAA,iCAAA,EAAoC,IAAI,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;AAC9D,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;YACjB;QACF;AACA,QAAA,MAAM,GAAG,GAAG,CAAA,mGAAA,EAAsG,IAAI,CAAC,QAAQ,QAAQ;QACvI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC;IAC5D;;AAGA,IAAA,OAAO,YAAY,GAAA;AACjB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;uGA7BW,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,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,yfAZhB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAYD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAjB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,yBAAyB,EAAE,sBAAsB;AACjD,wBAAA,yBAAyB,EAAE,sBAAsB;AACjD,wBAAA,yBAAyB,EAAE,sBAAsB;AACjD,wBAAA,wBAAwB,EAAE,qBAAqB;AAC/C,wBAAA,sBAAsB,EAAE,mBAAmB;AAC3C,wBAAA,oBAAoB,EAAE,QAAQ;AAC9B,wBAAA,cAAc,EAAE,MAAM;AACvB,qBAAA;AACF,iBAAA;;sBAGE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAMxB;;sBAEA,WAAW;uBAAC,WAAW;;;ACvE1B;;;;;;;;;;;;;AAaG;MAQU,cAAc,CAAA;;IAEhB,KAAK,GAAG,EAAE;;AAGV,IAAA,IAAI;AAEb;;;AAGG;IACM,MAAM,GAAgB,OAAO;;IAG7B,QAAQ,GAAG,KAAK;;AAGkB,IAAA,OAAO;uGAjBvC,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,yQAFf,CAAA,gEAAA,CAAkE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAEjE,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,QAAQ,EAAE,CAAA,gEAAA,CAAkE;AAC7E,iBAAA;;sBAGE;;sBAGA;;sBAMA;;sBAGA;;sBAGA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;ACvC3C;;;;;;;;;;;;;;;;;;;;AAoBG;MAyDU,eAAe,CAAA;;AAEjB,IAAA,IAAI,GAAG,eAAe,CAAC,cAAc,gDAAC;;IAGtC,IAAI,GAAe,IAAI;;IAGhC,IAAa,SAAS,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9B;;AAGU,IAAA,SAAS,GAAG,IAAI,YAAY,EAAU;AAE7B,IAAA,YAAY,GAAG,MAAM,CAAC,CAAC,wDAAC;AAClC,IAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAErD,IAAA,MAAM,CAAC,KAAa,EAAA;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC5B;IACF;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;QAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC;QAClC,OAAO,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ;AAAE,YAAA,IAAI,EAAE;AAC9D,QAAA,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9C;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;QAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC;QAClC,OAAO,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ;AAAE,YAAA,IAAI,EAAE;QAClD,IAAI,IAAI,IAAI,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAClC;uGAtCW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAEM,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApDpC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnDS,gBAAgB,oJAAE,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAqDhC,eAAe,EAAA,UAAA,EAAA,CAAA;kBAxD3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,eAAe,CAAC;oBAC5C,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDT,EAAA,CAAA;AACF,iBAAA;4FAGiC,cAAc,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA;sBAG7C;;sBAGA;;sBAKA;;;AC7FH;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;MAkCU,gBAAgB,CAAA;;IAElB,MAAM,GAAkB,MAAM;;IAG9B,OAAO,GAAmB,QAAQ;;AAGlC,IAAA,KAAK;;IAGL,WAAW,GAAG,KAAK;;IAGnB,gBAAgB,GAAG,eAAe;;AAGjC,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AAE9C,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,CAAA,kBAAA,EAAqB,IAAI,CAAC,MAAM,aAAa,IAAI,CAAC,OAAO,CAAA,CAAE;IACpE;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,QAAQ,IAAI,CAAC,MAAM;AACjB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,oBAAoB;AAC7B,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,gBAAgB;AACzB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,MAAM;AACX,YAAA;AACE,gBAAA,OAAO,MAAM;;IAEnB;uGAnCW,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3BjB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6+FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5BS,YAAY,qIAAE,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA8B5B,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAjC5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,eAAe,CAAC,EAAA,eAAA,EACvB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAErC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,6+FAAA,CAAA,EAAA;;sBAIA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;;AChFH;;;;AAIG;MAkDU,gBAAgB,CAAA;AACA,IAAA,KAAK;AACtB,IAAA,KAAK,GAAG,IAAI,YAAY,EAAU;AAE5C,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,CAAA,kBAAA,EAAqB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA,CAAE;IACxD;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;AAC9B,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,oBAAoB;AAC7B,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,gBAAgB;AACzB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,MAAM;AACX,YAAA;AACE,gBAAA,OAAO,MAAM;;IAEnB;uGApBW,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzCjB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5CS,YAAY,qIAAE,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA8C5B,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAjD5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;oBACxC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,kBAAkB;AAC1B,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCT,EAAA,CAAA;AACF,iBAAA;;sBAEE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB;;;ACvDH;;;;;;;;AAQG;MAiBU,yBAAyB,CAAA;IAC3B,QAAQ,GAAoB,WAAW;;AAGvC,IAAA,MAAM,GAAG,MAAM,CAAe,EAAE,kDAAC;;AAGhC,IAAA,KAAK,GAAG,IAAI,YAAY,EAAU;uGAPjC,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,QAAA,EAAA,aAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,uDAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAN1B,CAAA;;;;GAIT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAXS,YAAY,+BAAE,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAa7B,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAhBrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC;oBACzC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,qDAAqD;AAChE,wBAAA,WAAW,EAAE,QAAQ;AACrB,wBAAA,aAAa,EAAE,OAAO;AACvB,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA;;sBAEE;;sBAMA;;;ACrCH,IAAI,OAAO,GAAG,CAAC;AAEf,MAAM,QAAQ,GAA6C;AACzD,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,MAAM,EAAE,MAAM;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,gBAAgB,EAAE,sBAAsB;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAEU,cAAc,CAAA;AAaf,IAAA,OAAA;AACA,IAAA,QAAA;AAbF,IAAA,QAAQ,GAAG,IAAI,eAAe,CAAe,EAAE,CAAC;;AAE/C,IAAA,OAAO,GAA6B,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;AAEjE,IAAA,SAAS,GAAG,IAAI,GAAG,EAA+B;AAClD,IAAA,WAAW,GAAG,IAAI,GAAG,EAG1B;AACK,IAAA,KAAK,GAAG,IAAI,GAAG,EAAiC;IAExD,WAAA,CACU,OAAgB,EAChB,QAAkB,EAAA;QADlB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACf;;AAIH;;AAEG;AACH,IAAA,IAAI,CAAC,MAAqB,EAAA;AACxB,QAAA,MAAM,QAAQ,GAA4B;AACxC,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;AACrC,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;AACxC,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;AAC9C,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;AAC9C,YAAA,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;AACvD,YAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,QAAQ,CAAC,gBAAgB;YACtE,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB;AAED,QAAA,MAAM,GAAG,GAAe;AACtB,YAAA,EAAE,EAAE,CAAA,SAAA,EAAY,EAAE,OAAO,CAAA,CAAE;AAC3B,YAAA,MAAM,EAAE,QAAQ;SACjB;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAEd,QAAA,IAAI,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE;AACzB,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;QAC3D;AAEA,QAAA,OAAO,GAAG;IACZ;;AAGA,IAAA,OAAO,CAAC,EAAU,EAAA;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxC,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;AACrC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7B;IACF;;AAGA,IAAA,UAAU,CAAC,QAA0B,EAAA;QACnC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CACvE;QACH;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB;IACF;;;AAKA,IAAA,OAAO,CACL,OAAe,EACf,KAAc,EACd,MAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACpE;;AAGA,IAAA,IAAI,CACF,OAAe,EACf,KAAc,EACd,MAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjE;;AAGA,IAAA,OAAO,CACL,OAAe,EACf,KAAc,EACd,MAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACpE;;AAGA,IAAA,MAAM,CACJ,OAAe,EACf,KAAc,EACd,MAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnE;;AAIQ,IAAA,IAAI,CAAC,GAAe,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;IACxD;AAEA;;;AAGG;AACK,IAAA,gBAAgB,CAAC,QAAyB,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE;QAElC,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;AAE9D,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACrC,gBAAgB;AAChB,YAAA,WAAW,EAAE,KAAK;YAClB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE;AACpD,YAAA,UAAU,EAAE,CAAC,CAAA,aAAA,CAAe,EAAE,CAAA,cAAA,EAAiB,QAAQ,EAAE,CAAC;AAC3D,SAAA,CAAC;;;AAIF,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAChC,yBAAyB,EACzB,IAAI,EACJ,IAAI,CAAC,QAAQ,CACd;QACD,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9C,QAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,GAAG,QAAQ;;;;QAKzC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAC1C,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAC9B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAClD;AACH,QAAA,CAAC,CAAC;;AAGF,QAAA,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAU,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEvE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;IAC/B;AAEQ,IAAA,sBAAsB,CAAC,QAAyB,EAAA;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE;QAEjD,QAAQ,QAAQ;AACd,YAAA,KAAK,WAAW;gBACd,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAC3C,YAAA,KAAK,UAAU;gBACb,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1C,YAAA,KAAK,YAAY;gBACf,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE;AAClD,YAAA,KAAK,cAAc;gBACjB,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9C,YAAA,KAAK,aAAa;gBAChB,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7C,YAAA,KAAK,eAAe;gBAClB,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE;;IAEzD;uGA5KW,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADD,MAAM,EAAA,CAAA;;2FACnB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC/BlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CG;MAiBU,gBAAgB,CAAA;AACV,IAAA,GAAG,GAAG,MAAM,EAC3B,UAAkD,EACnD;;AAGQ,IAAA,WAAW,GAClB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,UAAU;;IAGpD,MAAM,GAAkB,SAAS;;IAGjC,IAAI,GAAgB,IAAI;;IAGjC,QAAQ,GAAG,KAAK;IAEO,QAAQ,GAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEsB,OAAO,GAAA;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;uGAxBW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,WAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAhB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,mCAAmC;AAC7C,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,qBAAqB,EAAE,eAAe;AACtC,wBAAA,qBAAqB,EAAE,eAAe;AACtC,wBAAA,qBAAqB,EAAE,eAAe;AACtC,wBAAA,0BAA0B,EAAE,sBAAsB;AAClD,wBAAA,yBAAyB,EAAE,qBAAqB;AAChD,wBAAA,0BAA0B,EAAE,sBAAsB;AAClD,wBAAA,0BAA0B,EAAE,UAAU;AACtC,wBAAA,2BAA2B,EAAE,aAAa;AAC3C,qBAAA;AACF,iBAAA;;sBAWE;;sBAGA;;sBAKA,YAAY;uBAAC,OAAO;;sBAIpB,YAAY;uBAAC,MAAM;;;AC1FtB;;;;;;;;;;;;;;;AAeG;MACU,WAAW,CAAA;AAaH,IAAA,WAAA;AAER,IAAA,MAAA;AAdM,IAAA,YAAY,GAAG,IAAI,OAAO,EAAiB;AAE5D;;;AAGG;AACM,IAAA,WAAW,GAClB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;IAE1B,OAAO,GAAG,KAAK;AAEvB,IAAA,WAAA,CACmB,WAAuB;;IAE/B,MAAyB,EAAA;QAFjB,IAAA,CAAA,WAAW,GAAX,WAAW;QAEnB,IAAA,CAAA,MAAM,GAAN,MAAM;AAEf,QAAA,WAAW,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAK;YACzC,IAAI,CAAC,MAAM,CAAC,YAAY;gBAAE,IAAI,CAAC,KAAK,EAAE;AACxC,QAAA,CAAC,CAAC;QAEF;AACG,aAAA,aAAa;AACb,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;aAC9D,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAClC;AAEA;;;AAGG;AACH,IAAA,KAAK,CAAC,MAAU,EAAA;QACd,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;QAGnB,qBAAqB,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAC9B,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;AAC9B,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;IACzC;AACD;;AC/BD;;;;;;;;;AASG;MACU,cAAc,GAAG,IAAI,cAAc,CAAU,gBAAgB;;AC/B1E;AACA;AACA;AAEA;;;;;;;;;AASG;MAMU,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;AACnC,iBAAA;;AAGD;;;;;;;;;;AAUG;MAMU,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE;AACrC,iBAAA;;AAGD;;;;;;;;;;;AAWG;MASU,wBAAwB,CAAA;;IAEnC,KAAK,GAAoB,KAAK;uGAFnB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+BAAA,EAAA,mBAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,mBAAmB;AAC1B,wBAAA,iCAAiC,EAAE,mBAAmB;AACvD,qBAAA;AACF,iBAAA;;AAMD;AACA;AACA;AAEA;;;;AAIG;MA4BU,0BAA0B,CAAA;AAEpB,IAAA,OAAO;AAEf,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEzC,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM;IAC/B;;AAGA,IAAA,aAAa,CAAI,MAA0B,EAAA;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC;IACnD;uGAbW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,iCAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAC1B,eAAe,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfhB,CAAA;;;;;;;;;;;;GAYT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EArBS,YAAY,oMAAE,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAuB5B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA3BtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;AACxC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,mBAAmB,EAAE,MAAM;AAC3B,wBAAA,mBAAmB,EAAE,2BAA2B;AAChD,wBAAA,yBAAyB,EAAE,iCAAiC;AAC5D,wBAAA,QAAQ,EAAE,IAAI;AACf,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;sBAEE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AC9G9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDG;MAEU,eAAe,CAAA;AACT,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE7C;;;;;;AAMG;AACH,IAAA,IAAI,CACF,SAAwB,EACxB,MAAA,GAA4B,EAAE,EAAA;AAE9B,QAAA,MAAM,YAAY,GAAG;YACnB,iBAAiB;YACjB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU;kBAC/B,MAAM,CAAC;kBACP,MAAM,CAAC;AACP,sBAAE,CAAC,MAAM,CAAC,UAAU;sBAClB,EAAE,CAAC;SACV;AAED,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,oBAAoB;AACnC,YAAA,UAAU,EAAE,YAAY;YACxB,gBAAgB,EAAE,IAAI,CAAC;AACpB,iBAAA,QAAQ;AACR,iBAAA,MAAM;AACN,iBAAA,kBAAkB;AAClB,iBAAA,gBAAgB,EAAE;YACrB,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE;YACtD,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM;YACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;AACtB,SAAA,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,WAAW,CAAO,UAAU,EAAE,MAAM,CAAC;;AAG3D,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;YACrC,MAAM,EAAE,IAAI,CAAC,SAAS;AACtB,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE;gBAC7C,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE;AAC3D,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CACpC,IAAI,eAAe,CAAC,0BAA0B,EAAE,IAAI,EAAE,cAAc,CAAC,CACtE;AAED,QAAA,YAAY,CAAC,QAAQ,CAAC,aAAa,CACjC,IAAI,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CACrD;AAED,QAAA,OAAO,SAAS;IAClB;uGA5DW,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,cADF,MAAM,EAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC/BlC;;;;;;;AAOG;AACH,MAAM,iBAAiB,GAAG,CAAA;;;;;;;;;;;;;;;;;IAiBtB;AAEJ;AACA;AACA;AAEA;;;;;;;;;;;AAWG;AAQG,MAAO,wBAAyB,SAAQ,gBAAgB,CAAA;uGAAjD,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,SAAA,EALxB;AACT,YAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,wBAAwB,EAAE;AACrE,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAGU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,0BAA0B,EAAE;AACrE,qBAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AAGD;AAMM,MAAO,kBAAmB,SAAQ,UAAU,CAAA;uGAArC,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAHlB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAG1D,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;oBACvB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAA,kBAAoB,EAAE,CAAC;AACrE,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AAGD;AAQM,MAAO,wBAAyB,SAAQ,gBAAgB,CAAA;uGAAjD,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,SAAA,EALxB;AACT,YAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,wBAAwB,EAAE;AACrE,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAGU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,0BAA0B,EAAE;AACrE,qBAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AAGD;AACA;AACA;AAEA;;;;;;;;;;AAUG;AAOG,MAAO,oBAAqB,SAAQ,YAAY,CAAA;uGAAzC,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,aAAA,EAAA,MAAA,CAAA,EAAA,EAAA,SAAA,EAHpB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAG9D,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;oBACzB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;oBAChD,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAA,oBAAsB,EAAE,CAAC;AACzE,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AAGD;AACA;AACA;AAEA;;;;;;;AAOG;MAMU,qBAAqB,CAAA;AAChC,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvD,MAAM,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC1C,QAAA,IAAI,MAAM;AAAE,YAAA,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC3E;uGALW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;oBAC5C,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE;AACvD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AASD;;;;;;;AAOG;MAMU,eAAe,CAAA;AAC1B,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvD,MAAM,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC1C,QAAA,IAAI,MAAM;AAAE,YAAA,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC3E;uGALW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;oBAC/B,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE;AAC5C,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AASD;;;;;;;AAOG;MAMU,qBAAqB,CAAA;AAChC,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACvD,MAAM,EAAE,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC1C,QAAA,IAAI,MAAM;AAAE,YAAA,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC3E;uGALW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;oBAC5C,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE;AACnD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AASD;AACA;AACA;AAEA;;;;;;;AAOG;AAYG,MAAO,uBAAwB,SAAQ,eAAe,CAAA;uGAA/C,uBAAuB,EAAA,IAAA,EAAA,IAAA,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,SAAA,CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,SAAA,EALvB;AACT,YAAA,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE;AACnE,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAGU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAXnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,MAAM,EAAE;AACN,wBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;AAC5C,wBAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE;AAClD,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,yBAAyB,EAAE;AACnE,qBAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AAGD;;;;;;;;AAQG;AAUG,MAAO,iBAAqB,SAAQ,SAAY,CAAA;uGAAzC,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,CAAA,EAAA,IAAA,EAAA,CAAA,cAAA,EAAA,MAAA,CAAA,EAAA,EAAA,SAAA,EAHjB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAGxD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAT7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,MAAM,EAAE;AACN,wBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE;AAC7C,wBAAA,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE;AACxC,qBAAA;oBACD,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAA,iBAAmB,EAAE,CAAC;AACnE,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AAGD;;;;;;;AAOG;AAYG,MAAO,uBAAwB,SAAQ,eAAe,CAAA;uGAA/C,uBAAuB,EAAA,IAAA,EAAA,IAAA,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,SAAA,CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,SAAA,EALvB;AACT,YAAA,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE;AACnE,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAGU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAXnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,MAAM,EAAE;AACN,wBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;AAC5C,wBAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE;AAClD,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,yBAAyB,EAAE;AACnE,qBAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AAGD;AACA;AACA;AAEA;AAWM,MAAO,oBAAqB,SAAQ,YAAY,CAAA;uGAAzC,oBAAoB,EAAA,IAAA,EAAA,IAAA,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,KAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAJpB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,0JAE/D,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAEZ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAVhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE;oBAC7C,eAAe,EAAE,uBAAuB,CAAC,OAAO;oBAChD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAA,oBAAsB,EAAE,CAAC;AACzE,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,aAAa,CAAC;AACzB,iBAAA;;AAGD;AAWM,MAAO,cAAe,SAAQ,MAAM,CAAA;uGAA7B,cAAc,EAAA,IAAA,EAAA,IAAA,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,oBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,KAAA,EAAA,EAAA,cAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAJd,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,0JAEnD,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAEZ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAV1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;oBACtC,eAAe,EAAE,uBAAuB,CAAC,OAAO;oBAChD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAA,cAAgB,EAAE,CAAC;AAC7D,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,aAAa,CAAC;AACzB,iBAAA;;AAGD;AAWM,MAAO,oBAAqB,SAAQ,YAAY,CAAA;uGAAzC,oBAAoB,EAAA,IAAA,EAAA,IAAA,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,KAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAJpB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,0JAE/D,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAEZ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAVhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,QAAQ,EAAE,gBAAgB;oBAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE;oBAC7C,eAAe,EAAE,uBAAuB,CAAC,OAAO;oBAChD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAA,oBAAsB,EAAE,CAAC;AACzE,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,aAAa,CAAC;AACzB,iBAAA;;AAGD;AACA;AACA;AAEA;;;;;;;;;AASG;AAMG,MAAO,oBAAqB,SAAQ,YAAY,CAAA;uGAAzC,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,SAAA,EAHpB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAG9D,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;oBACpC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAA,oBAAsB,EAAE,CAAC;AACzE,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;AAGD;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;AAeG,MAAO,gBAAoB,SAAQ,QAAW,CAAA;;IAE/B,cAAc,GAAG,iBAAiB;;IAElC,4BAA4B,GAAG,KAAK;uGAJ5C,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EANhB;AACT,YAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;AACpD,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE;AACrD,YAAA,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;AACzD,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,6dAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EALS,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAOb,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAd5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;oBAC1C,eAAe,EAAE,uBAAuB,CAAC,OAAO;oBAChD,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,cAAc,CAAC;AACzB,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,kBAAkB,EAAE;AACpD,wBAAA,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,kBAAkB,EAAE;AACrD,wBAAA,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;AACzD,qBAAA;AACF,iBAAA;;AAQD;AACA;AACA;AAEA;AACO,MAAM,mBAAmB,GAAG;IACjC,gBAAgB;IAChB,oBAAoB;IACpB,wBAAwB;IACxB,kBAAkB;IAClB,wBAAwB;IACxB,qBAAqB;IACrB,eAAe;IACf,qBAAqB;IACrB,uBAAuB;IACvB,iBAAiB;IACjB,uBAAuB;IACvB,oBAAoB;IACpB,cAAc;IACd,oBAAoB;IACpB,oBAAoB;;;AClWtB;AACA;AACA;AAEA;MACa,OAAO,GAAG,IAAI,cAAc,CAAkB,QAAQ;AAEnE;AACA;AACA;AAEA;;;;;;;;;;;;;;;AAeG;MAQU,eAAe,CAAA;;AAEjB,IAAA,MAAM,GAAG,MAAM,CAAS,EAAE,kDAAC;;AAG3B,IAAA,SAAS,GAAG,MAAM,CAAkB,EAAE,qDAAC;;AAG7B,IAAA,YAAY,GAAG,IAAI,YAAY,EAAe;;AAGjE,IAAA,IAAI,CAAC,QAAgB,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,QAAQ,EAAE;AAC9B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;aAAO;AACL,YAAA,MAAM,IAAI,GACR,IAAI,CAAC,SAAS,EAAE,KAAK;AACnB,kBAAE;AACF,kBAAE,IAAI,CAAC,SAAS,EAAE,KAAK;AACrB,sBAAE;sBACA,EAAE;AACV,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YACxB,IAAI,IAAI,KAAK,EAAE;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,SAAA,CAAC;IACJ;uGA7BW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAJf,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAIpD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAA,eAAiB,EAAE,CAAC;AAC/D,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;AAC3B,iBAAA;;sBASE;;AAwBH;AACA;AACA;AAEA;;;;;;;;;;AAUG;MA+CU,qBAAqB,CAAA;;AAEkB,IAAA,QAAQ;;AAGjD,IAAA,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;;AAGvB,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,QAAQ,qDAAC;;AAGjE,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAAE,YAAA,OAAO,IAAI;AAClC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK;AAChC,cAAE;cACA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK;AAC3B,kBAAE;kBACA,IAAI;AACZ,IAAA,CAAC,qDAAC;;IAGF,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAChC;uGAvBW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,EAAA,UAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,GAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,YAAA,EAAA,eAAA,EAAA,YAAA,EAAA,eAAA,EAAA,qCAAA,EAAA,EAAA,UAAA,EAAA,EAAA,6BAAA,EAAA,aAAA,EAAA,0BAAA,EAAA,4CAAA,EAAA,2BAAA,EAAA,6CAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5BtB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAEU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA9CjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,+BAA+B,EAAE,aAAa;AAC9C,wBAAA,4BAA4B,EAAE,4CAA4C;AAC1E,wBAAA,6BAA6B,EAC3B,6CAA6C;AAC/C,wBAAA,SAAS,EAAE,YAAY;AACvB,wBAAA,kBAAkB,EAAE,aAAa;AACjC,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,QAAQ,EAAE,GAAG;AACb,wBAAA,iBAAiB,EAAE,YAAY;AAC/B,wBAAA,iBAAiB,EAAE,qCAAqC;AACzD,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,EAAA,CAAA;AACF,iBAAA;;sBAGE,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;;;ACzJlD;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;AACG,MAAO,iBAAqB,SAAQ,UAAa,CAAA;AACpC,IAAA,MAAM,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;AACrC,IAAA,QAAQ,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC;AAC1C,IAAA,YAAY,GAAG,IAAI,eAAe,CAAO,SAAS,CAAC;IAC5D,KAAK,GAA2B,IAAI;IACpC,iBAAiB,GAAwB,IAAI;;;AAKrD,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;IAC1B;IACA,IAAI,IAAI,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB;AAEA;;;;AAIG;AACH,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK;IAC5B;IACA,IAAI,MAAM,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD;AAEA;;;;AAIG;AACH,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;IACA,IAAI,IAAI,CAAC,KAA6B,EAAA;AACpC,QAAA,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,MACpD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CACzB;QACH;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;;AAIA;;;AAGG;AACH,IAAA,mBAAmB,GAAuD,CACxE,IAAO,EACP,YAAoB,KACD;AACnB,QAAA,MAAM,KAAK,GAAI,IAAgC,CAAC,YAAY,CAAC;QAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK;AAC3C,QAAA,OAAO,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE;AACzD,IAAA,CAAC;AAED;;;;AAIG;AACH,IAAA,eAAe,GAAyC,CACtD,IAAO,EACP,MAAc,KACH;AACX,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAA+B;aAC1D,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;aACvC,IAAI,CAAC,UAAU;AACf,aAAA,WAAW,EAAE;AAChB,QAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjC,IAAA,CAAC;;AAID,IAAA,WAAA,CAAY,cAAmB,EAAE,EAAA;AAC/B,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;IAC/B;;IAIA,OAAO,GAAA;AACL,QAAA,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CACxE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAI;;YAErB,IAAI,MAAM,GAAQ;AAChB,kBAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC;AACxD,kBAAE,IAAI,CAAC,KAAK,EAAE;;AAGhB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBAClC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;AACxC,gBAAA,IAAI,MAAM,IAAI,SAAS,EAAE;AACvB,oBAAA,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;wBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC;wBAChD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC;wBAChD,IAAI,IAAI,GAAG,IAAI;AAAE,4BAAA,OAAO,SAAS,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;wBACpD,IAAI,IAAI,GAAG,IAAI;AAAE,4BAAA,OAAO,SAAS,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AACpD,wBAAA,OAAO,CAAC;AACV,oBAAA,CAAC,CAAC;gBACJ;YACF;AAEA,YAAA,OAAO,MAAM;QACf,CAAC,CAAC,CACH;IACH;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;IAC9B;AACD;;ACnID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCG;MAsCU,eAAe,CAAA;;IAEjB,MAAM,GAAiB,SAAS;;IAGhC,IAAI,GAAe,IAAI;;IAGvB,IAAI,GAAG,EAAE;;IAGT,SAAS,GAAG,KAAK;;IAGjB,QAAQ,GAAG,KAAK;;IAGhB,QAAQ,GAAG,KAAK;;AAGf,IAAA,SAAS,GAAG,IAAI,YAAY,EAAc;;AAG1C,IAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AAE3C,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ;IAChC;AAGA,IAAA,OAAO,CAAC,KAAiB,EAAA;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAAE;AACtC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;AAIA,IAAA,SAAS,CAAC,KAAY,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE;QAC9C,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9C;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;QACvB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;uGAjDW,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,SAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,uCAAA,EAAA,eAAA,EAAA,+CAAA,EAAA,oBAAA,EAAA,4BAAA,EAAA,mBAAA,EAAA,qCAAA,EAAA,EAAA,cAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfhB,CAAA;;;;;;;;;;;;;GAaT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhCS,IAAI,6FAAE,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAkCpB,eAAe,EAAA,UAAA,EAAA,CAAA;kBArC3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC;oBAChC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,yBAAyB,EAAE,sBAAsB;AACjD,wBAAA,yBAAyB,EAAE,sBAAsB;AACjD,wBAAA,yBAAyB,EAAE,sBAAsB;AACjD,wBAAA,wBAAwB,EAAE,qBAAqB;AAC/C,wBAAA,sBAAsB,EAAE,mBAAmB;AAC3C,wBAAA,oBAAoB,EAAE,eAAe;AACrC,wBAAA,oBAAoB,EAAE,eAAe;AACrC,wBAAA,0BAA0B,EAAE,UAAU;AACtC,wBAAA,0BAA0B,EAAE,UAAU;AACtC,wBAAA,2BAA2B,EAAE,mBAAmB;AAChD,wBAAA,aAAa,EAAE,qCAAqC;AACpD,wBAAA,iBAAiB,EAAE,6CAA6C;AAChE,wBAAA,sBAAsB,EAAE,0BAA0B;AAClD,wBAAA,qBAAqB,EAAE,qCAAqC;AAC7D,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;AAaT,EAAA,CAAA;AACF,iBAAA;;sBAGE;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAMA,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;sBAQhC,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;;sBACxC,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;;;ACjH3C;MACa,cAAc,GAAG,IAAI,cAAc,CAC9C,gBAAgB;AAGlB;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MAyBU,qBAAqB,CAAA;AACf,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAGhD,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;IACA,IAAI,KAAK,CAAC,CAAU,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;IACQ,MAAM,GAAY,IAAI;;IAGrB,QAAQ,GAAG,KAAK;;IAGhB,IAAI,GAAgB,IAAI;;AAGvB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAW;;AAGnD,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAEhC,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;AAGA,IAAA,MAAM,CAAC,KAAc,EAAA;QACnB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,SAAS,EAAE;IAClB;uGAtDW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,YAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EApBrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,cAAc;AACvB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACrD,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAQS,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAE1B,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAxBjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,cAAc;AACvB,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACrD,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,iCAAiC,EAAE,UAAU;AAC7C,wBAAA,2BAA2B,EAAE,eAAe;AAC5C,wBAAA,2BAA2B,EAAE,eAAe;AAC7C,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,yBAAA,CAA2B;AACtC,iBAAA;;sBAKE;;sBAeA;;sBAGA;;sBAGA;;AAgCH;;;;;;;;;;AAUG;MA0BU,sBAAsB,CAAA;IACxB,KAAK,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC1C,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACxC,IAAA,QAAQ;;AAGP,IAAA,KAAK;;IAGL,QAAQ,GAAG,KAAK;AAEzB,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK;IAC7D;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,KAAK,CAAC;IACzD;IAEA,QAAQ,GAAA;;AAEN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AACpD,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE;IAC9B;IAEA,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,UAAU;YAAE;QACrB,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;AAEA,IAAA,SAAS,CAAC,KAAY,EAAA;QACpB,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,OAAO,EAAE;IAChB;uGAxCW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+BAAA,EAAA,WAAA,EAAA,gCAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPvB,CAAA;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAzBlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,iCAAiC,EAAE,WAAW;AAC9C,wBAAA,kCAAkC,EAAE,YAAY;AAChD,wBAAA,4BAA4B,EAAE,sBAAsB;AACpD,wBAAA,4BAA4B,EAAE,sBAAsB;AACpD,wBAAA,aAAa,EAAE,SAAS;AACxB,wBAAA,qBAAqB,EAAE,WAAW;AAClC,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,iBAAiB,EAAE,yBAAyB;AAC5C,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,iBAAiB,EAAE,mBAAmB;AACtC,wBAAA,iBAAiB,EAAE,mBAAmB;AACvC,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;AAKT,EAAA,CAAA;AACF,iBAAA;;sBAOE;;sBAGA;;;AChKH;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;MAyCU,iBAAiB,CAAA;AACX,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;;IAGvC,OAAO,GAAG,KAAK;;IAGf,QAAQ,GAAG,KAAK;;IAGhB,IAAI,GAAiB,IAAI;;IAGzB,aAAa,GAAqB,OAAO;;AAGxC,IAAA,aAAa,GAAG,IAAI,YAAY,EAAW;;AAG7C,IAAA,QAAQ,GAA6B,MAAK,EAAE,CAAC;AAC7C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;IAExC,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,SAAS,CAAC,KAAY,EAAA;QACpB,KAAK,CAAC,cAAc,EAAE;QACtB,IAAI,CAAC,MAAM,EAAE;IACf;AAEA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;uGApDW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,yBAAA,EAAA,SAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,WAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,4BAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAnCjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAiBS,CAAA;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnCS,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAqCH,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAxC7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,IAAI,CAAC;oBACf,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,2BAA2B,EAAE,SAAS;AACtC,wBAAA,4BAA4B,EAAE,UAAU;AACxC,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,8BAA8B,EAAE,0BAA0B;AAC1D,wBAAA,aAAa,EAAE,UAAU;AACzB,wBAAA,qBAAqB,EAAE,SAAS;AAChC,wBAAA,sBAAsB,EAAE,0BAA0B;AAClD,wBAAA,iBAAiB,EAAE,uBAAuB;AAC1C,wBAAA,SAAS,EAAE,UAAU;AACrB,wBAAA,iBAAiB,EAAE,mBAAmB;AACtC,wBAAA,iBAAiB,EAAE,mBAAmB;AACvC,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;AAUT,EAAA,CAAA;AACF,iBAAA;;sBAKE;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;;AC7EH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCG;MAsFU,mBAAmB,CAAA;AACb,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEvB,IAAA,YAAY;;IAG7B,OAAO,GAAG,KAAK;AAExB;;;AAGG;IACM,aAAa,GAAG,KAAK;;IAGrB,QAAQ,GAAG,KAAK;;IAGhB,MAAM,GAAqB,SAAS;;IAGpC,IAAI,GAAmB,IAAI;;IAG3B,aAAa,GAAqB,OAAO;AAElD;;;AAGG;IACM,SAAS,GAAG,EAAE;;AAGJ,IAAA,aAAa,GAAG,IAAI,YAAY,EAAW;;;AAK9D,IAAA,UAAU,GAAG,MAAW,EAAE,CAAC;;AAEnB,IAAA,SAAS,GAAyB,MAAK,EAAE,CAAC;AAElD,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;;AAKA,IAAA,eAAe,CAAC,KAAY,EAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;uGAvEW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,SAAA,EAAA,iCAAA,EAAA,2BAAA,EAAA,4BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,sBAAA,EAAA,2BAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,0BAAA,EAAA,EAAA,cAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAjFnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAcS,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBArF/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,aAAa;AACpB,wBAAA,wBAAwB,EAAE,eAAe;AACzC,wBAAA,wBAAwB,EAAE,eAAe;AACzC,wBAAA,wBAAwB,EAAE,eAAe;AACzC,wBAAA,6BAA6B,EAAE,SAAS;AACxC,wBAAA,mCAAmC,EAAE,2BAA2B;AAChE,wBAAA,8BAA8B,EAAE,UAAU;AAC1C,wBAAA,6BAA6B,EAAE,sBAAsB;AACrD,wBAAA,6BAA6B,EAAE,sBAAsB;AACrD,wBAAA,4BAA4B,EAAE,qBAAqB;AACnD,wBAAA,gCAAgC,EAAE,0BAA0B;AAC7D,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DT,EAAA,CAAA;AACF,iBAAA;;sBAIE,SAAS;uBAAC,aAAa;;sBAGvB;;sBAMA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAMA;;sBAGA;;;ACtJH;;;;AAIG;AACI,MAAM,SAAS,GAAG,IAAI,cAAc,CAAoB,WAAW,CAAC;AAE3E;AACA;AACA;AAEA;;;;;;;;;;;;;;;AAeG;MASU,iBAAiB,CAAA;;IAEnB,KAAK,GAAY,IAAI;;IAGrB,KAAK,GAAG,EAAE;;IAGV,QAAQ,GAAG,KAAK;AAER,IAAA,GAAG,GAAG,MAAM,EAAC,UAAuB,EAAC;;AAGtD,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;IACvE;uGAfW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,iLAHlB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAG1B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;;AAE/C,oBAAA,QAAQ,EAAE,CAAA,yBAAA,CAA2B;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAChC,iBAAA;;sBAGE;;sBAGA;;sBAGA;;AAUH;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDG;MAoGU,iBAAiB,CAAA;;IAInB,WAAW,GAAG,SAAS;;IAGvB,QAAQ,GAAG,KAAK;;IAGhB,QAAQ,GAAG,KAAK;;IAGhB,MAAM,GAAmB,SAAS;;IAGlC,IAAI,GAAiB,IAAI;;AAGf,IAAA,WAAW,GAAG,IAAI,YAAY,EAAW;AAG3C,IAAA,SAAS;AAGT,IAAA,WAAW;AAEX,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC/B,IAAA,GAAG,GAAG,MAAM,EAAC,UAAuB,EAAC;AACrC,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAEzC,WAAW,GAAsB,IAAI;IACrC,OAAO,GAA0B,IAAI;;IAG7C,KAAK,GAAG,KAAK;;IAEb,QAAQ,GAAG,KAAK;;IAEhB,YAAY,GAAG,CAAC,CAAC;IAET,MAAM,GAAY,IAAI;;AAEtB,IAAA,SAAS,GAAyB,CAAC,EAAW,KAAI,EAAE,CAAC;;AAErD,IAAA,UAAU,GAAe,MAAK,EAAE,CAAC;;;AAKzC,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1C;;AAGA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,QACE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAK,IAAI,CAAC,MAAoB,CAAC,MAAM,GAAG,CAAC;QAEvE;AACA,QAAA,QACE,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE;IAE3E;;AAGA,IAAA,IAAI,aAAa,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,EAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,IAAI,CAAC;AACT,iBAAA,MAAM,CAAC,CAAC,CAAC,KAAM,IAAI,CAAC,MAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;iBAC1D,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa;iBAC1B,IAAI,CAAC,IAAI,CAAC;QACf;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC;AAChE,QAAA,OAAO,KAAK,GAAG,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1D;;AAGA,IAAA,WAAW,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,QACE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAK,IAAI,CAAC,MAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAE5E;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK;IAC9B;;IAIA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IACpE;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;IAC7B;;;IAKA,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,WAAW,EAAE;QACpB;aAAO;YACL,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;;IAGA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE;AAEjC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;AACR,aAAA,mBAAmB,CAAC,IAAI,CAAC,GAAG;AAC5B,aAAA,aAAa,CAAC;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,CAAC,CAAC;AACZ,aAAA;SACF;aACA,sBAAsB,CAAC,KAAK;aAC5B,QAAQ,CAAC,KAAK,CAAC;QAElB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,gBAAgB;YAChB,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAC3D,YAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW;AACzC,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,kCAAkC;AAClD,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC;QAC5D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAErC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAK;YAC9C,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;AACpB,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC/C,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;gBACtB,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE;YAChC;AACF,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,IAAI,CAAC,GAAG,WAAW,GAAG,CAAC;AAEtD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;IAGA,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AACjB,QAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;;IAKA,cAAc,CAAC,KAAc,EAAE,KAAY,EAAA;QACzC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE;QAChC;IACF;;AAGA,IAAA,YAAY,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM;AACnC,kBAAE,CAAC,GAAI,IAAI,CAAC,MAAoB;kBAC9B,EAAE;YACN,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;AAC9B,YAAA,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,gBAAA,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACpB;iBAAO;AACL,gBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YACjB;AACA,YAAA,IAAI,CAAC,MAAM,GAAG,GAAG;QACnB;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACrB;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;;AAKA,IAAA,UAAU,CAAC,KAAoB,EAAA;QAC7B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAExD,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACf,IAAI,CAAC,UAAU,EAAE;gBACnB;AAAO,qBAAA,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;AAC/D,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;AACnD,oBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;wBAClB,IAAI,CAAC,WAAW,EAAE;oBACpB;gBACF;gBACA;AAEF,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACf,IAAI,CAAC,UAAU,EAAE;gBACnB;qBAAO;AACL,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAC1B,IAAI,CAAC,YAAY,GAAG,CAAC,EACrB,OAAO,CAAC,MAAM,GAAG,CAAC,CACnB;AACD,oBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC1B;gBACA;AAEF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC;AACtD,oBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC1B;gBACA;AAEF,YAAA,KAAK,KAAK;gBACR,IAAI,IAAI,CAAC,KAAK;oBAAE,IAAI,CAAC,WAAW,EAAE;gBAClC;AAEF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,KAAK,CAAC,eAAe,EAAE;oBACvB,IAAI,CAAC,WAAW,EAAE;gBACpB;gBACA;;IAEN;;;IAKA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;;IAGA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;;AAIA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;uGA7SW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,WAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EA/FjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAiHgB,iBAAiB,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1FxB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtFS,mBAAmB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAwFlB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAnG7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;oBACD,OAAO,EAAE,CAAC,mBAAmB,CAAC;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,wBAAwB,EAAE,OAAO;AACjC,wBAAA,4BAA4B,EAAE,UAAU;AACxC,wBAAA,2BAA2B,EAAE,sBAAsB;AACnD,wBAAA,2BAA2B,EAAE,sBAAsB;AACnD,wBAAA,0BAA0B,EAAE,qBAAqB;AACjD,wBAAA,2BAA2B,EAAE,UAAU;AACvC,wBAAA,iBAAiB,EAAE,mBAAmB;AACtC,wBAAA,sBAAsB,EAAE,WAAW;AACnC,wBAAA,sBAAsB,EAAE,OAAO;AAC/B,wBAAA,sBAAsB,EAAE,UAAU;AAClC,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,SAAS,EAAE,gBAAgB;AAC3B,wBAAA,WAAW,EAAE,oBAAoB;AACjC,wBAAA,SAAS,EAAE,YAAY;AACvB,wBAAA,QAAQ,EAAE,WAAW;AACtB,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA;AACF,iBAAA;;sBAKE;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAEA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAGtC,eAAe;uBAAC,iBAAiB;;;ACzPpC;MACa,YAAY,GAAG,IAAI,cAAc,CAC5C,cAAc;AAMhB;;;;;;;;;;;AAWG;MAyCU,wBAAwB,CAAA;IAClB,UAAU,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAG3C,KAAK,GAAG,EAAE;;IAGrC,IACI,QAAQ,CAAC,CAAU,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB;;IAGS,QAAQ,GAAG,KAAK;;AAGN,IAAA,cAAc,GAAG,IAAI,YAAY,EAAW;;AAGtD,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;;IAGlC,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,YAAA,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC;QAC9B;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAC1B;IACF;;AAGA,IAAA,YAAY,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;uGAnCW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kCAAA,EAAA,aAAA,EAAA,kCAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/BzB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAxCpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,mBAAmB;AAC1B,wBAAA,oCAAoC,EAAE,aAAa;AACnD,wBAAA,oCAAoC,EAAE,UAAU;AACjD,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,EAAA,CAAA;AACF,iBAAA;;sBAKE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAGxB;;sBAMA;;sBAGA;;AAsBH;;;;;;;;;;;;;;;;;;;;;AAqBG;MAYU,oBAAoB,CAAA;;IAEtB,QAAQ,GAAG,KAAK;;IAGhB,OAAO,GAAuB,SAAS;AAGxC,IAAA,MAAM;;AAGd,IAAA,KAAK,CAAC,IAA8B,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,KAAI;AACzB,gBAAA,IAAI,CAAC,KAAK,IAAI,EAAE;AACd,oBAAA,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;gBACvB;AACF,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IACzB;uGApBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,sBAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAPpB,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAcxD,wBAAwB,gDAT/B,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAE1B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAA,oBAAsB,EAAE,CAAC;AACzE,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,cAAc;AACrB,wBAAA,6BAA6B,EAAE,sBAAsB;AACtD,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,yBAAA,CAA2B;AACtC,iBAAA;;sBAGE;;sBAGA;;sBAEA,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,wBAAwB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;;;AClIlE;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;MAmEU,iBAAiB,CAAA;AACX,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;;IAGxC,KAAK,GAAG,CAAC;;IAGT,GAAG,GAAG,CAAC;;IAGP,GAAG,GAAG,GAAG;;IAGT,IAAI,GAAG,CAAC;;IAGR,QAAQ,GAAG,KAAK;;IAGhB,IAAI,GAAiB,IAAI;;IAGzB,SAAS,GAAG,KAAK;;IAGjB,IAAI,GAAG,EAAE;;IAGT,SAAS,GAAG,KAAK;;IAGjB,MAAM,GAAmB,SAAS;;AAGxB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;;AAIlD,IAAA,MAAM,GAAG,MAAM,CAAC,CAAC,kDAAC;AAElB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;QACjC,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC,GAAG,CACb,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,CAC1D;AACH,IAAA,CAAC,wDAAC;AAEO,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;QAC9B,MAAM,KAAK,GAA8C,EAAE;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;QACjC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;AAAE,YAAA,OAAO,KAAK;AAC9C,QAAA,KACE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAChB,CAAC,IAAI,IAAI,CAAC,GAAG,EACb,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,EAC3C;YACA,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACnE;AACA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,kDAAC;IAEF,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C;;;AAKA,IAAA,UAAU,GAAG,MAAW,EAAE,CAAC;;AAEnB,IAAA,SAAS,GAAwB,MAAK,EAAE,CAAC;AAEjD,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAAuB,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;;AAKA,IAAA,QAAQ,CAAC,KAAY,EAAA;QACnB,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,MAAM,GAAG,GAAG,UAAU,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAEQ,IAAA,MAAM,CAAC,CAAS,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAClD;uGA1GW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EA9DjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAWS,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlE7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,4BAA4B,EAAE,UAAU;AACxC,wBAAA,2BAA2B,EAAE,sBAAsB;AACnD,wBAAA,2BAA2B,EAAE,sBAAsB;AACnD,wBAAA,0BAA0B,EAAE,qBAAqB;AAClD,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CT,EAAA,CAAA;AACF,iBAAA;;sBAKE;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;;ACpGH;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CG;MA+FU,uBAAuB,CAAA;AAGjB,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChC,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC/B,IAAA,KAAK,GAAG,MAAM,EAAC,UAAuB,EAAC;AAE1B,IAAA,QAAQ;AAErB,IAAA,SAAS;;AAI1B;;;AAGG;IACH,IACI,OAAO,CAAC,CAAoC,EAAA;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1C;;IAGS,WAAW,GAAG,iBAAiB;;IAG/B,aAAa,GAAG,YAAY;;IAG5B,cAAc,GAAG,OAAO;;IAGxB,QAAQ,GAAG,KAAK;;IAGhB,MAAM,GAAyB,SAAS;;IAGxC,IAAI,GAAuB,IAAI;AAExC;;;;;AAKG;IACM,QAAQ,GACf,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;;AAI3D;;;AAGG;AACgB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAwB;;;AAKpE,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,sDAAC;;AAGvB,IAAA,WAAW,GAAG,MAAM,CAAU,IAAI,uDAAC;;AAGnC,IAAA,WAAW,GAAG,MAAM,CAAyB,EAAE,uDAAC;;AAGhD,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACjC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE;AAC3B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE;QACjC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,IAAA,CAAC,qDAAC;;IAGF,KAAK,GAAG,KAAK;;IAGb,YAAY,GAAG,CAAC,CAAC;IAET,WAAW,GAAsB,IAAI;IACrC,OAAO,GAA0B,IAAI;;AAGrC,IAAA,SAAS,GAAyB,MAAK,EAAE,CAAC;;AAElD,IAAA,UAAU,GAAe,MAAK,EAAE,CAAC;;IAIjC,WAAW,GAAA;;AAET,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;AAC7B,QAAA,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;YAC1D,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;YACjC;QACF;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;IAC7B;;AAIA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;QAC7D,MAAM,IAAI,GACR,GAAG,EAAE,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AACpE,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;;AAKA,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,IAAI,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACrD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC;QAC5B,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,UAAU,EAAE;QACnB;aAAO;YACL,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;;IAGA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YACpD,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;;IAGA,OAAO,GAAA;;QAEL,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,WAAW,EAAE;YACpB;YACA,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QAC1B,CAAC,EAAE,GAAG,CAAC;IACT;;IAGA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE;IACtC;;AAGA,IAAA,aAAa,CAAC,GAAyB,EAAA;QACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC;QAC9B,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,EAAE;IACtC;;AAGA,IAAA,UAAU,CAAC,KAAoB,EAAA;QAC7B,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAExD,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;oBACf,IAAI,CAAC,UAAU,EAAE;gBACnB;qBAAO;AACL,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpE,oBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC1B;gBACA;AAEF,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC;AACtD,oBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBAC1B;gBACA;AAEF,YAAA,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;oBACnE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC7C;gBACA;AAEF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,KAAK,CAAC,eAAe,EAAE;oBACvB,IAAI,CAAC,WAAW,EAAE;gBACpB;gBACA;AAEF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,IAAI,CAAC,WAAW,EAAE;gBACpB;gBACA;;IAEN;;IAIQ,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE;AACjC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE;AAEnC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa;AAEvE,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;aACR,mBAAmB,CAAC,MAAM;AAC1B,aAAA,aAAa,CAAC;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,CAAC,CAAC;AACZ,aAAA;SACF;aACA,sBAAsB,CAAC,KAAK;aAC5B,QAAQ,CAAC,KAAK,CAAC;QAElB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,gBAAgB;YAChB,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAC3D,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW;AAC3C,YAAA,WAAW,EAAE,KAAK;AACnB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC;QAC5D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAErC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC/C,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAAE,IAAI,CAAC,WAAW,EAAE;AAC5C,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;IAGA,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AACjB,QAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;AAIQ,IAAA,UAAU,CAChB,GAAsC,EAAA;AAEtC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,EAAE;AAClC,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAClB,OAAO,IAAI,KAAK;cACZ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;cACzB,IAA6B,CACnC;IACH;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE;YAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI;QAC1C;IACF;uGArTW,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,OAAA,EAAA,gCAAA,EAAA,UAAA,EAAA,iCAAA,EAAA,gBAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAzFvB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAUS,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxFS,gBAAgB,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA0Ff,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA9FnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,8BAA8B,EAAE,OAAO;AACvC,wBAAA,kCAAkC,EAAE,UAAU;AAC9C,wBAAA,mCAAmC,EAAE,gBAAgB;AACrD,wBAAA,4BAA4B,EAAE,eAAe;AAC7C,wBAAA,4BAA4B,EAAE,eAAe;AAC7C,wBAAA,4BAA4B,EAAE,eAAe;AAC9C,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuET,EAAA,CAAA;AACF,iBAAA;;sBASE,SAAS;uBAAC,SAAS;;sBACnB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAStC;;sBAMA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAQA;;sBASA;;;ACxMH;MACa,oBAAoB,GAAG,IAAI,cAAc,CACpD,sBAAsB;AAGxB;AAEA;;;;;;;;;;;;;;;;AAgBG;MAQU,yBAAyB,CAAA;uGAAzB,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,8HAF1B,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAE1B,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;AACrC,oBAAA,QAAQ,EAAE,CAAA,yBAAA,CAA2B;AACtC,iBAAA;;AAGD;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CG;MAgBU,kBAAkB,CAAA;AACpB,IAAA,GAAG,GAAG,MAAM,EAAC,UAAuB,EAAC;AAC7B,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChC,IAAA,UAAU,GAAG,MAAM,CAAC,oBAAoB,EAAE;AACzD,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,CAAC;;AAIF;;;;;AAKG;IACM,IAAI,GAAkB,MAAM;;IAG5B,QAAQ,GAAsB,OAAO;AAE9C;;;AAGG;IACM,YAAY,GAAG,KAAK;;IAG7B,IACI,MAAM,CAAC,CAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC;QAC3B;IACF;;;AAKmB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAW;;AAG1C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;;AAGtC,IAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;;;AAKhD,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;;IAIhC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC;IAClC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC;IACpC;;;IAKA,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B;;IAGA,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/B;;IAGA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;IAC7C;;AAIQ,IAAA,UAAU,CAAC,KAAc,EAAE,IAAI,GAAG,IAAI,EAAA;QAC5C,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACzB;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QACzB;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/B;AACA,QAAA,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACxB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC3D;uGA5FW,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,0lBAFnB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAE1B,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,yBAAyB,EAAE,WAAW;AACtC,wBAAA,0BAA0B,EAAE,sBAAsB;AAClD,wBAAA,wBAAwB,EAAE,oBAAoB;AAC9C,wBAAA,8BAA8B,EAAE,iBAAiB;AACjD,wBAAA,8BAA8B,EAAE,iBAAiB;AACjD,wBAAA,8BAA8B,EAAE,iBAAiB;AAClD,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,yBAAA,CAA2B;AACtC,iBAAA;;sBAgBE;;sBAGA;;sBAMA;;sBAGA;;sBAUA;;sBAGA;;sBAGA;;AAoDH;AAEA;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAkCU,2BAA2B,CAAA;AAGrB,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChC,IAAA,OAAO,GAAG,MAAM,EAAC,UAAuB,EAAC;AAGzC,IAAA,gBAAgB;IAEzB,SAAS,GAAyB,EAAE;;IAG5C,gBAAgB,GAAG,KAAK;;;AAKxB,IAAA,SAAS,CAAC,OAA2B,EAAA;QACnC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B;QACA,IAAI,CAAC,OAAO,EAAE;IAChB;;AAGA,IAAA,WAAW,CAAC,OAA2B,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;QAC5D,IAAI,CAAC,OAAO,EAAE;IAChB;;IAGA,OAAO,GAAA;AACL,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;;AAGvC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACzC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAC/D;;;;;QAMD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACrC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CACxC;QAED,IAAI,WAAW,EAAE;YACf,MAAM,KAAK,GACT,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW;AACzC,gBAAA,QAAQ,CACN,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,gBAAgB,CAC9D,oBAAoB,CACrB,CACF;AACD,gBAAA,GAAG;YACL,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC;AAC/D,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gCAAgC,CAAC;AACpD,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CACnB,iCAAiC,EACjC,WAAW,CAAC,QAAQ,KAAK,OAAO,CACjC;AACD,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CACnB,+BAA+B,EAC/B,WAAW,CAAC,QAAQ,KAAK,KAAK,CAC/B;QACH;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,yBAAyB,CAAC;YACpD,IAAI,CAAC,SAAS,CAAC,MAAM,CACnB,gCAAgC,EAChC,iCAAiC,EACjC,+BAA+B,CAChC;QACH;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;IAIA,kBAAkB,GAAA;;;QAGhB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YAClC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC/B,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,EAAE;IAChB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;;;IAKA,gBAAgB,GAAA;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC3B,YAAA,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;gBACvD,CAAC,CAAC,KAAK,EAAE;YACX;AACF,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,SAAS,CAAC,KAAY,EAAA;;AAEpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;YAAE;AAE1C,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE;gBACvD,KAAK,CAAC,eAAe,EAAE;gBACvB,CAAC,CAAC,KAAK,EAAE;gBACT;YACF;QACF;IACF;uGAvHW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,mBAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EA7B3B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC3D,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EA8BgB,kBAAkB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxBzB,CAAA;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAjCvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC3D,yBAAA;AACF,qBAAA;AACD,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,sBAAsB;AAC7B,wBAAA,2BAA2B,EAAE,mBAAmB;AACjD,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;sBAOE,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;;;ACzR7D;AAEA;;;;;;;;;;;AAWG;MAMU,sBAAsB,CAAA;uGAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;AACnC,iBAAA;;AAGD;;;;;;;;;;;;;AAaG;MAMU,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE;AACrC,iBAAA;;AAGD;AAEA;;;;;;;;;;;;AAYG;MAQU,uBAAuB,CAAA;uGAAvB,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,0HAFxB,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAED,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE;AACnC,oBAAA,QAAQ,EAAE,CAAA,CAAE;AACb,iBAAA;;AAGD;AAEA;;;;;;;;;;;;;;;;;AAiBG;MAQU,oBAAoB,CAAA;uGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,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,oHAFrB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAE1B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;AAChC,oBAAA,QAAQ,EAAE,CAAA,yBAAA,CAA2B;AACtC,iBAAA;;AAGD;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDG;MAgBU,iBAAiB,CAAA;AAC5B;;;;AAIG;IACM,KAAK,GAAkB,SAAS;AAEzC;;;;;AAKG;IACM,QAAQ,GAAqB,QAAQ;uGAdnC,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,gdAFlB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAE1B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAf7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,iCAAiC,EAAE,qBAAqB;AACxD,wBAAA,iCAAiC,EAAE,qBAAqB;AACxD,wBAAA,mCAAmC,EAAE,uBAAuB;AAC5D,wBAAA,mCAAmC,EAAE,uBAAuB;AAC5D,wBAAA,kCAAkC,EAAE,sBAAsB;AAC3D,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA,yBAAA,CAA2B;AACtC,iBAAA;;sBAOE;;sBAQA;;;AC/IH,MAAM,WAAW,GAAG;IAClB,SAAS;IACT,UAAU;IACV,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;CACX;AAED,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAE5D,SAAS,UAAU,CAAC,CAAO,EAAE,CAAO,EAAA;IAClC,QACE,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;AACnC,QAAA,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE;QAC7B,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE;AAE/B;AAEA,SAAS,WAAW,CAAC,CAAO,EAAA;AAC1B,IAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,IAAA,OAAO,CAAC;AACV;AAEA,SAAS,KAAK,CAAC,CAAS,EAAA;IACtB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACnC;AAEA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;MA8XU,qBAAqB,CAAA;AACf,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChC,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC/B,IAAA,KAAK,GAAG,MAAM,EAAC,UAAuB,EAAC;AAExB,IAAA,UAAU;AAEzB,IAAA,SAAS;;;AAKjB,IAAA,UAAU,GAAa,CAAC,GAAG,WAAW,CAAC;;AAEvC,IAAA,QAAQ,GAAa,CAAC,GAAG,SAAS,CAAC;;;IAKnC,IAAI,GAAqB,MAAM;;IAG/B,WAAW,GAAG,SAAS;;IAGvB,MAAM,GAAuB,SAAS;;IAGtC,IAAI,GAAqB,IAAI;;IAG7B,QAAQ,GAAG,KAAK;AAEzB;;;AAGG;IACM,GAAG,GAAgB,IAAI;AAEhC;;;AAGG;IACM,GAAG,GAAgB,IAAI;;;IAKvB,cAAc,GAAG,OAAO;;IAExB,sBAAsB,GAAG,gBAAgB;;IAEzC,kBAAkB,GAAG,YAAY;;IAEjC,qBAAqB,GAAG,eAAe;;IAEvC,qBAAqB,GAAG,eAAe;;IAEvC,uBAAuB,GAAG,iBAAiB;;IAE3C,uBAAuB,GAAG,iBAAiB;;IAE3C,UAAU,GAAG,OAAO;;IAEpB,QAAQ,GAAG,KAAK;;IAEhB,UAAU,GAAG,OAAO;;IAEpB,UAAU,GAAG,OAAO;;AAGV,IAAA,UAAU,GAAG,IAAI,YAAY,EAAe;;;AAKtD,IAAA,MAAM,GAAG,MAAM,CAAc,IAAI,kDAAC;;IAGlC,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;IAG1C,SAAS,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAG5C,IAAA,QAAQ,GAAG,MAAM,CAA8B,MAAM,oDAAC;;AAGtD,IAAA,MAAM,GAAG,MAAM,CAAC,CAAC,kDAAC;;AAGlB,IAAA,QAAQ,GAAG,MAAM,CAAC,CAAC,oDAAC;;IAG7B,KAAK,GAAG,KAAK;IAEL,WAAW,GAAsB,IAAI;IACrC,OAAO,GAA0B,IAAI;;AAGrC,IAAA,SAAS,GAA6B,MAAK,EAAE,CAAC;;AAEtD,IAAA,UAAU,GAAe,MAAK,EAAE,CAAC;;;AAKxB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AACvB,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE;QACjB,MAAM,IAAI,GAAG,CAAA,EAAG,CAAC,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA,CAAE;AAClF,QAAA,MAAM,IAAI,GAAG,CAAA,EAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE;AAC9D,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;AACrC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;AACrC,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,EAAE;AAC3B,IAAA,CAAC,wDAAC;;AAGO,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,sDAAC;;AAG3D,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,yDAAC;;AAGpD,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,2DAAC;;AAGxD,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;QACvD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;AACvD,IAAA,CAAC,sDAAC;;AAGO,IAAA,KAAK,GAAG,QAAQ,CAAiB,MAAK;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;QAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC;AACrC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE;AACjC,QAAA,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,IAAI;AAE9D,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACnD,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;AAC1D,QAAA,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;QAE1D,MAAM,KAAK,GAAmB,EAAE;;AAGhC,QAAA,KAAK,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,CAAC,GAAG,eAAe,GAAG,CAAC;AAC7B,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACzD;;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACrC,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACxD;;QAEA,MAAM,SAAS,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;AACpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACzD;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,iDAAC;;IAIF,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;IAC7B;;AAIA,IAAA,UAAU,CAAC,KAAc,EAAA;AACvB,QAAA,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;AACpD,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACzC;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAA4B,EAAA;AAC3C,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;;IAKA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,WAAW,EAAE;QACpB;aAAO;YACL,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;IAEQ,UAAU,GAAA;QAChB,IAAI,IAAI,CAAC,KAAK;YAAE;AAEhB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa;AAEzE,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC3B,aAAA,QAAQ;aACR,mBAAmB,CAAC,MAAM;AAC1B,aAAA,aAAa,CAAC;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,CAAC,CAAC;AACZ,aAAA;SACF;aACA,sBAAsB,CAAC,KAAK;aAC5B,QAAQ,CAAC,KAAK,CAAC;QAElB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,gBAAgB;YAChB,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAC3D,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,kCAAkC;AAClD,SAAA,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAK;YAC9C,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,WAAW,EAAE;AACpB,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC/C,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;gBACtB,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,KAAK,EAAE;YACxC;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC;QAC5D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;;AAGrC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;QACvB,IAAI,CAAC,EAAE;YACL,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AAEzB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;IAGA,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AACjB,QAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;;IAKA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE;AAC9B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;YAC7B;QACF;QACA,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,CAAC,GAAG,EAAE;AACN,YAAA,CAAC,EAAE;QACL;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB;;IAGA,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE;AAC9B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;YAC7B;QACF;QACA,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;AACxB,QAAA,IAAI,CAAC,GAAG,EAAE,EAAE;YACV,CAAC,GAAG,CAAC;AACL,YAAA,CAAC,EAAE;QACL;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB;;IAGA,cAAc,GAAA;AACZ,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE;QACzB,IAAI,CAAC,KAAK,MAAM;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;aACxC,IAAI,CAAC,KAAK,QAAQ;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;;AAC9C,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;IAChC;;AAGA,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;IAC3B;;AAGA,IAAA,WAAW,CAAC,IAAY,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC7B;;;AAKA,IAAA,UAAU,CAAC,IAAU,EAAA;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAE1B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACxB,IAAI,CAAC,WAAW,EAAE;QACpB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;IAGA,UAAU,GAAA;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE;IACpB;;IAGA,UAAU,GAAA;AACR,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,EAAE;QACpB;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,EAAE;QACnB;aAAO;YACL,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,UAAU,EAAE;QACnB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;IAGA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;;;IAKA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3C;;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAC5C;;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IAC/C;;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAChD;;;AAKA,IAAA,cAAc,CAAC,KAAoB,EAAA;QACjC,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;YAC/D,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE;QACnB;QACA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;YACxC,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;;AAIQ,IAAA,QAAQ,CACd,IAAU,EACV,YAAqB,EACrB,KAAW,EACX,QAAqB,EAAA;AAErB,QAAA,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC;AACrC,QAAA,MAAM,QAAQ,GACZ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;AAClD,aAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrD,OAAO;YACL,IAAI;AACJ,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE;YACnB,YAAY;AACZ,YAAA,KAAK,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;AACrC,YAAA,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,KAAK;YAC9D,QAAQ;SACT;IACH;uGAzcW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,0BAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,UAAA,EAAA,+BAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,6BAAA,EAAA,sBAAA,EAAA,6BAAA,EAAA,sBAAA,EAAA,4BAAA,EAAA,qBAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAxXrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAcS,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkWT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAvXS,iBAAiB,EAAA,QAAA,EAAA,wHAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAyXhB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA7XjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC5B,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,eAAe;AACtB,wBAAA,4BAA4B,EAAE,OAAO;AACrC,wBAAA,gCAAgC,EAAE,UAAU;AAC5C,wBAAA,iCAAiC,EAAE,YAAY;AAC/C,wBAAA,0BAA0B,EAAE,eAAe;AAC3C,wBAAA,0BAA0B,EAAE,eAAe;AAC3C,wBAAA,0BAA0B,EAAE,eAAe;AAC3C,wBAAA,+BAA+B,EAAE,sBAAsB;AACvD,wBAAA,+BAA+B,EAAE,sBAAsB;AACvD,wBAAA,8BAA8B,EAAE,qBAAqB;AACrD,wBAAA,WAAW,EAAE,wBAAwB;AACtC,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkWT,EAAA,CAAA;AACF,iBAAA;;sBAOE,SAAS;uBAAC,WAAW;;sBACrB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAMtC;;sBAEA;;sBAKA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAMA;;sBAMA;;sBAKA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAGA;;;ACzhBH;AAEA;AACO,MAAM,OAAO,GAAG,IAAI,cAAc,CAAkB,SAAS,CAAC;AAErE;AAEA;;;AAGG;MAgEU,mBAAmB,CAAA;AACrB,IAAA,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;;AAGL,IAAA,IAAI;;IAGtB,KAAK,GAAG,CAAC;AAElB,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;IAC9C;IAES,SAAS,GAAG,QAAQ,CAAC,MAC5B,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC5C;IAEQ,SAAS,GAAG,QAAQ,CAAC,MAC5B,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC5C;;IAGD,aAAa,GAAA;AACX,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC9C,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACzB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC;aAAO;YACL,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC;QACA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;IAClC;;IAGA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,MAAM,EAAE;YACvC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACnC;AACA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,aAAa,EAAE;QACtB;QACA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACtC;uGA3CW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArDpB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAEU,mBAAmB,CAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MA1D5B,iBAAiB,CAAA,EAAA,QAAA,EAAA,wHAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MACjB,eAAe,CAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAyDN,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA/D/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE;wBACP,iBAAiB;wBACjB,eAAe;AACf,wBAAA,UAAU,CAAC,MAAK,mBAAoB,CAAC;AACtC,qBAAA;AACD,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAC/B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDT,EAAA,CAAA;AACF,iBAAA;;sBAKE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAGxB;;AAuCH;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MAqBU,eAAe,CAAA;;;IAIjB,KAAK,GAAqB,EAAE;AAErC;;;;;AAKG;IACM,aAAa,GAAwB,QAAQ;AAEtD;;;AAGG;IACM,SAAS,GAAwB,EAAE;AAE5C;;;AAGG;IACM,WAAW,GAAwB,EAAE;;;AAK3B,IAAA,eAAe,GAAG,IAAI,YAAY,EAAuB;;AAGzD,IAAA,SAAS,GAAG,IAAI,YAAY,EAAkB;;AAG9C,IAAA,UAAU,GAAG,IAAI,YAAY,EAAkB;;AAG/C,IAAA,YAAY,GAAG,IAAI,YAAY,EAAkB;;;AAK3D,IAAA,YAAY,GAAG,MAAM,CAAuB,IAAI,GAAG,EAAE,wDAAC;;AAGtD,IAAA,YAAY,GAAG,MAAM,CAAuB,IAAI,GAAG,EAAE,wDAAC;;AAI/D,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD;AACA,QAAA,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD;IACF;;;AAKA,IAAA,WAAW,CAAC,IAAoB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM;YAAE;QAEnC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAExC,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE;YACnC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACpB,gBAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB;iBAAO;gBACL,GAAG,CAAC,KAAK,EAAE;AACX,gBAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB;QACF;aAAO;;YAEL,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AACpB,gBAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB;iBAAO;AACL,gBAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACrC;;IAGA,SAAS,GAAA;AACP,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAmB;AACtC,QAAA,MAAM,OAAO,GAAG,CAAC,KAAuB,KAAI;AAC1C,YAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACrB,gBAAA,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE;AACtB,oBAAA,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACb,oBAAA,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACrB;YACF;AACF,QAAA,CAAC;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;IAC5B;;IAGA,WAAW,GAAA;QACT,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IAClC;;IAGA,cAAc,GAAA;QACZ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/B;uGA/GW,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,SAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,sBAAA,EAAA,4BAAA,EAAA,wBAAA,EAAA,8BAAA,EAAA,EAAA,cAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAff;AACT,YAAA,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC,EAAE;SACrE,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAOS,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3FU,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA6FnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBApB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,mBAAmB,CAAC;AAC9B,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,eAAgB,CAAC,EAAE;AACrE,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,wBAAwB,EAAE,4BAA4B;AACtD,wBAAA,0BAA0B,EAAE,8BAA8B;AAC3D,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;AAIT,EAAA,CAAA;AACF,iBAAA;;sBAKE;;sBAQA;;sBAMA;;sBAMA;;sBAKA;;sBAGA;;sBAGA;;sBAGA;;;ACnNH;AAEA;;;;;;;;;;;;;;;;;;;;;;AAsBG;MA2BU,kBAAkB,CAAA;;IAEpB,MAAM,GAAoB,SAAS;;IAGnC,IAAI,GAAkB,IAAI;;IAG1B,OAAO,GAAG,EAAE;uGARV,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,yBAAA,EAAA,qBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPnB,CAAA;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA1B9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,uBAAuB,EAAE,eAAe;AACxC,wBAAA,uBAAuB,EAAE,eAAe;AACxC,wBAAA,uBAAuB,EAAE,eAAe;AACxC,wBAAA,4BAA4B,EAAE,sBAAsB;AACpD,wBAAA,yBAAyB,EAAE,mBAAmB;AAC9C,wBAAA,4BAA4B,EAAE,sBAAsB;AACpD,wBAAA,4BAA4B,EAAE,sBAAsB;AACpD,wBAAA,2BAA2B,EAAE,qBAAqB;AAClD,wBAAA,0BAA0B,EAAE,oBAAoB;AAChD,wBAAA,aAAa,EAAE,UAAU;AACzB,wBAAA,mBAAmB,EAAE,sBAAsB;AAC3C,wBAAA,kBAAkB,EAAE,UAAU;AAC/B,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;AAKT,EAAA,CAAA;AACF,iBAAA;;sBAGE;;sBAGA;;sBAGA;;AAGH;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;MAQU,kBAAkB,CAAA;;IAEpB,SAAS,GAAG,KAAK;;IAGjB,eAAe,GAAoB,SAAS;;IAG5C,aAAa,GAAkB,IAAI;;IAGnC,gBAAgB,GAAG,EAAE;AAEb,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC/B,IAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAA4B;AACnD,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACtC,WAAW,GAA4C,IAAI;IAEnE,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC;AAChE,gBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CACxB,IAAI,CAAC,GAAG,CAAC,aAAa,EACtB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CACxC;YACH;YACA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC;YACzD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC;YACrD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC;QAC7D;aAAO;AACL,YAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;IAC7B;uGAtCW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,8BAA8B,EAAE,WAAW;AAC5C,qBAAA;AACF,iBAAA;;sBAGE;;sBAGA;;sBAGA;;sBAGA;;;ACnIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;MAsCU,sBAAsB,CAAA;;IAExB,KAAK,GAAG,CAAC;;IAGT,MAAM,GAAwB,SAAS;;IAGvC,aAAa,GAAG,KAAK;;IAGrB,OAAO,GAAG,KAAK;;IAGf,KAAK,GAAG,EAAE;;AAGnB,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C;uGAnBW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+BAAA,EAAA,sBAAA,EAAA,4BAAA,EAAA,mBAAA,EAAA,+BAAA,EAAA,sBAAA,EAAA,+BAAA,EAAA,sBAAA,EAAA,8BAAA,EAAA,qBAAA,EAAA,qCAAA,EAAA,eAAA,EAAA,+BAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iCAAA,EAAA,oBAAA,EAAA,GAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,gDAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBvB,CAAA;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBArClC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACxB,wBAAA,iCAAiC,EAAE,sBAAsB;AACzD,wBAAA,8BAA8B,EAAE,mBAAmB;AACnD,wBAAA,iCAAiC,EAAE,sBAAsB;AACzD,wBAAA,iCAAiC,EAAE,sBAAsB;AACzD,wBAAA,gCAAgC,EAAE,qBAAqB;AACvD,wBAAA,uCAAuC,EAAE,eAAe;AACxD,wBAAA,iCAAiC,EAAE,SAAS;AAC5C,wBAAA,aAAa,EAAE,eAAe;AAC9B,wBAAA,sBAAsB,EAAE,iCAAiC;AACzD,wBAAA,sBAAsB,EAAE,GAAG;AAC3B,wBAAA,sBAAsB,EAAE,KAAK;AAC7B,wBAAA,mBAAmB,EAAE,eAAe;AACpC,wBAAA,uBAAuB,EAAE,4CAA4C;AACtE,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;AAeT,EAAA,CAAA;AACF,iBAAA;;sBAGE;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;;ACrEH,SAAS,UAAU,CAAC,KAAa,EAAA;IAC/B,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;AACrC,IAAA,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;AAAE,QAAA,OAAO,CAAA,EAAG,CAAC,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA,GAAA,CAAK;AACjE,IAAA,OAAO,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK;AACnD;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;MA2GU,qBAAqB,CAAA;AAEf,IAAA,MAAM;;IAGd,QAAQ,GAAG,KAAK;;;IAKhB,cAAc,GAAG,oBAAoB;;IAErC,WAAW,GAAG,QAAQ;;IAEtB,aAAa,GAAG,WAAW;;IAE3B,SAAS,GAAG,cAAc;;IAE1B,OAAO,GAAG,IAAI;;IAEd,iBAAiB,GAAG,YAAY;;IAEhC,UAAU,GAAG,OAAO;;IAEpB,iBAAiB,GAAG,YAAY;;IAEhC,gBAAgB,GAAG,gBAAgB;;IAEnC,gBAAgB,GAAG,wBAAwB;;IAE3C,mBAAmB,GAAG,aAAa;;IAEnC,eAAe,GAA4B,CAAC,GAAG,KACtD,CAAA,IAAA,EAAO,GAAG,CAAA,cAAA,CAAgB;;IAEnB,eAAe,GAA2B,CAAC,EAAE,KACpD,CAAA,QAAA,EAAW,EAAE,CAAA,SAAA,CAAW;;IAEjB,kBAAkB,GAAG,uBAAuB;AAErD;;;AAGG;IACM,MAAM,GAAG,EAAE;;IAGX,aAAa,GAAG,CAAC;AAE1B;;;AAGG;IACM,QAAQ,GAAG,CAAC;;IAGZ,QAAQ,GAAG,KAAK;;AAGN,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;;AAGlD,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;;AAGzB,IAAA,MAAM,GAAG,MAAM,CAAmB,EAAE,kDAAC;;IAGrC,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAG1E,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;AAEvC,YAAA,KAAK,CAAC,KAAK,GAAG,EAAE;QAClB;IACF;;AAGA,IAAA,OAAO,CAAC,KAAgB,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK;QACzC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC;IACF;;AAGA,IAAA,WAAW,CAAC,KAAqB,EAAA;QAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,EAAE;IACnB;AAEQ,IAAA,SAAS,CAAC,QAAgB,EAAA;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE;QAC9B,MAAM,KAAK,GAAqB,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,KAAI;YACzD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC;AAC9C,YAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE;AAC1D,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5C,YAAA,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;AAC5B,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,UAAU,EAAE;IACnB;IAEQ,SAAS,CAAC,IAAU,EAAE,UAAkB,EAAA;AAC9C,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE;YAChE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC5C;AACA,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,IAAI,EAAE;YACtE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC;QACjD;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACzE,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE;YAClE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACpC,YAAA,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CACrB,CAAC,CAAC,KACA,CAAC,KAAK,GAAG;AACT,gBAAA,CAAC,KAAK,IAAI;iBACT,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAC9D;AACD,YAAA,IAAI,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC,kBAAkB;QACzC;AACA,QAAA,OAAO,SAAS;IAClB;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,IAAI,CAAC,MAAM;aACR,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;aACtB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CACtB;IACH;uGAzIW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApGtB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkGT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApGS,eAAe,gFAAE,iBAAiB,EAAA,QAAA,EAAA,wHAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAsGjC,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA1GjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,eAAe,EAAE,iBAAiB,CAAC;AAC7C,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE;AACjC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkGT,EAAA,CAAA;AACF,iBAAA;;sBAEE,SAAS;uBAAC,WAAW;;sBAIrB;;sBAKA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAGA;;sBAGA;;sBAMA;;sBAGA;;sBAMA;;sBAGA;;sBAGA;;;AC5MH;;;;;;;;;;;;;;;;AAgBG;MA4BU,gCAAgC,CAAA;;IAElC,KAAK,GAAQ,EAAE;;IAGf,QAAQ,GAAG,EAAE;AAEtB;;;AAGG;IACM,MAAM,GAAG,OAAO;AAEzB;;;AAGG;IACM,WAAW,GAAG,GAAG;AAE1B;;;AAGG;IACM,WAAW,GAAG,GAAG;;AAGjB,IAAA,OAAO;;;AAIW,IAAA,YAAY;AAGtB,IAAA,YAAY;;IAG7B,aAAa,CAAC,KAAa,EAAE,QAAyB,EAAA;QACpD,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;IACnD;;IAGA,aAAa,GAAA;QACX,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC;IAC/C;uGA3CW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,4BAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA8B7B,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEd,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhDzB,CAAA;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApBC,wBAAwB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,yBAAyB,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,eAAe,6LACf,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAmBP,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBA3B5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE;wBACP,wBAAwB;wBACxB,yBAAyB;wBACzB,eAAe;wBACf,gBAAgB;AACjB,qBAAA;AACD,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE;AAC7C,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;AAcT,EAAA,CAAA;AACF,iBAAA;;sBAGE;;sBAGA;;sBAMA;;sBAMA;;sBAMA;;sBAGA;;sBAIA,YAAY;uBAAC,WAAW;;sBAExB,SAAS;uBAAC,wBAAwB;;;ACtErC;AAEA;AACO,MAAM,kBAAkB,GAAG,IAAI,cAAc,CAGjD,oBAAoB,CAAC;AAMxB,SAAS,YAAY,CAAC,GAAsB,EAAA;AAC1C,IAAA,MAAM,GAAG,GAAmD;AAC1D,QAAA,GAAG,EAAE;AACH,YAAA;AACE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,CAAC,CAAC;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACF,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA;AACE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,CAAC,CAAC;AACZ,aAAA;AACF,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,CAAC,CAAC;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACF,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA;AACE,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,CAAC,CAAC;AACZ,aAAA;AACF,SAAA;KACF;AACD,IAAA,OAAO,GAAG,CAAC,GAAG,CAAC;AACjB;AAEA;AAEA;;AAEG;MAOU,yBAAyB,CAAA;AAC3B,IAAA,KAAK,GAAG,MAAM,CAAC,EAAE,iDAAC;uGADhB,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,8EAF1B,CAAA,kDAAA,CAAoD,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEnD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE,CAAA,kDAAA,CAAoD;AAC/D,iBAAA;;AAKD;AAEA;;;;;;;;;;;;;;;;;;;;AAoBG;MAKU,kBAAkB,CAAA;;IAET,IAAI,GAAG,EAAE;;IAGpB,iBAAiB,GAAsB,KAAK;;IAG5C,iBAAiB,GAAG,KAAK;AAEjB,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC5C,IAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAA4B;AACtD,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAExC,WAAW,GAAsB,IAAI;IACrC,QAAQ,GAEL,IAAI;IACP,YAAY,GAAyC,IAAI;IAIjE,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAC1C,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC;AACtB,iBAAA,mBAAmB,CAAC,IAAI,CAAC,MAAM;AAC/B,iBAAA,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;iBAClD,QAAQ,CAAC,IAAI,CAAC;YAEjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtC,gBAAA,gBAAgB,EAAE,WAAW;gBAC7B,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAC3D,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,UAAU,EAAE,kBAAkB;AAC/B,aAAA,CAAC;QACJ;QAEA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE;YACnC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,yBAAyB,EAAE,IAAI,CAAC,IAAI,CAAC;YACxE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;QACjD;AAEA,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;IACvE;IAIA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB,CAAC,EAAE,EAAE,CAAC;IACR;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AACtD,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;IAC7B;uGAhEW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,WAAA,EAAA,MAAA,CAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAGE,KAAK;uBAAC,WAAW;;sBAGjB;;sBAGA;;sBAaA,YAAY;uBAAC,YAAY;;sBACzB,YAAY;uBAAC,SAAS;;sBA8BtB,YAAY;uBAAC,YAAY;;sBACzB,YAAY;uBAAC,UAAU;;;ACnL1B;AAEA;AACO,MAAM,aAAa,GAAG,IAAI,cAAc,CAAa,eAAe,CAAC;AAE5E;AAEA;;;;;;;;;;;AAWG;MA6BU,mBAAmB,CAAA;;IAErB,IAAI,GAAG,EAAE;;IAGT,MAAM,GAAG,KAAK;;IAGd,QAAQ,GAAG,KAAK;;AAGN,IAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;IAEtC,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;IAGnE,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,MAAM,IAAI;IACjB;uGAnBW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBpB,CAAA;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtBS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAwBd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA5B/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,eAAe,CAAC;AAC1B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,cAAc;AACrB,wBAAA,6BAA6B,EAAE,QAAQ;AACvC,wBAAA,+BAA+B,EAAE,UAAU;AAC5C,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA;AACF,iBAAA;;sBAGE;;sBAGA;;sBAGA;;sBAGA;;AAWH;AAEA;;;;;;;;;AASG;MAQU,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,iKAFzB,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAED,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE;AACvD,oBAAA,QAAQ,EAAE,CAAA,CAAE;AACb,iBAAA;;AAGD;AAEA;;;;;;;;;;;;;;;;AAgBG;MAoBU,eAAe,CAAA;;IAEjB,QAAQ,GAAG,GAAG;;AAGd,IAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;AAGxC,IAAA,SAAS;AAGT,IAAA,MAAM;uGAXJ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,SAAA,EAUT,mBAAmB,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxB1B,CAAA;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAEU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAnB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;AAC/B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;sBAGE;;sBAKA,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAGtC,eAAe;uBAAC,mBAAmB;;AAItC;AAEA;;;;;;;;;;;AAWG;MAWU,sBAAsB,CAAA;;AAEN,IAAA,gBAAgB;;IAGlC,WAAW,GAAoB,OAAO;AAEtC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AAEf,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAA4B;AACnD,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAExC,WAAW,GAAsB,IAAI;IACrC,OAAO,GAA0B,IAAI;;IAG7C,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,IAAI,CAAC,MAAM,EAAE;QACf;aAAO;YACL,IAAI,CAAC,KAAK,EAAE;QACd;IACF;;IAGA,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,OAAO,EAAE;YAAE;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB;AAElC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,KAAK,KAAK,GAAG,KAAK,GAAG,OAAO;AAC7D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC;AACtB,aAAA,QAAQ;AACR,aAAA,mBAAmB,CAAC,IAAI,CAAC,GAAG;AAC5B,aAAA,aAAa,CAAC;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,OAAO,EAAE,QAAQ;gBACjB,QAAQ;AACR,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,OAAO,EAAE,KAAK;gBACd,QAAQ;AACR,gBAAA,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,CAAC,CAAC;AACZ,aAAA;AACF,SAAA,CAAC;QAEJ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtC,YAAA,gBAAgB,EAAE,WAAW;YAC7B,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAC3D,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,kCAAkC;AAClD,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAChE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;;AAGrC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC;AACnB,aAAA,aAAa;aACb,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AACjC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAEnE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAK;YAC5C,QAAQ,CAAC,WAAW,EAAE;YACtB,SAAS,CAAC,WAAW,EAAE;AACzB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IACxB;IAEQ,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC1B,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IACzB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,MAAM,EAAE;IACf;uGArFW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,kCAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAVlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,sBAAsB,EAAE,QAAQ;AAChC,wBAAA,sBAAsB,EAAE,WAAW;AACnC,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,qBAAqB,EAAE,kCAAkC;AAC1D,qBAAA;AACF,iBAAA;;sBAGE,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAGxB;;;AC3KH;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;MAiCU,yBAAyB,CAAA;AAI5B,IAAA,WAAW;AAEF,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,IAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;;;IAKpD,OAAO,GAAG,KAAK;AAExB;;;AAGG;IACM,OAAO,GAAG,IAAI;AAEvB;;;;AAIG;IACM,UAAU,GAAG,KAAK;;IAGlB,aAAa,GAAoB,SAAS;;IAG1C,cAAc,GAAG,EAAE;;IAGnB,cAAc,GAAG,IAAI;;IAGrB,UAAU,GAAG,eAAe;AAErC;;;;AAIG;IACM,SAAS,GAAG,GAAG;;AAIxB;;;AAGG;AACO,IAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;;AAIrC,IAAA,QAAQ;IACR,iBAAiB,GAAG,KAAK;;IAIjC,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC/B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI;YACnE,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CACtC,CAAC,OAAO,KAAI;gBACV,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc;AAClD,gBAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE;AAC3D,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC3C;AACF,YAAA,CAAC,EACD,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA,QAAA,EAAW,IAAI,CAAC,SAAS,CAAA,MAAA,CAAQ,EAAE,CACxD;YACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AACvD,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;;QAEhC,IACE,OAAO,CAAC,SAAS,CAAC;AAClB,YAAA,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW;YAC/B,CAAC,IAAI,CAAC,OAAO;AACb,YAAA,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,OAAO,EACZ;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QACtB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC7B;uGA5FW,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,qCAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvB1B,CAAA;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1BS,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FA4BjB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAhCrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,oBAAoB;AAC3B,wBAAA,uCAAuC,EAAE,YAAY;AACtD,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;AAqBT,EAAA,CAAA;AACF,iBAAA;;sBAIE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAStC;;sBAMA;;sBAOA;;sBAGA;;sBAGA;;sBAGA;;sBAGA;;sBAOA;;sBAQA;;;AC3GH;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;MA+GU,oBAAoB,CAAA;;;IAItB,MAAM,GAAG,CAAC;;IAGV,SAAS,GAAG,CAAC;;IAGb,QAAQ,GAAG,EAAE;AAEtB;;;AAGG;IACM,eAAe,GAAa,EAAE;AAEvC;;;AAGG;IACM,aAAa,GAAG,IAAI;AAE7B;;;AAGG;IACM,cAAc,GAAG,CAAC;;;IAKlB,mBAAmB,GAAG,YAAY;;IAElC,gBAAgB,GAAG,gBAAgB;;IAEnC,oBAAoB,GAAG,eAAe;;IAEtC,kBAAkB,GAAG,YAAY;;IAEjC,qBAAqB,GAAG,eAAe;;IAEvC,iBAAiB,GAAG,WAAW;;IAE/B,iBAAiB,GAAG,WAAW;AACxC;;;AAGG;IACM,eAAe,GAA6B,CAAC,CAAC,KAAK,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAE;AACvE;;;;AAIG;AACM,IAAA,YAAY,GAIP,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,GAAG,KAAK,CAAA,QAAA,EAAW,GAAG,CAAA,IAAA,EAAO,MAAM,EAAE;;;AAKjE,IAAA,UAAU,GAAG,IAAI,YAAY,EAAe;;AAItD,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5D;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,CAAC;IAC7B;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC;IAC7C;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;AACvE,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;IACnD;IAEA,KAAK,GAAsB,EAAE;;AAI7B,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IACE,OAAO,CAAC,WAAW,CAAC;YACpB,OAAO,CAAC,UAAU,CAAC;YACnB,OAAO,CAAC,QAAQ,CAAC;AACjB,YAAA,OAAO,CAAC,gBAAgB,CAAC,EACzB;AACA,YAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CACrB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,cAAc,CACpB;QACH;IACF;;IAIA,SAAS,GAAA;QACP,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpD;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACrE;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpE;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpE;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;IAC/D;AAEA,IAAA,YAAY,CAAC,KAAc,EAAA;AACzB,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;IAClC;IAEQ,IAAI,CAAC,SAAiB,EAAE,QAAgB,EAAA;AAC9C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,SAAS;YACT,iBAAiB,EAAE,IAAI,CAAC,SAAS;YACjC,QAAQ;YACR,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC;IACJ;uGA/IW,oBAAoB,EAAA,IAAA,EAAA,EAAA,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,YAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9FrB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAvGC,WAAW,mWACX,iBAAiB,EAAA,QAAA,EAAA,wHAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,iBAAiB,mJACjB,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAqGR,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA9GhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE;wBACP,WAAW;wBACX,iBAAiB;wBACjB,eAAe;wBACf,iBAAiB;wBACjB,iBAAiB;AAClB,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,cAAc;AACrB,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,mBAAmB,EAAE,qBAAqB;AAC3C,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4FT,EAAA,CAAA;AACF,iBAAA;;sBAKE;;sBAGA;;sBAGA;;sBAMA;;sBAMA;;sBAMA;;sBAKA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAKA;;sBAMA;;sBASA;;AAiFH;AAEA;;;;;;;AAOG;SACa,UAAU,CACxB,YAAoB,EACpB,SAAiB,EACjB,GAAW,EAAA;IAEX,IAAI,SAAS,IAAI,CAAC;AAAE,QAAA,OAAO,SAAS,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;;IAGrD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;;AAGpD,IAAA,IAAI,SAAS,IAAI,CAAC,EAAE;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3D;AAEA,IAAA,MAAM,OAAO,GAAG,YAAY,GAAG,CAAC,CAAC;AACjC,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;;AAG1C,IAAA,IAAI,QAAQ,GAAG,OAAO,GAAG,SAAS;AAClC,IAAA,IAAI,MAAM,GAAG,OAAO,GAAG,SAAS;;AAGhC,IAAA,IAAI,QAAQ,IAAI,CAAC,EAAE;AACjB,QAAA,MAAM,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC;QAC1B,QAAQ,GAAG,CAAC;IACd;;AAEA,IAAA,IAAI,MAAM,IAAI,SAAS,GAAG,CAAC,EAAE;QAC3B,QAAQ,IAAI,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC;AACpC,QAAA,MAAM,GAAG,SAAS,GAAG,CAAC;IACxB;IAEA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;IAChC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,EAAE,MAAM,CAAC;AAExC,IAAA,MAAM,KAAK,GAAsB,CAAC,CAAC,CAAC;IACpC,IAAI,QAAQ,GAAG,CAAC;AAAE,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE;AAAE,QAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,IAAA,IAAI,MAAM,GAAG,SAAS,GAAG,CAAC;AAAE,QAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7C,IAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAErB,IAAA,OAAO,KAAK;AACd;;ACnXA;AACA;AAEA;;ACHA;;AAEG;;;;"}
|